1 /* GTK - The GIMP Toolkit
2 * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2 of the License, or (at your option) any later version.
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the
16 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
17 * Boston, MA 02111-1307, USA.
21 * Modified by the GTK+ Team and others 1997-2000. See the AUTHORS
22 * file for a list of people on the GTK+ Team. See the ChangeLog
23 * files for a list of changes. These files are distributed with
24 * GTK+ at ftp://ftp.gtk.org/pub/gtk/.
41 #define GTK_ENABLE_BROKEN
44 #include "gdk/gdkkeysyms.h"
47 #define sleep(n) _sleep(n)
50 #include "prop-editor.h"
52 #include "circles.xbm"
56 file_exists (const char *filename)
60 return stat (filename, &statbuf) == 0;
64 shape_create_icon (GdkScreen *screen,
73 build_option_menu (gchar *items[],
76 void (*func)(GtkWidget *widget, gpointer data),
79 /* macro, structure and variables used by tree window demos */
80 #define DEFAULT_NUMBER_OF_ITEM 3
81 #define DEFAULT_RECURSION_LEVEL 3
84 GSList* selection_mode_group;
85 GtkWidget* single_button;
86 GtkWidget* browse_button;
87 GtkWidget* multiple_button;
88 GtkWidget* draw_line_button;
89 GtkWidget* view_line_button;
90 GtkWidget* no_root_item_button;
91 GtkWidget* nb_item_spinner;
92 GtkWidget* recursion_spinner;
93 } sTreeSampleSelection;
95 typedef struct sTreeButtons {
97 GtkWidget* add_button;
98 GtkWidget* remove_button;
99 GtkWidget* subtree_button;
101 /* end of tree section */
104 build_option_menu (gchar *items[],
107 void (*func)(GtkWidget *widget, gpointer data),
112 GtkWidget *menu_item;
116 omenu = gtk_option_menu_new ();
117 gtk_signal_connect (GTK_OBJECT (omenu), "changed",
118 GTK_SIGNAL_FUNC (func), data);
120 menu = gtk_menu_new ();
123 for (i = 0; i < num_items; i++)
125 menu_item = gtk_radio_menu_item_new_with_label (group, items[i]);
126 group = gtk_radio_menu_item_group (GTK_RADIO_MENU_ITEM (menu_item));
127 gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_item);
129 gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (menu_item), TRUE);
130 gtk_widget_show (menu_item);
133 gtk_option_menu_set_menu (GTK_OPTION_MENU (omenu), menu);
134 gtk_option_menu_set_history (GTK_OPTION_MENU (omenu), history);
140 destroy_tooltips (GtkWidget *widget, GtkWindow **window)
142 GtkTooltips *tt = gtk_object_get_data (GTK_OBJECT (*window), "tooltips");
143 gtk_object_unref (GTK_OBJECT (tt));
149 * Big windows and guffaw scrolling
153 pattern_expose (GtkWidget *widget,
154 GdkEventExpose *event,
158 GdkWindow *window = event->window;
160 color = g_object_get_data (G_OBJECT (window), "pattern-color");
163 GdkGC *tmp_gc = gdk_gc_new (window);
164 gdk_gc_set_rgb_fg_color (tmp_gc, color);
166 gdk_draw_rectangle (window, tmp_gc, TRUE,
167 event->area.x, event->area.y,
168 event->area.width, event->area.height);
170 g_object_unref (G_OBJECT (tmp_gc));
177 pattern_set_bg (GtkWidget *widget,
181 static const GdkColor colors[] = {
182 { 0, 0x4444, 0x4444, 0xffff },
183 { 0, 0x8888, 0x8888, 0xffff },
184 { 0, 0xaaaa, 0xaaaa, 0xffff }
187 g_object_set_data (G_OBJECT (child), "pattern-color", (gpointer)&colors[level]);
188 gdk_window_set_user_data (child, widget);
192 create_pattern (GtkWidget *widget,
203 while (2 * h <= height)
208 while (2 * w <= width)
210 if ((i + j) % 2 == 0)
215 GdkWindowAttr attributes;
217 attributes.window_type = GDK_WINDOW_CHILD;
220 attributes.width = w;
221 attributes.height = h;
222 attributes.wclass = GDK_INPUT_OUTPUT;
223 attributes.event_mask = GDK_EXPOSURE_MASK;
224 attributes.visual = gtk_widget_get_visual (widget);
225 attributes.colormap = gtk_widget_get_colormap (widget);
227 child = gdk_window_new (parent, &attributes,
228 GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL | GDK_WA_COLORMAP);
230 pattern_set_bg (widget, child, level);
233 create_pattern (widget, child, level + 1, w, h);
235 gdk_window_show (child);
245 #define PATTERN_SIZE (1 << 18)
248 pattern_hadj_changed (GtkAdjustment *adj,
251 gint *old_value = g_object_get_data (G_OBJECT (adj), "old-value");
252 gint new_value = adj->value;
254 if (GTK_WIDGET_REALIZED (darea))
256 gdk_window_scroll (darea->window, *old_value - new_value, 0);
257 *old_value = new_value;
262 pattern_vadj_changed (GtkAdjustment *adj,
265 gint *old_value = g_object_get_data (G_OBJECT (adj), "old-value");
266 gint new_value = adj->value;
268 if (GTK_WIDGET_REALIZED (darea))
270 gdk_window_scroll (darea->window, 0, *old_value - new_value);
271 *old_value = new_value;
276 pattern_realize (GtkWidget *widget,
279 pattern_set_bg (widget, widget->window, 0);
280 create_pattern (widget, widget->window, 1, PATTERN_SIZE, PATTERN_SIZE);
284 create_big_windows (GtkWidget *widget)
286 static GtkWidget *window = NULL;
287 GtkWidget *darea, *table, *scrollbar;
291 static gint current_x;
292 static gint current_y;
299 window = gtk_dialog_new_with_buttons ("Big Windows",
305 gtk_window_set_screen (GTK_WINDOW (window),
306 gtk_widget_get_screen (widget));
308 gtk_window_set_default_size (GTK_WINDOW (window), 200, 300);
310 gtk_signal_connect (GTK_OBJECT (window), "destroy",
311 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
314 gtk_signal_connect (GTK_OBJECT (window), "response",
315 GTK_SIGNAL_FUNC (gtk_widget_destroy),
318 table = gtk_table_new (2, 2, FALSE);
319 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox),
320 table, TRUE, TRUE, 0);
322 darea = gtk_drawing_area_new ();
324 hadj = (GtkAdjustment *)gtk_adjustment_new (0, 0, PATTERN_SIZE, 10, 100, 100);
325 gtk_signal_connect (GTK_OBJECT (hadj), "value_changed",
326 GTK_SIGNAL_FUNC (pattern_hadj_changed), darea);
327 g_object_set_data (G_OBJECT (hadj), "old-value", ¤t_x);
329 vadj = (GtkAdjustment *)gtk_adjustment_new (0, 0, PATTERN_SIZE, 10, 100, 100);
330 gtk_signal_connect (GTK_OBJECT (vadj), "value_changed",
331 GTK_SIGNAL_FUNC (pattern_vadj_changed), darea);
332 g_object_set_data (G_OBJECT (vadj), "old-value", ¤t_y);
334 gtk_signal_connect (GTK_OBJECT (darea), "realize",
335 GTK_SIGNAL_FUNC (pattern_realize),
337 gtk_signal_connect (GTK_OBJECT (darea), "expose_event",
338 GTK_SIGNAL_FUNC (pattern_expose),
341 eventbox = gtk_event_box_new ();
342 gtk_table_attach (GTK_TABLE (table), eventbox,
344 GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND,
347 gtk_container_add (GTK_CONTAINER (eventbox), darea);
349 scrollbar = gtk_hscrollbar_new (hadj);
350 gtk_table_attach (GTK_TABLE (table), scrollbar,
352 GTK_FILL | GTK_EXPAND, GTK_FILL,
355 scrollbar = gtk_vscrollbar_new (vadj);
356 gtk_table_attach (GTK_TABLE (table), scrollbar,
358 GTK_FILL, GTK_EXPAND | GTK_FILL,
363 if (!GTK_WIDGET_VISIBLE (window))
364 gtk_widget_show_all (window);
366 gtk_widget_hide (window);
374 button_window (GtkWidget *widget,
377 if (!GTK_WIDGET_VISIBLE (button))
378 gtk_widget_show (button);
380 gtk_widget_hide (button);
384 create_buttons (GtkWidget *widget)
386 static GtkWidget *window = NULL;
390 GtkWidget *button[10];
391 GtkWidget *separator;
395 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
396 gtk_window_set_screen (GTK_WINDOW (window),
397 gtk_widget_get_screen (widget));
399 gtk_signal_connect (GTK_OBJECT (window), "destroy",
400 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
403 gtk_window_set_title (GTK_WINDOW (window), "GtkButton");
404 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
406 box1 = gtk_vbox_new (FALSE, 0);
407 gtk_container_add (GTK_CONTAINER (window), box1);
409 table = gtk_table_new (3, 3, FALSE);
410 gtk_table_set_row_spacings (GTK_TABLE (table), 5);
411 gtk_table_set_col_spacings (GTK_TABLE (table), 5);
412 gtk_container_set_border_width (GTK_CONTAINER (table), 10);
413 gtk_box_pack_start (GTK_BOX (box1), table, TRUE, TRUE, 0);
415 button[0] = gtk_button_new_with_label ("button1");
416 button[1] = gtk_button_new_with_mnemonic ("_button2");
417 button[2] = gtk_button_new_with_mnemonic ("_button3");
418 button[3] = gtk_button_new_from_stock (GTK_STOCK_OK);
419 button[4] = gtk_button_new_with_label ("button5");
420 button[5] = gtk_button_new_with_label ("button6");
421 button[6] = gtk_button_new_with_label ("button7");
422 button[7] = gtk_button_new_from_stock (GTK_STOCK_CLOSE);
423 button[8] = gtk_button_new_with_label ("button9");
425 gtk_signal_connect (GTK_OBJECT (button[0]), "clicked",
426 GTK_SIGNAL_FUNC(button_window),
429 gtk_table_attach (GTK_TABLE (table), button[0], 0, 1, 0, 1,
430 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
432 gtk_signal_connect (GTK_OBJECT (button[1]), "clicked",
433 GTK_SIGNAL_FUNC(button_window),
436 gtk_table_attach (GTK_TABLE (table), button[1], 1, 2, 1, 2,
437 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
439 gtk_signal_connect (GTK_OBJECT (button[2]), "clicked",
440 GTK_SIGNAL_FUNC(button_window),
442 gtk_table_attach (GTK_TABLE (table), button[2], 2, 3, 2, 3,
443 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
445 gtk_signal_connect (GTK_OBJECT (button[3]), "clicked",
446 GTK_SIGNAL_FUNC(button_window),
448 gtk_table_attach (GTK_TABLE (table), button[3], 0, 1, 2, 3,
449 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
451 gtk_signal_connect (GTK_OBJECT (button[4]), "clicked",
452 GTK_SIGNAL_FUNC(button_window),
454 gtk_table_attach (GTK_TABLE (table), button[4], 2, 3, 0, 1,
455 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
457 gtk_signal_connect (GTK_OBJECT (button[5]), "clicked",
458 GTK_SIGNAL_FUNC(button_window),
460 gtk_table_attach (GTK_TABLE (table), button[5], 1, 2, 2, 3,
461 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
463 gtk_signal_connect (GTK_OBJECT (button[6]), "clicked",
464 GTK_SIGNAL_FUNC(button_window),
466 gtk_table_attach (GTK_TABLE (table), button[6], 1, 2, 0, 1,
467 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
469 gtk_signal_connect (GTK_OBJECT (button[7]), "clicked",
470 GTK_SIGNAL_FUNC(button_window),
472 gtk_table_attach (GTK_TABLE (table), button[7], 2, 3, 1, 2,
473 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
475 gtk_signal_connect (GTK_OBJECT (button[8]), "clicked",
476 GTK_SIGNAL_FUNC(button_window),
478 gtk_table_attach (GTK_TABLE (table), button[8], 0, 1, 1, 2,
479 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
481 separator = gtk_hseparator_new ();
482 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
484 box2 = gtk_vbox_new (FALSE, 10);
485 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
486 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
488 button[9] = gtk_button_new_with_label ("close");
489 gtk_signal_connect_object (GTK_OBJECT (button[9]), "clicked",
490 GTK_SIGNAL_FUNC(gtk_widget_destroy),
491 GTK_OBJECT (window));
492 gtk_box_pack_start (GTK_BOX (box2), button[9], TRUE, TRUE, 0);
493 GTK_WIDGET_SET_FLAGS (button[9], GTK_CAN_DEFAULT);
494 gtk_widget_grab_default (button[9]);
497 if (!GTK_WIDGET_VISIBLE (window))
498 gtk_widget_show_all (window);
500 gtk_widget_destroy (window);
508 create_toggle_buttons (GtkWidget *widget)
510 static GtkWidget *window = NULL;
514 GtkWidget *separator;
518 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
519 gtk_window_set_screen (GTK_WINDOW (window),
520 gtk_widget_get_screen (widget));
522 gtk_signal_connect (GTK_OBJECT (window), "destroy",
523 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
526 gtk_window_set_title (GTK_WINDOW (window), "GtkToggleButton");
527 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
529 box1 = gtk_vbox_new (FALSE, 0);
530 gtk_container_add (GTK_CONTAINER (window), box1);
532 box2 = gtk_vbox_new (FALSE, 10);
533 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
534 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
536 button = gtk_toggle_button_new_with_label ("button1");
537 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
539 button = gtk_toggle_button_new_with_label ("button2");
540 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
542 button = gtk_toggle_button_new_with_label ("button3");
543 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
545 button = gtk_toggle_button_new_with_label ("inconsistent");
546 gtk_toggle_button_set_inconsistent (GTK_TOGGLE_BUTTON (button), TRUE);
547 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
549 separator = gtk_hseparator_new ();
550 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
552 box2 = gtk_vbox_new (FALSE, 10);
553 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
554 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
556 button = gtk_button_new_with_label ("close");
557 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
558 GTK_SIGNAL_FUNC(gtk_widget_destroy),
559 GTK_OBJECT (window));
560 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
561 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
562 gtk_widget_grab_default (button);
565 if (!GTK_WIDGET_VISIBLE (window))
566 gtk_widget_show_all (window);
568 gtk_widget_destroy (window);
576 create_check_buttons (GtkWidget *widget)
578 static GtkWidget *window = NULL;
582 GtkWidget *separator;
586 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
587 gtk_window_set_screen (GTK_WINDOW (window),
588 gtk_widget_get_screen (widget));
590 gtk_signal_connect (GTK_OBJECT (window), "destroy",
591 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
594 gtk_window_set_title (GTK_WINDOW (window), "GtkCheckButton");
595 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
597 box1 = gtk_vbox_new (FALSE, 0);
598 gtk_container_add (GTK_CONTAINER (window), box1);
600 box2 = gtk_vbox_new (FALSE, 10);
601 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
602 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
604 button = gtk_check_button_new_with_mnemonic ("_button1");
605 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
607 button = gtk_check_button_new_with_label ("button2");
608 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
610 button = gtk_check_button_new_with_label ("button3");
611 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
613 button = gtk_check_button_new_with_label ("inconsistent");
614 gtk_toggle_button_set_inconsistent (GTK_TOGGLE_BUTTON (button), TRUE);
615 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
617 separator = gtk_hseparator_new ();
618 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
620 box2 = gtk_vbox_new (FALSE, 10);
621 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
622 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
624 button = gtk_button_new_with_label ("close");
625 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
626 GTK_SIGNAL_FUNC(gtk_widget_destroy),
627 GTK_OBJECT (window));
628 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
629 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
630 gtk_widget_grab_default (button);
633 if (!GTK_WIDGET_VISIBLE (window))
634 gtk_widget_show_all (window);
636 gtk_widget_destroy (window);
644 create_radio_buttons (GtkWidget *widget)
646 static GtkWidget *window = NULL;
650 GtkWidget *separator;
654 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
656 gtk_window_set_screen (GTK_WINDOW (window),
657 gtk_widget_get_screen (widget));
659 gtk_signal_connect (GTK_OBJECT (window), "destroy",
660 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
663 gtk_window_set_title (GTK_WINDOW (window), "radio buttons");
664 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
666 box1 = gtk_vbox_new (FALSE, 0);
667 gtk_container_add (GTK_CONTAINER (window), box1);
669 box2 = gtk_vbox_new (FALSE, 10);
670 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
671 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
673 button = gtk_radio_button_new_with_label (NULL, "button1");
674 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
676 button = gtk_radio_button_new_with_label (
677 gtk_radio_button_get_group (GTK_RADIO_BUTTON (button)),
679 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE);
680 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
682 button = gtk_radio_button_new_with_label (
683 gtk_radio_button_get_group (GTK_RADIO_BUTTON (button)),
685 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
687 button = gtk_radio_button_new_with_label (
688 gtk_radio_button_get_group (GTK_RADIO_BUTTON (button)),
690 gtk_toggle_button_set_inconsistent (GTK_TOGGLE_BUTTON (button), TRUE);
691 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
693 separator = gtk_hseparator_new ();
694 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
696 box2 = gtk_vbox_new (FALSE, 10);
697 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
698 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
700 button = gtk_radio_button_new_with_label (NULL, "button4");
701 gtk_toggle_button_set_mode (GTK_TOGGLE_BUTTON (button), FALSE);
702 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
704 button = gtk_radio_button_new_with_label (
705 gtk_radio_button_get_group (GTK_RADIO_BUTTON (button)),
707 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE);
708 gtk_toggle_button_set_mode (GTK_TOGGLE_BUTTON (button), FALSE);
709 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
711 button = gtk_radio_button_new_with_label (
712 gtk_radio_button_get_group (GTK_RADIO_BUTTON (button)),
714 gtk_toggle_button_set_mode (GTK_TOGGLE_BUTTON (button), FALSE);
715 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
717 separator = gtk_hseparator_new ();
718 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
720 box2 = gtk_vbox_new (FALSE, 10);
721 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
722 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
724 button = gtk_button_new_with_label ("close");
725 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
726 GTK_SIGNAL_FUNC(gtk_widget_destroy),
727 GTK_OBJECT (window));
728 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
729 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
730 gtk_widget_grab_default (button);
733 if (!GTK_WIDGET_VISIBLE (window))
734 gtk_widget_show_all (window);
736 gtk_widget_destroy (window);
744 create_bbox (gint horizontal,
755 frame = gtk_frame_new (title);
758 bbox = gtk_hbutton_box_new ();
760 bbox = gtk_vbutton_box_new ();
762 gtk_container_set_border_width (GTK_CONTAINER (bbox), 5);
763 gtk_container_add (GTK_CONTAINER (frame), bbox);
765 gtk_button_box_set_layout (GTK_BUTTON_BOX (bbox), layout);
766 gtk_box_set_spacing (GTK_BOX (bbox), spacing);
767 gtk_button_box_set_child_size (GTK_BUTTON_BOX (bbox), child_w, child_h);
769 button = gtk_button_new_with_label ("OK");
770 gtk_container_add (GTK_CONTAINER (bbox), button);
772 button = gtk_button_new_with_label ("Cancel");
773 gtk_container_add (GTK_CONTAINER (bbox), button);
775 button = gtk_button_new_with_label ("Help");
776 gtk_container_add (GTK_CONTAINER (bbox), button);
782 create_button_box (GtkWidget *widget)
784 static GtkWidget* window = NULL;
785 GtkWidget *main_vbox;
788 GtkWidget *frame_horz;
789 GtkWidget *frame_vert;
793 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
794 gtk_window_set_screen (GTK_WINDOW (window), gtk_widget_get_screen (widget));
795 gtk_window_set_title (GTK_WINDOW (window), "Button Boxes");
797 gtk_signal_connect (GTK_OBJECT (window), "destroy",
798 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
801 gtk_container_set_border_width (GTK_CONTAINER (window), 10);
803 main_vbox = gtk_vbox_new (FALSE, 0);
804 gtk_container_add (GTK_CONTAINER (window), main_vbox);
806 frame_horz = gtk_frame_new ("Horizontal Button Boxes");
807 gtk_box_pack_start (GTK_BOX (main_vbox), frame_horz, TRUE, TRUE, 10);
809 vbox = gtk_vbox_new (FALSE, 0);
810 gtk_container_set_border_width (GTK_CONTAINER (vbox), 10);
811 gtk_container_add (GTK_CONTAINER (frame_horz), vbox);
813 gtk_box_pack_start (GTK_BOX (vbox),
814 create_bbox (TRUE, "Spread", 40, 85, 20, GTK_BUTTONBOX_SPREAD),
817 gtk_box_pack_start (GTK_BOX (vbox),
818 create_bbox (TRUE, "Edge", 40, 85, 20, GTK_BUTTONBOX_EDGE),
821 gtk_box_pack_start (GTK_BOX (vbox),
822 create_bbox (TRUE, "Start", 40, 85, 20, GTK_BUTTONBOX_START),
825 gtk_box_pack_start (GTK_BOX (vbox),
826 create_bbox (TRUE, "End", 40, 85, 20, GTK_BUTTONBOX_END),
829 frame_vert = gtk_frame_new ("Vertical Button Boxes");
830 gtk_box_pack_start (GTK_BOX (main_vbox), frame_vert, TRUE, TRUE, 10);
832 hbox = gtk_hbox_new (FALSE, 0);
833 gtk_container_set_border_width (GTK_CONTAINER (hbox), 10);
834 gtk_container_add (GTK_CONTAINER (frame_vert), hbox);
836 gtk_box_pack_start (GTK_BOX (hbox),
837 create_bbox (FALSE, "Spread", 30, 85, 20, GTK_BUTTONBOX_SPREAD),
840 gtk_box_pack_start (GTK_BOX (hbox),
841 create_bbox (FALSE, "Edge", 30, 85, 20, GTK_BUTTONBOX_EDGE),
844 gtk_box_pack_start (GTK_BOX (hbox),
845 create_bbox (FALSE, "Start", 30, 85, 20, GTK_BUTTONBOX_START),
848 gtk_box_pack_start (GTK_BOX (hbox),
849 create_bbox (FALSE, "End", 30, 85, 20, GTK_BUTTONBOX_END),
853 if (!GTK_WIDGET_VISIBLE (window))
854 gtk_widget_show_all (window);
856 gtk_widget_destroy (window);
864 new_pixmap (char *filename,
866 GdkColor *background)
872 if (strcmp (filename, "test.xpm") == 0 ||
873 !file_exists (filename))
875 pixmap = gdk_pixmap_create_from_xpm_d (window, &mask,
880 pixmap = gdk_pixmap_create_from_xpm (window, &mask,
884 wpixmap = gtk_pixmap_new (pixmap, mask);
891 set_toolbar_small_stock (GtkWidget *widget,
894 gtk_toolbar_set_icon_size (GTK_TOOLBAR (data), GTK_ICON_SIZE_SMALL_TOOLBAR);
898 set_toolbar_large_stock (GtkWidget *widget,
901 gtk_toolbar_set_icon_size (GTK_TOOLBAR (data), GTK_ICON_SIZE_LARGE_TOOLBAR);
905 set_toolbar_horizontal (GtkWidget *widget,
908 gtk_toolbar_set_orientation (GTK_TOOLBAR (data), GTK_ORIENTATION_HORIZONTAL);
912 set_toolbar_vertical (GtkWidget *widget,
915 gtk_toolbar_set_orientation (GTK_TOOLBAR (data), GTK_ORIENTATION_VERTICAL);
919 set_toolbar_icons (GtkWidget *widget,
922 gtk_toolbar_set_style (GTK_TOOLBAR (data), GTK_TOOLBAR_ICONS);
926 set_toolbar_text (GtkWidget *widget,
929 gtk_toolbar_set_style (GTK_TOOLBAR (data), GTK_TOOLBAR_TEXT);
933 set_toolbar_both (GtkWidget *widget,
936 gtk_toolbar_set_style (GTK_TOOLBAR (data), GTK_TOOLBAR_BOTH);
940 set_toolbar_both_horiz (GtkWidget *widget,
943 gtk_toolbar_set_style (GTK_TOOLBAR (data), GTK_TOOLBAR_BOTH_HORIZ);
947 set_toolbar_enable (GtkWidget *widget,
950 gtk_toolbar_set_tooltips (GTK_TOOLBAR (data), TRUE);
954 set_toolbar_disable (GtkWidget *widget,
957 gtk_toolbar_set_tooltips (GTK_TOOLBAR (data), FALSE);
961 create_toolbar (GtkWidget *widget)
963 static GtkWidget *window = NULL;
969 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
970 gtk_window_set_screen (GTK_WINDOW (window),
971 gtk_widget_get_screen (widget));
973 gtk_window_set_title (GTK_WINDOW (window), "Toolbar test");
974 gtk_window_set_resizable (GTK_WINDOW (window), FALSE);
976 gtk_signal_connect (GTK_OBJECT (window), "destroy",
977 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
980 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
981 gtk_widget_realize (window);
983 toolbar = gtk_toolbar_new ();
985 gtk_toolbar_insert_stock (GTK_TOOLBAR (toolbar),
987 "Stock icon: New", "Toolbar/New",
988 (GtkSignalFunc) set_toolbar_small_stock, toolbar, -1);
990 gtk_toolbar_insert_stock (GTK_TOOLBAR (toolbar),
992 "Stock icon: Open", "Toolbar/Open",
993 (GtkSignalFunc) set_toolbar_large_stock, toolbar, -1);
995 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
996 "Horizontal", "Horizontal toolbar layout", "Toolbar/Horizontal",
997 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
998 (GtkSignalFunc) set_toolbar_horizontal, toolbar);
999 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
1000 "Vertical", "Vertical toolbar layout", "Toolbar/Vertical",
1001 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
1002 (GtkSignalFunc) set_toolbar_vertical, toolbar);
1004 gtk_toolbar_append_space (GTK_TOOLBAR(toolbar));
1006 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
1007 "Icons", "Only show toolbar icons", "Toolbar/IconsOnly",
1008 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
1009 (GtkSignalFunc) set_toolbar_icons, toolbar);
1010 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
1011 "Text", "Only show toolbar text", "Toolbar/TextOnly",
1012 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
1013 (GtkSignalFunc) set_toolbar_text, toolbar);
1014 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
1015 "Both", "Show toolbar icons and text", "Toolbar/Both",
1016 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
1017 (GtkSignalFunc) set_toolbar_both, toolbar);
1018 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
1019 "Both (horizontal)",
1020 "Show toolbar icons and text in a horizontal fashion",
1021 "Toolbar/BothHoriz",
1022 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
1023 (GtkSignalFunc) set_toolbar_both_horiz, toolbar);
1025 gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
1027 entry = gtk_entry_new ();
1029 gtk_toolbar_append_widget (GTK_TOOLBAR (toolbar), entry, "This is an unusable GtkEntry ;)", "Hey don't click me!!!");
1031 gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
1034 gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
1036 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
1037 "Enable", "Enable tooltips", NULL,
1038 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
1039 (GtkSignalFunc) set_toolbar_enable, toolbar);
1040 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
1041 "Disable", "Disable tooltips", NULL,
1042 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
1043 (GtkSignalFunc) set_toolbar_disable, toolbar);
1045 gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
1047 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
1048 "Frobate", "Frobate tooltip", NULL,
1049 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
1050 (GtkSignalFunc) NULL, toolbar);
1051 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
1052 "Baz", "Baz tooltip", NULL,
1053 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
1054 (GtkSignalFunc) NULL, toolbar);
1056 gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
1058 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
1059 "Blah", "Blah tooltip", NULL,
1060 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
1061 (GtkSignalFunc) NULL, toolbar);
1062 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
1063 "Bar", "Bar tooltip", NULL,
1064 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
1065 (GtkSignalFunc) NULL, toolbar);
1067 gtk_container_add (GTK_CONTAINER (window), toolbar);
1070 if (!GTK_WIDGET_VISIBLE (window))
1071 gtk_widget_show_all (window);
1073 gtk_widget_destroy (window);
1077 make_toolbar (GtkWidget *window)
1081 if (!GTK_WIDGET_REALIZED (window))
1082 gtk_widget_realize (window);
1084 toolbar = gtk_toolbar_new ();
1086 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
1087 "Horizontal", "Horizontal toolbar layout", NULL,
1088 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
1089 (GtkSignalFunc) set_toolbar_horizontal, toolbar);
1090 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
1091 "Vertical", "Vertical toolbar layout", NULL,
1092 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
1093 (GtkSignalFunc) set_toolbar_vertical, toolbar);
1095 gtk_toolbar_append_space (GTK_TOOLBAR(toolbar));
1097 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
1098 "Icons", "Only show toolbar icons", NULL,
1099 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
1100 (GtkSignalFunc) set_toolbar_icons, toolbar);
1101 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
1102 "Text", "Only show toolbar text", NULL,
1103 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
1104 (GtkSignalFunc) set_toolbar_text, toolbar);
1105 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
1106 "Both", "Show toolbar icons and text", NULL,
1107 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
1108 (GtkSignalFunc) set_toolbar_both, toolbar);
1110 gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
1112 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
1113 "Woot", "Woot woot woot", NULL,
1114 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
1115 (GtkSignalFunc) NULL, toolbar);
1116 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
1117 "Blah", "Blah blah blah", "Toolbar/Big",
1118 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
1119 (GtkSignalFunc) NULL, toolbar);
1121 gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
1123 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
1124 "Enable", "Enable tooltips", NULL,
1125 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
1126 (GtkSignalFunc) set_toolbar_enable, toolbar);
1127 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
1128 "Disable", "Disable tooltips", NULL,
1129 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
1130 (GtkSignalFunc) set_toolbar_disable, toolbar);
1132 gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
1134 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
1135 "Hoo", "Hoo tooltip", NULL,
1136 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
1137 (GtkSignalFunc) NULL, toolbar);
1138 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
1139 "Woo", "Woo tooltip", NULL,
1140 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
1141 (GtkSignalFunc) NULL, toolbar);
1150 static guint statusbar_counter = 1;
1153 statusbar_push (GtkWidget *button,
1154 GtkStatusbar *statusbar)
1158 sprintf (text, "something %d", statusbar_counter++);
1160 gtk_statusbar_push (statusbar, 1, text);
1164 statusbar_pop (GtkWidget *button,
1165 GtkStatusbar *statusbar)
1167 gtk_statusbar_pop (statusbar, 1);
1171 statusbar_steal (GtkWidget *button,
1172 GtkStatusbar *statusbar)
1174 gtk_statusbar_remove (statusbar, 1, 4);
1178 statusbar_popped (GtkStatusbar *statusbar,
1182 if (!statusbar->messages)
1183 statusbar_counter = 1;
1187 statusbar_contexts (GtkStatusbar *statusbar)
1191 string = "any context";
1192 g_print ("GtkStatusBar: context=\"%s\", context_id=%d\n",
1194 gtk_statusbar_get_context_id (statusbar, string));
1196 string = "idle messages";
1197 g_print ("GtkStatusBar: context=\"%s\", context_id=%d\n",
1199 gtk_statusbar_get_context_id (statusbar, string));
1201 string = "some text";
1202 g_print ("GtkStatusBar: context=\"%s\", context_id=%d\n",
1204 gtk_statusbar_get_context_id (statusbar, string));
1206 string = "hit the mouse";
1207 g_print ("GtkStatusBar: context=\"%s\", context_id=%d\n",
1209 gtk_statusbar_get_context_id (statusbar, string));
1211 string = "hit the mouse2";
1212 g_print ("GtkStatusBar: context=\"%s\", context_id=%d\n",
1214 gtk_statusbar_get_context_id (statusbar, string));
1218 create_statusbar (GtkWidget *widget)
1220 static GtkWidget *window = NULL;
1224 GtkWidget *separator;
1225 GtkWidget *statusbar;
1229 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
1230 gtk_window_set_screen (GTK_WINDOW (window),
1231 gtk_widget_get_screen (widget));
1233 gtk_signal_connect (GTK_OBJECT (window), "destroy",
1234 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
1237 gtk_window_set_title (GTK_WINDOW (window), "statusbar");
1238 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
1240 box1 = gtk_vbox_new (FALSE, 0);
1241 gtk_container_add (GTK_CONTAINER (window), box1);
1243 box2 = gtk_vbox_new (FALSE, 10);
1244 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
1245 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
1247 statusbar = gtk_statusbar_new ();
1248 gtk_box_pack_end (GTK_BOX (box1), statusbar, TRUE, TRUE, 0);
1249 gtk_signal_connect (GTK_OBJECT (statusbar),
1251 GTK_SIGNAL_FUNC (statusbar_popped),
1254 button = gtk_widget_new (gtk_button_get_type (),
1255 "label", "push something",
1259 g_object_connect (G_OBJECT (button),
1260 "signal::clicked", statusbar_push, statusbar,
1263 button = g_object_connect (gtk_widget_new (gtk_button_get_type (),
1268 "signal_after::clicked", statusbar_pop, statusbar,
1271 button = g_object_connect (gtk_widget_new (gtk_button_get_type (),
1272 "label", "steal #4",
1276 "signal_after::clicked", statusbar_steal, statusbar,
1279 button = g_object_connect (gtk_widget_new (gtk_button_get_type (),
1280 "label", "test contexts",
1284 "swapped_signal_after::clicked", statusbar_contexts, statusbar,
1287 separator = gtk_hseparator_new ();
1288 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
1290 box2 = gtk_vbox_new (FALSE, 10);
1291 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
1292 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
1294 button = gtk_button_new_with_label ("close");
1295 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
1296 GTK_SIGNAL_FUNC(gtk_widget_destroy),
1297 GTK_OBJECT (window));
1298 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
1299 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
1300 gtk_widget_grab_default (button);
1303 if (!GTK_WIDGET_VISIBLE (window))
1304 gtk_widget_show_all (window);
1306 gtk_widget_destroy (window);
1314 cb_tree_destroy_event(GtkWidget* w)
1316 sTreeButtons* tree_buttons;
1318 /* free buttons structure associate at this tree */
1319 tree_buttons = gtk_object_get_user_data (GTK_OBJECT (w));
1320 g_free (tree_buttons);
1324 cb_add_new_item(GtkWidget* w, GtkTree* tree)
1326 sTreeButtons* tree_buttons;
1327 GList* selected_list;
1328 GtkWidget* selected_item;
1330 GtkWidget* item_new;
1333 tree_buttons = gtk_object_get_user_data(GTK_OBJECT(tree));
1335 selected_list = GTK_TREE_SELECTION_OLD(tree);
1337 if(selected_list == NULL)
1339 /* there is no item in tree */
1340 subtree = GTK_WIDGET(tree);
1344 /* list can have only one element */
1345 selected_item = GTK_WIDGET(selected_list->data);
1347 subtree = GTK_TREE_ITEM_SUBTREE(selected_item);
1351 /* current selected item have not subtree ... create it */
1352 subtree = gtk_tree_new();
1353 gtk_tree_item_set_subtree(GTK_TREE_ITEM(selected_item),
1358 /* at this point, we know which subtree will be used to add new item */
1359 /* create a new item */
1360 sprintf(buffer, "item add %d", tree_buttons->nb_item_add);
1361 item_new = gtk_tree_item_new_with_label(buffer);
1362 gtk_tree_append(GTK_TREE(subtree), item_new);
1363 gtk_widget_show(item_new);
1365 tree_buttons->nb_item_add++;
1369 cb_remove_item(GtkWidget*w, GtkTree* tree)
1371 GList* selected_list;
1374 selected_list = GTK_TREE_SELECTION_OLD(tree);
1378 while (selected_list)
1380 clear_list = g_list_prepend (clear_list, selected_list->data);
1381 selected_list = selected_list->next;
1384 clear_list = g_list_reverse (clear_list);
1385 gtk_tree_remove_items(tree, clear_list);
1387 g_list_free (clear_list);
1391 cb_remove_subtree(GtkWidget*w, GtkTree* tree)
1393 GList* selected_list;
1396 selected_list = GTK_TREE_SELECTION_OLD(tree);
1400 item = GTK_TREE_ITEM (selected_list->data);
1402 gtk_tree_item_remove_subtree (item);
1407 cb_tree_changed(GtkTree* tree)
1409 sTreeButtons* tree_buttons;
1410 GList* selected_list;
1413 tree_buttons = gtk_object_get_user_data(GTK_OBJECT(tree));
1415 selected_list = GTK_TREE_SELECTION_OLD(tree);
1416 nb_selected = g_list_length(selected_list);
1418 if(nb_selected == 0)
1420 if(tree->children == NULL)
1421 gtk_widget_set_sensitive(tree_buttons->add_button, TRUE);
1423 gtk_widget_set_sensitive(tree_buttons->add_button, FALSE);
1424 gtk_widget_set_sensitive(tree_buttons->remove_button, FALSE);
1425 gtk_widget_set_sensitive(tree_buttons->subtree_button, FALSE);
1429 gtk_widget_set_sensitive(tree_buttons->remove_button, TRUE);
1430 gtk_widget_set_sensitive(tree_buttons->add_button, (nb_selected == 1));
1431 gtk_widget_set_sensitive(tree_buttons->subtree_button, (nb_selected == 1));
1436 create_subtree(GtkWidget* item, guint level, guint nb_item_max, guint recursion_level_max)
1438 GtkWidget* item_subtree;
1439 GtkWidget* item_new;
1444 if(level == recursion_level_max) return;
1448 /* query with no root item */
1450 item_subtree = item;
1455 /* query with no root item */
1456 /* create subtree and associate it with current item */
1457 item_subtree = gtk_tree_new();
1461 for(nb_item = 0; nb_item < nb_item_max; nb_item++)
1463 sprintf(buffer, "item %d-%d", level, nb_item);
1464 item_new = gtk_tree_item_new_with_label(buffer);
1465 gtk_tree_append(GTK_TREE(item_subtree), item_new);
1466 create_subtree(item_new, level+1, nb_item_max, recursion_level_max);
1467 gtk_widget_show(item_new);
1471 gtk_tree_item_set_subtree(GTK_TREE_ITEM(item), item_subtree);
1475 create_tree_sample(GdkScreen *screen, guint selection_mode,
1476 guint draw_line, guint view_line, guint no_root_item,
1477 guint nb_item_max, guint recursion_level_max)
1482 GtkWidget* separator;
1484 GtkWidget* scrolled_win;
1485 GtkWidget* root_tree;
1486 GtkWidget* root_item;
1487 sTreeButtons* tree_buttons;
1489 /* create tree buttons struct */
1490 if ((tree_buttons = g_malloc (sizeof (sTreeButtons))) == NULL)
1492 g_error("can't allocate memory for tree structure !\n");
1495 tree_buttons->nb_item_add = 0;
1497 /* create top level window */
1498 window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
1499 gtk_window_set_screen (GTK_WINDOW (window), screen);
1500 gtk_window_set_title(GTK_WINDOW(window), "Tree Sample");
1501 gtk_signal_connect(GTK_OBJECT(window), "destroy",
1502 (GtkSignalFunc) cb_tree_destroy_event, NULL);
1503 gtk_object_set_user_data(GTK_OBJECT(window), tree_buttons);
1505 box1 = gtk_vbox_new(FALSE, 0);
1506 gtk_container_add(GTK_CONTAINER(window), box1);
1507 gtk_widget_show(box1);
1509 /* create tree box */
1510 box2 = gtk_vbox_new(FALSE, 0);
1511 gtk_box_pack_start(GTK_BOX(box1), box2, TRUE, TRUE, 0);
1512 gtk_container_set_border_width(GTK_CONTAINER(box2), 5);
1513 gtk_widget_show(box2);
1515 /* create scrolled window */
1516 scrolled_win = gtk_scrolled_window_new (NULL, NULL);
1517 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win),
1518 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
1519 gtk_box_pack_start (GTK_BOX (box2), scrolled_win, TRUE, TRUE, 0);
1520 gtk_widget_set_usize (scrolled_win, 200, 200);
1521 gtk_widget_show (scrolled_win);
1523 /* create root tree widget */
1524 root_tree = gtk_tree_new();
1525 gtk_signal_connect(GTK_OBJECT(root_tree), "selection_changed",
1526 (GtkSignalFunc)cb_tree_changed,
1528 gtk_object_set_user_data(GTK_OBJECT(root_tree), tree_buttons);
1529 gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scrolled_win), root_tree);
1530 gtk_tree_set_selection_mode(GTK_TREE(root_tree), selection_mode);
1531 gtk_tree_set_view_lines(GTK_TREE(root_tree), draw_line);
1532 gtk_tree_set_view_mode(GTK_TREE(root_tree), !view_line);
1533 gtk_widget_show(root_tree);
1537 /* set root tree to subtree function with root item variable */
1538 root_item = GTK_WIDGET(root_tree);
1542 /* create root tree item widget */
1543 root_item = gtk_tree_item_new_with_label("root item");
1544 gtk_tree_append(GTK_TREE(root_tree), root_item);
1545 gtk_widget_show(root_item);
1547 create_subtree(root_item, -no_root_item, nb_item_max, recursion_level_max);
1549 box2 = gtk_vbox_new(FALSE, 0);
1550 gtk_box_pack_start(GTK_BOX(box1), box2, FALSE, FALSE, 0);
1551 gtk_container_set_border_width(GTK_CONTAINER(box2), 5);
1552 gtk_widget_show(box2);
1554 button = gtk_button_new_with_label("Add Item");
1555 gtk_widget_set_sensitive(button, FALSE);
1556 gtk_signal_connect(GTK_OBJECT (button), "clicked",
1557 (GtkSignalFunc) cb_add_new_item,
1558 (gpointer)root_tree);
1559 gtk_box_pack_start(GTK_BOX(box2), button, TRUE, TRUE, 0);
1560 gtk_widget_show(button);
1561 tree_buttons->add_button = button;
1563 button = gtk_button_new_with_label("Remove Item(s)");
1564 gtk_widget_set_sensitive(button, FALSE);
1565 gtk_signal_connect(GTK_OBJECT (button), "clicked",
1566 (GtkSignalFunc) cb_remove_item,
1567 (gpointer)root_tree);
1568 gtk_box_pack_start(GTK_BOX(box2), button, TRUE, TRUE, 0);
1569 gtk_widget_show(button);
1570 tree_buttons->remove_button = button;
1572 button = gtk_button_new_with_label("Remove Subtree");
1573 gtk_widget_set_sensitive(button, FALSE);
1574 gtk_signal_connect(GTK_OBJECT (button), "clicked",
1575 (GtkSignalFunc) cb_remove_subtree,
1576 (gpointer)root_tree);
1577 gtk_box_pack_start(GTK_BOX(box2), button, TRUE, TRUE, 0);
1578 gtk_widget_show(button);
1579 tree_buttons->subtree_button = button;
1581 /* create separator */
1582 separator = gtk_hseparator_new();
1583 gtk_box_pack_start(GTK_BOX(box1), separator, FALSE, FALSE, 0);
1584 gtk_widget_show(separator);
1586 /* create button box */
1587 box2 = gtk_vbox_new(FALSE, 0);
1588 gtk_box_pack_start(GTK_BOX(box1), box2, FALSE, FALSE, 0);
1589 gtk_container_set_border_width(GTK_CONTAINER(box2), 5);
1590 gtk_widget_show(box2);
1592 button = gtk_button_new_with_label("Close");
1593 gtk_box_pack_start(GTK_BOX(box2), button, TRUE, TRUE, 0);
1594 gtk_signal_connect_object(GTK_OBJECT (button), "clicked",
1595 (GtkSignalFunc) gtk_widget_destroy,
1596 GTK_OBJECT(window));
1597 gtk_widget_show(button);
1599 gtk_widget_show(window);
1603 cb_create_tree(GtkWidget* w)
1605 guint selection_mode = GTK_SELECTION_SINGLE;
1610 guint recursion_level;
1612 /* get selection mode choice */
1613 if(GTK_TOGGLE_BUTTON(sTreeSampleSelection.single_button)->active)
1614 selection_mode = GTK_SELECTION_SINGLE;
1616 if(GTK_TOGGLE_BUTTON(sTreeSampleSelection.browse_button)->active)
1617 selection_mode = GTK_SELECTION_BROWSE;
1619 selection_mode = GTK_SELECTION_MULTIPLE;
1621 /* get options choice */
1622 draw_line = GTK_TOGGLE_BUTTON(sTreeSampleSelection.draw_line_button)->active;
1623 view_line = GTK_TOGGLE_BUTTON(sTreeSampleSelection.view_line_button)->active;
1624 no_root_item = GTK_TOGGLE_BUTTON(sTreeSampleSelection.no_root_item_button)->active;
1627 nb_item = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(sTreeSampleSelection.nb_item_spinner));
1628 recursion_level = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(sTreeSampleSelection.recursion_spinner));
1630 if (pow (nb_item, recursion_level) > 10000)
1632 g_print ("%g total items? That will take a very long time. Try less\n",
1633 pow (nb_item, recursion_level));
1637 create_tree_sample(gtk_widget_get_screen (w),
1638 selection_mode, draw_line,
1639 view_line, no_root_item, nb_item, recursion_level);
1643 create_tree_mode_window(GtkWidget *widget)
1645 static GtkWidget* window;
1653 GtkWidget* separator;
1660 /* create toplevel window */
1661 window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
1662 gtk_window_set_screen (GTK_WINDOW (window),
1663 gtk_widget_get_screen (widget));
1664 gtk_window_set_title(GTK_WINDOW(window), "Set Tree Parameters");
1665 gtk_signal_connect (GTK_OBJECT (window), "destroy",
1666 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
1668 box1 = gtk_vbox_new(FALSE, 0);
1669 gtk_container_add(GTK_CONTAINER(window), box1);
1671 /* create upper box - selection box */
1672 box2 = gtk_vbox_new(FALSE, 5);
1673 gtk_box_pack_start(GTK_BOX(box1), box2, TRUE, TRUE, 0);
1674 gtk_container_set_border_width(GTK_CONTAINER(box2), 5);
1676 box3 = gtk_hbox_new(FALSE, 5);
1677 gtk_box_pack_start(GTK_BOX(box2), box3, TRUE, TRUE, 0);
1679 /* create selection mode frame */
1680 frame = gtk_frame_new("Selection Mode");
1681 gtk_box_pack_start(GTK_BOX(box3), frame, TRUE, TRUE, 0);
1683 box4 = gtk_vbox_new(FALSE, 0);
1684 gtk_container_add(GTK_CONTAINER(frame), box4);
1685 gtk_container_set_border_width(GTK_CONTAINER(box4), 5);
1687 /* create radio button */
1688 button = gtk_radio_button_new_with_label(NULL, "SINGLE");
1689 gtk_box_pack_start(GTK_BOX(box4), button, TRUE, TRUE, 0);
1690 sTreeSampleSelection.single_button = button;
1692 button = gtk_radio_button_new_with_label(gtk_radio_button_get_group (GTK_RADIO_BUTTON (button)),
1694 gtk_box_pack_start(GTK_BOX(box4), button, TRUE, TRUE, 0);
1695 sTreeSampleSelection.browse_button = button;
1697 button = gtk_radio_button_new_with_label(gtk_radio_button_get_group (GTK_RADIO_BUTTON (button)),
1699 gtk_box_pack_start(GTK_BOX(box4), button, TRUE, TRUE, 0);
1700 sTreeSampleSelection.multiple_button = button;
1702 sTreeSampleSelection.selection_mode_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (button));
1704 /* create option mode frame */
1705 frame = gtk_frame_new("Options");
1706 gtk_box_pack_start(GTK_BOX(box3), frame, TRUE, TRUE, 0);
1708 box4 = gtk_vbox_new(FALSE, 0);
1709 gtk_container_add(GTK_CONTAINER(frame), box4);
1710 gtk_container_set_border_width(GTK_CONTAINER(box4), 5);
1712 /* create check button */
1713 button = gtk_check_button_new_with_label("Draw line");
1714 gtk_box_pack_start(GTK_BOX(box4), button, TRUE, TRUE, 0);
1715 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), TRUE);
1716 sTreeSampleSelection.draw_line_button = button;
1718 button = gtk_check_button_new_with_label("View Line mode");
1719 gtk_box_pack_start(GTK_BOX(box4), button, TRUE, TRUE, 0);
1720 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), TRUE);
1721 sTreeSampleSelection.view_line_button = button;
1723 button = gtk_check_button_new_with_label("Without Root item");
1724 gtk_box_pack_start(GTK_BOX(box4), button, TRUE, TRUE, 0);
1725 sTreeSampleSelection.no_root_item_button = button;
1727 /* create recursion parameter */
1728 frame = gtk_frame_new("Size Parameters");
1729 gtk_box_pack_start(GTK_BOX(box2), frame, TRUE, TRUE, 0);
1731 box4 = gtk_hbox_new(FALSE, 5);
1732 gtk_container_add(GTK_CONTAINER(frame), box4);
1733 gtk_container_set_border_width(GTK_CONTAINER(box4), 5);
1735 /* create number of item spin button */
1736 box5 = gtk_hbox_new(FALSE, 5);
1737 gtk_box_pack_start(GTK_BOX(box4), box5, FALSE, FALSE, 0);
1739 label = gtk_label_new("Number of items : ");
1740 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
1741 gtk_box_pack_start (GTK_BOX (box5), label, FALSE, TRUE, 0);
1743 adj = (GtkAdjustment *) gtk_adjustment_new (DEFAULT_NUMBER_OF_ITEM, 1.0, 255.0, 1.0,
1745 spinner = gtk_spin_button_new (adj, 0, 0);
1746 gtk_box_pack_start (GTK_BOX (box5), spinner, FALSE, TRUE, 0);
1747 sTreeSampleSelection.nb_item_spinner = spinner;
1749 /* create recursion level spin button */
1750 box5 = gtk_hbox_new(FALSE, 5);
1751 gtk_box_pack_start(GTK_BOX(box4), box5, FALSE, FALSE, 0);
1753 label = gtk_label_new("Depth : ");
1754 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
1755 gtk_box_pack_start (GTK_BOX (box5), label, FALSE, TRUE, 0);
1757 adj = (GtkAdjustment *) gtk_adjustment_new (DEFAULT_RECURSION_LEVEL, 0.0, 255.0, 1.0,
1759 spinner = gtk_spin_button_new (adj, 0, 0);
1760 gtk_box_pack_start (GTK_BOX (box5), spinner, FALSE, TRUE, 0);
1761 sTreeSampleSelection.recursion_spinner = spinner;
1763 /* create horizontal separator */
1764 separator = gtk_hseparator_new();
1765 gtk_box_pack_start(GTK_BOX(box1), separator, FALSE, FALSE, 0);
1767 /* create bottom button box */
1768 box2 = gtk_hbox_new(TRUE, 10);
1769 gtk_box_pack_start(GTK_BOX(box1), box2, FALSE, FALSE, 0);
1770 gtk_container_set_border_width(GTK_CONTAINER(box2), 5);
1772 button = gtk_button_new_with_label("Create Tree");
1773 gtk_box_pack_start(GTK_BOX(box2), button, TRUE, TRUE, 0);
1774 gtk_signal_connect(GTK_OBJECT (button), "clicked",
1775 (GtkSignalFunc) cb_create_tree, NULL);
1777 button = gtk_button_new_with_label("Close");
1778 gtk_box_pack_start(GTK_BOX(box2), button, TRUE, TRUE, 0);
1779 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
1780 GTK_SIGNAL_FUNC(gtk_widget_destroy),
1781 GTK_OBJECT (window));
1783 if (!GTK_WIDGET_VISIBLE (window))
1784 gtk_widget_show_all (window);
1786 gtk_widget_destroy (window);
1792 #define GRID_SIZE 20
1793 #define DEFAULT_GEOMETRY "10x10"
1796 gridded_geometry_expose (GtkWidget *widget,
1797 GdkEventExpose *event)
1801 gdk_draw_rectangle (widget->window, widget->style->base_gc[widget->state], TRUE,
1802 0, 0, widget->allocation.width, widget->allocation.height);
1804 for (i = 0 ; i * GRID_SIZE < widget->allocation.width; i++)
1805 for (j = 0 ; j * GRID_SIZE < widget->allocation.height; j++)
1807 if ((i + j) % 2 == 0)
1808 gdk_draw_rectangle (widget->window, widget->style->text_gc[widget->state], TRUE,
1809 i * GRID_SIZE, j * GRID_SIZE, GRID_SIZE, GRID_SIZE);
1816 gridded_geometry_subresponse (GtkDialog *dialog,
1818 gchar *geometry_string)
1820 if (response_id == GTK_RESPONSE_NONE)
1822 gtk_widget_destroy (GTK_WIDGET (dialog));
1826 if (!gtk_window_parse_geometry (GTK_WINDOW (dialog), geometry_string))
1828 g_print ("Can't parse geometry string %s\n", geometry_string);
1829 gtk_window_parse_geometry (GTK_WINDOW (dialog), DEFAULT_GEOMETRY);
1835 gridded_geometry_response (GtkDialog *dialog,
1839 if (response_id == GTK_RESPONSE_NONE)
1841 gtk_widget_destroy (GTK_WIDGET (dialog));
1845 gchar *geometry_string = g_strdup (gtk_entry_get_text (entry));
1846 gchar *title = g_strdup_printf ("Gridded window at: %s", geometry_string);
1848 GtkWidget *drawing_area;
1850 GdkGeometry geometry;
1852 window = gtk_dialog_new_with_buttons (title,
1855 GTK_STOCK_CLOSE, GTK_RESPONSE_NONE,
1858 gtk_window_set_screen (GTK_WINDOW (window),
1859 gtk_widget_get_screen (GTK_WIDGET (dialog)));
1861 g_signal_connect (window, "response",
1862 G_CALLBACK (gridded_geometry_subresponse), geometry_string);
1864 box = gtk_vbox_new (FALSE, 0);
1865 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox), box, TRUE, TRUE, 0);
1867 gtk_container_set_border_width (GTK_CONTAINER (box), 7);
1869 drawing_area = gtk_drawing_area_new ();
1870 g_signal_connect (drawing_area, "expose_event",
1871 G_CALLBACK (gridded_geometry_expose), NULL);
1872 gtk_box_pack_start (GTK_BOX (box), drawing_area, TRUE, TRUE, 0);
1874 /* Gross hack to work around bug 68668... if we set the size request
1875 * large enough, then the current
1877 * request_of_window - request_of_geometry_widget
1879 * method of getting the base size works more or less works.
1881 gtk_widget_set_size_request (drawing_area, 2000, 2000);
1883 geometry.base_width = 0;
1884 geometry.base_height = 0;
1885 geometry.min_width = 2 * GRID_SIZE;
1886 geometry.min_height = 2 * GRID_SIZE;
1887 geometry.width_inc = GRID_SIZE;
1888 geometry.height_inc = GRID_SIZE;
1890 gtk_window_set_geometry_hints (GTK_WINDOW (window), drawing_area,
1892 GDK_HINT_BASE_SIZE | GDK_HINT_MIN_SIZE | GDK_HINT_RESIZE_INC);
1894 if (!gtk_window_parse_geometry (GTK_WINDOW (window), geometry_string))
1896 g_print ("Can't parse geometry string %s\n", geometry_string);
1897 gtk_window_parse_geometry (GTK_WINDOW (window), DEFAULT_GEOMETRY);
1900 gtk_widget_show_all (window);
1905 create_gridded_geometry (GtkWidget *widget)
1907 static GtkWidget *window = NULL;
1913 window = gtk_dialog_new_with_buttons ("Gridded Geometry",
1916 GTK_STOCK_CLOSE, GTK_RESPONSE_NONE,
1919 gtk_window_set_screen (GTK_WINDOW (window),
1920 gtk_widget_get_screen (widget));
1922 label = gtk_label_new ("Geometry string:");
1923 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox), label, FALSE, FALSE, 0);
1925 entry = gtk_entry_new ();
1926 gtk_entry_set_text (GTK_ENTRY (entry), DEFAULT_GEOMETRY);
1927 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox), entry, FALSE, FALSE, 0);
1929 g_signal_connect (window, "response",
1930 G_CALLBACK (gridded_geometry_response), entry);
1931 g_object_add_weak_pointer (G_OBJECT (window), (gpointer *)&window);
1933 gtk_widget_show_all (window);
1936 gtk_widget_destroy (window);
1944 handle_box_child_signal (GtkHandleBox *hb,
1946 const gchar *action)
1948 printf ("%s: child <%s> %sed\n",
1949 gtk_type_name (GTK_OBJECT_TYPE (hb)),
1950 gtk_type_name (GTK_OBJECT_TYPE (child)),
1955 create_handle_box (GtkWidget *widget)
1957 static GtkWidget* window = NULL;
1958 GtkWidget *handle_box;
1959 GtkWidget *handle_box2;
1964 GtkWidget *separator;
1968 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
1970 gtk_window_set_screen (GTK_WINDOW (window),
1971 gtk_widget_get_screen (widget));
1973 gtk_window_set_title (GTK_WINDOW (window),
1975 gtk_window_set_resizable (GTK_WINDOW (window), FALSE);
1977 gtk_signal_connect (GTK_OBJECT (window), "destroy",
1978 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
1981 gtk_container_set_border_width (GTK_CONTAINER (window), 20);
1983 vbox = gtk_vbox_new (FALSE, 0);
1984 gtk_container_add (GTK_CONTAINER (window), vbox);
1985 gtk_widget_show (vbox);
1987 label = gtk_label_new ("Above");
1988 gtk_container_add (GTK_CONTAINER (vbox), label);
1989 gtk_widget_show (label);
1991 separator = gtk_hseparator_new ();
1992 gtk_container_add (GTK_CONTAINER (vbox), separator);
1993 gtk_widget_show (separator);
1995 hbox = gtk_hbox_new (FALSE, 10);
1996 gtk_container_add (GTK_CONTAINER (vbox), hbox);
1997 gtk_widget_show (hbox);
1999 separator = gtk_hseparator_new ();
2000 gtk_container_add (GTK_CONTAINER (vbox), separator);
2001 gtk_widget_show (separator);
2003 label = gtk_label_new ("Below");
2004 gtk_container_add (GTK_CONTAINER (vbox), label);
2005 gtk_widget_show (label);
2007 handle_box = gtk_handle_box_new ();
2008 gtk_box_pack_start (GTK_BOX (hbox), handle_box, FALSE, FALSE, 0);
2009 gtk_signal_connect (GTK_OBJECT (handle_box),
2011 GTK_SIGNAL_FUNC (handle_box_child_signal),
2013 gtk_signal_connect (GTK_OBJECT (handle_box),
2015 GTK_SIGNAL_FUNC (handle_box_child_signal),
2017 gtk_widget_show (handle_box);
2019 toolbar = make_toolbar (window);
2021 gtk_container_add (GTK_CONTAINER (handle_box), toolbar);
2022 gtk_widget_show (toolbar);
2024 handle_box = gtk_handle_box_new ();
2025 gtk_box_pack_start (GTK_BOX (hbox), handle_box, FALSE, FALSE, 0);
2026 gtk_signal_connect (GTK_OBJECT (handle_box),
2028 GTK_SIGNAL_FUNC (handle_box_child_signal),
2030 gtk_signal_connect (GTK_OBJECT (handle_box),
2032 GTK_SIGNAL_FUNC (handle_box_child_signal),
2034 gtk_widget_show (handle_box);
2036 handle_box2 = gtk_handle_box_new ();
2037 gtk_container_add (GTK_CONTAINER (handle_box), handle_box2);
2038 gtk_signal_connect (GTK_OBJECT (handle_box2),
2040 GTK_SIGNAL_FUNC (handle_box_child_signal),
2042 gtk_signal_connect (GTK_OBJECT (handle_box2),
2044 GTK_SIGNAL_FUNC (handle_box_child_signal),
2046 gtk_widget_show (handle_box2);
2048 label = gtk_label_new ("Fooo!");
2049 gtk_container_add (GTK_CONTAINER (handle_box2), label);
2050 gtk_widget_show (label);
2053 if (!GTK_WIDGET_VISIBLE (window))
2054 gtk_widget_show (window);
2056 gtk_widget_destroy (window);
2060 * Test for getting an image from a drawable
2071 take_snapshot (GtkWidget *button,
2074 struct GetImageData *gid = data;
2075 GdkRectangle visible;
2077 int height_fraction;
2080 GdkColor color = { 0, 30000, 0, 0 };
2081 GdkRectangle target;
2084 /* Do some begin_paint_rect on some random rects, draw some
2085 * distinctive stuff into those rects, then take the snapshot.
2086 * figure out whether any rects were overlapped and report to
2090 visible = gid->sw->allocation;
2092 visible.x = gtk_scrolled_window_get_hadjustment (GTK_SCROLLED_WINDOW (gid->sw))->value;
2093 visible.y = gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (gid->sw))->value;
2095 width_fraction = visible.width / 4;
2096 height_fraction = visible.height / 4;
2098 gc = gdk_gc_new (gid->src->window);
2099 black_gc = gid->src->style->black_gc;
2101 gdk_gc_set_rgb_fg_color (gc, &color);
2104 target.x = visible.x + width_fraction;
2105 target.y = visible.y + height_fraction * 3;
2106 target.width = width_fraction;
2107 target.height = height_fraction / 2;
2109 gdk_window_begin_paint_rect (gid->src->window,
2112 gdk_draw_rectangle (gid->src->window,
2116 target.width, target.height);
2118 gdk_draw_rectangle (gid->src->window,
2121 target.x + 10, target.y + 10,
2122 target.width - 20, target.height - 20);
2124 target.x = visible.x + width_fraction;
2125 target.y = visible.y + height_fraction;
2126 target.width = width_fraction;
2127 target.height = height_fraction;
2129 gdk_window_begin_paint_rect (gid->src->window,
2132 gdk_draw_rectangle (gid->src->window,
2136 target.width, target.height);
2138 gdk_draw_rectangle (gid->src->window,
2141 target.x + 10, target.y + 10,
2142 target.width - 20, target.height - 20);
2144 target.x = visible.x + width_fraction * 3;
2145 target.y = visible.y + height_fraction;
2146 target.width = width_fraction / 2;
2147 target.height = height_fraction;
2149 gdk_window_begin_paint_rect (gid->src->window,
2152 gdk_draw_rectangle (gid->src->window,
2156 target.width, target.height);
2158 gdk_draw_rectangle (gid->src->window,
2161 target.x + 10, target.y + 10,
2162 target.width - 20, target.height - 20);
2164 target.x = visible.x + width_fraction * 2;
2165 target.y = visible.y + height_fraction * 2;
2166 target.width = width_fraction / 4;
2167 target.height = height_fraction / 4;
2169 gdk_window_begin_paint_rect (gid->src->window,
2172 gdk_draw_rectangle (gid->src->window,
2176 target.width, target.height);
2178 gdk_draw_rectangle (gid->src->window,
2181 target.x + 10, target.y + 10,
2182 target.width - 20, target.height - 20);
2184 target.x += target.width / 2;
2185 target.y += target.width / 2;
2187 gdk_window_begin_paint_rect (gid->src->window,
2190 gdk_draw_rectangle (gid->src->window,
2194 target.width, target.height);
2196 gdk_draw_rectangle (gid->src->window,
2199 target.x + 10, target.y + 10,
2200 target.width - 20, target.height - 20);
2202 /* Screen shot area */
2204 target.x = visible.x + width_fraction * 1.5;
2205 target.y = visible.y + height_fraction * 1.5;
2206 target.width = width_fraction * 2;
2207 target.height = height_fraction * 2;
2209 shot = gdk_drawable_get_image (gid->src->window,
2211 target.width, target.height);
2213 gtk_image_set_from_image (GTK_IMAGE (gid->snap),
2216 g_object_unref (G_OBJECT (shot));
2218 gdk_window_end_paint (gid->src->window);
2219 gdk_window_end_paint (gid->src->window);
2220 gdk_window_end_paint (gid->src->window);
2221 gdk_window_end_paint (gid->src->window);
2222 gdk_window_end_paint (gid->src->window);
2224 gdk_draw_rectangle (gid->src->window,
2225 gid->src->style->black_gc,
2228 target.width, target.height);
2230 g_object_unref (G_OBJECT (gc));
2234 image_source_expose (GtkWidget *da,
2235 GdkEventExpose *event,
2238 int x = event->area.x;
2239 GdkColor red = { 0, 65535, 0, 0 };
2240 GdkColor green = { 0, 0, 65535, 0 };
2241 GdkColor blue = { 0, 0, 0, 65535 };
2244 gc = gdk_gc_new (event->window);
2246 while (x < (event->area.x + event->area.width))
2253 gdk_gc_set_rgb_fg_color (gc, &red);
2259 gdk_gc_set_rgb_fg_color (gc, &green);
2265 gdk_gc_set_rgb_fg_color (gc, &blue);
2269 g_assert_not_reached ();
2273 gdk_draw_line (event->window,
2276 x, event->area.y + event->area.height);
2281 g_object_unref (G_OBJECT (gc));
2287 create_get_image (GtkWidget *widget)
2289 static GtkWidget *window = NULL;
2292 gtk_widget_destroy (window);
2301 struct GetImageData *gid;
2303 gid = g_new (struct GetImageData, 1);
2305 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
2307 gtk_window_set_screen (GTK_WINDOW (window),
2308 gtk_widget_get_screen (widget));
2310 gtk_signal_connect (GTK_OBJECT (window),
2312 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
2315 gtk_object_set_data_full (GTK_OBJECT (window),
2316 "testgtk-get-image-data",
2320 vbox = gtk_vbox_new (FALSE, 0);
2322 gtk_container_add (GTK_CONTAINER (window), vbox);
2324 sw = gtk_scrolled_window_new (NULL, NULL);
2325 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw),
2326 GTK_POLICY_AUTOMATIC,
2327 GTK_POLICY_AUTOMATIC);
2331 gtk_widget_set_usize (sw, 400, 400);
2333 src = gtk_drawing_area_new ();
2334 gtk_widget_set_usize (src, 10000, 10000);
2336 gtk_signal_connect (GTK_OBJECT (src),
2338 GTK_SIGNAL_FUNC (image_source_expose),
2343 gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (sw),
2346 gtk_box_pack_start (GTK_BOX (vbox),
2350 hbox = gtk_hbox_new (FALSE, 3);
2352 snap = gtk_widget_new (GTK_TYPE_IMAGE, NULL);
2356 sw = gtk_scrolled_window_new (NULL, NULL);
2357 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw),
2358 GTK_POLICY_AUTOMATIC,
2359 GTK_POLICY_AUTOMATIC);
2360 gtk_widget_set_usize (sw, 300, 300);
2362 gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (sw), snap);
2364 gtk_box_pack_end (GTK_BOX (hbox), sw, FALSE, FALSE, 5);
2366 button = gtk_button_new_with_label ("Get image from drawable");
2368 gtk_signal_connect (GTK_OBJECT (button),
2370 GTK_SIGNAL_FUNC (take_snapshot),
2373 gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, FALSE, 0);
2375 gtk_box_pack_end (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
2377 gtk_widget_show_all (window);
2385 sensitivity_toggled (GtkWidget *toggle,
2388 gtk_widget_set_sensitive (widget, GTK_TOGGLE_BUTTON (toggle)->active);
2392 create_sensitivity_control (GtkWidget *widget)
2396 button = gtk_toggle_button_new_with_label ("Sensitive");
2398 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button),
2399 GTK_WIDGET_IS_SENSITIVE (widget));
2401 gtk_signal_connect (GTK_OBJECT (button),
2403 GTK_SIGNAL_FUNC (sensitivity_toggled),
2406 gtk_widget_show_all (button);
2412 set_selectable_recursive (GtkWidget *widget,
2415 if (GTK_IS_CONTAINER (widget))
2420 children = gtk_container_children (GTK_CONTAINER (widget));
2424 set_selectable_recursive (tmp->data, setting);
2428 g_list_free (children);
2430 else if (GTK_IS_LABEL (widget))
2432 gtk_label_set_selectable (GTK_LABEL (widget), setting);
2437 selectable_toggled (GtkWidget *toggle,
2440 set_selectable_recursive (widget,
2441 GTK_TOGGLE_BUTTON (toggle)->active);
2445 create_selectable_control (GtkWidget *widget)
2449 button = gtk_toggle_button_new_with_label ("Selectable");
2451 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button),
2454 gtk_signal_connect (GTK_OBJECT (button),
2456 GTK_SIGNAL_FUNC (selectable_toggled),
2459 gtk_widget_show_all (button);
2464 void create_labels (GtkWidget *widget)
2466 static GtkWidget *window = NULL;
2475 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
2477 gtk_window_set_screen (GTK_WINDOW (window),
2478 gtk_widget_get_screen (widget));
2480 gtk_signal_connect (GTK_OBJECT (window), "destroy",
2481 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
2484 gtk_window_set_title (GTK_WINDOW (window), "Label");
2486 vbox = gtk_vbox_new (FALSE, 5);
2488 hbox = gtk_hbox_new (FALSE, 5);
2489 gtk_container_add (GTK_CONTAINER (window), vbox);
2491 gtk_box_pack_end (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
2493 button = create_sensitivity_control (hbox);
2495 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
2497 button = create_selectable_control (hbox);
2499 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
2501 vbox = gtk_vbox_new (FALSE, 5);
2503 gtk_box_pack_start (GTK_BOX (hbox), vbox, FALSE, FALSE, 0);
2504 gtk_container_set_border_width (GTK_CONTAINER (window), 5);
2506 frame = gtk_frame_new ("Normal Label");
2507 label = gtk_label_new ("This is a Normal label");
2508 gtk_container_add (GTK_CONTAINER (frame), label);
2509 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
2511 frame = gtk_frame_new ("Multi-line Label");
2512 label = gtk_label_new ("This is a Multi-line label.\nSecond line\nThird line");
2513 gtk_container_add (GTK_CONTAINER (frame), label);
2514 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
2516 frame = gtk_frame_new ("Left Justified Label");
2517 label = gtk_label_new ("This is a Left-Justified\nMulti-line label.\nThird line");
2518 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
2519 gtk_container_add (GTK_CONTAINER (frame), label);
2520 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
2522 frame = gtk_frame_new ("Right Justified Label");
2523 label = gtk_label_new ("This is a Right-Justified\nMulti-line label.\nFourth line, (j/k)");
2524 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_RIGHT);
2525 gtk_container_add (GTK_CONTAINER (frame), label);
2526 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
2528 frame = gtk_frame_new ("Internationalized Label");
2529 label = gtk_label_new (NULL);
2530 gtk_label_set_markup (GTK_LABEL (label),
2531 "French (Français) Bonjour, Salut\n"
2532 "Korean (한글) 안녕하세요, 안녕하십니까\n"
2533 "Russian (Русский) Здравствуйте!\n"
2534 "Chinese (Simplified) <span lang=\"zh-cn\">元气 开发</span>\n"
2535 "Chinese (Traditional) <span lang=\"zh-tw\">元氣 開發</span>\n"
2536 "Japanese <span lang=\"ja\">元気 開発</span>");
2537 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
2538 gtk_container_add (GTK_CONTAINER (frame), label);
2539 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
2541 frame = gtk_frame_new ("Bidirection Label");
2542 label = gtk_label_new ("Arabic السلام عليكم\n"
2544 gtk_widget_set_direction (label, GTK_TEXT_DIR_RTL);
2545 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_RIGHT);
2546 gtk_container_add (GTK_CONTAINER (frame), label);
2547 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
2549 vbox = gtk_vbox_new (FALSE, 5);
2550 gtk_box_pack_start (GTK_BOX (hbox), vbox, FALSE, FALSE, 0);
2551 frame = gtk_frame_new ("Line wrapped label");
2552 label = gtk_label_new ("This is an example of a line-wrapped label. It should not be taking "\
2553 "up the entire "/* big space to test spacing */\
2554 "width allocated to it, but automatically wraps the words to fit. "\
2555 "The time has come, for all good men, to come to the aid of their party. "\
2556 "The sixth sheik's six sheep's sick.\n"\
2557 " It supports multiple paragraphs correctly, and correctly adds "\
2558 "many extra spaces. ");
2560 gtk_label_set_line_wrap (GTK_LABEL (label), TRUE);
2561 gtk_container_add (GTK_CONTAINER (frame), label);
2562 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
2564 frame = gtk_frame_new ("Filled, wrapped label");
2565 label = gtk_label_new ("This is an example of a line-wrapped, filled label. It should be taking "\
2566 "up the entire width allocated to it. Here is a seneance to prove "\
2567 "my point. Here is another sentence. "\
2568 "Here comes the sun, do de do de do.\n"\
2569 " This is a new paragraph.\n"\
2570 " This is another newer, longer, better paragraph. It is coming to an end, "\
2572 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_FILL);
2573 gtk_label_set_line_wrap (GTK_LABEL (label), TRUE);
2574 gtk_container_add (GTK_CONTAINER (frame), label);
2575 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
2577 frame = gtk_frame_new ("Underlined label");
2578 label = gtk_label_new ("This label is underlined!\n"
2579 "This one is underlined (こんにちは) in quite a funky fashion");
2580 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
2581 gtk_label_set_pattern (GTK_LABEL (label), "_________________________ _ _________ _ _____ _ __ __ ___ ____ _____");
2582 gtk_container_add (GTK_CONTAINER (frame), label);
2583 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
2585 frame = gtk_frame_new ("Markup label");
2586 label = gtk_label_new (NULL);
2588 /* There's also a gtk_label_set_markup() without accel if you
2589 * don't have an accelerator key
2591 gtk_label_set_markup_with_mnemonic (GTK_LABEL (label),
2592 "This <span foreground=\"blue\" background=\"orange\">label</span> has "
2593 "<b>markup</b> _such as "
2594 "<big><i>Big Italics</i></big>\n"
2595 "<tt>Monospace font</tt>\n"
2596 "<u>Underline!</u>\n"
2598 "<span foreground=\"green\" background=\"red\">Ugly colors</span>\n"
2599 "and nothing on this line,\n"
2602 "or even on this one\n"
2603 "la <big>la <big>la <big>la <big>la</big></big></big></big>\n"
2604 "but this _word is <span foreground=\"purple\"><big>purple</big></span>\n"
2605 "<span underline=\"double\">We like <sup>superscript</sup> and <sub>subscript</sub> too</span>");
2607 g_assert (gtk_label_get_mnemonic_keyval (GTK_LABEL (label)) == GDK_s);
2609 gtk_container_add (GTK_CONTAINER (frame), label);
2610 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
2613 if (!GTK_WIDGET_VISIBLE (window))
2614 gtk_widget_show_all (window);
2616 gtk_widget_destroy (window);
2624 reparent_label (GtkWidget *widget,
2625 GtkWidget *new_parent)
2629 label = gtk_object_get_user_data (GTK_OBJECT (widget));
2631 gtk_widget_reparent (label, new_parent);
2635 set_parent_signal (GtkWidget *child,
2636 GtkWidget *old_parent,
2639 g_print ("set_parent for \"%s\": new parent: \"%s\", old parent: \"%s\", data: %d\n",
2640 gtk_type_name (GTK_OBJECT_TYPE (child)),
2641 child->parent ? gtk_type_name (GTK_OBJECT_TYPE (child->parent)) : "NULL",
2642 old_parent ? gtk_type_name (GTK_OBJECT_TYPE (old_parent)) : "NULL",
2643 GPOINTER_TO_INT (func_data));
2647 create_reparent (GtkWidget *widget)
2649 static GtkWidget *window = NULL;
2656 GtkWidget *separator;
2657 GtkWidget *event_box;
2661 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
2663 gtk_window_set_screen (GTK_WINDOW (window),
2664 gtk_widget_get_screen (widget));
2666 gtk_signal_connect (GTK_OBJECT (window), "destroy",
2667 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
2670 gtk_window_set_title (GTK_WINDOW (window), "reparent");
2671 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
2673 box1 = gtk_vbox_new (FALSE, 0);
2674 gtk_container_add (GTK_CONTAINER (window), box1);
2676 box2 = gtk_hbox_new (FALSE, 5);
2677 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
2678 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
2680 label = gtk_label_new ("Hello World");
2682 frame = gtk_frame_new ("Frame 1");
2683 gtk_box_pack_start (GTK_BOX (box2), frame, TRUE, TRUE, 0);
2685 box3 = gtk_vbox_new (FALSE, 5);
2686 gtk_container_set_border_width (GTK_CONTAINER (box3), 5);
2687 gtk_container_add (GTK_CONTAINER (frame), box3);
2689 button = gtk_button_new_with_label ("switch");
2690 gtk_object_set_user_data (GTK_OBJECT (button), label);
2691 gtk_box_pack_start (GTK_BOX (box3), button, FALSE, TRUE, 0);
2693 event_box = gtk_event_box_new ();
2694 gtk_box_pack_start (GTK_BOX (box3), event_box, FALSE, TRUE, 0);
2695 gtk_container_add (GTK_CONTAINER (event_box), label);
2697 gtk_signal_connect (GTK_OBJECT (button), "clicked",
2698 GTK_SIGNAL_FUNC(reparent_label),
2701 gtk_signal_connect (GTK_OBJECT (label),
2703 GTK_SIGNAL_FUNC (set_parent_signal),
2704 GINT_TO_POINTER (42));
2707 frame = gtk_frame_new ("Frame 2");
2708 gtk_box_pack_start (GTK_BOX (box2), frame, TRUE, TRUE, 0);
2710 box3 = gtk_vbox_new (FALSE, 5);
2711 gtk_container_set_border_width (GTK_CONTAINER (box3), 5);
2712 gtk_container_add (GTK_CONTAINER (frame), box3);
2714 button = gtk_button_new_with_label ("switch");
2715 gtk_object_set_user_data (GTK_OBJECT (button), label);
2716 gtk_box_pack_start (GTK_BOX (box3), button, FALSE, TRUE, 0);
2718 event_box = gtk_event_box_new ();
2719 gtk_box_pack_start (GTK_BOX (box3), event_box, FALSE, TRUE, 0);
2721 gtk_signal_connect (GTK_OBJECT (button), "clicked",
2722 GTK_SIGNAL_FUNC(reparent_label),
2725 separator = gtk_hseparator_new ();
2726 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
2728 box2 = gtk_vbox_new (FALSE, 10);
2729 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
2730 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
2732 button = gtk_button_new_with_label ("close");
2733 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
2734 GTK_SIGNAL_FUNC(gtk_widget_destroy),
2735 GTK_OBJECT (window));
2736 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
2737 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
2738 gtk_widget_grab_default (button);
2741 if (!GTK_WIDGET_VISIBLE (window))
2742 gtk_widget_show_all (window);
2744 gtk_widget_destroy (window);
2750 gint upositionx = 0;
2751 gint upositiony = 0;
2754 uposition_configure (GtkWidget *window)
2760 lx = gtk_object_get_data (GTK_OBJECT (window), "x");
2761 ly = gtk_object_get_data (GTK_OBJECT (window), "y");
2763 gdk_window_get_root_origin (window->window, &upositionx, &upositiony);
2764 sprintf (buffer, "%d", upositionx);
2765 gtk_label_set_text (lx, buffer);
2766 sprintf (buffer, "%d", upositiony);
2767 gtk_label_set_text (ly, buffer);
2773 uposition_stop_configure (GtkToggleButton *toggle,
2777 gtk_signal_handler_block_by_func (window, GTK_SIGNAL_FUNC (uposition_configure), NULL);
2779 gtk_signal_handler_unblock_by_func (window, GTK_SIGNAL_FUNC (uposition_configure), NULL);
2783 create_saved_position (GtkWidget *widget)
2785 static GtkWidget *window = NULL;
2790 GtkWidget *main_vbox;
2798 window = g_object_connect (gtk_widget_new (GTK_TYPE_WINDOW,
2799 "type", GTK_WINDOW_TOPLEVEL,
2802 "title", "Saved Position",
2804 "signal::configure_event", uposition_configure, NULL,
2807 gtk_window_set_screen (GTK_WINDOW (window),
2808 gtk_widget_get_screen (widget));
2811 gtk_signal_connect (GTK_OBJECT (window), "destroy",
2812 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
2815 main_vbox = gtk_vbox_new (FALSE, 5);
2816 gtk_container_set_border_width (GTK_CONTAINER (main_vbox), 0);
2817 gtk_container_add (GTK_CONTAINER (window), main_vbox);
2820 gtk_widget_new (gtk_vbox_get_type (),
2821 "GtkBox::homogeneous", FALSE,
2822 "GtkBox::spacing", 5,
2823 "GtkContainer::border_width", 10,
2824 "GtkWidget::parent", main_vbox,
2825 "GtkWidget::visible", TRUE,
2826 "child", g_object_connect (gtk_widget_new (GTK_TYPE_TOGGLE_BUTTON,
2827 "label", "Stop Events",
2831 "signal::clicked", uposition_stop_configure, window,
2835 hbox = gtk_hbox_new (FALSE, 0);
2836 gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
2837 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0);
2839 label = gtk_label_new ("X Origin : ");
2840 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
2841 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
2843 x_label = gtk_label_new ("");
2844 gtk_box_pack_start (GTK_BOX (hbox), x_label, TRUE, TRUE, 0);
2845 gtk_object_set_data (GTK_OBJECT (window), "x", x_label);
2847 hbox = gtk_hbox_new (FALSE, 0);
2848 gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
2849 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0);
2851 label = gtk_label_new ("Y Origin : ");
2852 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
2853 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
2855 y_label = gtk_label_new ("");
2856 gtk_box_pack_start (GTK_BOX (hbox), y_label, TRUE, TRUE, 0);
2857 gtk_object_set_data (GTK_OBJECT (window), "y", y_label);
2860 gtk_widget_new (gtk_hseparator_get_type (),
2861 "GtkWidget::visible", TRUE,
2863 gtk_box_pack_start (GTK_BOX (main_vbox), any, FALSE, TRUE, 0);
2865 hbox = gtk_hbox_new (FALSE, 0);
2866 gtk_container_set_border_width (GTK_CONTAINER (hbox), 10);
2867 gtk_box_pack_start (GTK_BOX (main_vbox), hbox, FALSE, TRUE, 0);
2869 button = gtk_button_new_with_label ("Close");
2870 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
2871 GTK_SIGNAL_FUNC (gtk_widget_destroy),
2872 GTK_OBJECT (window));
2873 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
2874 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
2875 gtk_widget_grab_default (button);
2877 gtk_widget_show_all (window);
2880 gtk_widget_destroy (window);
2888 create_pixmap (GtkWidget *widget)
2890 static GtkWidget *window = NULL;
2896 GtkWidget *separator;
2897 GtkWidget *pixmapwid;
2901 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
2903 gtk_window_set_screen (GTK_WINDOW (window),
2904 gtk_widget_get_screen (widget));
2906 gtk_signal_connect (GTK_OBJECT (window), "destroy",
2907 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
2910 gtk_window_set_title (GTK_WINDOW (window), "GtkPixmap");
2911 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
2912 gtk_widget_realize(window);
2914 box1 = gtk_vbox_new (FALSE, 0);
2915 gtk_container_add (GTK_CONTAINER (window), box1);
2917 box2 = gtk_vbox_new (FALSE, 10);
2918 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
2919 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
2921 button = gtk_button_new ();
2922 gtk_box_pack_start (GTK_BOX (box2), button, FALSE, FALSE, 0);
2924 pixmapwid = new_pixmap ("test.xpm", window->window, NULL);
2926 label = gtk_label_new ("Pixmap\ntest");
2927 box3 = gtk_hbox_new (FALSE, 0);
2928 gtk_container_set_border_width (GTK_CONTAINER (box3), 2);
2929 gtk_container_add (GTK_CONTAINER (box3), pixmapwid);
2930 gtk_container_add (GTK_CONTAINER (box3), label);
2931 gtk_container_add (GTK_CONTAINER (button), box3);
2933 button = gtk_button_new ();
2934 gtk_box_pack_start (GTK_BOX (box2), button, FALSE, FALSE, 0);
2936 pixmapwid = new_pixmap ("test.xpm", window->window, NULL);
2938 label = gtk_label_new ("Pixmap\ntest");
2939 box3 = gtk_hbox_new (FALSE, 0);
2940 gtk_container_set_border_width (GTK_CONTAINER (box3), 2);
2941 gtk_container_add (GTK_CONTAINER (box3), pixmapwid);
2942 gtk_container_add (GTK_CONTAINER (box3), label);
2943 gtk_container_add (GTK_CONTAINER (button), box3);
2945 gtk_widget_set_sensitive (button, FALSE);
2947 separator = gtk_hseparator_new ();
2948 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
2950 box2 = gtk_vbox_new (FALSE, 10);
2951 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
2952 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
2954 button = gtk_button_new_with_label ("close");
2955 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
2956 GTK_SIGNAL_FUNC(gtk_widget_destroy),
2957 GTK_OBJECT (window));
2958 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
2959 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
2960 gtk_widget_grab_default (button);
2963 if (!GTK_WIDGET_VISIBLE (window))
2964 gtk_widget_show_all (window);
2966 gtk_widget_destroy (window);
2970 tips_query_widget_entered (GtkTipsQuery *tips_query,
2972 const gchar *tip_text,
2973 const gchar *tip_private,
2976 if (GTK_TOGGLE_BUTTON (toggle)->active)
2978 gtk_label_set_text (GTK_LABEL (tips_query), tip_text ? "There is a Tip!" : "There is no Tip!");
2979 /* don't let GtkTipsQuery reset its label */
2980 gtk_signal_emit_stop_by_name (GTK_OBJECT (tips_query), "widget_entered");
2985 tips_query_widget_selected (GtkWidget *tips_query,
2987 const gchar *tip_text,
2988 const gchar *tip_private,
2989 GdkEventButton *event,
2993 g_print ("Help \"%s\" requested for <%s>\n",
2994 tip_private ? tip_private : "None",
2995 gtk_type_name (GTK_OBJECT_TYPE (widget)));
3000 create_tooltips (GtkWidget *widget)
3002 static GtkWidget *window = NULL;
3009 GtkWidget *tips_query;
3010 GtkWidget *separator;
3011 GtkTooltips *tooltips;
3016 gtk_widget_new (gtk_window_get_type (),
3017 "GtkWindow::type", GTK_WINDOW_TOPLEVEL,
3018 "GtkContainer::border_width", 0,
3019 "GtkWindow::title", "Tooltips",
3020 "GtkWindow::allow_shrink", TRUE,
3021 "GtkWindow::allow_grow", FALSE,
3022 "GtkWindow::auto_shrink", TRUE,
3023 "GtkWidget::width", 200,
3026 gtk_window_set_screen (GTK_WINDOW (window),
3027 gtk_widget_get_screen (widget));
3029 gtk_signal_connect (GTK_OBJECT (window), "destroy",
3030 GTK_SIGNAL_FUNC (destroy_tooltips),
3033 tooltips=gtk_tooltips_new();
3034 g_object_ref (tooltips);
3035 gtk_object_sink (GTK_OBJECT (tooltips));
3036 gtk_object_set_data (GTK_OBJECT (window), "tooltips", tooltips);
3038 box1 = gtk_vbox_new (FALSE, 0);
3039 gtk_container_add (GTK_CONTAINER (window), box1);
3041 box2 = gtk_vbox_new (FALSE, 10);
3042 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
3043 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
3045 button = gtk_toggle_button_new_with_label ("button1");
3046 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
3048 gtk_tooltips_set_tip (tooltips,button,"This is button 1", "ContextHelp/buttons/1");
3050 button = gtk_toggle_button_new_with_label ("button2");
3051 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
3053 gtk_tooltips_set_tip (tooltips,
3055 "This is button 2. This is also a really long tooltip which probably won't fit on a single line and will therefore need to be wrapped. Hopefully the wrapping will work correctly.",
3056 "ContextHelp/buttons/2_long");
3058 toggle = gtk_toggle_button_new_with_label ("Override TipsQuery Label");
3059 gtk_box_pack_start (GTK_BOX (box2), toggle, TRUE, TRUE, 0);
3061 gtk_tooltips_set_tip (tooltips, toggle, "Toggle TipsQuery view.", "Hi msw! ;)");
3064 gtk_widget_new (gtk_vbox_get_type (),
3065 "homogeneous", FALSE,
3071 tips_query = gtk_tips_query_new ();
3074 gtk_widget_new (gtk_button_get_type (),
3079 g_object_connect (G_OBJECT (button),
3080 "swapped_signal::clicked", gtk_tips_query_start_query, tips_query,
3082 gtk_box_set_child_packing (GTK_BOX (box3), button, FALSE, FALSE, 0, GTK_PACK_START);
3083 gtk_tooltips_set_tip (tooltips,
3085 "Start the Tooltips Inspector",
3086 "ContextHelp/buttons/?");
3089 g_object_set (g_object_connect (tips_query,
3090 "signal::widget_entered", tips_query_widget_entered, toggle,
3091 "signal::widget_selected", tips_query_widget_selected, NULL,
3098 frame = gtk_widget_new (gtk_frame_get_type (),
3099 "label", "ToolTips Inspector",
3100 "label_xalign", (double) 0.5,
3106 gtk_box_set_child_packing (GTK_BOX (box2), frame, TRUE, TRUE, 10, GTK_PACK_START);
3108 separator = gtk_hseparator_new ();
3109 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
3111 box2 = gtk_vbox_new (FALSE, 10);
3112 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
3113 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
3115 button = gtk_button_new_with_label ("close");
3116 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
3117 GTK_SIGNAL_FUNC(gtk_widget_destroy),
3118 GTK_OBJECT (window));
3119 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
3120 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
3121 gtk_widget_grab_default (button);
3123 gtk_tooltips_set_tip (tooltips, button, "Push this button to close window", "ContextHelp/buttons/Close");
3126 if (!GTK_WIDGET_VISIBLE (window))
3127 gtk_widget_show_all (window);
3129 gtk_widget_destroy (window);
3137 pack_image (GtkWidget *box,
3141 gtk_box_pack_start (GTK_BOX (box),
3142 gtk_label_new (text),
3145 gtk_box_pack_start (GTK_BOX (box),
3151 create_image (GtkWidget *widget)
3153 static GtkWidget *window = NULL;
3161 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
3163 gtk_window_set_screen (GTK_WINDOW (window),
3164 gtk_widget_get_screen (widget));
3166 /* this is bogus for testing drawing when allocation < request,
3167 * don't copy into real code
3169 gtk_window_set_policy (GTK_WINDOW (window), TRUE, TRUE, FALSE);
3171 gtk_signal_connect (GTK_OBJECT (window), "destroy",
3172 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
3175 vbox = gtk_vbox_new (FALSE, 5);
3177 gtk_container_add (GTK_CONTAINER (window), vbox);
3179 pack_image (vbox, "Stock Warning Dialog",
3180 gtk_image_new_from_stock (GTK_STOCK_DIALOG_WARNING,
3181 GTK_ICON_SIZE_DIALOG));
3183 pixmap = gdk_pixmap_colormap_create_from_xpm_d (NULL,
3184 gtk_widget_get_colormap (window),
3189 pack_image (vbox, "Pixmap",
3190 gtk_image_new_from_pixmap (pixmap, mask));
3193 if (!GTK_WIDGET_VISIBLE (window))
3194 gtk_widget_show_all (window);
3196 gtk_widget_destroy (window);
3204 create_menu (GdkScreen *screen, gint depth, gint length, gboolean tearoff)
3207 GtkWidget *menuitem;
3216 menu = gtk_menu_new ();
3217 gtk_menu_set_screen (GTK_MENU (menu), screen);
3223 menuitem = gtk_tearoff_menu_item_new ();
3224 gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem);
3225 gtk_widget_show (menuitem);
3228 image = gtk_image_new_from_stock (GTK_STOCK_OPEN,
3229 GTK_ICON_SIZE_MENU);
3230 gtk_widget_show (image);
3231 menuitem = gtk_image_menu_item_new_with_label ("Image item");
3232 gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menuitem), image);
3233 gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem);
3234 gtk_widget_show (menuitem);
3236 for (i = 0, j = 1; i < length; i++, j++)
3238 sprintf (buf, "item %2d - %d", depth, j);
3240 menuitem = gtk_radio_menu_item_new_with_label (group, buf);
3241 group = gtk_radio_menu_item_group (GTK_RADIO_MENU_ITEM (menuitem));
3244 gtk_check_menu_item_set_show_toggle (GTK_CHECK_MENU_ITEM (menuitem), TRUE);
3246 gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem);
3247 gtk_widget_show (menuitem);
3249 gtk_widget_set_sensitive (menuitem, FALSE);
3252 gtk_check_menu_item_set_inconsistent (GTK_CHECK_MENU_ITEM (menuitem),
3256 gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem),
3257 create_menu (screen, depth - 1, 5, TRUE));
3264 create_menus (GtkWidget *widget)
3266 static GtkWidget *window = NULL;
3270 GtkWidget *optionmenu;
3271 GtkWidget *separator;
3277 GtkWidget *menuitem;
3278 GtkAccelGroup *accel_group;
3280 GdkScreen *screen = gtk_widget_get_screen (widget);
3282 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
3284 gtk_window_set_screen (GTK_WINDOW (window), screen);
3286 gtk_signal_connect (GTK_OBJECT (window), "destroy",
3287 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
3289 gtk_signal_connect (GTK_OBJECT (window), "delete-event",
3290 GTK_SIGNAL_FUNC (gtk_true),
3293 accel_group = gtk_accel_group_new ();
3294 gtk_window_add_accel_group (GTK_WINDOW (window), accel_group);
3296 gtk_window_set_title (GTK_WINDOW (window), "menus");
3297 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
3300 box1 = gtk_vbox_new (FALSE, 0);
3301 gtk_container_add (GTK_CONTAINER (window), box1);
3302 gtk_widget_show (box1);
3304 menubar = gtk_menu_bar_new ();
3305 gtk_box_pack_start (GTK_BOX (box1), menubar, FALSE, TRUE, 0);
3306 gtk_widget_show (menubar);
3308 menu = create_menu (screen, 2, 50, TRUE);
3310 menuitem = gtk_menu_item_new_with_label ("test\nline2");
3311 gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem), menu);
3312 gtk_menu_bar_append (GTK_MENU_BAR (menubar), menuitem);
3313 gtk_widget_show (menuitem);
3315 menuitem = gtk_menu_item_new_with_label ("foo");
3316 gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem), create_menu (screen, 3, 5, TRUE));
3317 gtk_menu_bar_append (GTK_MENU_BAR (menubar), menuitem);
3318 gtk_widget_show (menuitem);
3320 image = gtk_image_new_from_stock (GTK_STOCK_HELP,
3321 GTK_ICON_SIZE_MENU);
3322 gtk_widget_show (image);
3323 menuitem = gtk_image_menu_item_new_with_label ("Help");
3324 gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menuitem), image);
3325 gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem), create_menu (screen, 4, 5, TRUE));
3326 gtk_menu_item_set_right_justified (GTK_MENU_ITEM (menuitem), TRUE);
3327 gtk_menu_bar_append (GTK_MENU_BAR (menubar), menuitem);
3328 gtk_widget_show (menuitem);
3330 menubar = gtk_menu_bar_new ();
3331 gtk_box_pack_start (GTK_BOX (box1), menubar, FALSE, TRUE, 0);
3332 gtk_widget_show (menubar);
3334 menu = create_menu (screen, 2, 10, TRUE);
3336 menuitem = gtk_menu_item_new_with_label ("Second menu bar");
3337 gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem), menu);
3338 gtk_menu_bar_append (GTK_MENU_BAR (menubar), menuitem);
3339 gtk_widget_show (menuitem);
3341 box2 = gtk_vbox_new (FALSE, 10);
3342 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
3343 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
3344 gtk_widget_show (box2);
3346 menu = create_menu (screen, 1, 5, FALSE);
3347 gtk_menu_set_accel_group (GTK_MENU (menu), accel_group);
3349 menuitem = gtk_image_menu_item_new_from_stock (GTK_STOCK_NEW, accel_group);
3350 gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem);
3351 gtk_widget_show (menuitem);
3353 menuitem = gtk_check_menu_item_new_with_label ("Accelerate Me");
3354 gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem);
3355 gtk_widget_show (menuitem);
3356 gtk_widget_add_accelerator (menuitem,
3362 menuitem = gtk_check_menu_item_new_with_label ("Accelerator Locked");
3363 gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem);
3364 gtk_widget_show (menuitem);
3365 gtk_widget_add_accelerator (menuitem,
3370 GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
3371 menuitem = gtk_check_menu_item_new_with_label ("Accelerators Frozen");
3372 gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem);
3373 gtk_widget_show (menuitem);
3374 gtk_widget_add_accelerator (menuitem,
3380 gtk_widget_add_accelerator (menuitem,
3387 optionmenu = gtk_option_menu_new ();
3388 gtk_option_menu_set_menu (GTK_OPTION_MENU (optionmenu), menu);
3389 gtk_option_menu_set_history (GTK_OPTION_MENU (optionmenu), 3);
3390 gtk_box_pack_start (GTK_BOX (box2), optionmenu, TRUE, TRUE, 0);
3391 gtk_widget_show (optionmenu);
3393 separator = gtk_hseparator_new ();
3394 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
3395 gtk_widget_show (separator);
3397 box2 = gtk_vbox_new (FALSE, 10);
3398 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
3399 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
3400 gtk_widget_show (box2);
3402 button = gtk_button_new_with_label ("close");
3403 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
3404 GTK_SIGNAL_FUNC(gtk_widget_destroy),
3405 GTK_OBJECT (window));
3406 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
3407 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
3408 gtk_widget_grab_default (button);
3409 gtk_widget_show (button);
3412 if (!GTK_WIDGET_VISIBLE (window))
3413 gtk_widget_show (window);
3415 gtk_widget_destroy (window);
3419 gtk_ifactory_cb (gpointer callback_data,
3420 guint callback_action,
3423 g_message ("ItemFactory: activated \"%s\"", gtk_item_factory_path_from_widget (widget));
3426 /* This file was automatically generated by the make-inline-pixbuf program.
3427 * It contains inline RGB image data.
3429 static const guchar apple[] =
3431 /* File magic (1197763408) */
3432 0x47, 0x64, 0x6b, 0x50,
3433 /* Format of following stuff (0) */
3434 0x00, 0x00, 0x00, 0x00,
3435 /* Rowstride (64) */
3436 0x00, 0x00, 0x00, 0x40,
3438 0x00, 0x00, 0x00, 0x10,
3440 0x00, 0x00, 0x00, 0x10,
3441 /* Has an alpha channel (TRUE) */
3443 /* Colorspace (0 == RGB, no other options implemented) (0) */
3444 0x00, 0x00, 0x00, 0x00,
3445 /* Number of channels (4) */
3446 0x00, 0x00, 0x00, 0x04,
3447 /* Bits per sample (8) */
3448 0x00, 0x00, 0x00, 0x08,
3450 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
3451 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
3452 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
3453 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
3454 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
3455 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
3456 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
3457 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x16, 0x14, 0x0f, 0x04,
3458 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
3459 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
3460 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
3461 0x00, 0x00, 0x00, 0x00, 0x61, 0x6d, 0x5b, 0x2b, 0x6e, 0x7c, 0x61, 0xd9,
3462 0x71, 0x80, 0x63, 0xd7, 0x5f, 0x6b, 0x5b, 0x35, 0x00, 0x00, 0x00, 0x00,
3463 0x3a, 0x35, 0x28, 0x8f, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00, 0x00,
3464 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
3465 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
3466 0x00, 0x00, 0x00, 0x00, 0x60, 0x6c, 0x5c, 0x07, 0x6d, 0x7b, 0x61, 0xd8,
3467 0x75, 0x84, 0x65, 0xf6, 0x76, 0x86, 0x66, 0xf7, 0x6a, 0x77, 0x60, 0xec,
3468 0x5e, 0x6a, 0x58, 0x47, 0x1c, 0x1a, 0x13, 0xa2, 0x4b, 0x47, 0x30, 0x07,
3469 0x55, 0x4e, 0x33, 0x21, 0x48, 0x3e, 0x2a, 0x08, 0xd0, 0xb8, 0x84, 0x00,
3470 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
3471 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x69, 0x76, 0x5f, 0x74,
3472 0x75, 0x84, 0x65, 0xf3, 0x67, 0x75, 0x5e, 0xc4, 0x69, 0x62, 0x55, 0x75,
3473 0x94, 0x50, 0x50, 0x69, 0x75, 0x5c, 0x52, 0xb2, 0x69, 0x38, 0x34, 0xa2,
3474 0xa7, 0x5b, 0x53, 0xea, 0xa3, 0x52, 0x4f, 0xff, 0x90, 0x47, 0x42, 0xfa,
3475 0x76, 0x44, 0x36, 0xb9, 0x59, 0x38, 0x29, 0x3c, 0x00, 0x00, 0x00, 0x00,
3476 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5f, 0x6b, 0x5a, 0x09,
3477 0x69, 0x76, 0x5e, 0xb0, 0x5f, 0x6b, 0x59, 0x57, 0x9a, 0x4b, 0x4d, 0x5b,
3478 0xb8, 0x5f, 0x63, 0xfa, 0xcc, 0x7d, 0x7e, 0xff, 0xc5, 0x69, 0x68, 0xff,
3479 0xc7, 0x6b, 0x67, 0xff, 0xc5, 0x6f, 0x67, 0xff, 0xba, 0x5e, 0x5a, 0xff,
3480 0xb1, 0x4d, 0x4d, 0xff, 0x92, 0x4b, 0x42, 0xff, 0x6a, 0x3e, 0x30, 0xfc,
3481 0x5c, 0x3b, 0x27, 0x6d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
3482 0x5d, 0x69, 0x57, 0x09, 0x5d, 0x69, 0x57, 0x09, 0x92, 0x47, 0x46, 0x1e,
3483 0xba, 0x65, 0x64, 0xf4, 0xe7, 0xbf, 0xc0, 0xff, 0xdf, 0xa5, 0xa3, 0xff,
3484 0xd4, 0x84, 0x81, 0xff, 0xd1, 0x7c, 0x76, 0xff, 0xc9, 0x78, 0x6d, 0xff,
3485 0xbb, 0x6a, 0x5d, 0xff, 0xb3, 0x5a, 0x52, 0xff, 0x9f, 0x4b, 0x47, 0xff,
3486 0x78, 0x45, 0x35, 0xff, 0x5f, 0x3c, 0x28, 0xfa, 0x53, 0x5a, 0x38, 0x24,
3487 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
3488 0xa1, 0x54, 0x4d, 0x8c, 0xcf, 0x8e, 0x89, 0xff, 0xe3, 0xb1, 0xae, 0xff,
3489 0xd8, 0x94, 0x8e, 0xff, 0xd3, 0x8a, 0x82, 0xff, 0xcf, 0x80, 0x76, 0xff,
3490 0xc4, 0x75, 0x67, 0xff, 0xb7, 0x6c, 0x5c, 0xff, 0xab, 0x5e, 0x51, 0xff,
3491 0x9c, 0x4c, 0x46, 0xff, 0x7e, 0x4a, 0x3a, 0xff, 0x5c, 0x3c, 0x26, 0xff,
3492 0x58, 0x3d, 0x28, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
3493 0x00, 0x00, 0x00, 0x00, 0xa2, 0x59, 0x4f, 0xc3, 0xcd, 0x8e, 0x88, 0xff,
3494 0xd3, 0x93, 0x8c, 0xff, 0xd0, 0x8c, 0x83, 0xff, 0xcc, 0x84, 0x79, 0xff,
3495 0xc7, 0x7c, 0x6e, 0xff, 0xbc, 0x73, 0x61, 0xff, 0xb1, 0x6b, 0x59, 0xff,
3496 0xa3, 0x5f, 0x4f, 0xff, 0x93, 0x50, 0x44, 0xff, 0x78, 0x48, 0x35, 0xff,
3497 0x59, 0x3b, 0x25, 0xff, 0x4f, 0x3d, 0x28, 0x4f, 0x00, 0x00, 0x00, 0x00,
3498 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9b, 0x5b, 0x4d, 0xbc,
3499 0xbd, 0x7e, 0x72, 0xff, 0xc6, 0x86, 0x7a, 0xff, 0xc5, 0x7f, 0x72, 0xff,
3500 0xc2, 0x7b, 0x6c, 0xff, 0xbf, 0x77, 0x63, 0xff, 0xb7, 0x72, 0x5b, 0xff,
3501 0xa9, 0x6b, 0x53, 0xff, 0x9a, 0x60, 0x4b, 0xff, 0x8b, 0x56, 0x41, 0xff,
3502 0x6a, 0x44, 0x2e, 0xff, 0x53, 0x38, 0x21, 0xfd, 0x42, 0x4b, 0x2e, 0x1a,
3503 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
3504 0x8e, 0x57, 0x48, 0x6e, 0xa6, 0x6b, 0x5a, 0xff, 0xb3, 0x74, 0x62, 0xff,
3505 0xb8, 0x75, 0x61, 0xff, 0xba, 0x76, 0x61, 0xff, 0xb7, 0x74, 0x5c, 0xff,
3506 0xae, 0x6e, 0x54, 0xff, 0x9f, 0x67, 0x4c, 0xff, 0x90, 0x5d, 0x43, 0xff,
3507 0x79, 0x4d, 0x38, 0xff, 0x5c, 0x3d, 0x25, 0xff, 0x50, 0x39, 0x23, 0xb8,
3508 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
3509 0x00, 0x00, 0x00, 0x00, 0x78, 0x52, 0x43, 0x07, 0x92, 0x5c, 0x47, 0xdc,
3510 0x9e, 0x64, 0x4e, 0xff, 0xa8, 0x6b, 0x52, 0xff, 0xaa, 0x6d, 0x53, 0xff,
3511 0xa7, 0x6d, 0x50, 0xff, 0x9c, 0x67, 0x4a, 0xff, 0x8e, 0x5d, 0x41, 0xff,
3512 0x7d, 0x54, 0x3a, 0xff, 0x6a, 0x4b, 0x32, 0xff, 0x51, 0x39, 0x23, 0xff,
3513 0x28, 0x20, 0x12, 0x77, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x01,
3514 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
3515 0x6f, 0x4a, 0x37, 0x2a, 0x81, 0x54, 0x3d, 0xec, 0x8b, 0x5a, 0x41, 0xff,
3516 0x8b, 0x5a, 0x3f, 0xff, 0x85, 0x56, 0x3c, 0xff, 0x7d, 0x52, 0x38, 0xff,
3517 0x77, 0x51, 0x33, 0xff, 0x6f, 0x4e, 0x34, 0xff, 0x5f, 0x45, 0x2c, 0xff,
3518 0x2e, 0x21, 0x14, 0xff, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x92,
3519 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00,
3520 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x11, 0x0b, 0x08, 0xb4,
3521 0x50, 0x37, 0x25, 0xfe, 0x6d, 0x49, 0x2f, 0xff, 0x52, 0x37, 0x22, 0xff,
3522 0x50, 0x37, 0x21, 0xff, 0x66, 0x45, 0x2b, 0xff, 0x60, 0x46, 0x2c, 0xff,
3523 0x2d, 0x22, 0x16, 0xff, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0xd2,
3524 0x00, 0x00, 0x00, 0x63, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00,
3525 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,
3526 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x64, 0x09, 0x0a, 0x07, 0xa4,
3527 0x00, 0x00, 0x00, 0xbd, 0x00, 0x00, 0x00, 0xbe, 0x00, 0x00, 0x00, 0xc4,
3528 0x00, 0x00, 0x00, 0xb8, 0x00, 0x00, 0x00, 0x9d, 0x00, 0x00, 0x00, 0x6c,
3529 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00,
3530 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
3531 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
3532 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x0d,
3533 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x06,
3534 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
3535 0x00, 0x00, 0x00, 0x00
3540 dump_accels (gpointer callback_data,
3541 guint callback_action,
3544 gtk_accel_map_save_fd (1 /* stdout */);
3547 static GtkItemFactoryEntry menu_items[] =
3549 { "/_File", NULL, 0, 0, "<Branch>" },
3550 { "/File/tearoff1", NULL, gtk_ifactory_cb, 0, "<Tearoff>" },
3551 { "/File/_New", NULL, gtk_ifactory_cb, 0, "<StockItem>", GTK_STOCK_NEW },
3552 { "/File/_Open", NULL, gtk_ifactory_cb, 0, "<StockItem>", GTK_STOCK_OPEN },
3553 { "/File/_Save", NULL, gtk_ifactory_cb, 0, "<StockItem>", GTK_STOCK_SAVE },
3554 { "/File/Save _As...", "<control>A", gtk_ifactory_cb, 0, "<StockItem>", GTK_STOCK_SAVE },
3555 { "/File/_Dump \"_Accels\"", NULL, dump_accels, 0 },
3556 { "/File/\\/Test__Escaping/And\\/\n\tWei\\\\rdly",
3557 NULL, gtk_ifactory_cb, 0 },
3558 { "/File/sep1", NULL, gtk_ifactory_cb, 0, "<Separator>" },
3559 { "/File/_Quit", NULL, gtk_ifactory_cb, 0, "<StockItem>", GTK_STOCK_QUIT },
3561 { "/_Preferences", NULL, 0, 0, "<Branch>" },
3562 { "/_Preferences/_Color", NULL, 0, 0, "<Branch>" },
3563 { "/_Preferences/Color/_Red", NULL, gtk_ifactory_cb, 0, "<RadioItem>" },
3564 { "/_Preferences/Color/_Green", NULL, gtk_ifactory_cb, 0, "/Preferences/Color/Red" },
3565 { "/_Preferences/Color/_Blue", NULL, gtk_ifactory_cb, 0, "/Preferences/Color/Red" },
3566 { "/_Preferences/_Shape", NULL, 0, 0, "<Branch>" },
3567 { "/_Preferences/Shape/_Square", NULL, gtk_ifactory_cb, 0, "<RadioItem>" },
3568 { "/_Preferences/Shape/_Rectangle", NULL, gtk_ifactory_cb, 0, "/Preferences/Shape/Square" },
3569 { "/_Preferences/Shape/_Oval", NULL, gtk_ifactory_cb, 0, "/Preferences/Shape/Rectangle" },
3570 { "/_Preferences/Shape/_Rectangle", NULL, gtk_ifactory_cb, 0, "/Preferences/Shape/Square" },
3571 { "/_Preferences/Shape/_Oval", NULL, gtk_ifactory_cb, 0, "/Preferences/Shape/Rectangle" },
3572 { "/_Preferences/Shape/_Image", NULL, gtk_ifactory_cb, 0, "<ImageItem>", apple },
3574 /* For testing deletion of menus */
3575 { "/_Preferences/Should_NotAppear", NULL, 0, 0, "<Branch>" },
3576 { "/Preferences/ShouldNotAppear/SubItem1", NULL, gtk_ifactory_cb, 0 },
3577 { "/Preferences/ShouldNotAppear/SubItem2", NULL, gtk_ifactory_cb, 0 },
3579 { "/_Help", NULL, 0, 0, "<LastBranch>" },
3580 { "/Help/_Help", NULL, gtk_ifactory_cb, 0, "<StockItem>", GTK_STOCK_HELP},
3581 { "/Help/_About", NULL, gtk_ifactory_cb, 0 },
3585 static int nmenu_items = sizeof (menu_items) / sizeof (menu_items[0]);
3588 create_item_factory (GtkWidget *widget)
3590 static GtkWidget *window = NULL;
3596 GtkWidget *separator;
3599 GtkAccelGroup *accel_group;
3600 GtkItemFactory *item_factory;
3601 GtkTooltips *tooltips;
3603 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
3605 gtk_window_set_screen (GTK_WINDOW (window),
3606 gtk_widget_get_screen (widget));
3608 gtk_signal_connect (GTK_OBJECT (window), "destroy",
3609 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
3611 gtk_signal_connect (GTK_OBJECT (window), "delete-event",
3612 GTK_SIGNAL_FUNC (gtk_true),
3615 accel_group = gtk_accel_group_new ();
3616 item_factory = gtk_item_factory_new (GTK_TYPE_MENU_BAR, "<main>", accel_group);
3617 gtk_object_set_data_full (GTK_OBJECT (window),
3620 (GtkDestroyNotify) gtk_object_unref);
3621 gtk_window_add_accel_group (GTK_WINDOW (window), accel_group);
3622 gtk_window_set_title (GTK_WINDOW (window), "Item Factory");
3623 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
3624 gtk_item_factory_create_items (item_factory, nmenu_items, menu_items, NULL);
3626 /* preselect /Preferences/Shape/Oval over the other radios
3628 gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (gtk_item_factory_get_item (item_factory,
3629 "/Preferences/Shape/Oval")),
3632 /* Test how tooltips (ugh) work on menu items
3634 tooltips = gtk_tooltips_new ();
3635 g_object_ref (tooltips);
3636 gtk_object_sink (GTK_OBJECT (tooltips));
3637 g_object_set_data_full (G_OBJECT (window), "testgtk-tooltips",
3638 tooltips, (GDestroyNotify)g_object_unref);
3640 gtk_tooltips_set_tip (tooltips, gtk_item_factory_get_item (item_factory, "/File/New"),
3641 "Create a new file", NULL);
3642 gtk_tooltips_set_tip (tooltips, gtk_item_factory_get_item (item_factory, "/File/Open"),
3643 "Open a file", NULL);
3644 gtk_tooltips_set_tip (tooltips, gtk_item_factory_get_item (item_factory, "/File/Save"),
3646 gtk_tooltips_set_tip (tooltips, gtk_item_factory_get_item (item_factory, "/Preferences/Color"),
3647 "Modify color", NULL);
3649 box1 = gtk_vbox_new (FALSE, 0);
3650 gtk_container_add (GTK_CONTAINER (window), box1);
3652 gtk_box_pack_start (GTK_BOX (box1),
3653 gtk_item_factory_get_widget (item_factory, "<main>"),
3656 label = gtk_label_new ("Type\n<alt>\nto start");
3657 gtk_widget_set_usize (label, 200, 200);
3658 gtk_misc_set_alignment (GTK_MISC (label), 0.5, 0.5);
3659 gtk_box_pack_start (GTK_BOX (box1), label, TRUE, TRUE, 0);
3662 separator = gtk_hseparator_new ();
3663 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
3666 box2 = gtk_vbox_new (FALSE, 10);
3667 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
3668 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
3670 button = gtk_button_new_with_label ("close");
3671 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
3672 GTK_SIGNAL_FUNC(gtk_widget_destroy),
3673 GTK_OBJECT (window));
3674 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
3675 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
3676 gtk_widget_grab_default (button);
3678 gtk_item_factory_delete_item (item_factory, "/Preferences/ShouldNotAppear");
3680 gtk_widget_show_all (window);
3683 gtk_widget_destroy (window);
3687 accel_button_new (GtkAccelGroup *accel_group,
3692 GdkModifierType modifiers;
3696 gtk_accelerator_parse (accel, &keyval, &modifiers);
3699 button = gtk_button_new ();
3700 gtk_widget_add_accelerator (button, "activate", accel_group,
3701 keyval, modifiers, GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
3703 label = gtk_accel_label_new (text);
3704 gtk_accel_label_set_accel_widget (GTK_ACCEL_LABEL (label), button);
3705 gtk_widget_show (label);
3707 gtk_container_add (GTK_CONTAINER (button), label);
3713 create_key_lookup (GtkWidget *widget)
3715 static GtkWidget *window = NULL;
3719 GtkAccelGroup *accel_group = gtk_accel_group_new ();
3722 window = gtk_dialog_new_with_buttons ("Key Lookup", NULL, 0,
3723 GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE,
3726 gtk_window_set_screen (GTK_WINDOW (window),
3727 gtk_widget_get_screen (widget));
3729 /* We have to expand it so the accel labels will draw their labels
3731 gtk_window_set_default_size (GTK_WINDOW (window), 300, -1);
3733 gtk_window_add_accel_group (GTK_WINDOW (window), accel_group);
3735 button = gtk_button_new_with_mnemonic ("Button 1 (_a)");
3736 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox), button, FALSE, FALSE, 0);
3737 button = gtk_button_new_with_mnemonic ("Button 2 (_A)");
3738 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox), button, FALSE, FALSE, 0);
3739 button = gtk_button_new_with_mnemonic ("Button 3 (_ф)");
3740 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox), button, FALSE, FALSE, 0);
3741 button = gtk_button_new_with_mnemonic ("Button 4 (_Ф)");
3742 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox), button, FALSE, FALSE, 0);
3743 button = gtk_button_new_with_mnemonic ("Button 6 (_b)");
3744 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox), button, FALSE, FALSE, 0);
3745 button = accel_button_new (accel_group, "Button 7", "<Alt><Shift>b");
3746 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox), button, FALSE, FALSE, 0);
3747 button = accel_button_new (accel_group, "Button 8", "<Alt>d");
3748 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox), button, FALSE, FALSE, 0);
3749 button = accel_button_new (accel_group, "Button 9", "<Alt>Cyrillic_ve");
3750 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox), button, FALSE, FALSE, 0);
3751 button = gtk_button_new_with_mnemonic ("Button 10 (_1)");
3752 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox), button, FALSE, FALSE, 0);
3753 button = gtk_button_new_with_mnemonic ("Button 11 (_!)");
3754 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox), button, FALSE, FALSE, 0);
3756 g_object_add_weak_pointer (G_OBJECT (window), (gpointer *)&window);
3757 g_signal_connect (window, "response", G_CALLBACK (gtk_object_destroy), NULL);
3759 gtk_widget_show_all (window);
3762 gtk_widget_destroy (window);
3771 cmw_destroy_cb(GtkWidget *widget)
3773 /* This is needed to get out of gtk_main */
3780 cmw_color (GtkWidget *widget, GtkWidget *parent)
3784 csd=gtk_color_selection_dialog_new ("This is a modal color selection dialog");
3786 gtk_window_set_screen (GTK_WINDOW (csd), gtk_widget_get_screen (parent));
3788 gtk_color_selection_set_has_palette (GTK_COLOR_SELECTION (GTK_COLOR_SELECTION_DIALOG (csd)->colorsel),
3792 gtk_window_set_modal (GTK_WINDOW(csd),TRUE);
3794 /* And mark it as a transient dialog */
3795 gtk_window_set_transient_for (GTK_WINDOW (csd), GTK_WINDOW (parent));
3797 gtk_signal_connect (GTK_OBJECT(csd), "destroy",
3798 GTK_SIGNAL_FUNC(cmw_destroy_cb),NULL);
3800 gtk_signal_connect_object (GTK_OBJECT(GTK_COLOR_SELECTION_DIALOG(csd)->ok_button),
3801 "clicked", GTK_SIGNAL_FUNC(gtk_widget_destroy),
3803 gtk_signal_connect_object (GTK_OBJECT(GTK_COLOR_SELECTION_DIALOG(csd)->cancel_button),
3804 "clicked", GTK_SIGNAL_FUNC(gtk_widget_destroy),
3807 /* wait until destroy calls gtk_main_quit */
3808 gtk_widget_show (csd);
3813 cmw_file (GtkWidget *widget, GtkWidget *parent)
3817 fs = gtk_file_selection_new("This is a modal file selection dialog");
3819 gtk_window_set_screen (GTK_WINDOW (fs), gtk_widget_get_screen (parent));
3822 gtk_window_set_modal (GTK_WINDOW(fs),TRUE);
3824 /* And mark it as a transient dialog */
3825 gtk_window_set_transient_for (GTK_WINDOW (fs), GTK_WINDOW (parent));
3827 gtk_signal_connect (GTK_OBJECT(fs), "destroy",
3828 GTK_SIGNAL_FUNC(cmw_destroy_cb),NULL);
3830 gtk_signal_connect_object (GTK_OBJECT(GTK_FILE_SELECTION(fs)->ok_button),
3831 "clicked",GTK_SIGNAL_FUNC(gtk_widget_destroy),
3833 gtk_signal_connect_object (GTK_OBJECT(GTK_FILE_SELECTION(fs)->cancel_button),
3834 "clicked",GTK_SIGNAL_FUNC(gtk_widget_destroy),
3837 /* wait until destroy calls gtk_main_quit */
3838 gtk_widget_show (fs);
3845 create_modal_window (GtkWidget *widget)
3847 GtkWidget *window = NULL;
3848 GtkWidget *box1,*box2;
3850 GtkWidget *btnColor,*btnFile,*btnClose;
3852 /* Create modal window (Here you can use any window descendent )*/
3853 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
3854 gtk_window_set_screen (GTK_WINDOW (window),
3855 gtk_widget_get_screen (widget));
3857 gtk_window_set_title (GTK_WINDOW(window),"This window is modal");
3859 /* Set window as modal */
3860 gtk_window_set_modal (GTK_WINDOW(window),TRUE);
3862 /* Create widgets */
3863 box1 = gtk_vbox_new (FALSE,5);
3864 frame1 = gtk_frame_new ("Standard dialogs in modal form");
3865 box2 = gtk_vbox_new (TRUE,5);
3866 btnColor = gtk_button_new_with_label ("Color");
3867 btnFile = gtk_button_new_with_label ("File Selection");
3868 btnClose = gtk_button_new_with_label ("Close");
3871 gtk_container_set_border_width (GTK_CONTAINER(box1),3);
3872 gtk_container_set_border_width (GTK_CONTAINER(box2),3);
3875 gtk_container_add (GTK_CONTAINER (window), box1);
3876 gtk_box_pack_start (GTK_BOX (box1), frame1, TRUE, TRUE, 4);
3877 gtk_container_add (GTK_CONTAINER (frame1), box2);
3878 gtk_box_pack_start (GTK_BOX (box2), btnColor, FALSE, FALSE, 4);
3879 gtk_box_pack_start (GTK_BOX (box2), btnFile, FALSE, FALSE, 4);
3880 gtk_box_pack_start (GTK_BOX (box1), gtk_hseparator_new (), FALSE, FALSE, 4);
3881 gtk_box_pack_start (GTK_BOX (box1), btnClose, FALSE, FALSE, 4);
3883 /* connect signals */
3884 gtk_signal_connect_object (GTK_OBJECT (btnClose), "clicked",
3885 GTK_SIGNAL_FUNC (gtk_widget_destroy),
3886 GTK_OBJECT (window));
3888 gtk_signal_connect (GTK_OBJECT (window), "destroy",
3889 GTK_SIGNAL_FUNC (cmw_destroy_cb),NULL);
3891 gtk_signal_connect (GTK_OBJECT (btnColor), "clicked",
3892 GTK_SIGNAL_FUNC (cmw_color),window);
3893 gtk_signal_connect (GTK_OBJECT (btnFile), "clicked",
3894 GTK_SIGNAL_FUNC (cmw_file),window);
3897 gtk_widget_show_all (window);
3899 /* wait until dialog get destroyed */
3908 make_message_dialog (GdkScreen *screen,
3910 GtkMessageType type,
3911 GtkButtonsType buttons,
3912 guint default_response)
3916 gtk_widget_destroy (*dialog);
3921 *dialog = gtk_message_dialog_new (NULL, 0, type, buttons,
3922 "This is a message dialog; it can wrap long lines. This is a long line. La la la. Look this line is wrapped. Blah blah blah blah blah blah. (Note: testgtk has a nonstandard gtkrc that changes some of the message dialog icons.)");
3924 gtk_window_set_screen (GTK_WINDOW (*dialog), screen);
3926 gtk_signal_connect_object (GTK_OBJECT (*dialog),
3928 GTK_SIGNAL_FUNC (gtk_widget_destroy),
3929 GTK_OBJECT (*dialog));
3931 gtk_signal_connect (GTK_OBJECT (*dialog),
3933 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
3936 gtk_dialog_set_default_response (GTK_DIALOG (*dialog), default_response);
3938 gtk_widget_show (*dialog);
3942 create_message_dialog (GtkWidget *widget)
3944 static GtkWidget *info = NULL;
3945 static GtkWidget *warning = NULL;
3946 static GtkWidget *error = NULL;
3947 static GtkWidget *question = NULL;
3948 GdkScreen *screen = gtk_widget_get_screen (widget);
3950 make_message_dialog (screen, &info, GTK_MESSAGE_INFO, GTK_BUTTONS_OK, GTK_RESPONSE_OK);
3951 make_message_dialog (screen, &warning, GTK_MESSAGE_WARNING, GTK_BUTTONS_CLOSE, GTK_RESPONSE_OK);
3952 make_message_dialog (screen, &error, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK_CANCEL, GTK_RESPONSE_OK);
3953 make_message_dialog (screen, &question, GTK_MESSAGE_QUESTION, GTK_BUTTONS_YES_NO, GTK_RESPONSE_YES);
3960 static GtkWidget *sw_parent = NULL;
3961 static GtkWidget *sw_float_parent;
3962 static guint sw_destroyed_handler = 0;
3965 scrolled_windows_delete_cb (GtkWidget *widget, GdkEventAny *event, GtkWidget *scrollwin)
3967 gtk_widget_reparent (scrollwin, sw_parent);
3969 gtk_signal_disconnect (GTK_OBJECT (sw_parent), sw_destroyed_handler);
3970 sw_float_parent = NULL;
3972 sw_destroyed_handler = 0;
3978 scrolled_windows_destroy_cb (GtkWidget *widget, GtkWidget *scrollwin)
3980 gtk_widget_destroy (sw_float_parent);
3982 sw_float_parent = NULL;
3984 sw_destroyed_handler = 0;
3988 scrolled_windows_remove (GtkWidget *widget, GtkWidget *scrollwin)
3992 gtk_widget_reparent (scrollwin, sw_parent);
3993 gtk_widget_destroy (sw_float_parent);
3995 gtk_signal_disconnect (GTK_OBJECT (sw_parent), sw_destroyed_handler);
3996 sw_float_parent = NULL;
3998 sw_destroyed_handler = 0;
4002 sw_parent = scrollwin->parent;
4003 sw_float_parent = gtk_window_new (GTK_WINDOW_TOPLEVEL);
4004 gtk_window_set_screen (GTK_WINDOW (sw_float_parent),
4005 gtk_widget_get_screen (widget));
4007 gtk_window_set_default_size (GTK_WINDOW (sw_float_parent), 200, 200);
4009 gtk_widget_reparent (scrollwin, sw_float_parent);
4010 gtk_widget_show (sw_float_parent);
4012 sw_destroyed_handler =
4013 gtk_signal_connect (GTK_OBJECT (sw_parent), "destroy",
4014 GTK_SIGNAL_FUNC (scrolled_windows_destroy_cb), scrollwin);
4015 gtk_signal_connect (GTK_OBJECT (sw_float_parent), "delete_event",
4016 GTK_SIGNAL_FUNC (scrolled_windows_delete_cb), scrollwin);
4021 create_scrolled_windows (GtkWidget *widget)
4023 static GtkWidget *window;
4024 GtkWidget *scrolled_window;
4032 window = gtk_dialog_new ();
4034 gtk_window_set_screen (GTK_WINDOW (window),
4035 gtk_widget_get_screen (widget));
4037 gtk_signal_connect (GTK_OBJECT (window), "destroy",
4038 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
4041 gtk_window_set_title (GTK_WINDOW (window), "dialog");
4042 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
4045 scrolled_window = gtk_scrolled_window_new (NULL, NULL);
4046 gtk_container_set_border_width (GTK_CONTAINER (scrolled_window), 10);
4047 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
4048 GTK_POLICY_AUTOMATIC,
4049 GTK_POLICY_AUTOMATIC);
4050 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox),
4051 scrolled_window, TRUE, TRUE, 0);
4052 gtk_widget_show (scrolled_window);
4054 table = gtk_table_new (20, 20, FALSE);
4055 gtk_table_set_row_spacings (GTK_TABLE (table), 10);
4056 gtk_table_set_col_spacings (GTK_TABLE (table), 10);
4057 gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scrolled_window), table);
4058 gtk_container_set_focus_hadjustment (GTK_CONTAINER (table),
4059 gtk_scrolled_window_get_hadjustment (GTK_SCROLLED_WINDOW (scrolled_window)));
4060 gtk_container_set_focus_vadjustment (GTK_CONTAINER (table),
4061 gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (scrolled_window)));
4062 gtk_widget_show (table);
4064 for (i = 0; i < 20; i++)
4065 for (j = 0; j < 20; j++)
4067 sprintf (buffer, "button (%d,%d)\n", i, j);
4068 button = gtk_toggle_button_new_with_label (buffer);
4069 gtk_table_attach_defaults (GTK_TABLE (table), button,
4071 gtk_widget_show (button);
4075 button = gtk_button_new_with_label ("Close");
4076 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
4077 GTK_SIGNAL_FUNC(gtk_widget_destroy),
4078 GTK_OBJECT (window));
4079 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
4080 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
4081 button, TRUE, TRUE, 0);
4082 gtk_widget_grab_default (button);
4083 gtk_widget_show (button);
4085 button = gtk_button_new_with_label ("Reparent Out");
4086 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4087 GTK_SIGNAL_FUNC(scrolled_windows_remove),
4089 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
4090 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
4091 button, TRUE, TRUE, 0);
4092 gtk_widget_grab_default (button);
4093 gtk_widget_show (button);
4095 gtk_window_set_default_size (GTK_WINDOW (window), 300, 300);
4098 if (!GTK_WIDGET_VISIBLE (window))
4099 gtk_widget_show (window);
4101 gtk_widget_destroy (window);
4109 entry_toggle_frame (GtkWidget *checkbutton,
4112 gtk_entry_set_has_frame (GTK_ENTRY(entry),
4113 GTK_TOGGLE_BUTTON(checkbutton)->active);
4117 entry_toggle_sensitive (GtkWidget *checkbutton,
4120 gtk_widget_set_sensitive (entry, GTK_TOGGLE_BUTTON(checkbutton)->active);
4124 entry_props_clicked (GtkWidget *button,
4127 GtkWidget *window = create_prop_editor (entry, 0);
4129 gtk_window_set_title (GTK_WINDOW (window), "Entry Properties");
4133 create_entry (GtkWidget *widget)
4135 static GtkWidget *window = NULL;
4139 GtkWidget *has_frame_check;
4140 GtkWidget *sensitive_check;
4141 GtkWidget *entry, *cb;
4143 GtkWidget *separator;
4144 GList *cbitems = NULL;
4148 cbitems = g_list_append(cbitems, "item0");
4149 cbitems = g_list_append(cbitems, "item1 item1");
4150 cbitems = g_list_append(cbitems, "item2 item2 item2");
4151 cbitems = g_list_append(cbitems, "item3 item3 item3 item3");
4152 cbitems = g_list_append(cbitems, "item4 item4 item4 item4 item4");
4153 cbitems = g_list_append(cbitems, "item5 item5 item5 item5 item5 item5");
4154 cbitems = g_list_append(cbitems, "item6 item6 item6 item6 item6");
4155 cbitems = g_list_append(cbitems, "item7 item7 item7 item7");
4156 cbitems = g_list_append(cbitems, "item8 item8 item8");
4157 cbitems = g_list_append(cbitems, "item9 item9");
4159 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
4160 gtk_window_set_screen (GTK_WINDOW (window),
4161 gtk_widget_get_screen (widget));
4163 gtk_signal_connect (GTK_OBJECT (window), "destroy",
4164 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
4167 gtk_window_set_title (GTK_WINDOW (window), "entry");
4168 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
4171 box1 = gtk_vbox_new (FALSE, 0);
4172 gtk_container_add (GTK_CONTAINER (window), box1);
4175 box2 = gtk_vbox_new (FALSE, 10);
4176 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
4177 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
4179 hbox = gtk_hbox_new (FALSE, 5);
4180 gtk_box_pack_start (GTK_BOX (box2), hbox, TRUE, TRUE, 0);
4182 entry = gtk_entry_new ();
4183 gtk_entry_set_text (GTK_ENTRY (entry), "hello world السلام عليكم");
4184 gtk_editable_select_region (GTK_EDITABLE (entry), 0, 5);
4185 gtk_box_pack_start (GTK_BOX (hbox), entry, TRUE, TRUE, 0);
4187 button = gtk_button_new_with_mnemonic ("_Props");
4188 gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, FALSE, 0);
4189 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4190 GTK_SIGNAL_FUNC (entry_props_clicked),
4193 cb = gtk_combo_new ();
4194 gtk_combo_set_popdown_strings (GTK_COMBO (cb), cbitems);
4195 gtk_entry_set_text (GTK_ENTRY (GTK_COMBO(cb)->entry), "hello world \n\n\n foo");
4196 gtk_editable_select_region (GTK_EDITABLE (GTK_COMBO(cb)->entry),
4198 gtk_box_pack_start (GTK_BOX (box2), cb, TRUE, TRUE, 0);
4200 sensitive_check = gtk_check_button_new_with_label("Sensitive");
4201 gtk_box_pack_start (GTK_BOX (box2), sensitive_check, FALSE, TRUE, 0);
4202 gtk_signal_connect (GTK_OBJECT(sensitive_check), "toggled",
4203 GTK_SIGNAL_FUNC(entry_toggle_sensitive), entry);
4204 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(sensitive_check), TRUE);
4206 has_frame_check = gtk_check_button_new_with_label("Has Frame");
4207 gtk_box_pack_start (GTK_BOX (box2), has_frame_check, FALSE, TRUE, 0);
4208 gtk_signal_connect (GTK_OBJECT(has_frame_check), "toggled",
4209 GTK_SIGNAL_FUNC(entry_toggle_frame), entry);
4210 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(has_frame_check), TRUE);
4212 separator = gtk_hseparator_new ();
4213 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
4215 box2 = gtk_vbox_new (FALSE, 10);
4216 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
4217 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
4219 button = gtk_button_new_with_label ("close");
4220 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
4221 GTK_SIGNAL_FUNC(gtk_widget_destroy),
4222 GTK_OBJECT (window));
4223 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
4224 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
4225 gtk_widget_grab_default (button);
4228 if (!GTK_WIDGET_VISIBLE (window))
4229 gtk_widget_show_all (window);
4231 gtk_widget_destroy (window);
4238 #define SIZE_GROUP_INITIAL_SIZE 50
4241 size_group_hsize_changed (GtkSpinButton *spin_button,
4244 gtk_widget_set_usize (GTK_BIN (button)->child,
4245 gtk_spin_button_get_value_as_int (spin_button),
4250 size_group_vsize_changed (GtkSpinButton *spin_button,
4253 gtk_widget_set_usize (GTK_BIN (button)->child,
4255 gtk_spin_button_get_value_as_int (spin_button));
4259 create_size_group_window (GdkScreen *screen,
4260 GtkSizeGroup *master_size_group)
4264 GtkWidget *main_button;
4266 GtkWidget *spin_button;
4268 GtkSizeGroup *hgroup1;
4269 GtkSizeGroup *hgroup2;
4270 GtkSizeGroup *vgroup1;
4271 GtkSizeGroup *vgroup2;
4273 window = gtk_dialog_new_with_buttons ("GtkSizeGroup",
4279 gtk_window_set_screen (GTK_WINDOW (window), screen);
4281 gtk_window_set_resizable (GTK_WINDOW (window), FALSE);
4283 gtk_signal_connect (GTK_OBJECT (window), "response",
4284 GTK_SIGNAL_FUNC (gtk_widget_destroy),
4287 table = gtk_table_new (2, 2, FALSE);
4288 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox), table, TRUE, TRUE, 0);
4290 gtk_table_set_row_spacings (GTK_TABLE (table), 5);
4291 gtk_table_set_col_spacings (GTK_TABLE (table), 5);
4292 gtk_container_set_border_width (GTK_CONTAINER (table), 5);
4293 gtk_widget_set_usize (table, 250, 250);
4295 hgroup1 = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
4296 hgroup2 = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
4297 vgroup1 = gtk_size_group_new (GTK_SIZE_GROUP_VERTICAL);
4298 vgroup2 = gtk_size_group_new (GTK_SIZE_GROUP_VERTICAL);
4300 main_button = gtk_button_new_with_label ("X");
4302 gtk_table_attach (GTK_TABLE (table), main_button,
4304 GTK_EXPAND, GTK_EXPAND,
4306 gtk_size_group_add_widget (master_size_group, main_button);
4307 gtk_size_group_add_widget (hgroup1, main_button);
4308 gtk_size_group_add_widget (vgroup1, main_button);
4309 gtk_widget_set_usize (GTK_BIN (main_button)->child, SIZE_GROUP_INITIAL_SIZE, SIZE_GROUP_INITIAL_SIZE);
4311 button = gtk_button_new ();
4312 gtk_table_attach (GTK_TABLE (table), button,
4314 GTK_EXPAND, GTK_EXPAND,
4316 gtk_size_group_add_widget (vgroup1, button);
4317 gtk_size_group_add_widget (vgroup2, button);
4319 button = gtk_button_new ();
4320 gtk_table_attach (GTK_TABLE (table), button,
4322 GTK_EXPAND, GTK_EXPAND,
4324 gtk_size_group_add_widget (hgroup1, button);
4325 gtk_size_group_add_widget (hgroup2, button);
4327 button = gtk_button_new ();
4328 gtk_table_attach (GTK_TABLE (table), button,
4330 GTK_EXPAND, GTK_EXPAND,
4332 gtk_size_group_add_widget (hgroup2, button);
4333 gtk_size_group_add_widget (vgroup2, button);
4335 g_object_unref (G_OBJECT (hgroup1));
4336 g_object_unref (G_OBJECT (hgroup2));
4337 g_object_unref (G_OBJECT (vgroup1));
4338 g_object_unref (G_OBJECT (vgroup2));
4340 hbox = gtk_hbox_new (FALSE, 5);
4341 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox), hbox, FALSE, FALSE, 0);
4343 spin_button = gtk_spin_button_new_with_range (1, 100, 1);
4344 gtk_spin_button_set_value (GTK_SPIN_BUTTON (spin_button), SIZE_GROUP_INITIAL_SIZE);
4345 gtk_box_pack_start (GTK_BOX (hbox), spin_button, TRUE, TRUE, 0);
4346 gtk_signal_connect (GTK_OBJECT (spin_button), "value_changed",
4347 GTK_SIGNAL_FUNC (size_group_hsize_changed), main_button);
4349 spin_button = gtk_spin_button_new_with_range (1, 100, 1);
4350 gtk_spin_button_set_value (GTK_SPIN_BUTTON (spin_button), SIZE_GROUP_INITIAL_SIZE);
4351 gtk_box_pack_start (GTK_BOX (hbox), spin_button, TRUE, TRUE, 0);
4352 gtk_signal_connect (GTK_OBJECT (spin_button), "value_changed",
4353 GTK_SIGNAL_FUNC (size_group_vsize_changed), main_button);
4359 create_size_groups (GtkWidget *widget)
4361 static GtkWidget *window1 = NULL;
4362 static GtkWidget *window2 = NULL;
4363 static GtkSizeGroup *master_size_group;
4365 if (!master_size_group)
4366 master_size_group = gtk_size_group_new (GTK_SIZE_GROUP_BOTH);
4370 window1 = create_size_group_window (gtk_widget_get_screen (widget),
4373 gtk_signal_connect (GTK_OBJECT (window1), "destroy",
4374 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
4380 window2 = create_size_group_window (gtk_widget_get_screen (widget),
4383 gtk_signal_connect (GTK_OBJECT (window2), "destroy",
4384 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
4388 if (GTK_WIDGET_VISIBLE (window1) && GTK_WIDGET_VISIBLE (window2))
4390 gtk_widget_destroy (window1);
4391 gtk_widget_destroy (window2);
4395 if (!GTK_WIDGET_VISIBLE (window1))
4396 gtk_widget_show_all (window1);
4397 if (!GTK_WIDGET_VISIBLE (window2))
4398 gtk_widget_show_all (window2);
4406 static GtkWidget *spinner1;
4409 toggle_snap (GtkWidget *widget, GtkSpinButton *spin)
4411 gtk_spin_button_set_snap_to_ticks (spin, GTK_TOGGLE_BUTTON (widget)->active);
4415 toggle_numeric (GtkWidget *widget, GtkSpinButton *spin)
4417 gtk_spin_button_set_numeric (spin, GTK_TOGGLE_BUTTON (widget)->active);
4421 change_digits (GtkWidget *widget, GtkSpinButton *spin)
4423 gtk_spin_button_set_digits (GTK_SPIN_BUTTON (spinner1),
4424 gtk_spin_button_get_value_as_int (spin));
4428 get_value (GtkWidget *widget, gpointer data)
4432 GtkSpinButton *spin;
4434 spin = GTK_SPIN_BUTTON (spinner1);
4435 label = GTK_LABEL (gtk_object_get_user_data (GTK_OBJECT (widget)));
4436 if (GPOINTER_TO_INT (data) == 1)
4437 sprintf (buf, "%d", gtk_spin_button_get_value_as_int (spin));
4439 sprintf (buf, "%0.*f", spin->digits,
4440 gtk_spin_button_get_value_as_float (spin));
4441 gtk_label_set_text (label, buf);
4445 get_spin_value (GtkWidget *widget, gpointer data)
4449 GtkSpinButton *spin;
4451 spin = GTK_SPIN_BUTTON (widget);
4452 label = GTK_LABEL (data);
4454 buffer = g_strdup_printf ("%0.*f", spin->digits,
4455 gtk_spin_button_get_value_as_float (spin));
4456 gtk_label_set_text (label, buffer);
4462 spin_button_time_output_func (GtkSpinButton *spin_button)
4464 static gchar buf[6];
4468 hours = spin_button->adjustment->value / 60.0;
4469 minutes = (fabs(floor (hours) - hours) < 1e-5) ? 0.0 : 30;
4470 sprintf (buf, "%02.0f:%02.0f", floor (hours), minutes);
4471 if (strcmp (buf, gtk_entry_get_text (GTK_ENTRY (spin_button))))
4472 gtk_entry_set_text (GTK_ENTRY (spin_button), buf);
4477 spin_button_month_input_func (GtkSpinButton *spin_button,
4481 static gchar *month[12] = { "January", "February", "March", "April",
4482 "May", "June", "July", "August",
4483 "September", "October", "November", "December" };
4485 gboolean found = FALSE;
4487 for (i = 1; i <= 12; i++)
4489 tmp1 = g_strdup (month[i-1]);
4491 tmp2 = g_strdup (gtk_entry_get_text (GTK_ENTRY (spin_button)));
4493 if (strstr (tmp1, tmp2) == tmp1)
4503 return GTK_INPUT_ERROR;
4505 *new_val = (gdouble) i;
4510 spin_button_month_output_func (GtkSpinButton *spin_button)
4513 static gchar *month[12] = { "January", "February", "March", "April",
4514 "May", "June", "July", "August", "September",
4515 "October", "November", "December" };
4517 for (i = 1; i <= 12; i++)
4518 if (fabs (spin_button->adjustment->value - (double)i) < 1e-5)
4520 if (strcmp (month[i-1], gtk_entry_get_text (GTK_ENTRY (spin_button))))
4521 gtk_entry_set_text (GTK_ENTRY (spin_button), month[i-1]);
4527 spin_button_hex_input_func (GtkSpinButton *spin_button,
4534 buf = gtk_entry_get_text (GTK_ENTRY (spin_button));
4535 res = strtol(buf, &err, 16);
4538 return GTK_INPUT_ERROR;
4544 spin_button_hex_output_func (GtkSpinButton *spin_button)
4546 static gchar buf[7];
4549 val = (gint) spin_button->adjustment->value;
4550 if (fabs (val) < 1e-5)
4551 sprintf (buf, "0x00");
4553 sprintf (buf, "0x%.2X", val);
4554 if (strcmp (buf, gtk_entry_get_text (GTK_ENTRY (spin_button))))
4555 gtk_entry_set_text (GTK_ENTRY (spin_button), buf);
4560 create_spins (GtkWidget *widget)
4562 static GtkWidget *window = NULL;
4565 GtkWidget *main_vbox;
4568 GtkWidget *spinner2;
4572 GtkWidget *val_label;
4577 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
4578 gtk_window_set_screen (GTK_WINDOW (window),
4579 gtk_widget_get_screen (widget));
4581 gtk_signal_connect (GTK_OBJECT (window), "destroy",
4582 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
4585 gtk_window_set_title (GTK_WINDOW (window), "GtkSpinButton");
4587 main_vbox = gtk_vbox_new (FALSE, 5);
4588 gtk_container_set_border_width (GTK_CONTAINER (main_vbox), 10);
4589 gtk_container_add (GTK_CONTAINER (window), main_vbox);
4591 frame = gtk_frame_new ("Not accelerated");
4592 gtk_box_pack_start (GTK_BOX (main_vbox), frame, TRUE, TRUE, 0);
4594 vbox = gtk_vbox_new (FALSE, 0);
4595 gtk_container_set_border_width (GTK_CONTAINER (vbox), 5);
4596 gtk_container_add (GTK_CONTAINER (frame), vbox);
4598 /* Time, month, hex spinners */
4600 hbox = gtk_hbox_new (FALSE, 0);
4601 gtk_box_pack_start (GTK_BOX (vbox), hbox, TRUE, TRUE, 5);
4603 vbox2 = gtk_vbox_new (FALSE, 0);
4604 gtk_box_pack_start (GTK_BOX (hbox), vbox2, TRUE, TRUE, 5);
4606 label = gtk_label_new ("Time :");
4607 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
4608 gtk_box_pack_start (GTK_BOX (vbox2), label, FALSE, TRUE, 0);
4610 adj = (GtkAdjustment *) gtk_adjustment_new (0, 0, 1410, 30, 60, 0);
4611 spinner = gtk_spin_button_new (adj, 0, 0);
4612 gtk_editable_set_editable (GTK_EDITABLE (spinner), FALSE);
4613 gtk_signal_connect (GTK_OBJECT (spinner),
4615 GTK_SIGNAL_FUNC (spin_button_time_output_func),
4617 gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (spinner), TRUE);
4618 gtk_widget_set_usize (spinner, 55, -1);
4619 gtk_box_pack_start (GTK_BOX (vbox2), spinner, FALSE, TRUE, 0);
4621 vbox2 = gtk_vbox_new (FALSE, 0);
4622 gtk_box_pack_start (GTK_BOX (hbox), vbox2, TRUE, TRUE, 5);
4624 label = gtk_label_new ("Month :");
4625 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
4626 gtk_box_pack_start (GTK_BOX (vbox2), label, FALSE, TRUE, 0);
4628 adj = (GtkAdjustment *) gtk_adjustment_new (1.0, 1.0, 12.0, 1.0,
4630 spinner = gtk_spin_button_new (adj, 0, 0);
4631 gtk_spin_button_set_update_policy (GTK_SPIN_BUTTON (spinner),
4632 GTK_UPDATE_IF_VALID);
4633 gtk_signal_connect (GTK_OBJECT (spinner),
4635 GTK_SIGNAL_FUNC (spin_button_month_input_func),
4637 gtk_signal_connect (GTK_OBJECT (spinner),
4639 GTK_SIGNAL_FUNC (spin_button_month_output_func),
4641 gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (spinner), TRUE);
4642 gtk_widget_set_usize (spinner, 85, -1);
4643 gtk_box_pack_start (GTK_BOX (vbox2), spinner, FALSE, TRUE, 0);
4645 vbox2 = gtk_vbox_new (FALSE, 0);
4646 gtk_box_pack_start (GTK_BOX (hbox), vbox2, TRUE, TRUE, 5);
4648 label = gtk_label_new ("Hex :");
4649 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
4650 gtk_box_pack_start (GTK_BOX (vbox2), label, FALSE, TRUE, 0);
4652 adj = (GtkAdjustment *) gtk_adjustment_new (0, 0, 255, 1, 16, 0);
4653 spinner = gtk_spin_button_new (adj, 0, 0);
4654 gtk_editable_set_editable (GTK_EDITABLE (spinner), TRUE);
4655 gtk_signal_connect (GTK_OBJECT (spinner),
4657 GTK_SIGNAL_FUNC (spin_button_hex_input_func),
4659 gtk_signal_connect (GTK_OBJECT (spinner),
4661 GTK_SIGNAL_FUNC (spin_button_hex_output_func),
4663 gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (spinner), TRUE);
4664 gtk_widget_set_usize (spinner, 55, 0);
4665 gtk_box_pack_start (GTK_BOX (vbox2), spinner, FALSE, TRUE, 0);
4667 frame = gtk_frame_new ("Accelerated");
4668 gtk_box_pack_start (GTK_BOX (main_vbox), frame, TRUE, TRUE, 0);
4670 vbox = gtk_vbox_new (FALSE, 0);
4671 gtk_container_set_border_width (GTK_CONTAINER (vbox), 5);
4672 gtk_container_add (GTK_CONTAINER (frame), vbox);
4674 hbox = gtk_hbox_new (FALSE, 0);
4675 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 5);
4677 vbox2 = gtk_vbox_new (FALSE, 0);
4678 gtk_box_pack_start (GTK_BOX (hbox), vbox2, FALSE, FALSE, 5);
4680 label = gtk_label_new ("Value :");
4681 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
4682 gtk_box_pack_start (GTK_BOX (vbox2), label, FALSE, TRUE, 0);
4684 adj = (GtkAdjustment *) gtk_adjustment_new (0.0, -10000.0, 10000.0,
4686 spinner1 = gtk_spin_button_new (adj, 1.0, 2);
4687 gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (spinner1), TRUE);
4688 gtk_box_pack_start (GTK_BOX (vbox2), spinner1, FALSE, TRUE, 0);
4690 vbox2 = gtk_vbox_new (FALSE, 0);
4691 gtk_box_pack_start (GTK_BOX (hbox), vbox2, FALSE, FALSE, 5);
4693 label = gtk_label_new ("Digits :");
4694 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
4695 gtk_box_pack_start (GTK_BOX (vbox2), label, FALSE, TRUE, 0);
4697 adj = (GtkAdjustment *) gtk_adjustment_new (2, 1, 15, 1, 1, 0);
4698 spinner2 = gtk_spin_button_new (adj, 0.0, 0);
4699 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
4700 GTK_SIGNAL_FUNC (change_digits),
4701 (gpointer) spinner2);
4702 gtk_box_pack_start (GTK_BOX (vbox2), spinner2, FALSE, TRUE, 0);
4704 hbox = gtk_hbox_new (FALSE, 0);
4705 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 5);
4707 button = gtk_check_button_new_with_label ("Snap to 0.5-ticks");
4708 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4709 GTK_SIGNAL_FUNC (toggle_snap),
4711 gtk_box_pack_start (GTK_BOX (vbox), button, TRUE, TRUE, 0);
4712 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE);
4714 button = gtk_check_button_new_with_label ("Numeric only input mode");
4715 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4716 GTK_SIGNAL_FUNC (toggle_numeric),
4718 gtk_box_pack_start (GTK_BOX (vbox), button, TRUE, TRUE, 0);
4719 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE);
4721 val_label = gtk_label_new ("");
4723 hbox = gtk_hbox_new (FALSE, 0);
4724 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 5);
4726 button = gtk_button_new_with_label ("Value as Int");
4727 gtk_object_set_user_data (GTK_OBJECT (button), val_label);
4728 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4729 GTK_SIGNAL_FUNC (get_value),
4730 GINT_TO_POINTER (1));
4731 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
4733 button = gtk_button_new_with_label ("Value as Float");
4734 gtk_object_set_user_data (GTK_OBJECT (button), val_label);
4735 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4736 GTK_SIGNAL_FUNC (get_value),
4737 GINT_TO_POINTER (2));
4738 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
4740 gtk_box_pack_start (GTK_BOX (vbox), val_label, TRUE, TRUE, 0);
4741 gtk_label_set_text (GTK_LABEL (val_label), "0");
4743 frame = gtk_frame_new ("Using Convenience Constructor");
4744 gtk_box_pack_start (GTK_BOX (main_vbox), frame, TRUE, TRUE, 0);
4746 hbox = gtk_hbox_new (FALSE, 0);
4747 gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
4748 gtk_container_add (GTK_CONTAINER (frame), hbox);
4750 val_label = gtk_label_new ("0.0");
4752 spinner = gtk_spin_button_new_with_range (0.0, 10.0, 0.009);
4753 gtk_spin_button_set_value (GTK_SPIN_BUTTON (spinner), 0.0);
4754 gtk_signal_connect (GTK_OBJECT (spinner), "value_changed",
4755 GTK_SIGNAL_FUNC (get_spin_value), val_label);
4756 gtk_box_pack_start (GTK_BOX (hbox), spinner, TRUE, TRUE, 5);
4757 gtk_box_pack_start (GTK_BOX (hbox), val_label, TRUE, TRUE, 5);
4759 hbox = gtk_hbox_new (FALSE, 0);
4760 gtk_box_pack_start (GTK_BOX (main_vbox), hbox, FALSE, TRUE, 0);
4762 button = gtk_button_new_with_label ("Close");
4763 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
4764 GTK_SIGNAL_FUNC (gtk_widget_destroy),
4765 GTK_OBJECT (window));
4766 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
4769 if (!GTK_WIDGET_VISIBLE (window))
4770 gtk_widget_show_all (window);
4772 gtk_widget_destroy (window);
4781 cursor_expose_event (GtkWidget *widget,
4785 GtkDrawingArea *darea;
4786 GdkDrawable *drawable;
4793 g_return_val_if_fail (widget != NULL, TRUE);
4794 g_return_val_if_fail (GTK_IS_DRAWING_AREA (widget), TRUE);
4796 darea = GTK_DRAWING_AREA (widget);
4797 drawable = widget->window;
4798 white_gc = widget->style->white_gc;
4799 gray_gc = widget->style->bg_gc[GTK_STATE_NORMAL];
4800 black_gc = widget->style->black_gc;
4801 max_width = widget->allocation.width;
4802 max_height = widget->allocation.height;
4804 gdk_draw_rectangle (drawable, white_gc,
4811 gdk_draw_rectangle (drawable, black_gc,
4818 gdk_draw_rectangle (drawable, gray_gc,
4829 set_cursor (GtkWidget *spinner,
4837 c = CLAMP (gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (spinner)), 0, 152);
4840 label = gtk_object_get_user_data (GTK_OBJECT (spinner));
4841 vals = gtk_type_enum_get_values (GDK_TYPE_CURSOR_TYPE);
4842 while (vals && vals->value != c)
4845 gtk_label_set_text (GTK_LABEL (label), vals->value_nick);
4847 gtk_label_set_text (GTK_LABEL (label), "<unknown>");
4849 cursor = gdk_cursor_new_for_display (gtk_widget_get_display (widget), c);
4850 gdk_window_set_cursor (widget->window, cursor);
4851 gdk_cursor_unref (cursor);
4855 cursor_event (GtkWidget *widget,
4857 GtkSpinButton *spinner)
4859 if ((event->type == GDK_BUTTON_PRESS) &&
4860 ((event->button.button == 1) ||
4861 (event->button.button == 3)))
4863 gtk_spin_button_spin (spinner, event->button.button == 1 ?
4864 GTK_SPIN_STEP_FORWARD : GTK_SPIN_STEP_BACKWARD, 0);
4872 create_cursors (GtkWidget *widget)
4874 static GtkWidget *window = NULL;
4877 GtkWidget *main_vbox;
4888 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
4889 gtk_window_set_screen (GTK_WINDOW (window),
4890 gtk_widget_get_screen (widget));
4892 gtk_signal_connect (GTK_OBJECT (window), "destroy",
4893 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
4896 gtk_window_set_title (GTK_WINDOW (window), "Cursors");
4898 main_vbox = gtk_vbox_new (FALSE, 5);
4899 gtk_container_set_border_width (GTK_CONTAINER (main_vbox), 0);
4900 gtk_container_add (GTK_CONTAINER (window), main_vbox);
4903 gtk_widget_new (gtk_vbox_get_type (),
4904 "GtkBox::homogeneous", FALSE,
4905 "GtkBox::spacing", 5,
4906 "GtkContainer::border_width", 10,
4907 "GtkWidget::parent", main_vbox,
4908 "GtkWidget::visible", TRUE,
4911 hbox = gtk_hbox_new (FALSE, 0);
4912 gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
4913 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0);
4915 label = gtk_label_new ("Cursor Value : ");
4916 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
4917 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
4919 adj = (GtkAdjustment *) gtk_adjustment_new (0,
4923 spinner = gtk_spin_button_new (adj, 0, 0);
4924 gtk_box_pack_start (GTK_BOX (hbox), spinner, TRUE, TRUE, 0);
4927 gtk_widget_new (gtk_frame_get_type (),
4928 "GtkFrame::shadow", GTK_SHADOW_ETCHED_IN,
4929 "GtkFrame::label_xalign", 0.5,
4930 "GtkFrame::label", "Cursor Area",
4931 "GtkContainer::border_width", 10,
4932 "GtkWidget::parent", vbox,
4933 "GtkWidget::visible", TRUE,
4936 darea = gtk_drawing_area_new ();
4937 gtk_widget_set_usize (darea, 80, 80);
4938 gtk_container_add (GTK_CONTAINER (frame), darea);
4939 gtk_signal_connect (GTK_OBJECT (darea),
4941 GTK_SIGNAL_FUNC (cursor_expose_event),
4943 gtk_widget_set_events (darea, GDK_EXPOSURE_MASK | GDK_BUTTON_PRESS_MASK);
4944 gtk_signal_connect (GTK_OBJECT (darea),
4945 "button_press_event",
4946 GTK_SIGNAL_FUNC (cursor_event),
4948 gtk_widget_show (darea);
4950 gtk_signal_connect (GTK_OBJECT (spinner), "changed",
4951 GTK_SIGNAL_FUNC (set_cursor),
4954 label = gtk_widget_new (GTK_TYPE_LABEL,
4959 gtk_container_child_set (GTK_CONTAINER (vbox), label,
4962 gtk_object_set_user_data (GTK_OBJECT (spinner), label);
4965 gtk_widget_new (gtk_hseparator_get_type (),
4966 "GtkWidget::visible", TRUE,
4968 gtk_box_pack_start (GTK_BOX (main_vbox), any, FALSE, TRUE, 0);
4970 hbox = gtk_hbox_new (FALSE, 0);
4971 gtk_container_set_border_width (GTK_CONTAINER (hbox), 10);
4972 gtk_box_pack_start (GTK_BOX (main_vbox), hbox, FALSE, TRUE, 0);
4974 button = gtk_button_new_with_label ("Close");
4975 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
4976 GTK_SIGNAL_FUNC (gtk_widget_destroy),
4977 GTK_OBJECT (window));
4978 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
4980 gtk_widget_show_all (window);
4982 set_cursor (spinner, darea);
4985 gtk_widget_destroy (window);
4993 list_add (GtkWidget *widget,
4998 GtkWidget *list_item;
4999 GtkContainer *container;
5001 container = GTK_CONTAINER (list);
5003 sprintf (buffer, "added item %d", i++);
5004 list_item = gtk_list_item_new_with_label (buffer);
5005 gtk_widget_show (list_item);
5007 gtk_container_add (container, list_item);
5011 list_remove (GtkWidget *widget,
5014 GList *clear_list = NULL;
5015 GList *sel_row = NULL;
5018 if (list->selection_mode == GTK_SELECTION_EXTENDED)
5022 item = GTK_CONTAINER (list)->focus_child;
5023 if (!item && list->selection)
5024 item = list->selection->data;
5028 work = g_list_find (list->children, item);
5029 for (sel_row = work; sel_row; sel_row = sel_row->next)
5030 if (GTK_WIDGET (sel_row->data)->state != GTK_STATE_SELECTED)
5035 for (sel_row = work; sel_row; sel_row = sel_row->prev)
5036 if (GTK_WIDGET (sel_row->data)->state != GTK_STATE_SELECTED)
5042 for (work = list->selection; work; work = work->next)
5043 clear_list = g_list_prepend (clear_list, work->data);
5045 clear_list = g_list_reverse (clear_list);
5046 gtk_list_remove_items (GTK_LIST (list), clear_list);
5047 g_list_free (clear_list);
5049 if (list->selection_mode == GTK_SELECTION_EXTENDED && sel_row)
5050 gtk_list_select_child (list, GTK_WIDGET(sel_row->data));
5054 list_clear (GtkWidget *widget,
5057 gtk_list_clear_items (GTK_LIST (list), 0, -1);
5060 static gchar *selection_mode_items[] =
5067 static const GtkSelectionMode selection_modes[] = {
5068 GTK_SELECTION_SINGLE,
5069 GTK_SELECTION_BROWSE,
5070 GTK_SELECTION_MULTIPLE
5073 static GtkWidget *list_omenu;
5076 list_toggle_sel_mode (GtkWidget *widget, gpointer data)
5081 list = GTK_LIST (data);
5083 if (!GTK_WIDGET_MAPPED (widget))
5086 i = gtk_option_menu_get_history (GTK_OPTION_MENU (widget));
5088 gtk_list_set_selection_mode (list, selection_modes[i]);
5092 create_list (GtkWidget *widget)
5094 static GtkWidget *window = NULL;
5102 GtkWidget *scrolled_win;
5105 GtkWidget *separator;
5108 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
5110 gtk_window_set_screen (GTK_WINDOW (window),
5111 gtk_widget_get_screen (widget));
5113 gtk_signal_connect (GTK_OBJECT (window), "destroy",
5114 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
5117 gtk_window_set_title (GTK_WINDOW (window), "list");
5118 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
5120 vbox = gtk_vbox_new (FALSE, 0);
5121 gtk_container_add (GTK_CONTAINER (window), vbox);
5123 scrolled_win = gtk_scrolled_window_new (NULL, NULL);
5124 gtk_container_set_border_width (GTK_CONTAINER (scrolled_win), 5);
5125 gtk_widget_set_usize (scrolled_win, -1, 300);
5126 gtk_box_pack_start (GTK_BOX (vbox), scrolled_win, TRUE, TRUE, 0);
5127 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win),
5128 GTK_POLICY_AUTOMATIC,
5129 GTK_POLICY_AUTOMATIC);
5131 list = gtk_list_new ();
5132 gtk_list_set_selection_mode (GTK_LIST (list), GTK_SELECTION_EXTENDED);
5133 gtk_scrolled_window_add_with_viewport
5134 (GTK_SCROLLED_WINDOW (scrolled_win), list);
5135 gtk_container_set_focus_vadjustment
5136 (GTK_CONTAINER (list),
5137 gtk_scrolled_window_get_vadjustment
5138 (GTK_SCROLLED_WINDOW (scrolled_win)));
5139 gtk_container_set_focus_hadjustment
5140 (GTK_CONTAINER (list),
5141 gtk_scrolled_window_get_hadjustment
5142 (GTK_SCROLLED_WINDOW (scrolled_win)));
5144 if ((infile = fopen("../gtk/gtkenums.h", "r")))
5150 while (fgets (buffer, 256, infile))
5152 if ((pos = strchr (buffer, '\n')))
5154 item = gtk_list_item_new_with_label (buffer);
5155 gtk_container_add (GTK_CONTAINER (list), item);
5162 hbox = gtk_hbox_new (TRUE, 5);
5163 gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
5164 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0);
5166 button = gtk_button_new_with_label ("Insert Row");
5167 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
5168 gtk_signal_connect (GTK_OBJECT (button), "clicked",
5169 GTK_SIGNAL_FUNC (list_add),
5172 button = gtk_button_new_with_label ("Clear List");
5173 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
5174 gtk_signal_connect (GTK_OBJECT (button), "clicked",
5175 GTK_SIGNAL_FUNC (list_clear),
5178 button = gtk_button_new_with_label ("Remove Selection");
5179 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
5180 gtk_signal_connect (GTK_OBJECT (button), "clicked",
5181 GTK_SIGNAL_FUNC (list_remove),
5184 cbox = gtk_hbox_new (FALSE, 0);
5185 gtk_box_pack_start (GTK_BOX (vbox), cbox, FALSE, TRUE, 0);
5187 hbox = gtk_hbox_new (FALSE, 5);
5188 gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
5189 gtk_box_pack_start (GTK_BOX (cbox), hbox, TRUE, FALSE, 0);
5191 label = gtk_label_new ("Selection Mode :");
5192 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
5194 list_omenu = build_option_menu (selection_mode_items, 3, 3,
5195 list_toggle_sel_mode,
5197 gtk_box_pack_start (GTK_BOX (hbox), list_omenu, FALSE, TRUE, 0);
5199 separator = gtk_hseparator_new ();
5200 gtk_box_pack_start (GTK_BOX (vbox), separator, FALSE, TRUE, 0);
5202 cbox = gtk_hbox_new (FALSE, 0);
5203 gtk_box_pack_start (GTK_BOX (vbox), cbox, FALSE, TRUE, 0);
5205 button = gtk_button_new_with_label ("close");
5206 gtk_container_set_border_width (GTK_CONTAINER (button), 10);
5207 gtk_box_pack_start (GTK_BOX (cbox), button, TRUE, TRUE, 0);
5208 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
5209 GTK_SIGNAL_FUNC(gtk_widget_destroy),
5210 GTK_OBJECT (window));
5212 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
5213 gtk_widget_grab_default (button);
5216 if (!GTK_WIDGET_VISIBLE (window))
5217 gtk_widget_show_all (window);
5219 gtk_widget_destroy (window);
5226 static char * book_open_xpm[] = {
5249 static char * book_closed_xpm[] = {
5274 static char * mini_page_xpm[] = {
5297 static char * gtk_mini_xpm[] = {
5337 #define TESTGTK_CLIST_COLUMNS 12
5338 static gint clist_rows = 0;
5339 static GtkWidget *clist_omenu;
5342 add1000_clist (GtkWidget *widget, gpointer data)
5345 char text[TESTGTK_CLIST_COLUMNS][50];
5346 char *texts[TESTGTK_CLIST_COLUMNS];
5351 clist = GTK_CLIST (data);
5353 pixmap = gdk_pixmap_create_from_xpm_d (clist->clist_window,
5355 >K_WIDGET (data)->style->white,
5358 for (i = 0; i < TESTGTK_CLIST_COLUMNS; i++)
5361 sprintf (text[i], "Column %d", i);
5365 sprintf (text[1], "Right");
5366 sprintf (text[2], "Center");
5368 gtk_clist_freeze (GTK_CLIST (data));
5369 for (i = 0; i < 1000; i++)
5371 sprintf (text[0], "CListRow %d", rand() % 10000);
5372 row = gtk_clist_append (clist, texts);
5373 gtk_clist_set_pixtext (clist, row, 3, "gtk+", 5, pixmap, mask);
5376 gtk_clist_thaw (GTK_CLIST (data));
5378 gdk_pixmap_unref (pixmap);
5379 gdk_bitmap_unref (mask);
5383 add10000_clist (GtkWidget *widget, gpointer data)
5386 char text[TESTGTK_CLIST_COLUMNS][50];
5387 char *texts[TESTGTK_CLIST_COLUMNS];
5389 for (i = 0; i < TESTGTK_CLIST_COLUMNS; i++)
5392 sprintf (text[i], "Column %d", i);
5395 sprintf (text[1], "Right");
5396 sprintf (text[2], "Center");
5398 gtk_clist_freeze (GTK_CLIST (data));
5399 for (i = 0; i < 10000; i++)
5401 sprintf (text[0], "CListRow %d", rand() % 10000);
5402 gtk_clist_append (GTK_CLIST (data), texts);
5404 gtk_clist_thaw (GTK_CLIST (data));
5408 clear_clist (GtkWidget *widget, gpointer data)
5410 gtk_clist_clear (GTK_CLIST (data));
5414 void clist_remove_selection (GtkWidget *widget, GtkCList *clist)
5416 gtk_clist_freeze (clist);
5418 while (clist->selection)
5423 row = GPOINTER_TO_INT (clist->selection->data);
5425 gtk_clist_remove (clist, row);
5427 if (clist->selection_mode == GTK_SELECTION_BROWSE)
5431 if (clist->selection_mode == GTK_SELECTION_EXTENDED && !clist->selection &&
5432 clist->focus_row >= 0)
5433 gtk_clist_select_row (clist, clist->focus_row, -1);
5435 gtk_clist_thaw (clist);
5438 void toggle_title_buttons (GtkWidget *widget, GtkCList *clist)
5440 if (GTK_TOGGLE_BUTTON (widget)->active)
5441 gtk_clist_column_titles_show (clist);
5443 gtk_clist_column_titles_hide (clist);
5446 void toggle_reorderable (GtkWidget *widget, GtkCList *clist)
5448 gtk_clist_set_reorderable (clist, GTK_TOGGLE_BUTTON (widget)->active);
5452 insert_row_clist (GtkWidget *widget, gpointer data)
5454 static char *text[] =
5456 "This", "is an", "inserted", "row.",
5457 "This", "is an", "inserted", "row.",
5458 "This", "is an", "inserted", "row."
5461 static GtkStyle *style1 = NULL;
5462 static GtkStyle *style2 = NULL;
5463 static GtkStyle *style3 = NULL;
5466 if (GTK_CLIST (data)->focus_row >= 0)
5467 row = gtk_clist_insert (GTK_CLIST (data), GTK_CLIST (data)->focus_row,
5470 row = gtk_clist_prepend (GTK_CLIST (data), text);
5484 style1 = gtk_style_copy (GTK_WIDGET (data)->style);
5485 style1->base[GTK_STATE_NORMAL] = col1;
5486 style1->base[GTK_STATE_SELECTED] = col2;
5488 style2 = gtk_style_copy (GTK_WIDGET (data)->style);
5489 style2->fg[GTK_STATE_NORMAL] = col1;
5490 style2->fg[GTK_STATE_SELECTED] = col2;
5492 style3 = gtk_style_copy (GTK_WIDGET (data)->style);
5493 style3->fg[GTK_STATE_NORMAL] = col1;
5494 style3->base[GTK_STATE_NORMAL] = col2;
5495 pango_font_description_free (style3->font_desc);
5496 style3->font_desc = pango_font_description_from_string ("courier 12");
5499 gtk_clist_set_cell_style (GTK_CLIST (data), row, 3, style1);
5500 gtk_clist_set_cell_style (GTK_CLIST (data), row, 4, style2);
5501 gtk_clist_set_cell_style (GTK_CLIST (data), row, 0, style3);
5507 clist_warning_test (GtkWidget *button,
5511 static gboolean add_remove = FALSE;
5513 add_remove = !add_remove;
5515 child = gtk_label_new ("Test");
5516 gtk_widget_ref (child);
5517 gtk_object_sink (GTK_OBJECT (child));
5520 gtk_container_add (GTK_CONTAINER (clist), child);
5523 child->parent = clist;
5524 gtk_container_remove (GTK_CONTAINER (clist), child);
5525 child->parent = NULL;
5528 gtk_widget_destroy (child);
5529 gtk_widget_unref (child);
5533 undo_selection (GtkWidget *button, GtkCList *clist)
5535 gtk_clist_undo_selection (clist);
5539 clist_toggle_sel_mode (GtkWidget *widget, gpointer data)
5544 clist = GTK_CLIST (data);
5546 if (!GTK_WIDGET_MAPPED (widget))
5549 i = gtk_option_menu_get_history (GTK_OPTION_MENU (widget));
5551 gtk_clist_set_selection_mode (clist, selection_modes[i]);
5555 clist_click_column (GtkCList *clist, gint column, gpointer data)
5558 gtk_clist_set_column_visibility (clist, column, FALSE);
5559 else if (column == clist->sort_column)
5561 if (clist->sort_type == GTK_SORT_ASCENDING)
5562 clist->sort_type = GTK_SORT_DESCENDING;
5564 clist->sort_type = GTK_SORT_ASCENDING;
5567 gtk_clist_set_sort_column (clist, column);
5569 gtk_clist_sort (clist);
5573 create_clist (GtkWidget *widget)
5576 static GtkWidget *window = NULL;
5578 static char *titles[] =
5580 "auto resize", "not resizeable", "max width 100", "min width 50",
5581 "hide column", "Title 5", "Title 6", "Title 7",
5582 "Title 8", "Title 9", "Title 10", "Title 11"
5585 char text[TESTGTK_CLIST_COLUMNS][50];
5586 char *texts[TESTGTK_CLIST_COLUMNS];
5592 GtkWidget *separator;
5593 GtkWidget *scrolled_win;
5596 GtkWidget *undo_button;
5606 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
5607 gtk_window_set_screen (GTK_WINDOW (window),
5608 gtk_widget_get_screen (widget));
5610 gtk_signal_connect (GTK_OBJECT (window), "destroy",
5611 GTK_SIGNAL_FUNC (gtk_widget_destroyed), &window);
5613 gtk_window_set_title (GTK_WINDOW (window), "clist");
5614 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
5616 vbox = gtk_vbox_new (FALSE, 0);
5617 gtk_container_add (GTK_CONTAINER (window), vbox);
5619 scrolled_win = gtk_scrolled_window_new (NULL, NULL);
5620 gtk_container_set_border_width (GTK_CONTAINER (scrolled_win), 5);
5621 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win),
5622 GTK_POLICY_AUTOMATIC,
5623 GTK_POLICY_AUTOMATIC);
5625 /* create GtkCList here so we have a pointer to throw at the
5626 * button callbacks -- more is done with it later */
5627 clist = gtk_clist_new_with_titles (TESTGTK_CLIST_COLUMNS, titles);
5628 gtk_container_add (GTK_CONTAINER (scrolled_win), clist);
5629 gtk_signal_connect (GTK_OBJECT (clist), "click_column",
5630 (GtkSignalFunc) clist_click_column, NULL);
5632 /* control buttons */
5633 hbox = gtk_hbox_new (FALSE, 5);
5634 gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
5635 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
5637 button = gtk_button_new_with_label ("Insert Row");
5638 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
5639 gtk_signal_connect (GTK_OBJECT (button), "clicked",
5640 (GtkSignalFunc) insert_row_clist, (gpointer) clist);
5642 button = gtk_button_new_with_label ("Add 1,000 Rows With Pixmaps");
5643 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
5644 gtk_signal_connect (GTK_OBJECT (button), "clicked",
5645 (GtkSignalFunc) add1000_clist, (gpointer) clist);
5647 button = gtk_button_new_with_label ("Add 10,000 Rows");
5648 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
5649 gtk_signal_connect (GTK_OBJECT (button), "clicked",
5650 (GtkSignalFunc) add10000_clist, (gpointer) clist);
5652 /* second layer of buttons */
5653 hbox = gtk_hbox_new (FALSE, 5);
5654 gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
5655 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
5657 button = gtk_button_new_with_label ("Clear List");
5658 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
5659 gtk_signal_connect (GTK_OBJECT (button), "clicked",
5660 (GtkSignalFunc) clear_clist, (gpointer) clist);
5662 button = gtk_button_new_with_label ("Remove Selection");
5663 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
5664 gtk_signal_connect (GTK_OBJECT (button), "clicked",
5665 (GtkSignalFunc) clist_remove_selection,
5668 undo_button = gtk_button_new_with_label ("Undo Selection");
5669 gtk_box_pack_start (GTK_BOX (hbox), undo_button, TRUE, TRUE, 0);
5670 gtk_signal_connect (GTK_OBJECT (undo_button), "clicked",
5671 (GtkSignalFunc) undo_selection, (gpointer) clist);
5673 button = gtk_button_new_with_label ("Warning Test");
5674 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
5675 gtk_signal_connect (GTK_OBJECT (button), "clicked",
5676 (GtkSignalFunc) clist_warning_test,(gpointer) clist);
5678 /* third layer of buttons */
5679 hbox = gtk_hbox_new (FALSE, 5);
5680 gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
5681 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
5683 check = gtk_check_button_new_with_label ("Show Title Buttons");
5684 gtk_box_pack_start (GTK_BOX (hbox), check, FALSE, TRUE, 0);
5685 gtk_signal_connect (GTK_OBJECT (check), "clicked",
5686 GTK_SIGNAL_FUNC (toggle_title_buttons), clist);
5687 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check), TRUE);
5689 check = gtk_check_button_new_with_label ("Reorderable");
5690 gtk_box_pack_start (GTK_BOX (hbox), check, FALSE, TRUE, 0);
5691 gtk_signal_connect (GTK_OBJECT (check), "clicked",
5692 GTK_SIGNAL_FUNC (toggle_reorderable), clist);
5693 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check), TRUE);
5695 label = gtk_label_new ("Selection Mode :");
5696 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
5698 clist_omenu = build_option_menu (selection_mode_items, 3, 3,
5699 clist_toggle_sel_mode,
5701 gtk_box_pack_start (GTK_BOX (hbox), clist_omenu, FALSE, TRUE, 0);
5704 * the rest of the clist configuration
5707 gtk_box_pack_start (GTK_BOX (vbox), scrolled_win, TRUE, TRUE, 0);
5708 gtk_clist_set_row_height (GTK_CLIST (clist), 18);
5709 gtk_widget_set_usize (clist, -1, 300);
5711 for (i = 1; i < TESTGTK_CLIST_COLUMNS; i++)
5712 gtk_clist_set_column_width (GTK_CLIST (clist), i, 80);
5714 gtk_clist_set_column_auto_resize (GTK_CLIST (clist), 0, TRUE);
5715 gtk_clist_set_column_resizeable (GTK_CLIST (clist), 1, FALSE);
5716 gtk_clist_set_column_max_width (GTK_CLIST (clist), 2, 100);
5717 gtk_clist_set_column_min_width (GTK_CLIST (clist), 3, 50);
5718 gtk_clist_set_selection_mode (GTK_CLIST (clist), GTK_SELECTION_EXTENDED);
5719 gtk_clist_set_column_justification (GTK_CLIST (clist), 1,
5721 gtk_clist_set_column_justification (GTK_CLIST (clist), 2,
5722 GTK_JUSTIFY_CENTER);
5724 for (i = 0; i < TESTGTK_CLIST_COLUMNS; i++)
5727 sprintf (text[i], "Column %d", i);
5730 sprintf (text[1], "Right");
5731 sprintf (text[2], "Center");
5740 style = gtk_style_new ();
5741 style->fg[GTK_STATE_NORMAL] = col1;
5742 style->base[GTK_STATE_NORMAL] = col2;
5744 pango_font_description_set_size (style->font_desc, 14 * PANGO_SCALE);
5745 pango_font_description_set_weight (style->font_desc, PANGO_WEIGHT_BOLD);
5747 for (i = 0; i < 10; i++)
5749 sprintf (text[0], "CListRow %d", clist_rows++);
5750 gtk_clist_append (GTK_CLIST (clist), texts);
5755 gtk_clist_set_row_style (GTK_CLIST (clist), i, style);
5758 gtk_clist_set_cell_style (GTK_CLIST (clist), i, i % 4, style);
5763 gtk_style_unref (style);
5765 separator = gtk_hseparator_new ();
5766 gtk_box_pack_start (GTK_BOX (vbox), separator, FALSE, TRUE, 0);
5768 hbox = gtk_hbox_new (FALSE, 0);
5769 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0);
5771 button = gtk_button_new_with_label ("close");
5772 gtk_container_set_border_width (GTK_CONTAINER (button), 10);
5773 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
5774 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
5775 GTK_SIGNAL_FUNC(gtk_widget_destroy),
5776 GTK_OBJECT (window));
5778 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
5779 gtk_widget_grab_default (button);
5782 if (!GTK_WIDGET_VISIBLE (window))
5783 gtk_widget_show_all (window);
5787 gtk_widget_destroy (window);
5805 static gint books = 0;
5806 static gint pages = 0;
5808 static GtkWidget *book_label;
5809 static GtkWidget *page_label;
5810 static GtkWidget *sel_label;
5811 static GtkWidget *vis_label;
5812 static GtkWidget *omenu1;
5813 static GtkWidget *omenu2;
5814 static GtkWidget *omenu3;
5815 static GtkWidget *omenu4;
5816 static GtkWidget *spin1;
5817 static GtkWidget *spin2;
5818 static GtkWidget *spin3;
5819 static gint line_style;
5822 static CTreePixmaps *
5823 get_ctree_pixmaps (GtkCTree *ctree)
5825 GdkScreen *screen = gtk_widget_get_screen (GTK_WIDGET (ctree));
5826 CTreePixmaps *pixmaps = g_object_get_data (G_OBJECT (screen), "ctree-pixmaps");
5830 GdkColormap *colormap = gdk_screen_get_rgb_colormap (screen);
5831 pixmaps = g_new (CTreePixmaps, 1);
5833 pixmaps->pixmap1 = gdk_pixmap_colormap_create_from_xpm_d (NULL, colormap,
5835 NULL, book_closed_xpm);
5836 pixmaps->pixmap2 = gdk_pixmap_colormap_create_from_xpm_d (NULL, colormap,
5838 NULL, book_open_xpm);
5839 pixmaps->pixmap3 = gdk_pixmap_colormap_create_from_xpm_d (NULL, colormap,
5841 NULL, mini_page_xpm);
5843 g_object_set_data (G_OBJECT (screen), "ctree-pixmaps", pixmaps);
5849 void after_press (GtkCTree *ctree, gpointer data)
5853 sprintf (buf, "%d", g_list_length (GTK_CLIST (ctree)->selection));
5854 gtk_label_set_text (GTK_LABEL (sel_label), buf);
5856 sprintf (buf, "%d", g_list_length (GTK_CLIST (ctree)->row_list));
5857 gtk_label_set_text (GTK_LABEL (vis_label), buf);
5859 sprintf (buf, "%d", books);
5860 gtk_label_set_text (GTK_LABEL (book_label), buf);
5862 sprintf (buf, "%d", pages);
5863 gtk_label_set_text (GTK_LABEL (page_label), buf);
5866 void after_move (GtkCTree *ctree, GtkCTreeNode *child, GtkCTreeNode *parent,
5867 GtkCTreeNode *sibling, gpointer data)
5873 gtk_ctree_get_node_info (ctree, child, &source,
5874 NULL, NULL, NULL, NULL, NULL, NULL, NULL);
5876 gtk_ctree_get_node_info (ctree, parent, &target1,
5877 NULL, NULL, NULL, NULL, NULL, NULL, NULL);
5879 gtk_ctree_get_node_info (ctree, sibling, &target2,
5880 NULL, NULL, NULL, NULL, NULL, NULL, NULL);
5882 g_print ("Moving \"%s\" to \"%s\" with sibling \"%s\".\n", source,
5883 (parent) ? target1 : "nil", (sibling) ? target2 : "nil");
5886 void count_items (GtkCTree *ctree, GtkCTreeNode *list)
5888 if (GTK_CTREE_ROW (list)->is_leaf)
5894 void expand_all (GtkWidget *widget, GtkCTree *ctree)
5896 gtk_ctree_expand_recursive (ctree, NULL);
5897 after_press (ctree, NULL);
5900 void collapse_all (GtkWidget *widget, GtkCTree *ctree)
5902 gtk_ctree_collapse_recursive (ctree, NULL);
5903 after_press (ctree, NULL);
5906 void select_all (GtkWidget *widget, GtkCTree *ctree)
5908 gtk_ctree_select_recursive (ctree, NULL);
5909 after_press (ctree, NULL);
5912 void change_style (GtkWidget *widget, GtkCTree *ctree)
5914 static GtkStyle *style1 = NULL;
5915 static GtkStyle *style2 = NULL;
5921 if (GTK_CLIST (ctree)->focus_row >= 0)
5922 node = GTK_CTREE_NODE
5923 (g_list_nth (GTK_CLIST (ctree)->row_list,GTK_CLIST (ctree)->focus_row));
5925 node = GTK_CTREE_NODE (GTK_CLIST (ctree)->row_list);
5939 style1 = gtk_style_new ();
5940 style1->base[GTK_STATE_NORMAL] = col1;
5941 style1->fg[GTK_STATE_SELECTED] = col2;
5943 style2 = gtk_style_new ();
5944 style2->base[GTK_STATE_SELECTED] = col2;
5945 style2->fg[GTK_STATE_NORMAL] = col1;
5946 style2->base[GTK_STATE_NORMAL] = col2;
5947 pango_font_description_free (style2->font_desc);
5948 style2->font_desc = pango_font_description_from_string ("courier 30");
5951 gtk_ctree_node_set_cell_style (ctree, node, 1, style1);
5952 gtk_ctree_node_set_cell_style (ctree, node, 0, style2);
5954 if (GTK_CTREE_ROW (node)->children)
5955 gtk_ctree_node_set_row_style (ctree, GTK_CTREE_ROW (node)->children,
5959 void unselect_all (GtkWidget *widget, GtkCTree *ctree)
5961 gtk_ctree_unselect_recursive (ctree, NULL);
5962 after_press (ctree, NULL);
5965 void remove_selection (GtkWidget *widget, GtkCTree *ctree)
5970 clist = GTK_CLIST (ctree);
5972 gtk_clist_freeze (clist);
5974 while (clist->selection)
5976 node = clist->selection->data;
5978 if (GTK_CTREE_ROW (node)->is_leaf)
5981 gtk_ctree_post_recursive (ctree, node,
5982 (GtkCTreeFunc) count_items, NULL);
5984 gtk_ctree_remove_node (ctree, node);
5986 if (clist->selection_mode == GTK_SELECTION_BROWSE)
5990 if (clist->selection_mode == GTK_SELECTION_EXTENDED && !clist->selection &&
5991 clist->focus_row >= 0)
5993 node = gtk_ctree_node_nth (ctree, clist->focus_row);
5996 gtk_ctree_select (ctree, node);
5999 gtk_clist_thaw (clist);
6000 after_press (ctree, NULL);
6003 struct _ExportStruct {
6009 typedef struct _ExportStruct ExportStruct;
6012 gnode2ctree (GtkCTree *ctree,
6015 GtkCTreeNode *cnode,
6019 GdkPixmap *pixmap_closed;
6020 GdkBitmap *mask_closed;
6021 GdkPixmap *pixmap_opened;
6022 GdkBitmap *mask_opened;
6023 CTreePixmaps *pixmaps;
6025 if (!cnode || !gnode || (!(es = gnode->data)))
6028 pixmaps = get_ctree_pixmaps (ctree);
6032 pixmap_closed = pixmaps->pixmap3;
6033 mask_closed = pixmaps->mask3;
6034 pixmap_opened = NULL;
6039 pixmap_closed = pixmaps->pixmap1;
6040 mask_closed = pixmaps->mask1;
6041 pixmap_opened = pixmaps->pixmap2;
6042 mask_opened = pixmaps->mask2;
6045 gtk_ctree_set_node_info (ctree, cnode, es->tree, 2, pixmap_closed,
6046 mask_closed, pixmap_opened, mask_opened,
6047 es->is_leaf, (depth < 3));
6048 gtk_ctree_node_set_text (ctree, cnode, 1, es->info);
6056 ctree2gnode (GtkCTree *ctree,
6059 GtkCTreeNode *cnode,
6064 if (!cnode || !gnode)
6067 es = g_new (ExportStruct, 1);
6069 es->is_leaf = GTK_CTREE_ROW (cnode)->is_leaf;
6070 es->tree = GTK_CELL_PIXTEXT (GTK_CTREE_ROW (cnode)->row.cell[0])->text;
6071 es->info = GTK_CELL_PIXTEXT (GTK_CTREE_ROW (cnode)->row.cell[1])->text;
6075 void export_ctree (GtkWidget *widget, GtkCTree *ctree)
6077 char *title[] = { "Tree" , "Info" };
6078 static GtkWidget *export_window = NULL;
6079 static GtkCTree *export_ctree;
6081 GtkWidget *scrolled_win;
6089 export_window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
6091 gtk_window_set_screen (GTK_WINDOW (export_window),
6092 gtk_widget_get_screen (widget));
6094 gtk_signal_connect (GTK_OBJECT (export_window), "destroy",
6095 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
6098 gtk_window_set_title (GTK_WINDOW (export_window), "exported ctree");
6099 gtk_container_set_border_width (GTK_CONTAINER (export_window), 5);
6101 vbox = gtk_vbox_new (FALSE, 0);
6102 gtk_container_add (GTK_CONTAINER (export_window), vbox);
6104 button = gtk_button_new_with_label ("Close");
6105 gtk_box_pack_end (GTK_BOX (vbox), button, FALSE, TRUE, 0);
6107 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
6108 (GtkSignalFunc) gtk_widget_destroy,
6109 GTK_OBJECT(export_window));
6111 sep = gtk_hseparator_new ();
6112 gtk_box_pack_end (GTK_BOX (vbox), sep, FALSE, TRUE, 10);
6114 export_ctree = GTK_CTREE (gtk_ctree_new_with_titles (2, 0, title));
6115 gtk_ctree_set_line_style (export_ctree, GTK_CTREE_LINES_DOTTED);
6117 scrolled_win = gtk_scrolled_window_new (NULL, NULL);
6118 gtk_container_add (GTK_CONTAINER (scrolled_win),
6119 GTK_WIDGET (export_ctree));
6120 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win),
6121 GTK_POLICY_AUTOMATIC,
6122 GTK_POLICY_AUTOMATIC);
6123 gtk_box_pack_start (GTK_BOX (vbox), scrolled_win, TRUE, TRUE, 0);
6124 gtk_clist_set_selection_mode (GTK_CLIST (export_ctree),
6125 GTK_SELECTION_EXTENDED);
6126 gtk_clist_set_column_width (GTK_CLIST (export_ctree), 0, 200);
6127 gtk_clist_set_column_width (GTK_CLIST (export_ctree), 1, 200);
6128 gtk_widget_set_usize (GTK_WIDGET (export_ctree), 300, 200);
6131 if (!GTK_WIDGET_VISIBLE (export_window))
6132 gtk_widget_show_all (export_window);
6134 gtk_clist_clear (GTK_CLIST (export_ctree));
6136 node = GTK_CTREE_NODE (g_list_nth (GTK_CLIST (ctree)->row_list,
6137 GTK_CLIST (ctree)->focus_row));
6141 gnode = gtk_ctree_export_to_gnode (ctree, NULL, NULL, node,
6145 gtk_ctree_insert_gnode (export_ctree, NULL, NULL, gnode,
6147 g_node_destroy (gnode);
6151 void change_indent (GtkWidget *widget, GtkCTree *ctree)
6153 gtk_ctree_set_indent (ctree, GTK_ADJUSTMENT (widget)->value);
6156 void change_spacing (GtkWidget *widget, GtkCTree *ctree)
6158 gtk_ctree_set_spacing (ctree, GTK_ADJUSTMENT (widget)->value);
6161 void change_row_height (GtkWidget *widget, GtkCList *clist)
6163 gtk_clist_set_row_height (clist, GTK_ADJUSTMENT (widget)->value);
6166 void set_background (GtkCTree *ctree, GtkCTreeNode *node, gpointer data)
6168 GtkStyle *style = NULL;
6173 if (ctree->line_style != GTK_CTREE_LINES_TABBED)
6175 if (!GTK_CTREE_ROW (node)->is_leaf)
6176 style = GTK_CTREE_ROW (node)->row.data;
6177 else if (GTK_CTREE_ROW (node)->parent)
6178 style = GTK_CTREE_ROW (GTK_CTREE_ROW (node)->parent)->row.data;
6181 gtk_ctree_node_set_row_style (ctree, node, style);
6185 ctree_toggle_line_style (GtkWidget *widget, gpointer data)
6190 ctree = GTK_CTREE (data);
6192 if (!GTK_WIDGET_MAPPED (widget))
6195 i = gtk_option_menu_get_history (GTK_OPTION_MENU (widget));
6197 if ((ctree->line_style == GTK_CTREE_LINES_TABBED &&
6198 ((GtkCTreeLineStyle) i) != GTK_CTREE_LINES_TABBED) ||
6199 (ctree->line_style != GTK_CTREE_LINES_TABBED &&
6200 ((GtkCTreeLineStyle) i) == GTK_CTREE_LINES_TABBED))
6201 gtk_ctree_pre_recursive (ctree, NULL, set_background, NULL);
6202 gtk_ctree_set_line_style (ctree, i);
6207 ctree_toggle_expander_style (GtkWidget *widget, gpointer data)
6212 ctree = GTK_CTREE (data);
6214 if (!GTK_WIDGET_MAPPED (widget))
6217 i = gtk_option_menu_get_history (GTK_OPTION_MENU (widget));
6219 gtk_ctree_set_expander_style (ctree, (GtkCTreeExpanderStyle) i);
6223 ctree_toggle_justify (GtkWidget *widget, gpointer data)
6228 ctree = GTK_CTREE (data);
6230 if (!GTK_WIDGET_MAPPED (widget))
6233 i = gtk_option_menu_get_history (GTK_OPTION_MENU (widget));
6235 gtk_clist_set_column_justification (GTK_CLIST (ctree), ctree->tree_column,
6236 (GtkJustification) i);
6240 ctree_toggle_sel_mode (GtkWidget *widget, gpointer data)
6245 ctree = GTK_CTREE (data);
6247 if (!GTK_WIDGET_MAPPED (widget))
6250 i = gtk_option_menu_get_history (GTK_OPTION_MENU (widget));
6252 gtk_clist_set_selection_mode (GTK_CLIST (ctree), selection_modes[i]);
6253 after_press (ctree, NULL);
6256 void build_recursive (GtkCTree *ctree, gint cur_depth, gint depth,
6257 gint num_books, gint num_pages, GtkCTreeNode *parent)
6262 GtkCTreeNode *sibling;
6263 CTreePixmaps *pixmaps;
6270 pixmaps = get_ctree_pixmaps (ctree);
6272 for (i = num_pages + num_books; i > num_books; i--)
6275 sprintf (buf1, "Page %02d", (gint) rand() % 100);
6276 sprintf (buf2, "Item %d-%d", cur_depth, i);
6277 sibling = gtk_ctree_insert_node (ctree, parent, sibling, text, 5,
6278 pixmaps->pixmap3, pixmaps->mask3, NULL, NULL,
6281 if (parent && ctree->line_style == GTK_CTREE_LINES_TABBED)
6282 gtk_ctree_node_set_row_style (ctree, sibling,
6283 GTK_CTREE_ROW (parent)->row.style);
6286 if (cur_depth == depth)
6289 for (i = num_books; i > 0; i--)
6294 sprintf (buf1, "Book %02d", (gint) rand() % 100);
6295 sprintf (buf2, "Item %d-%d", cur_depth, i);
6296 sibling = gtk_ctree_insert_node (ctree, parent, sibling, text, 5,
6297 pixmaps->pixmap1, pixmaps->mask1, pixmaps->pixmap2, pixmaps->mask2,
6300 style = gtk_style_new ();
6301 switch (cur_depth % 3)
6304 style->base[GTK_STATE_NORMAL].red = 10000 * (cur_depth % 6);
6305 style->base[GTK_STATE_NORMAL].green = 0;
6306 style->base[GTK_STATE_NORMAL].blue = 65535 - ((i * 10000) % 65535);
6309 style->base[GTK_STATE_NORMAL].red = 10000 * (cur_depth % 6);
6310 style->base[GTK_STATE_NORMAL].green = 65535 - ((i * 10000) % 65535);
6311 style->base[GTK_STATE_NORMAL].blue = 0;
6314 style->base[GTK_STATE_NORMAL].red = 65535 - ((i * 10000) % 65535);
6315 style->base[GTK_STATE_NORMAL].green = 0;
6316 style->base[GTK_STATE_NORMAL].blue = 10000 * (cur_depth % 6);
6319 gtk_ctree_node_set_row_data_full (ctree, sibling, style,
6320 (GtkDestroyNotify) gtk_style_unref);
6322 if (ctree->line_style == GTK_CTREE_LINES_TABBED)
6323 gtk_ctree_node_set_row_style (ctree, sibling, style);
6325 build_recursive (ctree, cur_depth + 1, depth, num_books, num_pages,
6330 void rebuild_tree (GtkWidget *widget, GtkCTree *ctree)
6333 gchar label1[] = "Root";
6334 gchar label2[] = "";
6335 GtkCTreeNode *parent;
6338 CTreePixmaps *pixmaps;
6340 pixmaps = get_ctree_pixmaps (ctree);
6345 d = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (spin1));
6346 b = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (spin2));
6347 p = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (spin3));
6349 n = ((pow (b, d) - 1) / (b - 1)) * (p + 1);
6353 g_print ("%d total items? Try less\n",n);
6357 gtk_clist_freeze (GTK_CLIST (ctree));
6358 gtk_clist_clear (GTK_CLIST (ctree));
6363 parent = gtk_ctree_insert_node (ctree, NULL, NULL, text, 5, pixmaps->pixmap1,
6364 pixmaps->mask1, pixmaps->pixmap2, pixmaps->mask2, FALSE, TRUE);
6366 style = gtk_style_new ();
6367 style->base[GTK_STATE_NORMAL].red = 0;
6368 style->base[GTK_STATE_NORMAL].green = 45000;
6369 style->base[GTK_STATE_NORMAL].blue = 55000;
6370 gtk_ctree_node_set_row_data_full (ctree, parent, style,
6371 (GtkDestroyNotify) gtk_style_unref);
6373 if (ctree->line_style == GTK_CTREE_LINES_TABBED)
6374 gtk_ctree_node_set_row_style (ctree, parent, style);
6376 build_recursive (ctree, 1, d, b, p, parent);
6377 gtk_clist_thaw (GTK_CLIST (ctree));
6378 after_press (ctree, NULL);
6382 ctree_click_column (GtkCTree *ctree, gint column, gpointer data)
6386 clist = GTK_CLIST (ctree);
6388 if (column == clist->sort_column)
6390 if (clist->sort_type == GTK_SORT_ASCENDING)
6391 clist->sort_type = GTK_SORT_DESCENDING;
6393 clist->sort_type = GTK_SORT_ASCENDING;
6396 gtk_clist_set_sort_column (clist, column);
6398 gtk_ctree_sort_recursive (ctree, NULL);
6401 void create_ctree (GtkWidget *widget)
6403 static GtkWidget *window = NULL;
6404 GtkTooltips *tooltips;
6406 GtkWidget *scrolled_win;
6419 char *title[] = { "Tree" , "Info" };
6422 static gchar *items1[] =
6430 static gchar *items2[] =
6438 static gchar *items3[] =
6446 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
6447 gtk_window_set_screen (GTK_WINDOW (window),
6448 gtk_widget_get_screen (widget));
6450 gtk_signal_connect (GTK_OBJECT (window), "destroy",
6451 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
6454 gtk_window_set_title (GTK_WINDOW (window), "GtkCTree");
6455 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
6457 tooltips = gtk_tooltips_new ();
6458 gtk_object_ref (GTK_OBJECT (tooltips));
6459 gtk_object_sink (GTK_OBJECT (tooltips));
6461 gtk_object_set_data_full (GTK_OBJECT (window), "tooltips", tooltips,
6462 (GtkDestroyNotify) gtk_object_unref);
6464 vbox = gtk_vbox_new (FALSE, 0);
6465 gtk_container_add (GTK_CONTAINER (window), vbox);
6467 hbox = gtk_hbox_new (FALSE, 5);
6468 gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
6469 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0);
6471 label = gtk_label_new ("Depth :");
6472 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
6474 adj = (GtkAdjustment *) gtk_adjustment_new (4, 1, 10, 1, 5, 0);
6475 spin1 = gtk_spin_button_new (adj, 0, 0);
6476 gtk_box_pack_start (GTK_BOX (hbox), spin1, FALSE, TRUE, 5);
6478 label = gtk_label_new ("Books :");
6479 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
6481 adj = (GtkAdjustment *) gtk_adjustment_new (3, 1, 20, 1, 5, 0);
6482 spin2 = gtk_spin_button_new (adj, 0, 0);
6483 gtk_box_pack_start (GTK_BOX (hbox), spin2, FALSE, TRUE, 5);
6485 label = gtk_label_new ("Pages :");
6486 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
6488 adj = (GtkAdjustment *) gtk_adjustment_new (5, 1, 20, 1, 5, 0);
6489 spin3 = gtk_spin_button_new (adj, 0, 0);
6490 gtk_box_pack_start (GTK_BOX (hbox), spin3, FALSE, TRUE, 5);
6492 button = gtk_button_new_with_label ("Close");
6493 gtk_box_pack_end (GTK_BOX (hbox), button, TRUE, TRUE, 0);
6495 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
6496 (GtkSignalFunc) gtk_widget_destroy,
6497 GTK_OBJECT(window));
6499 button = gtk_button_new_with_label ("Rebuild Tree");
6500 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
6502 scrolled_win = gtk_scrolled_window_new (NULL, NULL);
6503 gtk_container_set_border_width (GTK_CONTAINER (scrolled_win), 5);
6504 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win),
6505 GTK_POLICY_AUTOMATIC,
6507 gtk_box_pack_start (GTK_BOX (vbox), scrolled_win, TRUE, TRUE, 0);
6509 ctree = GTK_CTREE (gtk_ctree_new_with_titles (2, 0, title));
6510 gtk_container_add (GTK_CONTAINER (scrolled_win), GTK_WIDGET (ctree));
6512 gtk_clist_set_column_auto_resize (GTK_CLIST (ctree), 0, TRUE);
6513 gtk_clist_set_column_width (GTK_CLIST (ctree), 1, 200);
6514 gtk_clist_set_selection_mode (GTK_CLIST (ctree), GTK_SELECTION_EXTENDED);
6515 gtk_ctree_set_line_style (ctree, GTK_CTREE_LINES_DOTTED);
6516 line_style = GTK_CTREE_LINES_DOTTED;
6518 gtk_signal_connect (GTK_OBJECT (button), "clicked",
6519 GTK_SIGNAL_FUNC (rebuild_tree), ctree);
6520 gtk_signal_connect (GTK_OBJECT (ctree), "click_column",
6521 (GtkSignalFunc) ctree_click_column, NULL);
6523 gtk_signal_connect_after (GTK_OBJECT (ctree), "button_press_event",
6524 GTK_SIGNAL_FUNC (after_press), NULL);
6525 gtk_signal_connect_after (GTK_OBJECT (ctree), "button_release_event",
6526 GTK_SIGNAL_FUNC (after_press), NULL);
6527 gtk_signal_connect_after (GTK_OBJECT (ctree), "tree_move",
6528 GTK_SIGNAL_FUNC (after_move), NULL);
6529 gtk_signal_connect_after (GTK_OBJECT (ctree), "end_selection",
6530 GTK_SIGNAL_FUNC (after_press), NULL);
6531 gtk_signal_connect_after (GTK_OBJECT (ctree), "toggle_focus_row",
6532 GTK_SIGNAL_FUNC (after_press), NULL);
6533 gtk_signal_connect_after (GTK_OBJECT (ctree), "select_all",
6534 GTK_SIGNAL_FUNC (after_press), NULL);
6535 gtk_signal_connect_after (GTK_OBJECT (ctree), "unselect_all",
6536 GTK_SIGNAL_FUNC (after_press), NULL);
6537 gtk_signal_connect_after (GTK_OBJECT (ctree), "scroll_vertical",
6538 GTK_SIGNAL_FUNC (after_press), NULL);
6540 bbox = gtk_hbox_new (FALSE, 5);
6541 gtk_container_set_border_width (GTK_CONTAINER (bbox), 5);
6542 gtk_box_pack_start (GTK_BOX (vbox), bbox, FALSE, TRUE, 0);
6544 mbox = gtk_vbox_new (TRUE, 5);
6545 gtk_box_pack_start (GTK_BOX (bbox), mbox, FALSE, TRUE, 0);
6547 label = gtk_label_new ("Row Height :");
6548 gtk_box_pack_start (GTK_BOX (mbox), label, FALSE, FALSE, 0);
6550 label = gtk_label_new ("Indent :");
6551 gtk_box_pack_start (GTK_BOX (mbox), label, FALSE, FALSE, 0);
6553 label = gtk_label_new ("Spacing :");
6554 gtk_box_pack_start (GTK_BOX (mbox), label, FALSE, FALSE, 0);
6556 mbox = gtk_vbox_new (TRUE, 5);
6557 gtk_box_pack_start (GTK_BOX (bbox), mbox, FALSE, TRUE, 0);
6559 adj = (GtkAdjustment *) gtk_adjustment_new (20, 12, 100, 1, 10, 0);
6560 spinner = gtk_spin_button_new (adj, 0, 0);
6561 gtk_box_pack_start (GTK_BOX (mbox), spinner, FALSE, FALSE, 5);
6562 gtk_tooltips_set_tip (tooltips, spinner,
6563 "Row height of list items", NULL);
6564 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
6565 GTK_SIGNAL_FUNC (change_row_height), ctree);
6566 gtk_clist_set_row_height ( GTK_CLIST (ctree), adj->value);
6568 adj = (GtkAdjustment *) gtk_adjustment_new (20, 0, 60, 1, 10, 0);
6569 spinner = gtk_spin_button_new (adj, 0, 0);
6570 gtk_box_pack_start (GTK_BOX (mbox), spinner, FALSE, FALSE, 5);
6571 gtk_tooltips_set_tip (tooltips, spinner, "Tree Indentation.", NULL);
6572 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
6573 GTK_SIGNAL_FUNC (change_indent), ctree);
6575 adj = (GtkAdjustment *) gtk_adjustment_new (5, 0, 60, 1, 10, 0);
6576 spinner = gtk_spin_button_new (adj, 0, 0);
6577 gtk_box_pack_start (GTK_BOX (mbox), spinner, FALSE, FALSE, 5);
6578 gtk_tooltips_set_tip (tooltips, spinner, "Tree Spacing.", NULL);
6579 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
6580 GTK_SIGNAL_FUNC (change_spacing), ctree);
6582 mbox = gtk_vbox_new (TRUE, 5);
6583 gtk_box_pack_start (GTK_BOX (bbox), mbox, FALSE, TRUE, 0);
6585 hbox = gtk_hbox_new (FALSE, 5);
6586 gtk_box_pack_start (GTK_BOX (mbox), hbox, FALSE, FALSE, 0);
6588 button = gtk_button_new_with_label ("Expand All");
6589 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
6590 gtk_signal_connect (GTK_OBJECT (button), "clicked",
6591 GTK_SIGNAL_FUNC (expand_all), ctree);
6593 button = gtk_button_new_with_label ("Collapse All");
6594 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
6595 gtk_signal_connect (GTK_OBJECT (button), "clicked",
6596 GTK_SIGNAL_FUNC (collapse_all), ctree);
6598 button = gtk_button_new_with_label ("Change Style");
6599 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
6600 gtk_signal_connect (GTK_OBJECT (button), "clicked",
6601 GTK_SIGNAL_FUNC (change_style), ctree);
6603 button = gtk_button_new_with_label ("Export Tree");
6604 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
6605 gtk_signal_connect (GTK_OBJECT (button), "clicked",
6606 GTK_SIGNAL_FUNC (export_ctree), ctree);
6608 hbox = gtk_hbox_new (FALSE, 5);
6609 gtk_box_pack_start (GTK_BOX (mbox), hbox, FALSE, FALSE, 0);
6611 button = gtk_button_new_with_label ("Select All");
6612 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
6613 gtk_signal_connect (GTK_OBJECT (button), "clicked",
6614 GTK_SIGNAL_FUNC (select_all), ctree);
6616 button = gtk_button_new_with_label ("Unselect All");
6617 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
6618 gtk_signal_connect (GTK_OBJECT (button), "clicked",
6619 GTK_SIGNAL_FUNC (unselect_all), ctree);
6621 button = gtk_button_new_with_label ("Remove Selection");
6622 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
6623 gtk_signal_connect (GTK_OBJECT (button), "clicked",
6624 GTK_SIGNAL_FUNC (remove_selection), ctree);
6626 check = gtk_check_button_new_with_label ("Reorderable");
6627 gtk_box_pack_start (GTK_BOX (hbox), check, FALSE, TRUE, 0);
6628 gtk_tooltips_set_tip (tooltips, check,
6629 "Tree items can be reordered by dragging.", NULL);
6630 gtk_signal_connect (GTK_OBJECT (check), "clicked",
6631 GTK_SIGNAL_FUNC (toggle_reorderable), ctree);
6632 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check), TRUE);
6634 hbox = gtk_hbox_new (TRUE, 5);
6635 gtk_box_pack_start (GTK_BOX (mbox), hbox, FALSE, FALSE, 0);
6637 omenu1 = build_option_menu (items1, 4, 2,
6638 ctree_toggle_line_style,
6640 gtk_box_pack_start (GTK_BOX (hbox), omenu1, FALSE, TRUE, 0);
6641 gtk_tooltips_set_tip (tooltips, omenu1, "The tree's line style.", NULL);
6643 omenu2 = build_option_menu (items2, 4, 1,
6644 ctree_toggle_expander_style,
6646 gtk_box_pack_start (GTK_BOX (hbox), omenu2, FALSE, TRUE, 0);
6647 gtk_tooltips_set_tip (tooltips, omenu2, "The tree's expander style.",
6650 omenu3 = build_option_menu (items3, 2, 0,
6651 ctree_toggle_justify, ctree);
6652 gtk_box_pack_start (GTK_BOX (hbox), omenu3, FALSE, TRUE, 0);
6653 gtk_tooltips_set_tip (tooltips, omenu3, "The tree's justification.",
6656 omenu4 = build_option_menu (selection_mode_items, 3, 3,
6657 ctree_toggle_sel_mode, ctree);
6658 gtk_box_pack_start (GTK_BOX (hbox), omenu4, FALSE, TRUE, 0);
6659 gtk_tooltips_set_tip (tooltips, omenu4, "The list's selection mode.",
6662 gtk_widget_realize (window);
6664 gtk_widget_set_usize (GTK_WIDGET (ctree), 0, 300);
6666 frame = gtk_frame_new (NULL);
6667 gtk_container_set_border_width (GTK_CONTAINER (frame), 0);
6668 gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_OUT);
6669 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, TRUE, 0);
6671 hbox = gtk_hbox_new (TRUE, 2);
6672 gtk_container_set_border_width (GTK_CONTAINER (hbox), 2);
6673 gtk_container_add (GTK_CONTAINER (frame), hbox);
6675 frame = gtk_frame_new (NULL);
6676 gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN);
6677 gtk_box_pack_start (GTK_BOX (hbox), frame, FALSE, TRUE, 0);
6679 hbox2 = gtk_hbox_new (FALSE, 0);
6680 gtk_container_set_border_width (GTK_CONTAINER (hbox2), 2);
6681 gtk_container_add (GTK_CONTAINER (frame), hbox2);
6683 label = gtk_label_new ("Books :");
6684 gtk_box_pack_start (GTK_BOX (hbox2), label, FALSE, TRUE, 0);
6686 sprintf (buf, "%d", books);
6687 book_label = gtk_label_new (buf);
6688 gtk_box_pack_end (GTK_BOX (hbox2), book_label, FALSE, TRUE, 5);
6690 frame = gtk_frame_new (NULL);
6691 gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN);
6692 gtk_box_pack_start (GTK_BOX (hbox), frame, FALSE, TRUE, 0);
6694 hbox2 = gtk_hbox_new (FALSE, 0);
6695 gtk_container_set_border_width (GTK_CONTAINER (hbox2), 2);
6696 gtk_container_add (GTK_CONTAINER (frame), hbox2);
6698 label = gtk_label_new ("Pages :");
6699 gtk_box_pack_start (GTK_BOX (hbox2), label, FALSE, TRUE, 0);
6701 sprintf (buf, "%d", pages);
6702 page_label = gtk_label_new (buf);
6703 gtk_box_pack_end (GTK_BOX (hbox2), page_label, FALSE, TRUE, 5);
6705 frame = gtk_frame_new (NULL);
6706 gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN);
6707 gtk_box_pack_start (GTK_BOX (hbox), frame, FALSE, TRUE, 0);
6709 hbox2 = gtk_hbox_new (FALSE, 0);
6710 gtk_container_set_border_width (GTK_CONTAINER (hbox2), 2);
6711 gtk_container_add (GTK_CONTAINER (frame), hbox2);
6713 label = gtk_label_new ("Selected :");
6714 gtk_box_pack_start (GTK_BOX (hbox2), label, FALSE, TRUE, 0);
6716 sprintf (buf, "%d", g_list_length (GTK_CLIST (ctree)->selection));
6717 sel_label = gtk_label_new (buf);
6718 gtk_box_pack_end (GTK_BOX (hbox2), sel_label, FALSE, TRUE, 5);
6720 frame = gtk_frame_new (NULL);
6721 gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN);
6722 gtk_box_pack_start (GTK_BOX (hbox), frame, FALSE, TRUE, 0);
6724 hbox2 = gtk_hbox_new (FALSE, 0);
6725 gtk_container_set_border_width (GTK_CONTAINER (hbox2), 2);
6726 gtk_container_add (GTK_CONTAINER (frame), hbox2);
6728 label = gtk_label_new ("Visible :");
6729 gtk_box_pack_start (GTK_BOX (hbox2), label, FALSE, TRUE, 0);
6731 sprintf (buf, "%d", g_list_length (GTK_CLIST (ctree)->row_list));
6732 vis_label = gtk_label_new (buf);
6733 gtk_box_pack_end (GTK_BOX (hbox2), vis_label, FALSE, TRUE, 5);
6735 rebuild_tree (NULL, ctree);
6738 if (!GTK_WIDGET_VISIBLE (window))
6739 gtk_widget_show_all (window);
6741 gtk_widget_destroy (window);
6749 color_selection_ok (GtkWidget *w,
6750 GtkColorSelectionDialog *cs)
6752 GtkColorSelection *colorsel;
6755 colorsel=GTK_COLOR_SELECTION(cs->colorsel);
6757 gtk_color_selection_get_color(colorsel,color);
6758 gtk_color_selection_set_color(colorsel,color);
6762 color_selection_changed (GtkWidget *w,
6763 GtkColorSelectionDialog *cs)
6765 GtkColorSelection *colorsel;
6768 colorsel=GTK_COLOR_SELECTION(cs->colorsel);
6769 gtk_color_selection_get_color(colorsel,color);
6773 opacity_toggled_cb (GtkWidget *w,
6774 GtkColorSelectionDialog *cs)
6776 GtkColorSelection *colorsel;
6778 colorsel = GTK_COLOR_SELECTION (cs->colorsel);
6779 gtk_color_selection_set_has_opacity_control (colorsel,
6780 gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (w)));
6784 palette_toggled_cb (GtkWidget *w,
6785 GtkColorSelectionDialog *cs)
6787 GtkColorSelection *colorsel;
6789 colorsel = GTK_COLOR_SELECTION (cs->colorsel);
6790 gtk_color_selection_set_has_palette (colorsel,
6791 gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (w)));
6795 create_color_selection (GtkWidget *widget)
6797 static GtkWidget *window = NULL;
6801 GtkWidget *options_hbox;
6802 GtkWidget *check_button;
6804 window = gtk_color_selection_dialog_new ("color selection dialog");
6805 gtk_window_set_screen (GTK_WINDOW (window),
6806 gtk_widget_get_screen (widget));
6808 gtk_widget_show (GTK_COLOR_SELECTION_DIALOG (window)->help_button);
6810 gtk_window_set_position (GTK_WINDOW (window), GTK_WIN_POS_MOUSE);
6812 gtk_signal_connect (GTK_OBJECT (window), "destroy",
6813 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
6816 options_hbox = gtk_hbox_new (FALSE, 0);
6817 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox), options_hbox, FALSE, FALSE, 0);
6818 gtk_container_set_border_width (GTK_CONTAINER (options_hbox), 10);
6820 check_button = gtk_check_button_new_with_label ("Show Opacity");
6821 gtk_box_pack_start (GTK_BOX (options_hbox), check_button, FALSE, FALSE, 0);
6822 gtk_signal_connect (GTK_OBJECT (check_button), "toggled",
6823 GTK_SIGNAL_FUNC (opacity_toggled_cb), window);
6825 check_button = gtk_check_button_new_with_label ("Show Palette");
6826 gtk_box_pack_end (GTK_BOX (options_hbox), check_button, FALSE, FALSE, 0);
6827 gtk_signal_connect (GTK_OBJECT (check_button), "toggled",
6828 GTK_SIGNAL_FUNC (palette_toggled_cb), window);
6830 gtk_signal_connect (
6831 GTK_OBJECT (GTK_COLOR_SELECTION_DIALOG (window)->colorsel),
6833 GTK_SIGNAL_FUNC(color_selection_changed),
6836 gtk_signal_connect (
6837 GTK_OBJECT (GTK_COLOR_SELECTION_DIALOG (window)->ok_button),
6839 GTK_SIGNAL_FUNC(color_selection_ok),
6842 gtk_signal_connect_object (
6843 GTK_OBJECT (GTK_COLOR_SELECTION_DIALOG (window)->cancel_button),
6845 GTK_SIGNAL_FUNC(gtk_widget_destroy),
6846 GTK_OBJECT (window));
6849 if (!GTK_WIDGET_VISIBLE (window))
6850 gtk_widget_show_all (window);
6852 gtk_widget_destroy (window);
6860 show_fileops (GtkWidget *widget,
6861 GtkFileSelection *fs)
6865 show_ops = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget));
6868 gtk_file_selection_show_fileop_buttons (fs);
6870 gtk_file_selection_hide_fileop_buttons (fs);
6874 select_multiple (GtkWidget *widget,
6875 GtkFileSelection *fs)
6877 gboolean select_multiple;
6879 select_multiple = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget));
6880 gtk_file_selection_set_select_multiple (fs, select_multiple);
6884 file_selection_ok (GtkFileSelection *fs)
6889 selections = gtk_file_selection_get_selections (fs);
6891 for (i = 0; selections[i] != NULL; i++)
6892 g_print ("%s\n", selections[i]);
6894 g_strfreev (selections);
6896 gtk_widget_destroy (GTK_WIDGET (fs));
6900 create_file_selection (GtkWidget *widget)
6902 static GtkWidget *window = NULL;
6907 window = gtk_file_selection_new ("file selection dialog");
6908 gtk_window_set_screen (GTK_WINDOW (window),
6909 gtk_widget_get_screen (widget));
6911 gtk_file_selection_hide_fileop_buttons (GTK_FILE_SELECTION (window));
6913 gtk_window_set_position (GTK_WINDOW (window), GTK_WIN_POS_MOUSE);
6915 g_signal_connect (window, "destroy",
6916 G_CALLBACK (gtk_widget_destroyed),
6919 g_signal_connect_swapped (GTK_FILE_SELECTION (window)->ok_button,
6921 G_CALLBACK (file_selection_ok),
6923 g_signal_connect_swapped (GTK_FILE_SELECTION (window)->cancel_button,
6925 G_CALLBACK (gtk_widget_destroy),
6928 button = gtk_check_button_new_with_label ("Show Fileops");
6929 g_signal_connect (button, "toggled",
6930 G_CALLBACK (show_fileops),
6932 gtk_box_pack_start (GTK_BOX (GTK_FILE_SELECTION (window)->action_area),
6933 button, FALSE, FALSE, 0);
6934 gtk_widget_show (button);
6936 button = gtk_check_button_new_with_label ("Select Multiple");
6937 g_signal_connect (button, "clicked",
6938 G_CALLBACK (select_multiple),
6940 gtk_box_pack_start (GTK_BOX (GTK_FILE_SELECTION (window)->action_area),
6941 button, FALSE, FALSE, 0);
6942 gtk_widget_show (button);
6945 if (!GTK_WIDGET_VISIBLE (window))
6946 gtk_widget_show (window);
6948 gtk_widget_destroy (window);
6952 flipping_toggled_cb (GtkWidget *widget, gpointer data)
6954 int state = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget));
6955 int new_direction = state ? GTK_TEXT_DIR_RTL : GTK_TEXT_DIR_LTR;
6957 gtk_widget_set_default_direction (new_direction);
6961 create_flipping (GtkWidget *widget)
6963 static GtkWidget *window = NULL;
6964 GtkWidget *check_button, *button;
6968 window = gtk_dialog_new ();
6970 gtk_window_set_screen (GTK_WINDOW (window),
6971 gtk_widget_get_screen (widget));
6973 gtk_signal_connect (GTK_OBJECT (window), "destroy",
6974 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
6977 gtk_window_set_title (GTK_WINDOW (window), "Bidirectional Flipping");
6979 check_button = gtk_check_button_new_with_label ("Right-to-left global direction");
6980 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox),
6981 check_button, TRUE, TRUE, 0);
6983 if (gtk_widget_get_default_direction () == GTK_TEXT_DIR_RTL)
6984 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check_button), TRUE);
6986 gtk_signal_connect (GTK_OBJECT (check_button), "toggled",
6987 GTK_SIGNAL_FUNC (flipping_toggled_cb), FALSE);
6989 gtk_container_set_border_width (GTK_CONTAINER (check_button), 10);
6991 button = gtk_button_new_with_label ("Close");
6992 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
6993 GTK_SIGNAL_FUNC (gtk_widget_destroy), GTK_OBJECT (window));
6994 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
6995 button, TRUE, TRUE, 0);
6998 if (!GTK_WIDGET_VISIBLE (window))
6999 gtk_widget_show_all (window);
7001 gtk_widget_destroy (window);
7009 make_focus_table (GList **list)
7014 table = gtk_table_new (5, 5, FALSE);
7027 widget = gtk_entry_new ();
7029 widget = gtk_button_new_with_label ("Foo");
7031 *list = g_list_prepend (*list, widget);
7033 gtk_table_attach (GTK_TABLE (table),
7037 GTK_EXPAND | GTK_FILL,
7038 GTK_EXPAND | GTK_FILL,
7047 *list = g_list_reverse (*list);
7053 create_focus (GtkWidget *widget)
7055 static GtkWidget *window = NULL;
7063 window = gtk_dialog_new_with_buttons ("Keyboard focus navigation",
7069 gtk_window_set_screen (GTK_WINDOW (window),
7070 gtk_widget_get_screen (widget));
7072 gtk_signal_connect (GTK_OBJECT (window), "destroy",
7073 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
7076 gtk_signal_connect (GTK_OBJECT (window), "response",
7077 GTK_SIGNAL_FUNC (gtk_widget_destroy),
7080 gtk_window_set_title (GTK_WINDOW (window), "Keyboard Focus Navigation");
7082 frame = gtk_frame_new ("Weird tab focus chain");
7084 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox),
7085 frame, TRUE, TRUE, 0);
7087 table = make_focus_table (&list);
7089 gtk_container_add (GTK_CONTAINER (frame), table);
7091 gtk_container_set_focus_chain (GTK_CONTAINER (table),
7096 frame = gtk_frame_new ("Default tab focus chain");
7098 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox),
7099 frame, TRUE, TRUE, 0);
7102 table = make_focus_table (&list);
7106 gtk_container_add (GTK_CONTAINER (frame), table);
7109 if (!GTK_WIDGET_VISIBLE (window))
7110 gtk_widget_show_all (window);
7112 gtk_widget_destroy (window);
7120 font_selection_ok (GtkWidget *w,
7121 GtkFontSelectionDialog *fs)
7123 gchar *s = gtk_font_selection_dialog_get_font_name (fs);
7125 g_print ("%s\n", s);
7127 gtk_widget_destroy (GTK_WIDGET (fs));
7131 create_font_selection (GtkWidget *widget)
7133 static GtkWidget *window = NULL;
7137 window = gtk_font_selection_dialog_new ("Font Selection Dialog");
7139 gtk_window_set_screen (GTK_WINDOW (window),
7140 gtk_widget_get_screen (widget));
7142 gtk_window_set_position (GTK_WINDOW (window), GTK_WIN_POS_MOUSE);
7144 gtk_signal_connect (GTK_OBJECT (window), "destroy",
7145 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
7148 gtk_signal_connect (GTK_OBJECT (GTK_FONT_SELECTION_DIALOG (window)->ok_button),
7149 "clicked", GTK_SIGNAL_FUNC(font_selection_ok),
7150 GTK_FONT_SELECTION_DIALOG (window));
7151 gtk_signal_connect_object (GTK_OBJECT (GTK_FONT_SELECTION_DIALOG (window)->cancel_button),
7152 "clicked", GTK_SIGNAL_FUNC(gtk_widget_destroy),
7153 GTK_OBJECT (window));
7156 if (!GTK_WIDGET_VISIBLE (window))
7157 gtk_widget_show (window);
7159 gtk_widget_destroy (window);
7166 static GtkWidget *dialog_window = NULL;
7169 label_toggle (GtkWidget *widget,
7174 *label = gtk_label_new ("Dialog Test");
7175 gtk_signal_connect (GTK_OBJECT (*label),
7177 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
7179 gtk_misc_set_padding (GTK_MISC (*label), 10, 10);
7180 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog_window)->vbox),
7181 *label, TRUE, TRUE, 0);
7182 gtk_widget_show (*label);
7185 gtk_widget_destroy (*label);
7188 #define RESPONSE_TOGGLE_SEPARATOR 1
7191 print_response (GtkWidget *dialog,
7195 g_print ("response signal received (%d)\n", response_id);
7197 if (response_id == RESPONSE_TOGGLE_SEPARATOR)
7199 gtk_dialog_set_has_separator (GTK_DIALOG (dialog),
7200 !gtk_dialog_get_has_separator (GTK_DIALOG (dialog)));
7205 create_dialog (GtkWidget *widget)
7207 static GtkWidget *label;
7212 /* This is a terrible example; it's much simpler to create
7213 * dialogs than this. Don't use testgtk for example code,
7217 dialog_window = gtk_dialog_new ();
7218 gtk_window_set_screen (GTK_WINDOW (dialog_window),
7219 gtk_widget_get_screen (widget));
7221 gtk_signal_connect (GTK_OBJECT (dialog_window),
7223 GTK_SIGNAL_FUNC (print_response),
7226 gtk_signal_connect (GTK_OBJECT (dialog_window), "destroy",
7227 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
7230 gtk_window_set_title (GTK_WINDOW (dialog_window), "GtkDialog");
7231 gtk_container_set_border_width (GTK_CONTAINER (dialog_window), 0);
7233 button = gtk_button_new_with_label ("OK");
7234 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
7235 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog_window)->action_area),
7236 button, TRUE, TRUE, 0);
7237 gtk_widget_grab_default (button);
7238 gtk_widget_show (button);
7240 button = gtk_button_new_with_label ("Toggle");
7241 gtk_signal_connect (GTK_OBJECT (button), "clicked",
7242 GTK_SIGNAL_FUNC (label_toggle),
7244 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
7245 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog_window)->action_area),
7246 button, TRUE, TRUE, 0);
7247 gtk_widget_show (button);
7251 button = gtk_button_new_with_label ("Separator");
7253 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
7255 gtk_dialog_add_action_widget (GTK_DIALOG (dialog_window),
7257 RESPONSE_TOGGLE_SEPARATOR);
7258 gtk_widget_show (button);
7261 if (!GTK_WIDGET_VISIBLE (dialog_window))
7262 gtk_widget_show (dialog_window);
7264 gtk_widget_destroy (dialog_window);
7267 /* Display & Screen test
7273 GtkWidget *radio_dpy;
7274 GtkWidget *toplevel;
7275 GtkWidget *dialog_window;
7276 GList *valid_display_list;
7277 } ScreenDisplaySelection;
7280 display_name_cmp (gconstpointer a,
7283 return g_ascii_strcasecmp (a,b);
7287 screen_display_check (GtkWidget *widget, ScreenDisplaySelection *data)
7290 GdkDisplay *display = gtk_widget_get_display (widget);
7292 GdkScreen *new_screen = NULL;
7293 GdkScreen *current_screen = gtk_widget_get_screen (widget);
7295 if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (data->radio_dpy)))
7297 display_name = g_strdup (gtk_entry_get_text (data->entry));
7298 display = gdk_display_open (display_name);
7302 dialog = gtk_message_dialog_new (GTK_WINDOW (gtk_widget_get_toplevel (widget)),
7303 GTK_DIALOG_DESTROY_WITH_PARENT,
7306 "The display :\n%s\ncannot be opened",
7308 gtk_window_set_screen (GTK_WINDOW (dialog), current_screen);
7309 gtk_widget_show (dialog);
7310 g_signal_connect (G_OBJECT (dialog), "response",
7311 G_CALLBACK (gtk_widget_destroy),
7316 if (!g_list_find_custom (data->valid_display_list,
7319 data->valid_display_list = g_list_append (data->valid_display_list,
7322 new_screen = gdk_display_get_default_screen (display);
7327 gint number_of_screens = gdk_display_get_n_screens (display);
7328 gint screen_num = gdk_screen_get_number (current_screen);
7329 if ((screen_num +1) < number_of_screens)
7330 new_screen = gdk_display_get_screen (display, screen_num + 1);
7332 new_screen = gdk_display_get_screen (display, 0);
7337 gtk_window_set_screen (GTK_WINDOW (data->toplevel), new_screen);
7338 gtk_widget_destroy (data->dialog_window);
7343 screen_display_destroy_diag (GtkWidget *widget, GtkWidget *data)
7345 gtk_widget_destroy (data);
7349 create_display_screen (GtkWidget *widget)
7351 GtkWidget *table, *frame, *window, *combo_dpy, *vbox;
7352 GtkWidget *radio_dpy, *radio_scr, *applyb, *cancelb;
7354 ScreenDisplaySelection *scr_dpy_data;
7355 GdkScreen *screen = gtk_widget_get_screen (widget);
7356 static GList *valid_display_list = NULL;
7358 GdkDisplay *display = gdk_screen_get_display (screen);
7360 window = gtk_widget_new (gtk_window_get_type (),
7363 "type", GTK_WINDOW_TOPLEVEL,
7365 "Screen or Display selection",
7366 "border_width", 10, NULL);
7367 g_signal_connect (G_OBJECT (window), "destroy",
7368 G_CALLBACK (gtk_widget_destroy), NULL);
7370 vbox = gtk_vbox_new (FALSE, 3);
7371 gtk_container_add (GTK_CONTAINER (window), vbox);
7373 frame = gtk_frame_new ("Select screen or display");
7374 gtk_container_add (GTK_CONTAINER (vbox), frame);
7376 table = gtk_table_new (2, 2, TRUE);
7377 gtk_table_set_row_spacings (GTK_TABLE (table), 3);
7378 gtk_table_set_col_spacings (GTK_TABLE (table), 3);
7380 gtk_container_add (GTK_CONTAINER (frame), table);
7382 radio_dpy = gtk_radio_button_new_with_label (NULL, "move to another X display");
7383 if (gdk_display_get_n_screens(display) > 1)
7384 radio_scr = gtk_radio_button_new_with_label
7385 (gtk_radio_button_get_group (GTK_RADIO_BUTTON (radio_dpy)), "move to next screen");
7388 radio_scr = gtk_radio_button_new_with_label
7389 (gtk_radio_button_get_group (GTK_RADIO_BUTTON (radio_dpy)),
7390 "only one screen on the current display");
7391 gtk_widget_set_sensitive (radio_scr, FALSE);
7393 combo_dpy = gtk_combo_new ();
7394 if (!valid_display_list)
7395 valid_display_list = g_list_append (valid_display_list, "diabolo:0.0");
7397 gtk_combo_set_popdown_strings (GTK_COMBO (combo_dpy), valid_display_list);
7399 gtk_entry_set_text (GTK_ENTRY (GTK_COMBO (combo_dpy)->entry),
7400 "<hostname>:<X Server Num>.<Screen Num>");
7402 gtk_table_attach_defaults (GTK_TABLE (table), radio_dpy, 0, 1, 0, 1);
7403 gtk_table_attach_defaults (GTK_TABLE (table), radio_scr, 0, 1, 1, 2);
7404 gtk_table_attach_defaults (GTK_TABLE (table), combo_dpy, 1, 2, 0, 1);
7406 bbox = gtk_hbutton_box_new ();
7407 applyb = gtk_button_new_from_stock (GTK_STOCK_APPLY);
7408 cancelb = gtk_button_new_from_stock (GTK_STOCK_CANCEL);
7410 gtk_container_add (GTK_CONTAINER (vbox), bbox);
7412 gtk_container_add (GTK_CONTAINER (bbox), applyb);
7413 gtk_container_add (GTK_CONTAINER (bbox), cancelb);
7415 scr_dpy_data = g_new0 (ScreenDisplaySelection, 1);
7417 scr_dpy_data->entry = GTK_ENTRY (GTK_COMBO (combo_dpy)->entry);
7418 scr_dpy_data->radio_dpy = radio_dpy;
7419 scr_dpy_data->toplevel = gtk_widget_get_toplevel (widget);
7420 scr_dpy_data->dialog_window = window;
7421 scr_dpy_data->valid_display_list = valid_display_list;
7423 g_signal_connect (G_OBJECT (cancelb), "clicked",
7424 G_CALLBACK (screen_display_destroy_diag), G_OBJECT (window));
7425 g_signal_connect (G_OBJECT (applyb), "clicked",
7426 G_CALLBACK (screen_display_check), scr_dpy_data);
7427 gtk_widget_show_all (window);
7432 static gboolean event_watcher_enter_id = 0;
7433 static gboolean event_watcher_leave_id = 0;
7436 event_watcher (GSignalInvocationHint *ihint,
7437 guint n_param_values,
7438 const GValue *param_values,
7441 g_print ("Watch: \"%s\" emitted for %s\n",
7442 gtk_signal_name (ihint->signal_id),
7443 gtk_type_name (GTK_OBJECT_TYPE (g_value_get_object (param_values + 0))));
7449 event_watcher_down (void)
7451 if (event_watcher_enter_id)
7455 signal_id = gtk_signal_lookup ("enter_notify_event", GTK_TYPE_WIDGET);
7456 g_signal_remove_emission_hook (signal_id, event_watcher_enter_id);
7457 event_watcher_enter_id = 0;
7458 signal_id = gtk_signal_lookup ("leave_notify_event", GTK_TYPE_WIDGET);
7459 g_signal_remove_emission_hook (signal_id, event_watcher_leave_id);
7460 event_watcher_leave_id = 0;
7465 event_watcher_toggle (void)
7467 if (event_watcher_enter_id)
7468 event_watcher_down ();
7473 signal_id = gtk_signal_lookup ("enter_notify_event", GTK_TYPE_WIDGET);
7474 event_watcher_enter_id = g_signal_add_emission_hook (signal_id, 0, event_watcher, NULL, NULL);
7475 signal_id = gtk_signal_lookup ("leave_notify_event", GTK_TYPE_WIDGET);
7476 event_watcher_leave_id = g_signal_add_emission_hook (signal_id, 0, event_watcher, NULL, NULL);
7481 create_event_watcher (GtkWidget *widget)
7487 dialog_window = gtk_dialog_new ();
7488 gtk_window_set_screen (GTK_WINDOW (dialog_window),
7489 gtk_widget_get_screen (widget));
7491 gtk_signal_connect (GTK_OBJECT (dialog_window), "destroy",
7492 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
7494 gtk_signal_connect (GTK_OBJECT (dialog_window),
7496 GTK_SIGNAL_FUNC (event_watcher_down),
7499 gtk_window_set_title (GTK_WINDOW (dialog_window), "Event Watcher");
7500 gtk_container_set_border_width (GTK_CONTAINER (dialog_window), 0);
7501 gtk_widget_set_usize (dialog_window, 200, 110);
7503 button = gtk_toggle_button_new_with_label ("Activate Watch");
7504 gtk_signal_connect (GTK_OBJECT (button), "clicked",
7505 GTK_SIGNAL_FUNC (event_watcher_toggle),
7507 gtk_container_set_border_width (GTK_CONTAINER (button), 10);
7508 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog_window)->vbox),
7509 button, TRUE, TRUE, 0);
7510 gtk_widget_show (button);
7512 button = gtk_button_new_with_label ("Close");
7513 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
7514 GTK_SIGNAL_FUNC (gtk_widget_destroy),
7515 (GtkObject*) dialog_window);
7516 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
7517 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog_window)->action_area),
7518 button, TRUE, TRUE, 0);
7519 gtk_widget_grab_default (button);
7520 gtk_widget_show (button);
7523 if (!GTK_WIDGET_VISIBLE (dialog_window))
7524 gtk_widget_show (dialog_window);
7526 gtk_widget_destroy (dialog_window);
7534 reformat_value (GtkScale *scale,
7537 return g_strdup_printf ("-->%0.*g<--",
7538 gtk_scale_get_digits (scale), value);
7542 create_range_controls (GtkWidget *widget)
7544 static GtkWidget *window = NULL;
7548 GtkWidget *scrollbar;
7550 GtkWidget *separator;
7551 GtkObject *adjustment;
7556 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
7558 gtk_window_set_screen (GTK_WINDOW (window),
7559 gtk_widget_get_screen (widget));
7561 gtk_signal_connect (GTK_OBJECT (window), "destroy",
7562 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
7565 gtk_window_set_title (GTK_WINDOW (window), "range controls");
7566 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
7569 box1 = gtk_vbox_new (FALSE, 0);
7570 gtk_container_add (GTK_CONTAINER (window), box1);
7571 gtk_widget_show (box1);
7574 box2 = gtk_vbox_new (FALSE, 10);
7575 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
7576 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
7577 gtk_widget_show (box2);
7580 adjustment = gtk_adjustment_new (0.0, 0.0, 101.0, 0.1, 1.0, 1.0);
7582 scale = gtk_hscale_new (GTK_ADJUSTMENT (adjustment));
7583 gtk_widget_set_usize (GTK_WIDGET (scale), 150, -1);
7584 gtk_range_set_update_policy (GTK_RANGE (scale), GTK_UPDATE_DELAYED);
7585 gtk_scale_set_digits (GTK_SCALE (scale), 1);
7586 gtk_scale_set_draw_value (GTK_SCALE (scale), TRUE);
7587 gtk_box_pack_start (GTK_BOX (box2), scale, TRUE, TRUE, 0);
7588 gtk_widget_show (scale);
7590 scrollbar = gtk_hscrollbar_new (GTK_ADJUSTMENT (adjustment));
7591 gtk_range_set_update_policy (GTK_RANGE (scrollbar),
7592 GTK_UPDATE_CONTINUOUS);
7593 gtk_box_pack_start (GTK_BOX (box2), scrollbar, TRUE, TRUE, 0);
7594 gtk_widget_show (scrollbar);
7596 scale = gtk_hscale_new (GTK_ADJUSTMENT (adjustment));
7597 gtk_scale_set_draw_value (GTK_SCALE (scale), TRUE);
7598 gtk_signal_connect (GTK_OBJECT (scale),
7600 GTK_SIGNAL_FUNC (reformat_value),
7602 gtk_box_pack_start (GTK_BOX (box2), scale, TRUE, TRUE, 0);
7603 gtk_widget_show (scale);
7605 hbox = gtk_hbox_new (FALSE, 0);
7607 scale = gtk_vscale_new (GTK_ADJUSTMENT (adjustment));
7608 gtk_widget_set_usize (scale, -1, 200);
7609 gtk_scale_set_digits (GTK_SCALE (scale), 2);
7610 gtk_scale_set_draw_value (GTK_SCALE (scale), TRUE);
7611 gtk_box_pack_start (GTK_BOX (hbox), scale, TRUE, TRUE, 0);
7612 gtk_widget_show (scale);
7614 scale = gtk_vscale_new (GTK_ADJUSTMENT (adjustment));
7615 gtk_widget_set_usize (scale, -1, 200);
7616 gtk_scale_set_digits (GTK_SCALE (scale), 2);
7617 gtk_scale_set_draw_value (GTK_SCALE (scale), TRUE);
7618 gtk_range_set_inverted (GTK_RANGE (scale), TRUE);
7619 gtk_box_pack_start (GTK_BOX (hbox), scale, TRUE, TRUE, 0);
7620 gtk_widget_show (scale);
7622 scale = gtk_vscale_new (GTK_ADJUSTMENT (adjustment));
7623 gtk_scale_set_draw_value (GTK_SCALE (scale), TRUE);
7624 gtk_signal_connect (GTK_OBJECT (scale),
7626 GTK_SIGNAL_FUNC (reformat_value),
7628 gtk_box_pack_start (GTK_BOX (hbox), scale, TRUE, TRUE, 0);
7629 gtk_widget_show (scale);
7632 gtk_box_pack_start (GTK_BOX (box2), hbox, TRUE, TRUE, 0);
7633 gtk_widget_show (hbox);
7635 separator = gtk_hseparator_new ();
7636 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
7637 gtk_widget_show (separator);
7640 box2 = gtk_vbox_new (FALSE, 10);
7641 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
7642 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
7643 gtk_widget_show (box2);
7646 button = gtk_button_new_with_label ("close");
7647 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
7648 GTK_SIGNAL_FUNC(gtk_widget_destroy),
7649 GTK_OBJECT (window));
7650 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
7651 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
7652 gtk_widget_grab_default (button);
7653 gtk_widget_show (button);
7656 if (!GTK_WIDGET_VISIBLE (window))
7657 gtk_widget_show (window);
7659 gtk_widget_destroy (window);
7667 create_rulers (GtkWidget *widget)
7669 static GtkWidget *window = NULL;
7675 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
7677 gtk_window_set_screen (GTK_WINDOW (window),
7678 gtk_widget_get_screen (widget));
7680 gtk_window_set_policy (GTK_WINDOW (window), TRUE, TRUE, FALSE);
7682 gtk_signal_connect (GTK_OBJECT (window), "destroy",
7683 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
7686 gtk_window_set_title (GTK_WINDOW (window), "rulers");
7687 gtk_widget_set_usize (window, 300, 300);
7688 gtk_widget_set_events (window,
7689 GDK_POINTER_MOTION_MASK
7690 | GDK_POINTER_MOTION_HINT_MASK);
7691 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
7693 table = gtk_table_new (2, 2, FALSE);
7694 gtk_container_add (GTK_CONTAINER (window), table);
7695 gtk_widget_show (table);
7697 ruler = gtk_hruler_new ();
7698 gtk_ruler_set_metric (GTK_RULER (ruler), GTK_CENTIMETERS);
7699 gtk_ruler_set_range (GTK_RULER (ruler), 100, 0, 0, 20);
7701 gtk_signal_connect_object (GTK_OBJECT (window),
7702 "motion_notify_event",
7703 GTK_SIGNAL_FUNC (GTK_WIDGET_GET_CLASS (ruler)->motion_notify_event),
7704 GTK_OBJECT (ruler));
7706 gtk_table_attach (GTK_TABLE (table), ruler, 1, 2, 0, 1,
7707 GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 0);
7708 gtk_widget_show (ruler);
7711 ruler = gtk_vruler_new ();
7712 gtk_ruler_set_range (GTK_RULER (ruler), 5, 15, 0, 20);
7714 gtk_signal_connect_object (GTK_OBJECT (window),
7715 "motion_notify_event",
7716 GTK_SIGNAL_FUNC (GTK_WIDGET_GET_CLASS (ruler)->motion_notify_event),
7717 GTK_OBJECT (ruler));
7719 gtk_table_attach (GTK_TABLE (table), ruler, 0, 1, 1, 2,
7720 GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
7721 gtk_widget_show (ruler);
7724 if (!GTK_WIDGET_VISIBLE (window))
7725 gtk_widget_show (window);
7727 gtk_widget_destroy (window);
7731 text_toggle_editable (GtkWidget *checkbutton,
7734 gtk_text_set_editable(GTK_TEXT(text),
7735 GTK_TOGGLE_BUTTON(checkbutton)->active);
7739 text_toggle_word_wrap (GtkWidget *checkbutton,
7742 gtk_text_set_word_wrap(GTK_TEXT(text),
7743 GTK_TOGGLE_BUTTON(checkbutton)->active);
7750 { { 0, 0x0000, 0x0000, 0x0000 }, "black" },
7751 { { 0, 0xFFFF, 0xFFFF, 0xFFFF }, "white" },
7752 { { 0, 0xFFFF, 0x0000, 0x0000 }, "red" },
7753 { { 0, 0x0000, 0xFFFF, 0x0000 }, "green" },
7754 { { 0, 0x0000, 0x0000, 0xFFFF }, "blue" },
7755 { { 0, 0x0000, 0xFFFF, 0xFFFF }, "cyan" },
7756 { { 0, 0xFFFF, 0x0000, 0xFFFF }, "magenta" },
7757 { { 0, 0xFFFF, 0xFFFF, 0x0000 }, "yellow" }
7760 int ntext_colors = sizeof(text_colors) / sizeof(text_colors[0]);
7766 text_insert_random (GtkWidget *w, GtkText *text)
7770 for (i=0; i<10; i++)
7772 c = 'A' + rand() % ('Z' - 'A');
7773 gtk_text_set_point (text, rand() % gtk_text_get_length (text));
7774 gtk_text_insert (text, NULL, NULL, NULL, &c, 1);
7779 create_text (GtkWidget *widget)
7783 static GtkWidget *window = NULL;
7789 GtkWidget *separator;
7790 GtkWidget *scrolled_window;
7797 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
7798 gtk_window_set_screen (GTK_WINDOW (window),
7799 gtk_widget_get_screen (widget));
7801 gtk_widget_set_name (window, "text window");
7802 gtk_widget_set_usize (window, 500, 500);
7803 gtk_window_set_policy (GTK_WINDOW(window), TRUE, TRUE, FALSE);
7805 gtk_signal_connect (GTK_OBJECT (window), "destroy",
7806 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
7809 gtk_window_set_title (GTK_WINDOW (window), "test");
7810 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
7813 box1 = gtk_vbox_new (FALSE, 0);
7814 gtk_container_add (GTK_CONTAINER (window), box1);
7815 gtk_widget_show (box1);
7818 box2 = gtk_vbox_new (FALSE, 10);
7819 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
7820 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
7821 gtk_widget_show (box2);
7824 scrolled_window = gtk_scrolled_window_new (NULL, NULL);
7825 gtk_box_pack_start (GTK_BOX (box2), scrolled_window, TRUE, TRUE, 0);
7826 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
7829 gtk_widget_show (scrolled_window);
7831 text = gtk_text_new (NULL, NULL);
7832 gtk_text_set_editable (GTK_TEXT (text), TRUE);
7833 gtk_container_add (GTK_CONTAINER (scrolled_window), text);
7834 gtk_widget_grab_focus (text);
7835 gtk_widget_show (text);
7838 gtk_text_freeze (GTK_TEXT (text));
7840 for (i=0; i<ntext_colors; i++)
7842 gtk_text_insert (GTK_TEXT (text), NULL, NULL, NULL,
7843 text_colors[i].name, -1);
7844 gtk_text_insert (GTK_TEXT (text), NULL, NULL, NULL, "\t", -1);
7846 for (j=0; j<ntext_colors; j++)
7848 gtk_text_insert (GTK_TEXT (text), NULL,
7849 &text_colors[j].color, &text_colors[i].color,
7852 gtk_text_insert (GTK_TEXT (text), NULL, NULL, NULL, "\n", -1);
7855 infile = fopen("testgtk.c", "r");
7860 int nbytes_read, nbytes_alloc;
7863 nbytes_alloc = 1024;
7864 buffer = g_new (char, nbytes_alloc);
7868 if (nbytes_alloc < nbytes_read + 1024)
7871 buffer = g_realloc (buffer, nbytes_alloc);
7873 len = fread (buffer + nbytes_read, 1, 1024, infile);
7879 gtk_text_insert (GTK_TEXT (text), NULL, NULL,
7880 NULL, buffer, nbytes_read);
7885 gtk_text_thaw (GTK_TEXT (text));
7887 hbox = gtk_hbutton_box_new ();
7888 gtk_box_pack_start (GTK_BOX (box2), hbox, FALSE, FALSE, 0);
7889 gtk_widget_show (hbox);
7891 check = gtk_check_button_new_with_label("Editable");
7892 gtk_box_pack_start (GTK_BOX (hbox), check, FALSE, FALSE, 0);
7893 gtk_signal_connect (GTK_OBJECT(check), "toggled",
7894 GTK_SIGNAL_FUNC(text_toggle_editable), text);
7895 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check), TRUE);
7896 gtk_widget_show (check);
7898 check = gtk_check_button_new_with_label("Wrap Words");
7899 gtk_box_pack_start (GTK_BOX (hbox), check, FALSE, TRUE, 0);
7900 gtk_signal_connect (GTK_OBJECT(check), "toggled",
7901 GTK_SIGNAL_FUNC(text_toggle_word_wrap), text);
7902 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check), FALSE);
7903 gtk_widget_show (check);
7905 separator = gtk_hseparator_new ();
7906 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
7907 gtk_widget_show (separator);
7910 box2 = gtk_vbox_new (FALSE, 10);
7911 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
7912 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
7913 gtk_widget_show (box2);
7916 button = gtk_button_new_with_label ("insert random");
7917 gtk_signal_connect (GTK_OBJECT (button), "clicked",
7918 GTK_SIGNAL_FUNC(text_insert_random),
7920 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
7921 gtk_widget_show (button);
7923 button = gtk_button_new_with_label ("close");
7924 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
7925 GTK_SIGNAL_FUNC(gtk_widget_destroy),
7926 GTK_OBJECT (window));
7927 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
7928 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
7929 gtk_widget_grab_default (button);
7930 gtk_widget_show (button);
7933 if (!GTK_WIDGET_VISIBLE (window))
7934 gtk_widget_show (window);
7936 gtk_widget_destroy (window);
7943 GdkPixbuf *book_open;
7944 GdkPixbuf *book_closed;
7945 GtkWidget *sample_notebook;
7948 set_page_image (GtkNotebook *notebook, gint page_num, GdkPixbuf *pixbuf)
7950 GtkWidget *page_widget;
7953 page_widget = gtk_notebook_get_nth_page (notebook, page_num);
7955 pixwid = gtk_object_get_data (GTK_OBJECT (page_widget), "tab_pixmap");
7956 gtk_image_set_from_pixbuf (GTK_IMAGE (pixwid), pixbuf);
7958 pixwid = gtk_object_get_data (GTK_OBJECT (page_widget), "menu_pixmap");
7959 gtk_image_set_from_pixbuf (GTK_IMAGE (pixwid), pixbuf);
7963 page_switch (GtkWidget *widget, GtkNotebookPage *page, gint page_num)
7965 GtkNotebook *notebook = GTK_NOTEBOOK (widget);
7966 gint old_page_num = gtk_notebook_get_current_page (notebook);
7968 if (page_num == old_page_num)
7971 set_page_image (notebook, page_num, book_open);
7973 if (old_page_num != -1)
7974 set_page_image (notebook, old_page_num, book_closed);
7978 tab_fill (GtkToggleButton *button, GtkWidget *child)
7981 GtkPackType pack_type;
7983 gtk_notebook_query_tab_label_packing (GTK_NOTEBOOK (sample_notebook), child,
7984 &expand, NULL, &pack_type);
7985 gtk_notebook_set_tab_label_packing (GTK_NOTEBOOK (sample_notebook), child,
7986 expand, button->active, pack_type);
7990 tab_expand (GtkToggleButton *button, GtkWidget *child)
7993 GtkPackType pack_type;
7995 gtk_notebook_query_tab_label_packing (GTK_NOTEBOOK (sample_notebook), child,
7996 NULL, &fill, &pack_type);
7997 gtk_notebook_set_tab_label_packing (GTK_NOTEBOOK (sample_notebook), child,
7998 button->active, fill, pack_type);
8002 tab_pack (GtkToggleButton *button, GtkWidget *child)
8008 gtk_notebook_query_tab_label_packing (GTK_NOTEBOOK (sample_notebook), child,
8009 &expand, &fill, NULL);
8010 gtk_notebook_set_tab_label_packing (GTK_NOTEBOOK (sample_notebook), child,
8011 expand, fill, button->active);
8015 create_pages (GtkNotebook *notebook, gint start, gint end)
8017 GtkWidget *child = NULL;
8022 GtkWidget *label_box;
8023 GtkWidget *menu_box;
8027 char accel_buffer[32];
8029 for (i = start; i <= end; i++)
8031 sprintf (buffer, "Page %d", i);
8032 sprintf (accel_buffer, "Page _%d", i);
8034 child = gtk_frame_new (buffer);
8035 gtk_container_set_border_width (GTK_CONTAINER (child), 10);
8037 vbox = gtk_vbox_new (TRUE,0);
8038 gtk_container_set_border_width (GTK_CONTAINER (vbox), 10);
8039 gtk_container_add (GTK_CONTAINER (child), vbox);
8041 hbox = gtk_hbox_new (TRUE,0);
8042 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 5);
8044 button = gtk_check_button_new_with_label ("Fill Tab");
8045 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
8046 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE);
8047 gtk_signal_connect (GTK_OBJECT (button), "toggled",
8048 GTK_SIGNAL_FUNC (tab_fill), child);
8050 button = gtk_check_button_new_with_label ("Expand Tab");
8051 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
8052 gtk_signal_connect (GTK_OBJECT (button), "toggled",
8053 GTK_SIGNAL_FUNC (tab_expand), child);
8055 button = gtk_check_button_new_with_label ("Pack end");
8056 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
8057 gtk_signal_connect (GTK_OBJECT (button), "toggled",
8058 GTK_SIGNAL_FUNC (tab_pack), child);
8060 button = gtk_button_new_with_label ("Hide Page");
8061 gtk_box_pack_end (GTK_BOX (vbox), button, FALSE, FALSE, 5);
8062 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
8063 GTK_SIGNAL_FUNC (gtk_widget_hide),
8064 GTK_OBJECT (child));
8066 gtk_widget_show_all (child);
8068 label_box = gtk_hbox_new (FALSE, 0);
8069 pixwid = gtk_image_new_from_pixbuf (book_closed);
8070 gtk_object_set_data (GTK_OBJECT (child), "tab_pixmap", pixwid);
8072 gtk_box_pack_start (GTK_BOX (label_box), pixwid, FALSE, TRUE, 0);
8073 gtk_misc_set_padding (GTK_MISC (pixwid), 3, 1);
8074 label = gtk_label_new_with_mnemonic (accel_buffer);
8075 gtk_box_pack_start (GTK_BOX (label_box), label, FALSE, TRUE, 0);
8076 gtk_widget_show_all (label_box);
8079 menu_box = gtk_hbox_new (FALSE, 0);
8080 pixwid = gtk_image_new_from_pixbuf (book_closed);
8081 gtk_object_set_data (GTK_OBJECT (child), "menu_pixmap", pixwid);
8083 gtk_box_pack_start (GTK_BOX (menu_box), pixwid, FALSE, TRUE, 0);
8084 gtk_misc_set_padding (GTK_MISC (pixwid), 3, 1);
8085 label = gtk_label_new (buffer);
8086 gtk_box_pack_start (GTK_BOX (menu_box), label, FALSE, TRUE, 0);
8087 gtk_widget_show_all (menu_box);
8089 gtk_notebook_append_page_menu (notebook, child, label_box, menu_box);
8094 rotate_notebook (GtkButton *button,
8095 GtkNotebook *notebook)
8097 gtk_notebook_set_tab_pos (notebook, (notebook->tab_pos + 1) % 4);
8101 show_all_pages (GtkButton *button,
8102 GtkNotebook *notebook)
8104 gtk_container_foreach (GTK_CONTAINER (notebook),
8105 (GtkCallback) gtk_widget_show, NULL);
8109 notebook_type_changed (GtkWidget *optionmenu,
8112 GtkNotebook *notebook;
8122 notebook = GTK_NOTEBOOK (data);
8124 c = gtk_option_menu_get_history (GTK_OPTION_MENU (optionmenu));
8129 /* standard notebook */
8130 gtk_notebook_set_show_tabs (notebook, TRUE);
8131 gtk_notebook_set_show_border (notebook, TRUE);
8132 gtk_notebook_set_scrollable (notebook, FALSE);
8136 /* notabs notebook */
8137 gtk_notebook_set_show_tabs (notebook, FALSE);
8138 gtk_notebook_set_show_border (notebook, TRUE);
8143 gtk_notebook_set_show_tabs (notebook, FALSE);
8144 gtk_notebook_set_show_border (notebook, FALSE);
8149 gtk_notebook_set_show_tabs (notebook, TRUE);
8150 gtk_notebook_set_show_border (notebook, TRUE);
8151 gtk_notebook_set_scrollable (notebook, TRUE);
8152 if (g_list_length (notebook->children) == 5)
8153 create_pages (notebook, 6, 15);
8159 if (g_list_length (notebook->children) == 15)
8160 for (i = 0; i < 10; i++)
8161 gtk_notebook_remove_page (notebook, 5);
8165 notebook_popup (GtkToggleButton *button,
8166 GtkNotebook *notebook)
8169 gtk_notebook_popup_enable (notebook);
8171 gtk_notebook_popup_disable (notebook);
8175 notebook_homogeneous (GtkToggleButton *button,
8176 GtkNotebook *notebook)
8178 gtk_notebook_set_homogeneous_tabs (notebook, button->active);
8182 create_notebook (GtkWidget *widget)
8184 static GtkWidget *window = NULL;
8188 GtkWidget *separator;
8192 static gchar *items[] =
8202 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
8203 gtk_window_set_screen (GTK_WINDOW (window),
8204 gtk_widget_get_screen (widget));
8206 gtk_signal_connect (GTK_OBJECT (window), "destroy",
8207 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
8210 gtk_window_set_title (GTK_WINDOW (window), "notebook");
8211 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
8213 box1 = gtk_vbox_new (FALSE, 0);
8214 gtk_container_add (GTK_CONTAINER (window), box1);
8216 sample_notebook = gtk_notebook_new ();
8217 gtk_signal_connect (GTK_OBJECT (sample_notebook), "switch_page",
8218 GTK_SIGNAL_FUNC (page_switch), NULL);
8219 gtk_notebook_set_tab_pos (GTK_NOTEBOOK (sample_notebook), GTK_POS_TOP);
8220 gtk_box_pack_start (GTK_BOX (box1), sample_notebook, TRUE, TRUE, 0);
8221 gtk_container_set_border_width (GTK_CONTAINER (sample_notebook), 10);
8223 gtk_widget_realize (sample_notebook);
8226 book_open = gdk_pixbuf_new_from_xpm_data ((const char **)book_open_xpm);
8229 book_closed = gdk_pixbuf_new_from_xpm_data ((const char **)book_closed_xpm);
8231 create_pages (GTK_NOTEBOOK (sample_notebook), 1, 5);
8233 separator = gtk_hseparator_new ();
8234 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 10);
8236 box2 = gtk_hbox_new (FALSE, 5);
8237 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
8238 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
8240 button = gtk_check_button_new_with_label ("popup menu");
8241 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, FALSE, 0);
8242 gtk_signal_connect (GTK_OBJECT(button), "clicked",
8243 GTK_SIGNAL_FUNC (notebook_popup),
8244 GTK_OBJECT (sample_notebook));
8246 button = gtk_check_button_new_with_label ("homogeneous tabs");
8247 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, FALSE, 0);
8248 gtk_signal_connect (GTK_OBJECT(button), "clicked",
8249 GTK_SIGNAL_FUNC (notebook_homogeneous),
8250 GTK_OBJECT (sample_notebook));
8252 box2 = gtk_hbox_new (FALSE, 5);
8253 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
8254 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
8256 label = gtk_label_new ("Notebook Style :");
8257 gtk_box_pack_start (GTK_BOX (box2), label, FALSE, TRUE, 0);
8259 omenu = build_option_menu (items, G_N_ELEMENTS (items), 0,
8260 notebook_type_changed,
8262 gtk_box_pack_start (GTK_BOX (box2), omenu, FALSE, TRUE, 0);
8264 button = gtk_button_new_with_label ("Show all Pages");
8265 gtk_box_pack_start (GTK_BOX (box2), button, FALSE, TRUE, 0);
8266 gtk_signal_connect (GTK_OBJECT (button), "clicked",
8267 GTK_SIGNAL_FUNC (show_all_pages), sample_notebook);
8269 box2 = gtk_hbox_new (TRUE, 10);
8270 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
8271 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
8273 button = gtk_button_new_with_label ("prev");
8274 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
8275 GTK_SIGNAL_FUNC (gtk_notebook_prev_page),
8276 GTK_OBJECT (sample_notebook));
8277 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
8279 button = gtk_button_new_with_label ("next");
8280 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
8281 GTK_SIGNAL_FUNC (gtk_notebook_next_page),
8282 GTK_OBJECT (sample_notebook));
8283 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
8285 button = gtk_button_new_with_label ("rotate");
8286 gtk_signal_connect (GTK_OBJECT (button), "clicked",
8287 GTK_SIGNAL_FUNC (rotate_notebook), sample_notebook);
8288 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
8290 separator = gtk_hseparator_new ();
8291 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 5);
8293 button = gtk_button_new_with_label ("close");
8294 gtk_container_set_border_width (GTK_CONTAINER (button), 5);
8295 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
8296 GTK_SIGNAL_FUNC (gtk_widget_destroy),
8297 GTK_OBJECT (window));
8298 gtk_box_pack_start (GTK_BOX (box1), button, FALSE, FALSE, 0);
8299 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
8300 gtk_widget_grab_default (button);
8303 if (!GTK_WIDGET_VISIBLE (window))
8304 gtk_widget_show_all (window);
8306 gtk_widget_destroy (window);
8314 toggle_resize (GtkWidget *widget, GtkWidget *child)
8316 GtkPaned *paned = GTK_PANED (child->parent);
8317 gboolean is_child1 = (child == paned->child1);
8318 gboolean resize, shrink;
8320 resize = is_child1 ? paned->child1_resize : paned->child2_resize;
8321 shrink = is_child1 ? paned->child1_shrink : paned->child2_shrink;
8323 gtk_widget_ref (child);
8324 gtk_container_remove (GTK_CONTAINER (child->parent), child);
8326 gtk_paned_pack1 (paned, child, !resize, shrink);
8328 gtk_paned_pack2 (paned, child, !resize, shrink);
8329 gtk_widget_unref (child);
8333 toggle_shrink (GtkWidget *widget, GtkWidget *child)
8335 GtkPaned *paned = GTK_PANED (child->parent);
8336 gboolean is_child1 = (child == paned->child1);
8337 gboolean resize, shrink;
8339 resize = is_child1 ? paned->child1_resize : paned->child2_resize;
8340 shrink = is_child1 ? paned->child1_shrink : paned->child2_shrink;
8342 gtk_widget_ref (child);
8343 gtk_container_remove (GTK_CONTAINER (child->parent), child);
8345 gtk_paned_pack1 (paned, child, resize, !shrink);
8347 gtk_paned_pack2 (paned, child, resize, !shrink);
8348 gtk_widget_unref (child);
8352 paned_props_clicked (GtkWidget *button,
8355 GtkWidget *window = create_prop_editor (paned, GTK_TYPE_PANED);
8357 gtk_window_set_title (GTK_WINDOW (window), "Paned Properties");
8361 create_pane_options (GtkPaned *paned,
8362 const gchar *frame_label,
8363 const gchar *label1,
8364 const gchar *label2)
8370 GtkWidget *check_button;
8372 frame = gtk_frame_new (frame_label);
8373 gtk_container_set_border_width (GTK_CONTAINER (frame), 4);
8375 table = gtk_table_new (4, 2, 4);
8376 gtk_container_add (GTK_CONTAINER (frame), table);
8378 label = gtk_label_new (label1);
8379 gtk_table_attach_defaults (GTK_TABLE (table), label,
8382 check_button = gtk_check_button_new_with_label ("Resize");
8383 gtk_table_attach_defaults (GTK_TABLE (table), check_button,
8385 gtk_signal_connect (GTK_OBJECT (check_button), "toggled",
8386 GTK_SIGNAL_FUNC (toggle_resize),
8389 check_button = gtk_check_button_new_with_label ("Shrink");
8390 gtk_table_attach_defaults (GTK_TABLE (table), check_button,
8392 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check_button),
8394 gtk_signal_connect (GTK_OBJECT (check_button), "toggled",
8395 GTK_SIGNAL_FUNC (toggle_shrink),
8398 label = gtk_label_new (label2);
8399 gtk_table_attach_defaults (GTK_TABLE (table), label,
8402 check_button = gtk_check_button_new_with_label ("Resize");
8403 gtk_table_attach_defaults (GTK_TABLE (table), check_button,
8405 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check_button),
8407 gtk_signal_connect (GTK_OBJECT (check_button), "toggled",
8408 GTK_SIGNAL_FUNC (toggle_resize),
8411 check_button = gtk_check_button_new_with_label ("Shrink");
8412 gtk_table_attach_defaults (GTK_TABLE (table), check_button,
8414 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check_button),
8416 gtk_signal_connect (GTK_OBJECT (check_button), "toggled",
8417 GTK_SIGNAL_FUNC (toggle_shrink),
8420 button = gtk_button_new_with_mnemonic ("_Properties");
8421 gtk_table_attach_defaults (GTK_TABLE (table), button,
8423 gtk_signal_connect (GTK_OBJECT (button), "clicked",
8424 GTK_SIGNAL_FUNC (paned_props_clicked),
8431 create_panes (GtkWidget *widget)
8433 static GtkWidget *window = NULL;
8442 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
8444 gtk_window_set_screen (GTK_WINDOW (window),
8445 gtk_widget_get_screen (widget));
8447 gtk_signal_connect (GTK_OBJECT (window), "destroy",
8448 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
8451 gtk_window_set_title (GTK_WINDOW (window), "Panes");
8452 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
8454 vbox = gtk_vbox_new (FALSE, 0);
8455 gtk_container_add (GTK_CONTAINER (window), vbox);
8457 vpaned = gtk_vpaned_new ();
8458 gtk_box_pack_start (GTK_BOX (vbox), vpaned, TRUE, TRUE, 0);
8459 gtk_container_set_border_width (GTK_CONTAINER(vpaned), 5);
8461 hpaned = gtk_hpaned_new ();
8462 gtk_paned_add1 (GTK_PANED (vpaned), hpaned);
8464 frame = gtk_frame_new (NULL);
8465 gtk_frame_set_shadow_type (GTK_FRAME(frame), GTK_SHADOW_IN);
8466 gtk_widget_set_usize (frame, 60, 60);
8467 gtk_paned_add1 (GTK_PANED (hpaned), frame);
8469 button = gtk_button_new_with_label ("Hi there");
8470 gtk_container_add (GTK_CONTAINER(frame), button);
8472 frame = gtk_frame_new (NULL);
8473 gtk_frame_set_shadow_type (GTK_FRAME(frame), GTK_SHADOW_IN);
8474 gtk_widget_set_usize (frame, 80, 60);
8475 gtk_paned_add2 (GTK_PANED (hpaned), frame);
8477 frame = gtk_frame_new (NULL);
8478 gtk_frame_set_shadow_type (GTK_FRAME(frame), GTK_SHADOW_IN);
8479 gtk_widget_set_usize (frame, 60, 80);
8480 gtk_paned_add2 (GTK_PANED (vpaned), frame);
8482 /* Now create toggle buttons to control sizing */
8484 gtk_box_pack_start (GTK_BOX (vbox),
8485 create_pane_options (GTK_PANED (hpaned),
8491 gtk_box_pack_start (GTK_BOX (vbox),
8492 create_pane_options (GTK_PANED (vpaned),
8498 gtk_widget_show_all (vbox);
8501 if (!GTK_WIDGET_VISIBLE (window))
8502 gtk_widget_show (window);
8504 gtk_widget_destroy (window);
8508 * Paned keyboard navigation
8512 paned_keyboard_window1 (GtkWidget *widget)
8535 window1 = gtk_window_new (GTK_WINDOW_TOPLEVEL);
8536 gtk_window_set_title (GTK_WINDOW (window1), "Basic paned navigation");
8537 gtk_window_set_screen (GTK_WINDOW (window1),
8538 gtk_widget_get_screen (widget));
8540 hpaned1 = gtk_hpaned_new ();
8541 gtk_container_add (GTK_CONTAINER (window1), hpaned1);
8543 frame1 = gtk_frame_new (NULL);
8544 gtk_paned_pack1 (GTK_PANED (hpaned1), frame1, FALSE, TRUE);
8545 gtk_frame_set_shadow_type (GTK_FRAME (frame1), GTK_SHADOW_IN);
8547 vbox1 = gtk_vbox_new (FALSE, 0);
8548 gtk_container_add (GTK_CONTAINER (frame1), vbox1);
8550 button7 = gtk_button_new_with_label ("button7");
8551 gtk_box_pack_start (GTK_BOX (vbox1), button7, FALSE, FALSE, 0);
8553 button8 = gtk_button_new_with_label ("button8");
8554 gtk_box_pack_start (GTK_BOX (vbox1), button8, FALSE, FALSE, 0);
8556 button9 = gtk_button_new_with_label ("button9");
8557 gtk_box_pack_start (GTK_BOX (vbox1), button9, FALSE, FALSE, 0);
8559 vpaned1 = gtk_vpaned_new ();
8560 gtk_paned_pack2 (GTK_PANED (hpaned1), vpaned1, TRUE, TRUE);
8562 frame2 = gtk_frame_new (NULL);
8563 gtk_paned_pack1 (GTK_PANED (vpaned1), frame2, FALSE, TRUE);
8564 gtk_frame_set_shadow_type (GTK_FRAME (frame2), GTK_SHADOW_IN);
8566 frame5 = gtk_frame_new (NULL);
8567 gtk_container_add (GTK_CONTAINER (frame2), frame5);
8569 hbox1 = gtk_hbox_new (FALSE, 0);
8570 gtk_container_add (GTK_CONTAINER (frame5), hbox1);
8572 button5 = gtk_button_new_with_label ("button5");
8573 gtk_box_pack_start (GTK_BOX (hbox1), button5, FALSE, FALSE, 0);
8575 button6 = gtk_button_new_with_label ("button6");
8576 gtk_box_pack_start (GTK_BOX (hbox1), button6, FALSE, FALSE, 0);
8578 frame3 = gtk_frame_new (NULL);
8579 gtk_paned_pack2 (GTK_PANED (vpaned1), frame3, TRUE, TRUE);
8580 gtk_frame_set_shadow_type (GTK_FRAME (frame3), GTK_SHADOW_IN);
8582 frame4 = gtk_frame_new ("Buttons");
8583 gtk_container_add (GTK_CONTAINER (frame3), frame4);
8584 gtk_container_set_border_width (GTK_CONTAINER (frame4), 15);
8586 table1 = gtk_table_new (2, 2, FALSE);
8587 gtk_container_add (GTK_CONTAINER (frame4), table1);
8588 gtk_container_set_border_width (GTK_CONTAINER (table1), 11);
8590 button1 = gtk_button_new_with_label ("button1");
8591 gtk_table_attach (GTK_TABLE (table1), button1, 0, 1, 0, 1,
8592 (GtkAttachOptions) (GTK_FILL),
8593 (GtkAttachOptions) (0), 0, 0);
8595 button2 = gtk_button_new_with_label ("button2");
8596 gtk_table_attach (GTK_TABLE (table1), button2, 1, 2, 0, 1,
8597 (GtkAttachOptions) (GTK_FILL),
8598 (GtkAttachOptions) (0), 0, 0);
8600 button3 = gtk_button_new_with_label ("button3");
8601 gtk_table_attach (GTK_TABLE (table1), button3, 0, 1, 1, 2,
8602 (GtkAttachOptions) (GTK_FILL),
8603 (GtkAttachOptions) (0), 0, 0);
8605 button4 = gtk_button_new_with_label ("button4");
8606 gtk_table_attach (GTK_TABLE (table1), button4, 1, 2, 1, 2,
8607 (GtkAttachOptions) (GTK_FILL),
8608 (GtkAttachOptions) (0), 0, 0);
8614 paned_keyboard_window2 (GtkWidget *widget)
8619 GtkWidget *button13;
8623 GtkWidget *button12;
8625 GtkWidget *button11;
8626 GtkWidget *button10;
8628 window2 = gtk_window_new (GTK_WINDOW_TOPLEVEL);
8629 gtk_window_set_title (GTK_WINDOW (window2), "\"button 10\" is not inside the horisontal pane");
8631 gtk_window_set_screen (GTK_WINDOW (window2),
8632 gtk_widget_get_screen (widget));
8634 hpaned2 = gtk_hpaned_new ();
8635 gtk_container_add (GTK_CONTAINER (window2), hpaned2);
8637 frame6 = gtk_frame_new (NULL);
8638 gtk_paned_pack1 (GTK_PANED (hpaned2), frame6, FALSE, TRUE);
8639 gtk_frame_set_shadow_type (GTK_FRAME (frame6), GTK_SHADOW_IN);
8641 button13 = gtk_button_new_with_label ("button13");
8642 gtk_container_add (GTK_CONTAINER (frame6), button13);
8644 hbox2 = gtk_hbox_new (FALSE, 0);
8645 gtk_paned_pack2 (GTK_PANED (hpaned2), hbox2, TRUE, TRUE);
8647 vpaned2 = gtk_vpaned_new ();
8648 gtk_box_pack_start (GTK_BOX (hbox2), vpaned2, TRUE, TRUE, 0);
8650 frame7 = gtk_frame_new (NULL);
8651 gtk_paned_pack1 (GTK_PANED (vpaned2), frame7, FALSE, TRUE);
8652 gtk_frame_set_shadow_type (GTK_FRAME (frame7), GTK_SHADOW_IN);
8654 button12 = gtk_button_new_with_label ("button12");
8655 gtk_container_add (GTK_CONTAINER (frame7), button12);
8657 frame8 = gtk_frame_new (NULL);
8658 gtk_paned_pack2 (GTK_PANED (vpaned2), frame8, TRUE, TRUE);
8659 gtk_frame_set_shadow_type (GTK_FRAME (frame8), GTK_SHADOW_IN);
8661 button11 = gtk_button_new_with_label ("button11");
8662 gtk_container_add (GTK_CONTAINER (frame8), button11);
8664 button10 = gtk_button_new_with_label ("button10");
8665 gtk_box_pack_start (GTK_BOX (hbox2), button10, FALSE, FALSE, 0);
8671 paned_keyboard_window3 (GtkWidget *widget)
8678 GtkWidget *button14;
8681 GtkWidget *button15;
8684 GtkWidget *button16;
8686 GtkWidget *button17;
8688 window3 = gtk_window_new (GTK_WINDOW_TOPLEVEL);
8689 gtk_object_set_data (GTK_OBJECT (window3), "window3", window3);
8690 gtk_window_set_title (GTK_WINDOW (window3), "Nested panes");
8692 gtk_window_set_screen (GTK_WINDOW (window3),
8693 gtk_widget_get_screen (widget));
8696 vbox2 = gtk_vbox_new (FALSE, 0);
8697 gtk_container_add (GTK_CONTAINER (window3), vbox2);
8699 label1 = gtk_label_new ("Three panes nested inside each other");
8700 gtk_box_pack_start (GTK_BOX (vbox2), label1, FALSE, FALSE, 0);
8702 hpaned3 = gtk_hpaned_new ();
8703 gtk_box_pack_start (GTK_BOX (vbox2), hpaned3, TRUE, TRUE, 0);
8705 frame9 = gtk_frame_new (NULL);
8706 gtk_paned_pack1 (GTK_PANED (hpaned3), frame9, FALSE, TRUE);
8707 gtk_frame_set_shadow_type (GTK_FRAME (frame9), GTK_SHADOW_IN);
8709 button14 = gtk_button_new_with_label ("button14");
8710 gtk_container_add (GTK_CONTAINER (frame9), button14);
8712 hpaned4 = gtk_hpaned_new ();
8713 gtk_paned_pack2 (GTK_PANED (hpaned3), hpaned4, TRUE, TRUE);
8715 frame10 = gtk_frame_new (NULL);
8716 gtk_paned_pack1 (GTK_PANED (hpaned4), frame10, FALSE, TRUE);
8717 gtk_frame_set_shadow_type (GTK_FRAME (frame10), GTK_SHADOW_IN);
8719 button15 = gtk_button_new_with_label ("button15");
8720 gtk_container_add (GTK_CONTAINER (frame10), button15);
8722 hpaned5 = gtk_hpaned_new ();
8723 gtk_paned_pack2 (GTK_PANED (hpaned4), hpaned5, TRUE, TRUE);
8725 frame11 = gtk_frame_new (NULL);
8726 gtk_paned_pack1 (GTK_PANED (hpaned5), frame11, FALSE, TRUE);
8727 gtk_frame_set_shadow_type (GTK_FRAME (frame11), GTK_SHADOW_IN);
8729 button16 = gtk_button_new_with_label ("button16");
8730 gtk_container_add (GTK_CONTAINER (frame11), button16);
8732 frame12 = gtk_frame_new (NULL);
8733 gtk_paned_pack2 (GTK_PANED (hpaned5), frame12, TRUE, TRUE);
8734 gtk_frame_set_shadow_type (GTK_FRAME (frame12), GTK_SHADOW_IN);
8736 button17 = gtk_button_new_with_label ("button17");
8737 gtk_container_add (GTK_CONTAINER (frame12), button17);
8743 paned_keyboard_window4 (GtkWidget *widget)
8750 GtkWidget *button19;
8751 GtkWidget *button18;
8754 GtkWidget *button21;
8755 GtkWidget *button20;
8757 GtkWidget *button23;
8758 GtkWidget *button22;
8760 GtkWidget *button25;
8761 GtkWidget *button24;
8763 window4 = gtk_window_new (GTK_WINDOW_TOPLEVEL);
8764 gtk_object_set_data (GTK_OBJECT (window4), "window4", window4);
8765 gtk_window_set_title (GTK_WINDOW (window4), "window4");
8767 gtk_window_set_screen (GTK_WINDOW (window4),
8768 gtk_widget_get_screen (widget));
8770 vbox3 = gtk_vbox_new (FALSE, 0);
8771 gtk_container_add (GTK_CONTAINER (window4), vbox3);
8773 label2 = gtk_label_new ("Widget tree:\n\nhpaned \n - vpaned\n - hbox\n - vpaned\n - vpaned\n - vpaned\n");
8774 gtk_box_pack_start (GTK_BOX (vbox3), label2, FALSE, FALSE, 0);
8775 gtk_label_set_justify (GTK_LABEL (label2), GTK_JUSTIFY_LEFT);
8777 hpaned6 = gtk_hpaned_new ();
8778 gtk_box_pack_start (GTK_BOX (vbox3), hpaned6, TRUE, TRUE, 0);
8780 vpaned3 = gtk_vpaned_new ();
8781 gtk_paned_pack1 (GTK_PANED (hpaned6), vpaned3, FALSE, TRUE);
8783 button19 = gtk_button_new_with_label ("button19");
8784 gtk_paned_pack1 (GTK_PANED (vpaned3), button19, FALSE, TRUE);
8786 button18 = gtk_button_new_with_label ("button18");
8787 gtk_paned_pack2 (GTK_PANED (vpaned3), button18, TRUE, TRUE);
8789 hbox3 = gtk_hbox_new (FALSE, 0);
8790 gtk_paned_pack2 (GTK_PANED (hpaned6), hbox3, TRUE, TRUE);
8792 vpaned4 = gtk_vpaned_new ();
8793 gtk_box_pack_start (GTK_BOX (hbox3), vpaned4, TRUE, TRUE, 0);
8795 button21 = gtk_button_new_with_label ("button21");
8796 gtk_paned_pack1 (GTK_PANED (vpaned4), button21, FALSE, TRUE);
8798 button20 = gtk_button_new_with_label ("button20");
8799 gtk_paned_pack2 (GTK_PANED (vpaned4), button20, TRUE, TRUE);
8801 vpaned5 = gtk_vpaned_new ();
8802 gtk_box_pack_start (GTK_BOX (hbox3), vpaned5, TRUE, TRUE, 0);
8804 button23 = gtk_button_new_with_label ("button23");
8805 gtk_paned_pack1 (GTK_PANED (vpaned5), button23, FALSE, TRUE);
8807 button22 = gtk_button_new_with_label ("button22");
8808 gtk_paned_pack2 (GTK_PANED (vpaned5), button22, TRUE, TRUE);
8810 vpaned6 = gtk_vpaned_new ();
8811 gtk_box_pack_start (GTK_BOX (hbox3), vpaned6, TRUE, TRUE, 0);
8813 button25 = gtk_button_new_with_label ("button25");
8814 gtk_paned_pack1 (GTK_PANED (vpaned6), button25, FALSE, TRUE);
8816 button24 = gtk_button_new_with_label ("button24");
8817 gtk_paned_pack2 (GTK_PANED (vpaned6), button24, TRUE, TRUE);
8823 create_paned_keyboard_navigation (GtkWidget *widget)
8825 static GtkWidget *window1 = NULL;
8826 static GtkWidget *window2 = NULL;
8827 static GtkWidget *window3 = NULL;
8828 static GtkWidget *window4 = NULL;
8831 (gtk_widget_get_screen (window1) != gtk_widget_get_screen (widget)))
8833 gtk_widget_destroy (window1);
8834 gtk_widget_destroy (window2);
8835 gtk_widget_destroy (window3);
8836 gtk_widget_destroy (window4);
8841 window1 = paned_keyboard_window1 (widget);
8842 gtk_signal_connect (GTK_OBJECT (window1), "destroy",
8843 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
8849 window2 = paned_keyboard_window2 (widget);
8850 gtk_signal_connect (GTK_OBJECT (window2), "destroy",
8851 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
8857 window3 = paned_keyboard_window3 (widget);
8858 gtk_signal_connect (GTK_OBJECT (window3), "destroy",
8859 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
8865 window4 = paned_keyboard_window4 (widget);
8866 gtk_signal_connect (GTK_OBJECT (window4), "destroy",
8867 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
8871 if (GTK_WIDGET_VISIBLE (window1))
8872 gtk_widget_destroy (GTK_WIDGET (window1));
8874 gtk_widget_show_all (GTK_WIDGET (window1));
8876 if (GTK_WIDGET_VISIBLE (window2))
8877 gtk_widget_destroy (GTK_WIDGET (window2));
8879 gtk_widget_show_all (GTK_WIDGET (window2));
8881 if (GTK_WIDGET_VISIBLE (window3))
8882 gtk_widget_destroy (GTK_WIDGET (window3));
8884 gtk_widget_show_all (GTK_WIDGET (window3));
8886 if (GTK_WIDGET_VISIBLE (window4))
8887 gtk_widget_destroy (GTK_WIDGET (window4));
8889 gtk_widget_show_all (GTK_WIDGET (window4));
8897 typedef struct _cursoroffset {gint x,y;} CursorOffset;
8900 shape_pressed (GtkWidget *widget, GdkEventButton *event)
8904 /* ignore double and triple click */
8905 if (event->type != GDK_BUTTON_PRESS)
8908 p = gtk_object_get_user_data (GTK_OBJECT(widget));
8909 p->x = (int) event->x;
8910 p->y = (int) event->y;
8912 gtk_grab_add (widget);
8913 gdk_pointer_grab (widget->window, TRUE,
8914 GDK_BUTTON_RELEASE_MASK |
8915 GDK_BUTTON_MOTION_MASK |
8916 GDK_POINTER_MOTION_HINT_MASK,
8921 shape_released (GtkWidget *widget)
8923 gtk_grab_remove (widget);
8924 gdk_display_pointer_ungrab (gtk_widget_get_display (widget),
8929 shape_motion (GtkWidget *widget,
8930 GdkEventMotion *event)
8934 GdkModifierType mask;
8936 p = gtk_object_get_user_data (GTK_OBJECT (widget));
8939 * Can't use event->x / event->y here
8940 * because I need absolute coordinates.
8942 gdk_window_get_pointer (NULL, &xp, &yp, &mask);
8943 gtk_widget_set_uposition (widget, xp - p->x, yp - p->y);
8947 shape_create_icon (GdkScreen *screen,
8958 CursorOffset* icon_pos;
8960 GdkBitmap *gdk_pixmap_mask;
8961 GdkPixmap *gdk_pixmap;
8964 style = gtk_widget_get_default_style ();
8965 gc = style->black_gc;
8968 * GDK_WINDOW_TOPLEVEL works also, giving you a title border
8970 window = gtk_window_new (window_type);
8971 gtk_window_set_screen (GTK_WINDOW (window), screen);
8973 fixed = gtk_fixed_new ();
8974 gtk_widget_set_usize (fixed, 100,100);
8975 gtk_container_add (GTK_CONTAINER (window), fixed);
8976 gtk_widget_show (fixed);
8978 gtk_widget_set_events (window,
8979 gtk_widget_get_events (window) |
8980 GDK_BUTTON_MOTION_MASK |
8981 GDK_POINTER_MOTION_HINT_MASK |
8982 GDK_BUTTON_PRESS_MASK);
8984 gtk_widget_realize (window);
8985 gdk_pixmap = gdk_pixmap_create_from_xpm (window->window, &gdk_pixmap_mask,
8986 &style->bg[GTK_STATE_NORMAL],
8989 pixmap = gtk_pixmap_new (gdk_pixmap, gdk_pixmap_mask);
8990 gtk_fixed_put (GTK_FIXED (fixed), pixmap, px,py);
8991 gtk_widget_show (pixmap);
8993 gtk_widget_shape_combine_mask (window, gdk_pixmap_mask, px, py);
8995 gdk_drawable_unref (gdk_pixmap_mask);
8996 gdk_drawable_unref (gdk_pixmap);
8998 gtk_signal_connect (GTK_OBJECT (window), "button_press_event",
8999 GTK_SIGNAL_FUNC (shape_pressed),NULL);
9000 gtk_signal_connect (GTK_OBJECT (window), "button_release_event",
9001 GTK_SIGNAL_FUNC (shape_released),NULL);
9002 gtk_signal_connect (GTK_OBJECT (window), "motion_notify_event",
9003 GTK_SIGNAL_FUNC (shape_motion),NULL);
9005 icon_pos = g_new (CursorOffset, 1);
9006 gtk_object_set_user_data(GTK_OBJECT(window), icon_pos);
9008 gtk_widget_set_uposition (window, x, y);
9009 gtk_widget_show (window);
9015 create_shapes (GtkWidget *widget)
9017 /* Variables used by the Drag/Drop and Shape Window demos */
9018 static GtkWidget *modeller = NULL;
9019 static GtkWidget *sheets = NULL;
9020 static GtkWidget *rings = NULL;
9021 static GtkWidget *with_region = NULL;
9022 GdkScreen *screen = gtk_widget_get_screen (widget);
9024 if (!(file_exists ("Modeller.xpm") &&
9025 file_exists ("FilesQueue.xpm") &&
9026 file_exists ("3DRings.xpm")))
9032 modeller = shape_create_icon (screen, "Modeller.xpm",
9033 440, 140, 0,0, GTK_WINDOW_POPUP);
9035 gtk_signal_connect (GTK_OBJECT (modeller), "destroy",
9036 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
9040 gtk_widget_destroy (modeller);
9044 sheets = shape_create_icon (screen, "FilesQueue.xpm",
9045 580, 170, 0,0, GTK_WINDOW_POPUP);
9047 gtk_signal_connect (GTK_OBJECT (sheets), "destroy",
9048 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
9053 gtk_widget_destroy (sheets);
9057 rings = shape_create_icon (screen, "3DRings.xpm",
9058 460, 270, 25,25, GTK_WINDOW_TOPLEVEL);
9060 gtk_signal_connect (GTK_OBJECT (rings), "destroy",
9061 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
9065 gtk_widget_destroy (rings);
9072 with_region = shape_create_icon (screen, "3DRings.xpm",
9073 460, 270, 25,25, GTK_WINDOW_TOPLEVEL);
9075 gtk_window_set_decorated (GTK_WINDOW (with_region), FALSE);
9077 gtk_signal_connect (GTK_OBJECT (with_region), "destroy",
9078 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
9081 /* reset shape from mask to a region */
9084 region = gdk_region_new ();
9096 gdk_region_union_with_rect (region, &rect);
9104 gdk_window_shape_combine_region (with_region->window,
9109 gtk_widget_destroy (with_region);
9117 create_wmhints (GtkWidget *widget)
9119 static GtkWidget *window = NULL;
9121 GtkWidget *separator;
9130 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
9132 gtk_window_set_screen (GTK_WINDOW (window),
9133 gtk_widget_get_screen (widget));
9135 gtk_signal_connect (GTK_OBJECT (window), "destroy",
9136 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
9139 gtk_window_set_title (GTK_WINDOW (window), "WM Hints");
9140 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
9142 gtk_widget_realize (window);
9144 circles = gdk_bitmap_create_from_data (window->window,
9148 gdk_window_set_icon (window->window, NULL,
9151 gdk_window_set_icon_name (window->window, "WMHints Test Icon");
9153 gdk_window_set_decorations (window->window, GDK_DECOR_ALL | GDK_DECOR_MENU);
9154 gdk_window_set_functions (window->window, GDK_FUNC_ALL | GDK_FUNC_RESIZE);
9156 box1 = gtk_vbox_new (FALSE, 0);
9157 gtk_container_add (GTK_CONTAINER (window), box1);
9158 gtk_widget_show (box1);
9160 label = gtk_label_new ("Try iconizing me!");
9161 gtk_widget_set_usize (label, 150, 50);
9162 gtk_box_pack_start (GTK_BOX (box1), label, TRUE, TRUE, 0);
9163 gtk_widget_show (label);
9166 separator = gtk_hseparator_new ();
9167 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
9168 gtk_widget_show (separator);
9171 box2 = gtk_vbox_new (FALSE, 10);
9172 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
9173 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
9174 gtk_widget_show (box2);
9177 button = gtk_button_new_with_label ("close");
9179 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
9180 GTK_SIGNAL_FUNC(gtk_widget_destroy),
9181 GTK_OBJECT (window));
9183 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
9184 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
9185 gtk_widget_grab_default (button);
9186 gtk_widget_show (button);
9189 if (!GTK_WIDGET_VISIBLE (window))
9190 gtk_widget_show (window);
9192 gtk_widget_destroy (window);
9197 * Window state tracking
9201 window_state_callback (GtkWidget *widget,
9202 GdkEventWindowState *event,
9205 GtkWidget *label = data;
9208 msg = g_strconcat (GTK_WINDOW (widget)->title, ": ",
9209 (event->new_window_state & GDK_WINDOW_STATE_WITHDRAWN) ?
9210 "withdrawn" : "not withdrawn", ", ",
9211 (event->new_window_state & GDK_WINDOW_STATE_ICONIFIED) ?
9212 "iconified" : "not iconified", ", ",
9213 (event->new_window_state & GDK_WINDOW_STATE_STICKY) ?
9214 "sticky" : "not sticky", ", ",
9215 (event->new_window_state & GDK_WINDOW_STATE_MAXIMIZED) ?
9216 "maximized" : "not maximized", ", ",
9217 (event->new_window_state & GDK_WINDOW_STATE_FULLSCREEN) ?
9218 "fullscreen" : "not fullscreen",
9221 gtk_label_set_text (GTK_LABEL (label), msg);
9229 tracking_label (GtkWidget *window)
9235 hbox = gtk_hbox_new (FALSE, 5);
9237 gtk_signal_connect_object (GTK_OBJECT (hbox),
9239 GTK_SIGNAL_FUNC (gtk_widget_destroy),
9240 GTK_OBJECT (window));
9242 label = gtk_label_new ("<no window state events received>");
9243 gtk_label_set_line_wrap (GTK_LABEL (label), TRUE);
9244 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
9246 gtk_signal_connect (GTK_OBJECT (window),
9247 "window_state_event",
9248 GTK_SIGNAL_FUNC (window_state_callback),
9251 button = gtk_button_new_with_label ("Deiconify");
9252 gtk_signal_connect_object (GTK_OBJECT (button),
9254 GTK_SIGNAL_FUNC (gtk_window_deiconify),
9255 GTK_OBJECT (window));
9256 gtk_box_pack_end (GTK_BOX (hbox), button, FALSE, FALSE, 0);
9258 button = gtk_button_new_with_label ("Iconify");
9259 gtk_signal_connect_object (GTK_OBJECT (button),
9261 GTK_SIGNAL_FUNC (gtk_window_iconify),
9262 GTK_OBJECT (window));
9263 gtk_box_pack_end (GTK_BOX (hbox), button, FALSE, FALSE, 0);
9265 button = gtk_button_new_with_label ("Fullscreen");
9266 gtk_signal_connect_object (GTK_OBJECT (button),
9268 GTK_SIGNAL_FUNC (gtk_window_fullscreen),
9269 GTK_OBJECT (window));
9270 gtk_box_pack_end (GTK_BOX (hbox), button, FALSE, FALSE, 0);
9272 button = gtk_button_new_with_label ("Unfullscreen");
9273 gtk_signal_connect_object (GTK_OBJECT (button),
9275 GTK_SIGNAL_FUNC (gtk_window_unfullscreen),
9276 GTK_OBJECT (window));
9277 gtk_box_pack_end (GTK_BOX (hbox), button, FALSE, FALSE, 0);
9279 button = gtk_button_new_with_label ("Present");
9280 gtk_signal_connect_object (GTK_OBJECT (button),
9282 GTK_SIGNAL_FUNC (gtk_window_present),
9283 GTK_OBJECT (window));
9284 gtk_box_pack_end (GTK_BOX (hbox), button, FALSE, FALSE, 0);
9286 button = gtk_button_new_with_label ("Show");
9287 gtk_signal_connect_object (GTK_OBJECT (button),
9289 GTK_SIGNAL_FUNC (gtk_widget_show),
9290 GTK_OBJECT (window));
9291 gtk_box_pack_end (GTK_BOX (hbox), button, FALSE, FALSE, 0);
9293 gtk_widget_show_all (hbox);
9299 get_state_controls (GtkWidget *window)
9304 vbox = gtk_vbox_new (FALSE, 0);
9306 button = gtk_button_new_with_label ("Stick");
9307 gtk_signal_connect_object (GTK_OBJECT (button),
9309 GTK_SIGNAL_FUNC (gtk_window_stick),
9310 GTK_OBJECT (window));
9311 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
9313 button = gtk_button_new_with_label ("Unstick");
9314 gtk_signal_connect_object (GTK_OBJECT (button),
9316 GTK_SIGNAL_FUNC (gtk_window_unstick),
9317 GTK_OBJECT (window));
9318 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
9320 button = gtk_button_new_with_label ("Maximize");
9321 gtk_signal_connect_object (GTK_OBJECT (button),
9323 GTK_SIGNAL_FUNC (gtk_window_maximize),
9324 GTK_OBJECT (window));
9325 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
9327 button = gtk_button_new_with_label ("Unmaximize");
9328 gtk_signal_connect_object (GTK_OBJECT (button),
9330 GTK_SIGNAL_FUNC (gtk_window_unmaximize),
9331 GTK_OBJECT (window));
9332 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
9334 button = gtk_button_new_with_label ("Iconify");
9335 gtk_signal_connect_object (GTK_OBJECT (button),
9337 GTK_SIGNAL_FUNC (gtk_window_iconify),
9338 GTK_OBJECT (window));
9339 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
9341 button = gtk_button_new_with_label ("Fullscreen");
9342 gtk_signal_connect_object (GTK_OBJECT (button),
9344 GTK_SIGNAL_FUNC (gtk_window_fullscreen),
9345 GTK_OBJECT (window));
9346 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
9348 button = gtk_button_new_with_label ("Unfullscreen");
9349 gtk_signal_connect_object (GTK_OBJECT (button),
9351 GTK_SIGNAL_FUNC (gtk_window_unfullscreen),
9352 GTK_OBJECT (window));
9353 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
9355 button = gtk_button_new_with_label ("Hide (withdraw)");
9356 gtk_signal_connect_object (GTK_OBJECT (button),
9358 GTK_SIGNAL_FUNC (gtk_widget_hide),
9359 GTK_OBJECT (window));
9360 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
9362 gtk_widget_show_all (vbox);
9368 create_window_states (GtkWidget *widget)
9370 static GtkWidget *window = NULL;
9373 GtkWidget *iconified;
9375 GtkWidget *controls;
9379 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
9380 gtk_window_set_screen (GTK_WINDOW (window),
9381 gtk_widget_get_screen (widget));
9383 gtk_signal_connect (GTK_OBJECT (window), "destroy",
9384 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
9387 gtk_window_set_title (GTK_WINDOW (window), "Window states");
9389 box1 = gtk_vbox_new (FALSE, 0);
9390 gtk_container_add (GTK_CONTAINER (window), box1);
9392 iconified = gtk_window_new (GTK_WINDOW_TOPLEVEL);
9394 gtk_window_set_screen (GTK_WINDOW (iconified),
9395 gtk_widget_get_screen (widget));
9397 gtk_signal_connect_object (GTK_OBJECT (iconified), "destroy",
9398 GTK_SIGNAL_FUNC(gtk_widget_destroy),
9399 GTK_OBJECT (window));
9400 gtk_window_iconify (GTK_WINDOW (iconified));
9401 gtk_window_set_title (GTK_WINDOW (iconified), "Iconified initially");
9402 controls = get_state_controls (iconified);
9403 gtk_container_add (GTK_CONTAINER (iconified), controls);
9405 normal = gtk_window_new (GTK_WINDOW_TOPLEVEL);
9407 gtk_window_set_screen (GTK_WINDOW (normal),
9408 gtk_widget_get_screen (widget));
9410 gtk_signal_connect_object (GTK_OBJECT (normal), "destroy",
9411 GTK_SIGNAL_FUNC(gtk_widget_destroy),
9412 GTK_OBJECT (window));
9414 gtk_window_set_title (GTK_WINDOW (normal), "Deiconified initially");
9415 controls = get_state_controls (normal);
9416 gtk_container_add (GTK_CONTAINER (normal), controls);
9418 label = tracking_label (iconified);
9419 gtk_container_add (GTK_CONTAINER (box1), label);
9421 label = tracking_label (normal);
9422 gtk_container_add (GTK_CONTAINER (box1), label);
9424 gtk_widget_show_all (iconified);
9425 gtk_widget_show_all (normal);
9426 gtk_widget_show_all (box1);
9429 if (!GTK_WIDGET_VISIBLE (window))
9430 gtk_widget_show (window);
9432 gtk_widget_destroy (window);
9440 configure_event_callback (GtkWidget *widget,
9441 GdkEventConfigure *event,
9444 GtkWidget *label = data;
9448 gtk_window_get_position (GTK_WINDOW (widget), &x, &y);
9450 msg = g_strdup_printf ("event: %d,%d %d x %d\n"
9452 event->x, event->y, event->width, event->height,
9455 gtk_label_set_text (GTK_LABEL (label), msg);
9463 get_ints (GtkWidget *window,
9470 spin1 = g_object_get_data (G_OBJECT (window), "spin1");
9471 spin2 = g_object_get_data (G_OBJECT (window), "spin2");
9473 *a = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (spin1));
9474 *b = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (spin2));
9478 set_size_callback (GtkWidget *widget,
9483 get_ints (data, &w, &h);
9485 gtk_window_resize (GTK_WINDOW (g_object_get_data (data, "target")), w, h);
9489 unset_default_size_callback (GtkWidget *widget,
9492 gtk_window_set_default_size (g_object_get_data (data, "target"),
9497 set_default_size_callback (GtkWidget *widget,
9502 get_ints (data, &w, &h);
9504 gtk_window_set_default_size (g_object_get_data (data, "target"),
9509 unset_usize_callback (GtkWidget *widget,
9512 gtk_widget_set_size_request (g_object_get_data (data, "target"),
9517 set_usize_callback (GtkWidget *widget,
9522 get_ints (data, &w, &h);
9524 gtk_widget_set_size_request (g_object_get_data (data, "target"),
9529 set_location_callback (GtkWidget *widget,
9534 get_ints (data, &x, &y);
9536 gtk_window_move (g_object_get_data (data, "target"), x, y);
9540 move_to_position_callback (GtkWidget *widget,
9546 window = g_object_get_data (data, "target");
9548 gtk_window_get_position (window, &x, &y);
9550 gtk_window_move (window, x, y);
9554 set_geometry_callback (GtkWidget *entry,
9560 target = GTK_WINDOW (g_object_get_data (G_OBJECT (data), "target"));
9562 text = gtk_editable_get_chars (GTK_EDITABLE (entry), 0, -1);
9564 if (!gtk_window_parse_geometry (target, text))
9565 g_print ("Bad geometry string '%s'\n", text);
9571 allow_shrink_callback (GtkWidget *widget,
9574 g_object_set (G_OBJECT (g_object_get_data (data, "target")),
9576 GTK_TOGGLE_BUTTON (widget)->active,
9581 allow_grow_callback (GtkWidget *widget,
9584 g_object_set (G_OBJECT (g_object_get_data (data, "target")),
9586 GTK_TOGGLE_BUTTON (widget)->active,
9591 auto_shrink_callback (GtkWidget *widget,
9594 g_object_set (G_OBJECT (g_object_get_data (data, "target")),
9596 GTK_TOGGLE_BUTTON (widget)->active,
9601 gravity_selected (GtkWidget *widget,
9604 gtk_window_set_gravity (GTK_WINDOW (g_object_get_data (data, "target")),
9605 gtk_option_menu_get_history (GTK_OPTION_MENU (widget)) + GDK_GRAVITY_NORTH_WEST);
9609 pos_selected (GtkWidget *widget,
9612 gtk_window_set_position (GTK_WINDOW (g_object_get_data (data, "target")),
9613 gtk_option_menu_get_history (GTK_OPTION_MENU (widget)) + GTK_WIN_POS_NONE);
9617 move_gravity_window_to_current_position (GtkWidget *widget,
9623 window = GTK_WINDOW (data);
9625 gtk_window_get_position (window, &x, &y);
9627 gtk_window_move (window, x, y);
9631 get_screen_corner (GtkWindow *window,
9636 GdkScreen * screen = gtk_window_get_screen (window);
9638 gtk_window_get_size (GTK_WINDOW (window), &w, &h);
9640 switch (gtk_window_get_gravity (window))
9642 case GDK_GRAVITY_SOUTH_EAST:
9643 *x = gdk_screen_get_width (screen) - w;
9644 *y = gdk_screen_get_height (screen) - h;
9647 case GDK_GRAVITY_NORTH_EAST:
9648 *x = gdk_screen_get_width (screen) - w;
9652 case GDK_GRAVITY_SOUTH_WEST:
9654 *y = gdk_screen_get_height (screen) - h;
9657 case GDK_GRAVITY_NORTH_WEST:
9662 case GDK_GRAVITY_SOUTH:
9663 *x = (gdk_screen_get_width (screen) - w) / 2;
9664 *y = gdk_screen_get_height (screen) - h;
9667 case GDK_GRAVITY_NORTH:
9668 *x = (gdk_screen_get_width (screen) - w) / 2;
9672 case GDK_GRAVITY_WEST:
9674 *y = (gdk_screen_get_height (screen) - h) / 2;
9677 case GDK_GRAVITY_EAST:
9678 *x = gdk_screen_get_width (screen) - w;
9679 *y = (gdk_screen_get_height (screen) - h) / 2;
9682 case GDK_GRAVITY_CENTER:
9683 *x = (gdk_screen_get_width (screen) - w) / 2;
9684 *y = (gdk_screen_get_height (screen) - h) / 2;
9687 case GDK_GRAVITY_STATIC:
9688 /* pick some random numbers */
9694 g_assert_not_reached ();
9700 move_gravity_window_to_starting_position (GtkWidget *widget,
9706 window = GTK_WINDOW (data);
9708 get_screen_corner (window,
9711 gtk_window_move (window, x, y);
9715 make_gravity_window (GtkWidget *destroy_with,
9724 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
9726 gtk_window_set_screen (GTK_WINDOW (window),
9727 gtk_widget_get_screen (destroy_with));
9729 vbox = gtk_vbox_new (FALSE, 0);
9730 gtk_widget_show (vbox);
9732 gtk_container_add (GTK_CONTAINER (window), vbox);
9733 gtk_window_set_title (GTK_WINDOW (window), title);
9734 gtk_window_set_gravity (GTK_WINDOW (window), gravity);
9736 gtk_signal_connect_object (GTK_OBJECT (destroy_with),
9738 GTK_SIGNAL_FUNC (gtk_widget_destroy),
9739 GTK_OBJECT (window));
9742 button = gtk_button_new_with_mnemonic ("_Move to current position");
9744 g_signal_connect (G_OBJECT (button), "clicked",
9745 G_CALLBACK (move_gravity_window_to_current_position),
9748 gtk_container_add (GTK_CONTAINER (vbox), button);
9749 gtk_widget_show (button);
9751 button = gtk_button_new_with_mnemonic ("Move to _starting position");
9753 g_signal_connect (G_OBJECT (button), "clicked",
9754 G_CALLBACK (move_gravity_window_to_starting_position),
9757 gtk_container_add (GTK_CONTAINER (vbox), button);
9758 gtk_widget_show (button);
9760 /* Pretend this is the result of --geometry.
9761 * DO NOT COPY THIS CODE unless you are setting --geometry results,
9762 * and in that case you probably should just use gtk_window_parse_geometry().
9763 * AGAIN, DO NOT SET GDK_HINT_USER_POS! It violates the ICCCM unless
9764 * you are parsing --geometry or equivalent.
9766 gtk_window_set_geometry_hints (GTK_WINDOW (window),
9770 gtk_window_set_default_size (GTK_WINDOW (window),
9773 get_screen_corner (GTK_WINDOW (window), &x, &y);
9775 gtk_window_move (GTK_WINDOW (window),
9782 do_gravity_test (GtkWidget *widget,
9785 GtkWidget *destroy_with = data;
9788 /* We put a window at each gravity point on the screen. */
9789 window = make_gravity_window (destroy_with, GDK_GRAVITY_NORTH_WEST,
9791 gtk_widget_show (window);
9793 window = make_gravity_window (destroy_with, GDK_GRAVITY_SOUTH_EAST,
9795 gtk_widget_show (window);
9797 window = make_gravity_window (destroy_with, GDK_GRAVITY_NORTH_EAST,
9799 gtk_widget_show (window);
9801 window = make_gravity_window (destroy_with, GDK_GRAVITY_SOUTH_WEST,
9803 gtk_widget_show (window);
9805 window = make_gravity_window (destroy_with, GDK_GRAVITY_SOUTH,
9807 gtk_widget_show (window);
9809 window = make_gravity_window (destroy_with, GDK_GRAVITY_NORTH,
9811 gtk_widget_show (window);
9814 window = make_gravity_window (destroy_with, GDK_GRAVITY_WEST,
9816 gtk_widget_show (window);
9819 window = make_gravity_window (destroy_with, GDK_GRAVITY_EAST,
9821 gtk_widget_show (window);
9823 window = make_gravity_window (destroy_with, GDK_GRAVITY_CENTER,
9825 gtk_widget_show (window);
9827 window = make_gravity_window (destroy_with, GDK_GRAVITY_STATIC,
9829 gtk_widget_show (window);
9833 window_controls (GtkWidget *window)
9835 GtkWidget *control_window;
9846 control_window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
9848 gtk_window_set_screen (GTK_WINDOW (control_window),
9849 gtk_widget_get_screen (window));
9851 gtk_window_set_title (GTK_WINDOW (control_window), "Size controls");
9853 g_object_set_data (G_OBJECT (control_window),
9857 gtk_signal_connect_object (GTK_OBJECT (control_window),
9859 GTK_SIGNAL_FUNC (gtk_widget_destroy),
9860 GTK_OBJECT (window));
9862 vbox = gtk_vbox_new (FALSE, 5);
9864 gtk_container_add (GTK_CONTAINER (control_window), vbox);
9866 label = gtk_label_new ("<no configure events>");
9867 gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
9869 gtk_signal_connect (GTK_OBJECT (window),
9871 GTK_SIGNAL_FUNC (configure_event_callback),
9874 adj = (GtkAdjustment *) gtk_adjustment_new (10.0, -2000.0, 2000.0, 1.0,
9876 spin = gtk_spin_button_new (adj, 0, 0);
9878 gtk_box_pack_start (GTK_BOX (vbox), spin, FALSE, FALSE, 0);
9880 g_object_set_data (G_OBJECT (control_window), "spin1", spin);
9882 adj = (GtkAdjustment *) gtk_adjustment_new (10.0, -2000.0, 2000.0, 1.0,
9884 spin = gtk_spin_button_new (adj, 0, 0);
9886 gtk_box_pack_start (GTK_BOX (vbox), spin, FALSE, FALSE, 0);
9888 g_object_set_data (G_OBJECT (control_window), "spin2", spin);
9890 entry = gtk_entry_new ();
9891 gtk_box_pack_start (GTK_BOX (vbox), entry, FALSE, FALSE, 0);
9893 gtk_signal_connect (GTK_OBJECT (entry), "changed",
9894 GTK_SIGNAL_FUNC (set_geometry_callback),
9897 button = gtk_button_new_with_label ("Show gravity test windows");
9898 gtk_signal_connect_object (GTK_OBJECT (button),
9900 GTK_SIGNAL_FUNC (do_gravity_test),
9902 gtk_box_pack_end (GTK_BOX (vbox), button, FALSE, FALSE, 0);
9904 button = gtk_button_new_with_label ("Reshow with initial size");
9905 gtk_signal_connect_object (GTK_OBJECT (button),
9907 GTK_SIGNAL_FUNC (gtk_window_reshow_with_initial_size),
9908 GTK_OBJECT (window));
9909 gtk_box_pack_end (GTK_BOX (vbox), button, FALSE, FALSE, 0);
9911 button = gtk_button_new_with_label ("Queue resize");
9912 gtk_signal_connect_object (GTK_OBJECT (button),
9914 GTK_SIGNAL_FUNC (gtk_widget_queue_resize),
9915 GTK_OBJECT (window));
9916 gtk_box_pack_end (GTK_BOX (vbox), button, FALSE, FALSE, 0);
9918 button = gtk_button_new_with_label ("Resize");
9919 gtk_signal_connect (GTK_OBJECT (button),
9921 GTK_SIGNAL_FUNC (set_size_callback),
9922 GTK_OBJECT (control_window));
9923 gtk_box_pack_end (GTK_BOX (vbox), button, FALSE, FALSE, 0);
9925 button = gtk_button_new_with_label ("Set default size");
9926 gtk_signal_connect (GTK_OBJECT (button),
9928 GTK_SIGNAL_FUNC (set_default_size_callback),
9929 GTK_OBJECT (control_window));
9930 gtk_box_pack_end (GTK_BOX (vbox), button, FALSE, FALSE, 0);
9932 button = gtk_button_new_with_label ("Unset default size");
9933 gtk_signal_connect (GTK_OBJECT (button),
9935 GTK_SIGNAL_FUNC (unset_default_size_callback),
9936 GTK_OBJECT (control_window));
9937 gtk_box_pack_end (GTK_BOX (vbox), button, FALSE, FALSE, 0);
9939 button = gtk_button_new_with_label ("Set size request");
9940 gtk_signal_connect (GTK_OBJECT (button),
9942 GTK_SIGNAL_FUNC (set_usize_callback),
9943 GTK_OBJECT (control_window));
9944 gtk_box_pack_end (GTK_BOX (vbox), button, FALSE, FALSE, 0);
9946 button = gtk_button_new_with_label ("Unset size request");
9947 gtk_signal_connect (GTK_OBJECT (button),
9949 GTK_SIGNAL_FUNC (unset_usize_callback),
9950 GTK_OBJECT (control_window));
9951 gtk_box_pack_end (GTK_BOX (vbox), button, FALSE, FALSE, 0);
9953 button = gtk_button_new_with_label ("Move");
9954 gtk_signal_connect (GTK_OBJECT (button),
9956 GTK_SIGNAL_FUNC (set_location_callback),
9957 GTK_OBJECT (control_window));
9958 gtk_box_pack_end (GTK_BOX (vbox), button, FALSE, FALSE, 0);
9960 button = gtk_button_new_with_label ("Move to current position");
9961 gtk_signal_connect (GTK_OBJECT (button),
9963 GTK_SIGNAL_FUNC (move_to_position_callback),
9964 GTK_OBJECT (control_window));
9965 gtk_box_pack_end (GTK_BOX (vbox), button, FALSE, FALSE, 0);
9967 button = gtk_check_button_new_with_label ("Allow shrink");
9968 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), FALSE);
9969 gtk_signal_connect (GTK_OBJECT (button),
9971 GTK_SIGNAL_FUNC (allow_shrink_callback),
9972 GTK_OBJECT (control_window));
9973 gtk_box_pack_end (GTK_BOX (vbox), button, FALSE, FALSE, 0);
9975 button = gtk_check_button_new_with_label ("Allow grow");
9976 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE);
9977 gtk_signal_connect (GTK_OBJECT (button),
9979 GTK_SIGNAL_FUNC (allow_grow_callback),
9980 GTK_OBJECT (control_window));
9981 gtk_box_pack_end (GTK_BOX (vbox), button, FALSE, FALSE, 0);
9983 button = gtk_check_button_new_with_label ("Auto shrink");
9984 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), FALSE);
9985 gtk_signal_connect (GTK_OBJECT (button),
9987 GTK_SIGNAL_FUNC (auto_shrink_callback),
9988 GTK_OBJECT (control_window));
9989 gtk_box_pack_end (GTK_BOX (vbox), button, FALSE, FALSE, 0);
9991 button = gtk_button_new_with_mnemonic ("_Show");
9992 gtk_signal_connect_object (GTK_OBJECT (button),
9994 GTK_SIGNAL_FUNC (gtk_widget_show),
9995 GTK_OBJECT (window));
9996 gtk_box_pack_end (GTK_BOX (vbox), button, FALSE, FALSE, 0);
9998 button = gtk_button_new_with_mnemonic ("_Hide");
9999 gtk_signal_connect_object (GTK_OBJECT (button),
10001 GTK_SIGNAL_FUNC (gtk_widget_hide),
10002 GTK_OBJECT (window));
10003 gtk_box_pack_end (GTK_BOX (vbox), button, FALSE, FALSE, 0);
10005 menu = gtk_menu_new ();
10011 static gchar *names[] = {
10012 "GDK_GRAVITY_NORTH_WEST",
10013 "GDK_GRAVITY_NORTH",
10014 "GDK_GRAVITY_NORTH_EAST",
10015 "GDK_GRAVITY_WEST",
10016 "GDK_GRAVITY_CENTER",
10017 "GDK_GRAVITY_EAST",
10018 "GDK_GRAVITY_SOUTH_WEST",
10019 "GDK_GRAVITY_SOUTH",
10020 "GDK_GRAVITY_SOUTH_EAST",
10021 "GDK_GRAVITY_STATIC",
10025 g_assert (names[i]);
10027 mi = gtk_menu_item_new_with_label (names[i]);
10029 gtk_menu_shell_append (GTK_MENU_SHELL (menu), mi);
10034 gtk_widget_show_all (menu);
10036 om = gtk_option_menu_new ();
10037 gtk_option_menu_set_menu (GTK_OPTION_MENU (om), menu);
10040 gtk_signal_connect (GTK_OBJECT (om),
10042 GTK_SIGNAL_FUNC (gravity_selected),
10045 gtk_box_pack_end (GTK_BOX (vbox), om, FALSE, FALSE, 0);
10048 menu = gtk_menu_new ();
10054 static gchar *names[] = {
10055 "GTK_WIN_POS_NONE",
10056 "GTK_WIN_POS_CENTER",
10057 "GTK_WIN_POS_MOUSE",
10058 "GTK_WIN_POS_CENTER_ALWAYS",
10059 "GTK_WIN_POS_CENTER_ON_PARENT",
10063 g_assert (names[i]);
10065 mi = gtk_menu_item_new_with_label (names[i]);
10067 gtk_menu_shell_append (GTK_MENU_SHELL (menu), mi);
10072 gtk_widget_show_all (menu);
10074 om = gtk_option_menu_new ();
10075 gtk_option_menu_set_menu (GTK_OPTION_MENU (om), menu);
10078 gtk_signal_connect (GTK_OBJECT (om),
10080 GTK_SIGNAL_FUNC (pos_selected),
10083 gtk_box_pack_end (GTK_BOX (vbox), om, FALSE, FALSE, 0);
10085 gtk_widget_show_all (vbox);
10087 return control_window;
10091 create_window_sizing (GtkWidget *widget)
10093 static GtkWidget *window = NULL;
10094 static GtkWidget *target_window = NULL;
10096 if (!target_window)
10100 target_window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
10101 gtk_window_set_screen (GTK_WINDOW (target_window),
10102 gtk_widget_get_screen (widget));
10103 label = gtk_label_new (NULL);
10104 gtk_label_set_markup (GTK_LABEL (label), "<span foreground=\"purple\"><big>Window being resized</big></span>\nBlah blah blah blah\nblah blah blah\nblah blah blah blah blah");
10105 gtk_container_add (GTK_CONTAINER (target_window), label);
10106 gtk_widget_show (label);
10108 gtk_signal_connect (GTK_OBJECT (target_window), "destroy",
10109 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
10112 window = window_controls (target_window);
10114 gtk_signal_connect (GTK_OBJECT (window), "destroy",
10115 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
10118 gtk_window_set_title (GTK_WINDOW (target_window), "Window to size");
10121 /* don't show target window by default, we want to allow testing
10122 * of behavior on first show.
10125 if (!GTK_WIDGET_VISIBLE (window))
10126 gtk_widget_show (window);
10128 gtk_widget_destroy (window);
10135 typedef struct _ProgressData {
10138 GtkWidget *block_spin;
10139 GtkWidget *x_align_spin;
10140 GtkWidget *y_align_spin;
10141 GtkWidget *step_spin;
10142 GtkWidget *act_blocks_spin;
10151 progress_timeout (gpointer data)
10154 GtkAdjustment *adj;
10156 adj = GTK_PROGRESS (data)->adjustment;
10158 new_val = adj->value + 1;
10159 if (new_val > adj->upper)
10160 new_val = adj->lower;
10162 gtk_progress_set_value (GTK_PROGRESS (data), new_val);
10168 destroy_progress (GtkWidget *widget,
10169 ProgressData **pdata)
10171 gtk_timeout_remove ((*pdata)->timer);
10172 (*pdata)->timer = 0;
10173 (*pdata)->window = NULL;
10179 progressbar_toggle_orientation (GtkWidget *widget, gpointer data)
10181 ProgressData *pdata;
10184 pdata = (ProgressData *) data;
10186 if (!GTK_WIDGET_MAPPED (widget))
10189 i = gtk_option_menu_get_history (GTK_OPTION_MENU (widget));
10191 gtk_progress_bar_set_orientation (GTK_PROGRESS_BAR (pdata->pbar),
10192 (GtkProgressBarOrientation) i);
10196 toggle_show_text (GtkWidget *widget, ProgressData *pdata)
10198 gtk_progress_set_show_text (GTK_PROGRESS (pdata->pbar),
10199 GTK_TOGGLE_BUTTON (widget)->active);
10200 gtk_widget_set_sensitive (pdata->entry, GTK_TOGGLE_BUTTON (widget)->active);
10201 gtk_widget_set_sensitive (pdata->x_align_spin,
10202 GTK_TOGGLE_BUTTON (widget)->active);
10203 gtk_widget_set_sensitive (pdata->y_align_spin,
10204 GTK_TOGGLE_BUTTON (widget)->active);
10208 progressbar_toggle_bar_style (GtkWidget *widget, gpointer data)
10210 ProgressData *pdata;
10213 pdata = (ProgressData *) data;
10215 if (!GTK_WIDGET_MAPPED (widget))
10218 i = gtk_option_menu_get_history (GTK_OPTION_MENU (widget));
10221 gtk_widget_set_sensitive (pdata->block_spin, TRUE);
10223 gtk_widget_set_sensitive (pdata->block_spin, FALSE);
10225 gtk_progress_bar_set_bar_style (GTK_PROGRESS_BAR (pdata->pbar),
10226 (GtkProgressBarStyle) i);
10230 progress_value_changed (GtkAdjustment *adj, ProgressData *pdata)
10234 if (GTK_PROGRESS (pdata->pbar)->activity_mode)
10235 sprintf (buf, "???");
10237 sprintf (buf, "%.0f%%", 100 *
10238 gtk_progress_get_current_percentage (GTK_PROGRESS (pdata->pbar)));
10239 gtk_label_set_text (GTK_LABEL (pdata->label), buf);
10243 adjust_blocks (GtkAdjustment *adj, ProgressData *pdata)
10245 gtk_progress_set_percentage (GTK_PROGRESS (pdata->pbar), 0);
10246 gtk_progress_bar_set_discrete_blocks (GTK_PROGRESS_BAR (pdata->pbar),
10247 gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (pdata->block_spin)));
10251 adjust_step (GtkAdjustment *adj, ProgressData *pdata)
10253 gtk_progress_bar_set_activity_step (GTK_PROGRESS_BAR (pdata->pbar),
10254 gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (pdata->step_spin)));
10258 adjust_act_blocks (GtkAdjustment *adj, ProgressData *pdata)
10260 gtk_progress_bar_set_activity_blocks (GTK_PROGRESS_BAR (pdata->pbar),
10261 gtk_spin_button_get_value_as_int
10262 (GTK_SPIN_BUTTON (pdata->act_blocks_spin)));
10266 adjust_align (GtkAdjustment *adj, ProgressData *pdata)
10268 gtk_progress_set_text_alignment (GTK_PROGRESS (pdata->pbar),
10269 gtk_spin_button_get_value_as_float
10270 (GTK_SPIN_BUTTON (pdata->x_align_spin)),
10271 gtk_spin_button_get_value_as_float
10272 (GTK_SPIN_BUTTON (pdata->y_align_spin)));
10276 toggle_activity_mode (GtkWidget *widget, ProgressData *pdata)
10278 gtk_progress_set_activity_mode (GTK_PROGRESS (pdata->pbar),
10279 GTK_TOGGLE_BUTTON (widget)->active);
10280 gtk_widget_set_sensitive (pdata->step_spin,
10281 GTK_TOGGLE_BUTTON (widget)->active);
10282 gtk_widget_set_sensitive (pdata->act_blocks_spin,
10283 GTK_TOGGLE_BUTTON (widget)->active);
10287 entry_changed (GtkWidget *widget, ProgressData *pdata)
10289 gtk_progress_set_format_string (GTK_PROGRESS (pdata->pbar),
10290 gtk_entry_get_text (GTK_ENTRY (pdata->entry)));
10294 create_progress_bar (GtkWidget *widget)
10305 GtkAdjustment *adj;
10306 static ProgressData *pdata = NULL;
10308 static gchar *items1[] =
10316 static gchar *items2[] =
10323 pdata = g_new0 (ProgressData, 1);
10325 if (!pdata->window)
10327 pdata->window = gtk_dialog_new ();
10329 gtk_window_set_screen (GTK_WINDOW (pdata->window),
10330 gtk_widget_get_screen (widget));
10332 gtk_window_set_policy (GTK_WINDOW (pdata->window), FALSE, FALSE, TRUE);
10334 gtk_signal_connect (GTK_OBJECT (pdata->window), "destroy",
10335 GTK_SIGNAL_FUNC (destroy_progress),
10340 gtk_window_set_title (GTK_WINDOW (pdata->window), "GtkProgressBar");
10341 gtk_container_set_border_width (GTK_CONTAINER (pdata->window), 0);
10343 vbox = gtk_vbox_new (FALSE, 5);
10344 gtk_container_set_border_width (GTK_CONTAINER (vbox), 10);
10345 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (pdata->window)->vbox),
10346 vbox, FALSE, TRUE, 0);
10348 frame = gtk_frame_new ("Progress");
10349 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, TRUE, 0);
10351 vbox2 = gtk_vbox_new (FALSE, 5);
10352 gtk_container_add (GTK_CONTAINER (frame), vbox2);
10354 align = gtk_alignment_new (0.5, 0.5, 0, 0);
10355 gtk_box_pack_start (GTK_BOX (vbox2), align, FALSE, FALSE, 5);
10357 adj = (GtkAdjustment *) gtk_adjustment_new (0, 1, 300, 0, 0, 0);
10358 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
10359 GTK_SIGNAL_FUNC (progress_value_changed), pdata);
10361 pdata->pbar = gtk_progress_bar_new_with_adjustment (adj);
10362 gtk_progress_set_format_string (GTK_PROGRESS (pdata->pbar),
10363 "%v from [%l,%u] (=%p%%)");
10364 gtk_container_add (GTK_CONTAINER (align), pdata->pbar);
10365 pdata->timer = gtk_timeout_add (100, progress_timeout, pdata->pbar);
10367 align = gtk_alignment_new (0.5, 0.5, 0, 0);
10368 gtk_box_pack_start (GTK_BOX (vbox2), align, FALSE, FALSE, 5);
10370 hbox = gtk_hbox_new (FALSE, 5);
10371 gtk_container_add (GTK_CONTAINER (align), hbox);
10372 label = gtk_label_new ("Label updated by user :");
10373 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
10374 pdata->label = gtk_label_new ("");
10375 gtk_box_pack_start (GTK_BOX (hbox), pdata->label, FALSE, TRUE, 0);
10377 frame = gtk_frame_new ("Options");
10378 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, TRUE, 0);
10380 vbox2 = gtk_vbox_new (FALSE, 5);
10381 gtk_container_add (GTK_CONTAINER (frame), vbox2);
10383 tab = gtk_table_new (7, 2, FALSE);
10384 gtk_box_pack_start (GTK_BOX (vbox2), tab, FALSE, TRUE, 0);
10386 label = gtk_label_new ("Orientation :");
10387 gtk_table_attach (GTK_TABLE (tab), label, 0, 1, 0, 1,
10388 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
10390 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
10392 pdata->omenu1 = build_option_menu (items1, 4, 0,
10393 progressbar_toggle_orientation,
10395 hbox = gtk_hbox_new (FALSE, 0);
10396 gtk_table_attach (GTK_TABLE (tab), hbox, 1, 2, 0, 1,
10397 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
10399 gtk_box_pack_start (GTK_BOX (hbox), pdata->omenu1, TRUE, TRUE, 0);
10401 check = gtk_check_button_new_with_label ("Show text");
10402 gtk_signal_connect (GTK_OBJECT (check), "clicked",
10403 GTK_SIGNAL_FUNC (toggle_show_text),
10405 gtk_table_attach (GTK_TABLE (tab), check, 0, 1, 1, 2,
10406 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
10409 hbox = gtk_hbox_new (FALSE, 0);
10410 gtk_table_attach (GTK_TABLE (tab), hbox, 1, 2, 1, 2,
10411 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
10414 label = gtk_label_new ("Format : ");
10415 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
10417 pdata->entry = gtk_entry_new ();
10418 gtk_signal_connect (GTK_OBJECT (pdata->entry), "changed",
10419 GTK_SIGNAL_FUNC (entry_changed),
10421 gtk_box_pack_start (GTK_BOX (hbox), pdata->entry, TRUE, TRUE, 0);
10422 gtk_entry_set_text (GTK_ENTRY (pdata->entry), "%v from [%l,%u] (=%p%%)");
10423 gtk_widget_set_usize (pdata->entry, 100, -1);
10424 gtk_widget_set_sensitive (pdata->entry, FALSE);
10426 label = gtk_label_new ("Text align :");
10427 gtk_table_attach (GTK_TABLE (tab), label, 0, 1, 2, 3,
10428 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
10430 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
10432 hbox = gtk_hbox_new (FALSE, 0);
10433 gtk_table_attach (GTK_TABLE (tab), hbox, 1, 2, 2, 3,
10434 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
10437 label = gtk_label_new ("x :");
10438 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 5);
10440 adj = (GtkAdjustment *) gtk_adjustment_new (0.5, 0, 1, 0.1, 0.1, 0);
10441 pdata->x_align_spin = gtk_spin_button_new (adj, 0, 1);
10442 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
10443 GTK_SIGNAL_FUNC (adjust_align), pdata);
10444 gtk_box_pack_start (GTK_BOX (hbox), pdata->x_align_spin, FALSE, TRUE, 0);
10445 gtk_widget_set_sensitive (pdata->x_align_spin, FALSE);
10447 label = gtk_label_new ("y :");
10448 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 5);
10450 adj = (GtkAdjustment *) gtk_adjustment_new (0.5, 0, 1, 0.1, 0.1, 0);
10451 pdata->y_align_spin = gtk_spin_button_new (adj, 0, 1);
10452 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
10453 GTK_SIGNAL_FUNC (adjust_align), pdata);
10454 gtk_box_pack_start (GTK_BOX (hbox), pdata->y_align_spin, FALSE, TRUE, 0);
10455 gtk_widget_set_sensitive (pdata->y_align_spin, FALSE);
10457 label = gtk_label_new ("Bar Style :");
10458 gtk_table_attach (GTK_TABLE (tab), label, 0, 1, 3, 4,
10459 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
10461 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
10463 pdata->omenu2 = build_option_menu (items2, 2, 0,
10464 progressbar_toggle_bar_style,
10466 hbox = gtk_hbox_new (FALSE, 0);
10467 gtk_table_attach (GTK_TABLE (tab), hbox, 1, 2, 3, 4,
10468 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
10470 gtk_box_pack_start (GTK_BOX (hbox), pdata->omenu2, TRUE, TRUE, 0);
10472 label = gtk_label_new ("Block count :");
10473 gtk_table_attach (GTK_TABLE (tab), label, 0, 1, 4, 5,
10474 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
10476 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
10478 hbox = gtk_hbox_new (FALSE, 0);
10479 gtk_table_attach (GTK_TABLE (tab), hbox, 1, 2, 4, 5,
10480 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
10482 adj = (GtkAdjustment *) gtk_adjustment_new (10, 2, 20, 1, 5, 0);
10483 pdata->block_spin = gtk_spin_button_new (adj, 0, 0);
10484 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
10485 GTK_SIGNAL_FUNC (adjust_blocks), pdata);
10486 gtk_box_pack_start (GTK_BOX (hbox), pdata->block_spin, FALSE, TRUE, 0);
10487 gtk_widget_set_sensitive (pdata->block_spin, FALSE);
10489 check = gtk_check_button_new_with_label ("Activity mode");
10490 gtk_signal_connect (GTK_OBJECT (check), "clicked",
10491 GTK_SIGNAL_FUNC (toggle_activity_mode),
10493 gtk_table_attach (GTK_TABLE (tab), check, 0, 1, 5, 6,
10494 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
10497 hbox = gtk_hbox_new (FALSE, 0);
10498 gtk_table_attach (GTK_TABLE (tab), hbox, 1, 2, 5, 6,
10499 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
10501 label = gtk_label_new ("Step size : ");
10502 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
10503 adj = (GtkAdjustment *) gtk_adjustment_new (3, 1, 20, 1, 5, 0);
10504 pdata->step_spin = gtk_spin_button_new (adj, 0, 0);
10505 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
10506 GTK_SIGNAL_FUNC (adjust_step), pdata);
10507 gtk_box_pack_start (GTK_BOX (hbox), pdata->step_spin, FALSE, TRUE, 0);
10508 gtk_widget_set_sensitive (pdata->step_spin, FALSE);
10510 hbox = gtk_hbox_new (FALSE, 0);
10511 gtk_table_attach (GTK_TABLE (tab), hbox, 1, 2, 6, 7,
10512 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
10514 label = gtk_label_new ("Blocks : ");
10515 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
10516 adj = (GtkAdjustment *) gtk_adjustment_new (5, 2, 10, 1, 5, 0);
10517 pdata->act_blocks_spin = gtk_spin_button_new (adj, 0, 0);
10518 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
10519 GTK_SIGNAL_FUNC (adjust_act_blocks), pdata);
10520 gtk_box_pack_start (GTK_BOX (hbox), pdata->act_blocks_spin, FALSE, TRUE,
10522 gtk_widget_set_sensitive (pdata->act_blocks_spin, FALSE);
10524 button = gtk_button_new_with_label ("close");
10525 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
10526 GTK_SIGNAL_FUNC (gtk_widget_destroy),
10527 GTK_OBJECT (pdata->window));
10528 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
10529 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (pdata->window)->action_area),
10530 button, TRUE, TRUE, 0);
10531 gtk_widget_grab_default (button);
10534 if (!GTK_WIDGET_VISIBLE (pdata->window))
10535 gtk_widget_show_all (pdata->window);
10537 gtk_widget_destroy (pdata->window);
10549 GtkWidget *res_widget;
10553 find_widget (GtkWidget *widget, FindWidgetData *data)
10555 GtkAllocation new_allocation;
10559 new_allocation = widget->allocation;
10561 if (data->found || !GTK_WIDGET_MAPPED (widget))
10564 /* Note that in the following code, we only count the
10565 * position as being inside a WINDOW widget if it is inside
10566 * widget->window; points that are outside of widget->window
10567 * but within the allocation are not counted. This is consistent
10568 * with the way we highlight drag targets.
10570 if (!GTK_WIDGET_NO_WINDOW (widget))
10572 new_allocation.x = 0;
10573 new_allocation.y = 0;
10576 if (widget->parent && !data->first)
10578 GdkWindow *window = widget->window;
10579 while (window != widget->parent->window)
10581 gint tx, ty, twidth, theight;
10582 gdk_window_get_size (window, &twidth, &theight);
10584 if (new_allocation.x < 0)
10586 new_allocation.width += new_allocation.x;
10587 new_allocation.x = 0;
10589 if (new_allocation.y < 0)
10591 new_allocation.height += new_allocation.y;
10592 new_allocation.y = 0;
10594 if (new_allocation.x + new_allocation.width > twidth)
10595 new_allocation.width = twidth - new_allocation.x;
10596 if (new_allocation.y + new_allocation.height > theight)
10597 new_allocation.height = theight - new_allocation.y;
10599 gdk_window_get_position (window, &tx, &ty);
10600 new_allocation.x += tx;
10602 new_allocation.y += ty;
10605 window = gdk_window_get_parent (window);
10609 if ((data->x >= new_allocation.x) && (data->y >= new_allocation.y) &&
10610 (data->x < new_allocation.x + new_allocation.width) &&
10611 (data->y < new_allocation.y + new_allocation.height))
10613 /* First, check if the drag is in a valid drop site in
10614 * one of our children
10616 if (GTK_IS_CONTAINER (widget))
10618 FindWidgetData new_data = *data;
10620 new_data.x -= x_offset;
10621 new_data.y -= y_offset;
10622 new_data.found = FALSE;
10623 new_data.first = FALSE;
10625 gtk_container_forall (GTK_CONTAINER (widget),
10626 (GtkCallback)find_widget,
10629 data->found = new_data.found;
10631 data->res_widget = new_data.res_widget;
10634 /* If not, and this widget is registered as a drop site, check to
10635 * emit "drag_motion" to check if we are actually in
10640 data->found = TRUE;
10641 data->res_widget = widget;
10647 find_widget_at_pointer (GdkDisplay *display)
10649 GtkWidget *widget = NULL;
10650 GdkWindow *pointer_window;
10652 FindWidgetData data;
10654 pointer_window = gdk_display_get_window_at_pointer (display, NULL, NULL);
10656 if (pointer_window)
10657 gdk_window_get_user_data (pointer_window, (gpointer*) &widget);
10661 gdk_window_get_pointer (widget->window,
10666 data.found = FALSE;
10669 find_widget (widget, &data);
10671 return data.res_widget;
10677 struct PropertiesData {
10678 GtkWidget **window;
10685 destroy_properties (GtkWidget *widget,
10686 struct PropertiesData *data)
10690 *data->window = NULL;
10691 data->window = NULL;
10696 gdk_cursor_destroy (data->cursor);
10697 data->cursor = NULL;
10702 gtk_signal_disconnect (widget, data->handler);
10710 property_query_event (GtkWidget *widget,
10712 struct PropertiesData *data)
10714 GtkWidget *res_widget = NULL;
10716 if (!data->in_query)
10719 if (event->type == GDK_BUTTON_RELEASE)
10721 gtk_grab_remove (widget);
10722 gdk_display_pointer_ungrab (gtk_widget_get_display (widget),
10725 res_widget = find_widget_at_pointer (gtk_widget_get_display (widget));
10728 g_object_set_data (G_OBJECT (res_widget), "prop-editor-screen",
10729 gtk_widget_get_screen (widget));
10730 create_prop_editor (G_OBJECT (res_widget), 0);
10733 data->in_query = FALSE;
10740 query_properties (GtkButton *button,
10741 struct PropertiesData *data)
10745 gtk_signal_connect (GTK_OBJECT (button), "event",
10746 (GtkSignalFunc) property_query_event, data);
10750 data->cursor = gdk_cursor_new_for_display (gtk_widget_get_display (GTK_WIDGET (button)),
10753 failure = gdk_pointer_grab (GTK_WIDGET (button)->window,
10755 GDK_BUTTON_RELEASE_MASK,
10760 gtk_grab_add (GTK_WIDGET (button));
10762 data->in_query = TRUE;
10766 create_properties (GtkWidget *widget)
10768 static GtkWidget *window = NULL;
10772 struct PropertiesData *data;
10774 data = g_new (struct PropertiesData, 1);
10775 data->window = &window;
10776 data->in_query = FALSE;
10777 data->cursor = NULL;
10782 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
10784 gtk_window_set_screen (GTK_WINDOW (window),
10785 gtk_widget_get_screen (widget));
10787 data->handler = gtk_signal_connect (GTK_OBJECT (window), "destroy",
10788 GTK_SIGNAL_FUNC(destroy_properties),
10791 gtk_window_set_title (GTK_WINDOW (window), "test properties");
10792 gtk_container_set_border_width (GTK_CONTAINER (window), 10);
10794 vbox = gtk_vbox_new (FALSE, 1);
10795 gtk_container_add (GTK_CONTAINER (window), vbox);
10797 label = gtk_label_new ("This is just a dumb test to test properties.\nIf you need a generic module, get GLE.");
10798 gtk_box_pack_start (GTK_BOX (vbox), label, TRUE, TRUE, 0);
10800 button = gtk_button_new_with_label ("Query properties");
10801 gtk_box_pack_start (GTK_BOX (vbox), button, TRUE, TRUE, 0);
10802 gtk_signal_connect (GTK_OBJECT (button), "clicked",
10803 GTK_SIGNAL_FUNC(query_properties),
10807 if (!GTK_WIDGET_VISIBLE (window))
10808 gtk_widget_show_all (window);
10810 gtk_widget_destroy (window);
10819 static int color_idle = 0;
10822 color_idle_func (GtkWidget *preview)
10824 static int count = 1;
10828 for (i = 0; i < 256; i++)
10830 for (j = 0, k = 0; j < 256; j++)
10832 buf[k+0] = i + count;
10834 buf[k+2] = j + count;
10838 gtk_preview_draw_row (GTK_PREVIEW (preview), buf, 0, i, 256);
10843 gtk_widget_draw (preview, NULL);
10849 color_preview_destroy (GtkWidget *widget,
10850 GtkWidget **window)
10852 gtk_idle_remove (color_idle);
10859 create_color_preview (GtkWidget *widget)
10861 static GtkWidget *window = NULL;
10862 GtkWidget *preview;
10868 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
10870 gtk_window_set_screen (GTK_WINDOW (window),
10871 gtk_widget_get_screen (widget));
10873 gtk_signal_connect (GTK_OBJECT (window), "destroy",
10874 GTK_SIGNAL_FUNC(color_preview_destroy),
10877 gtk_window_set_title (GTK_WINDOW (window), "test");
10878 gtk_container_set_border_width (GTK_CONTAINER (window), 10);
10880 preview = gtk_preview_new (GTK_PREVIEW_COLOR);
10881 gtk_preview_size (GTK_PREVIEW (preview), 256, 256);
10882 gtk_container_add (GTK_CONTAINER (window), preview);
10884 for (i = 0; i < 256; i++)
10886 for (j = 0, k = 0; j < 256; j++)
10894 gtk_preview_draw_row (GTK_PREVIEW (preview), buf, 0, i, 256);
10897 color_idle = gtk_idle_add ((GtkFunction) color_idle_func, preview);
10900 if (!GTK_WIDGET_VISIBLE (window))
10901 gtk_widget_show_all (window);
10903 gtk_widget_destroy (window);
10910 static int gray_idle = 0;
10913 gray_idle_func (GtkWidget *preview)
10915 static int count = 1;
10919 for (i = 0; i < 256; i++)
10921 for (j = 0; j < 256; j++)
10922 buf[j] = i + j + count;
10924 gtk_preview_draw_row (GTK_PREVIEW (preview), buf, 0, i, 256);
10929 gtk_widget_draw (preview, NULL);
10935 gray_preview_destroy (GtkWidget *widget,
10936 GtkWidget **window)
10938 gtk_idle_remove (gray_idle);
10945 create_gray_preview (GtkWidget *widget)
10947 static GtkWidget *window = NULL;
10948 GtkWidget *preview;
10954 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
10956 gtk_window_set_screen (GTK_WINDOW (window),
10957 gtk_widget_get_screen (widget));
10959 gtk_signal_connect (GTK_OBJECT (window), "destroy",
10960 GTK_SIGNAL_FUNC(gray_preview_destroy),
10963 gtk_window_set_title (GTK_WINDOW (window), "test");
10964 gtk_container_set_border_width (GTK_CONTAINER (window), 10);
10966 preview = gtk_preview_new (GTK_PREVIEW_GRAYSCALE);
10967 gtk_preview_size (GTK_PREVIEW (preview), 256, 256);
10968 gtk_container_add (GTK_CONTAINER (window), preview);
10970 for (i = 0; i < 256; i++)
10972 for (j = 0; j < 256; j++)
10975 gtk_preview_draw_row (GTK_PREVIEW (preview), buf, 0, i, 256);
10978 gray_idle = gtk_idle_add ((GtkFunction) gray_idle_func, preview);
10981 if (!GTK_WIDGET_VISIBLE (window))
10982 gtk_widget_show_all (window);
10984 gtk_widget_destroy (window);
10993 selection_test_received (GtkWidget *list, GtkSelectionData *data)
10996 GtkWidget *list_item;
11000 if (data->length < 0)
11002 g_print ("Selection retrieval failed\n");
11005 if (data->type != GDK_SELECTION_TYPE_ATOM)
11007 g_print ("Selection \"TARGETS\" was not returned as atoms!\n");
11011 /* Clear out any current list items */
11013 gtk_list_clear_items (GTK_LIST(list), 0, -1);
11015 /* Add new items to list */
11017 atoms = (GdkAtom *)data->data;
11020 l = data->length / sizeof (GdkAtom);
11021 for (i = 0; i < l; i++)
11024 name = gdk_atom_name (atoms[i]);
11027 list_item = gtk_list_item_new_with_label (name);
11031 list_item = gtk_list_item_new_with_label ("(bad atom)");
11033 gtk_widget_show (list_item);
11034 item_list = g_list_append (item_list, list_item);
11037 gtk_list_append_items (GTK_LIST (list), item_list);
11043 selection_test_get_targets (GtkWidget *widget, GtkWidget *list)
11045 static GdkAtom targets_atom = GDK_NONE;
11047 if (targets_atom == GDK_NONE)
11048 targets_atom = gdk_atom_intern ("TARGETS", FALSE);
11050 gtk_selection_convert (list, GDK_SELECTION_PRIMARY, targets_atom,
11055 create_selection_test (GtkWidget *widget)
11057 static GtkWidget *window = NULL;
11060 GtkWidget *scrolled_win;
11066 window = gtk_dialog_new ();
11068 gtk_window_set_screen (GTK_WINDOW (window),
11069 gtk_widget_get_screen (widget));
11071 gtk_signal_connect (GTK_OBJECT (window), "destroy",
11072 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
11075 gtk_window_set_title (GTK_WINDOW (window), "Selection Test");
11076 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
11078 /* Create the list */
11080 vbox = gtk_vbox_new (FALSE, 5);
11081 gtk_container_set_border_width (GTK_CONTAINER (vbox), 10);
11082 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox), vbox,
11085 label = gtk_label_new ("Gets available targets for current selection");
11086 gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
11088 scrolled_win = gtk_scrolled_window_new (NULL, NULL);
11089 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win),
11090 GTK_POLICY_AUTOMATIC,
11091 GTK_POLICY_AUTOMATIC);
11092 gtk_box_pack_start (GTK_BOX (vbox), scrolled_win, TRUE, TRUE, 0);
11093 gtk_widget_set_usize (scrolled_win, 100, 200);
11095 list = gtk_list_new ();
11096 gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scrolled_win), list);
11098 gtk_signal_connect (GTK_OBJECT(list), "selection_received",
11099 GTK_SIGNAL_FUNC (selection_test_received), NULL);
11101 /* .. And create some buttons */
11102 button = gtk_button_new_with_label ("Get Targets");
11103 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
11104 button, TRUE, TRUE, 0);
11106 gtk_signal_connect (GTK_OBJECT (button), "clicked",
11107 GTK_SIGNAL_FUNC (selection_test_get_targets), list);
11109 button = gtk_button_new_with_label ("Quit");
11110 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
11111 button, TRUE, TRUE, 0);
11113 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
11114 GTK_SIGNAL_FUNC (gtk_widget_destroy),
11115 GTK_OBJECT (window));
11118 if (!GTK_WIDGET_VISIBLE (window))
11119 gtk_widget_show_all (window);
11121 gtk_widget_destroy (window);
11129 create_gamma_curve (GtkWidget *widget)
11131 static GtkWidget *window = NULL, *curve;
11132 static int count = 0;
11139 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
11140 gtk_window_set_screen (GTK_WINDOW (window),
11141 gtk_widget_get_screen (widget));
11143 gtk_window_set_title (GTK_WINDOW (window), "test");
11144 gtk_container_set_border_width (GTK_CONTAINER (window), 10);
11146 gtk_signal_connect (GTK_OBJECT (window), "destroy",
11147 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
11150 curve = gtk_gamma_curve_new ();
11151 gtk_container_add (GTK_CONTAINER (window), curve);
11152 gtk_widget_show (curve);
11155 max = 127 + (count % 2)*128;
11156 gtk_curve_set_range (GTK_CURVE (GTK_GAMMA_CURVE (curve)->curve),
11158 for (i = 0; i < max; ++i)
11159 vec[i] = (127 / sqrt (max)) * sqrt (i);
11160 gtk_curve_set_vector (GTK_CURVE (GTK_GAMMA_CURVE (curve)->curve),
11163 if (!GTK_WIDGET_VISIBLE (window))
11164 gtk_widget_show (window);
11165 else if (count % 4 == 3)
11167 gtk_widget_destroy (window);
11178 static int scroll_test_pos = 0.0;
11181 scroll_test_expose (GtkWidget *widget, GdkEventExpose *event,
11182 GtkAdjustment *adj)
11185 gint imin, imax, jmin, jmax;
11187 imin = (event->area.x) / 10;
11188 imax = (event->area.x + event->area.width + 9) / 10;
11190 jmin = ((int)adj->value + event->area.y) / 10;
11191 jmax = ((int)adj->value + event->area.y + event->area.height + 9) / 10;
11193 gdk_window_clear_area (widget->window,
11194 event->area.x, event->area.y,
11195 event->area.width, event->area.height);
11197 for (i=imin; i<imax; i++)
11198 for (j=jmin; j<jmax; j++)
11200 gdk_draw_rectangle (widget->window,
11201 widget->style->black_gc,
11203 10*i, 10*j - (int)adj->value, 1+i%10, 1+j%10);
11209 scroll_test_scroll (GtkWidget *widget, GdkEventScroll *event,
11210 GtkAdjustment *adj)
11212 gdouble new_value = adj->value + ((event->direction == GDK_SCROLL_UP) ?
11213 -adj->page_increment / 2:
11214 adj->page_increment / 2);
11215 new_value = CLAMP (new_value, adj->lower, adj->upper - adj->page_size);
11216 gtk_adjustment_set_value (adj, new_value);
11222 scroll_test_configure (GtkWidget *widget, GdkEventConfigure *event,
11223 GtkAdjustment *adj)
11225 adj->page_increment = 0.9 * widget->allocation.height;
11226 adj->page_size = widget->allocation.height;
11228 gtk_signal_emit_by_name (GTK_OBJECT (adj), "changed");
11232 scroll_test_adjustment_changed (GtkAdjustment *adj, GtkWidget *widget)
11234 /* gint source_min = (int)adj->value - scroll_test_pos; */
11237 dy = scroll_test_pos - (int)adj->value;
11238 scroll_test_pos = adj->value;
11240 if (!GTK_WIDGET_DRAWABLE (widget))
11242 gdk_window_scroll (widget->window, 0, dy);
11243 gdk_window_process_updates (widget->window, FALSE);
11248 create_scroll_test (GtkWidget *widget)
11250 static GtkWidget *window = NULL;
11252 GtkWidget *drawing_area;
11253 GtkWidget *scrollbar;
11255 GtkAdjustment *adj;
11256 GdkGeometry geometry;
11257 GdkWindowHints geometry_mask;
11261 window = gtk_dialog_new ();
11263 gtk_window_set_screen (GTK_WINDOW (window),
11264 gtk_widget_get_screen (widget));
11266 gtk_signal_connect (GTK_OBJECT (window), "destroy",
11267 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
11270 gtk_window_set_title (GTK_WINDOW (window), "Scroll Test");
11271 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
11273 hbox = gtk_hbox_new (FALSE, 0);
11274 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox), hbox,
11276 gtk_widget_show (hbox);
11278 drawing_area = gtk_drawing_area_new ();
11279 gtk_drawing_area_size (GTK_DRAWING_AREA (drawing_area), 200, 200);
11280 gtk_box_pack_start (GTK_BOX (hbox), drawing_area, TRUE, TRUE, 0);
11281 gtk_widget_show (drawing_area);
11283 gtk_widget_set_events (drawing_area, GDK_EXPOSURE_MASK | GDK_SCROLL_MASK);
11285 adj = GTK_ADJUSTMENT (gtk_adjustment_new (0.0, 0.0, 1000.0, 1.0, 180.0, 200.0));
11286 scroll_test_pos = 0.0;
11288 scrollbar = gtk_vscrollbar_new (adj);
11289 gtk_box_pack_start (GTK_BOX (hbox), scrollbar, FALSE, FALSE, 0);
11290 gtk_widget_show (scrollbar);
11292 gtk_signal_connect (GTK_OBJECT (drawing_area), "expose_event",
11293 GTK_SIGNAL_FUNC (scroll_test_expose), adj);
11294 gtk_signal_connect (GTK_OBJECT (drawing_area), "configure_event",
11295 GTK_SIGNAL_FUNC (scroll_test_configure), adj);
11296 gtk_signal_connect (GTK_OBJECT (drawing_area), "scroll_event",
11297 GTK_SIGNAL_FUNC (scroll_test_scroll), adj);
11299 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
11300 GTK_SIGNAL_FUNC (scroll_test_adjustment_changed),
11303 /* .. And create some buttons */
11305 button = gtk_button_new_with_label ("Quit");
11306 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
11307 button, TRUE, TRUE, 0);
11309 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
11310 GTK_SIGNAL_FUNC (gtk_widget_destroy),
11311 GTK_OBJECT (window));
11312 gtk_widget_show (button);
11314 /* Set up gridded geometry */
11316 geometry_mask = GDK_HINT_MIN_SIZE |
11317 GDK_HINT_BASE_SIZE |
11318 GDK_HINT_RESIZE_INC;
11320 geometry.min_width = 20;
11321 geometry.min_height = 20;
11322 geometry.base_width = 0;
11323 geometry.base_height = 0;
11324 geometry.width_inc = 10;
11325 geometry.height_inc = 10;
11327 gtk_window_set_geometry_hints (GTK_WINDOW (window),
11328 drawing_area, &geometry, geometry_mask);
11331 if (!GTK_WIDGET_VISIBLE (window))
11332 gtk_widget_show (window);
11334 gtk_widget_destroy (window);
11341 static int timer = 0;
11344 timeout_test (GtkWidget *label)
11346 static int count = 0;
11347 static char buffer[32];
11349 sprintf (buffer, "count: %d", ++count);
11350 gtk_label_set_text (GTK_LABEL (label), buffer);
11356 start_timeout_test (GtkWidget *widget,
11361 timer = gtk_timeout_add (100, (GtkFunction) timeout_test, label);
11366 stop_timeout_test (GtkWidget *widget,
11371 gtk_timeout_remove (timer);
11377 destroy_timeout_test (GtkWidget *widget,
11378 GtkWidget **window)
11380 stop_timeout_test (NULL, NULL);
11386 create_timeout_test (GtkWidget *widget)
11388 static GtkWidget *window = NULL;
11394 window = gtk_dialog_new ();
11396 gtk_window_set_screen (GTK_WINDOW (window),
11397 gtk_widget_get_screen (widget));
11399 gtk_signal_connect (GTK_OBJECT (window), "destroy",
11400 GTK_SIGNAL_FUNC(destroy_timeout_test),
11403 gtk_window_set_title (GTK_WINDOW (window), "Timeout Test");
11404 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
11406 label = gtk_label_new ("count: 0");
11407 gtk_misc_set_padding (GTK_MISC (label), 10, 10);
11408 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox),
11409 label, TRUE, TRUE, 0);
11410 gtk_widget_show (label);
11412 button = gtk_button_new_with_label ("close");
11413 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
11414 GTK_SIGNAL_FUNC(gtk_widget_destroy),
11415 GTK_OBJECT (window));
11416 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
11417 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
11418 button, TRUE, TRUE, 0);
11419 gtk_widget_grab_default (button);
11420 gtk_widget_show (button);
11422 button = gtk_button_new_with_label ("start");
11423 gtk_signal_connect (GTK_OBJECT (button), "clicked",
11424 GTK_SIGNAL_FUNC(start_timeout_test),
11426 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
11427 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
11428 button, TRUE, TRUE, 0);
11429 gtk_widget_show (button);
11431 button = gtk_button_new_with_label ("stop");
11432 gtk_signal_connect (GTK_OBJECT (button), "clicked",
11433 GTK_SIGNAL_FUNC(stop_timeout_test),
11435 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
11436 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
11437 button, TRUE, TRUE, 0);
11438 gtk_widget_show (button);
11441 if (!GTK_WIDGET_VISIBLE (window))
11442 gtk_widget_show (window);
11444 gtk_widget_destroy (window);
11451 static int idle_id = 0;
11454 idle_test (GtkWidget *label)
11456 static int count = 0;
11457 static char buffer[32];
11459 sprintf (buffer, "count: %d", ++count);
11460 gtk_label_set_text (GTK_LABEL (label), buffer);
11466 start_idle_test (GtkWidget *widget,
11471 idle_id = gtk_idle_add ((GtkFunction) idle_test, label);
11476 stop_idle_test (GtkWidget *widget,
11481 gtk_idle_remove (idle_id);
11487 destroy_idle_test (GtkWidget *widget,
11488 GtkWidget **window)
11490 stop_idle_test (NULL, NULL);
11496 toggle_idle_container (GtkObject *button,
11497 GtkContainer *container)
11499 gtk_container_set_resize_mode (container, GPOINTER_TO_INT (gtk_object_get_user_data (button)));
11503 create_idle_test (GtkWidget *widget)
11505 static GtkWidget *window = NULL;
11508 GtkWidget *container;
11512 GtkWidget *button2;
11516 window = gtk_dialog_new ();
11518 gtk_window_set_screen (GTK_WINDOW (window),
11519 gtk_widget_get_screen (widget));
11521 gtk_signal_connect (GTK_OBJECT (window), "destroy",
11522 GTK_SIGNAL_FUNC(destroy_idle_test),
11525 gtk_window_set_title (GTK_WINDOW (window), "Idle Test");
11526 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
11528 label = gtk_label_new ("count: 0");
11529 gtk_misc_set_padding (GTK_MISC (label), 10, 10);
11530 gtk_widget_show (label);
11533 gtk_widget_new (GTK_TYPE_HBOX,
11535 /* "GtkContainer::child", gtk_widget_new (GTK_TYPE_HBOX,
11536 * "GtkWidget::visible", TRUE,
11541 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox),
11542 container, TRUE, TRUE, 0);
11545 gtk_widget_new (GTK_TYPE_FRAME,
11547 "label", "Label Container",
11549 "parent", GTK_DIALOG (window)->vbox,
11552 gtk_widget_new (GTK_TYPE_VBOX,
11557 g_object_connect (gtk_widget_new (GTK_TYPE_RADIO_BUTTON,
11558 "label", "Resize-Parent",
11559 "user_data", (void*)GTK_RESIZE_PARENT,
11563 "signal::clicked", toggle_idle_container, container,
11565 button = gtk_widget_new (GTK_TYPE_RADIO_BUTTON,
11566 "label", "Resize-Queue",
11567 "user_data", (void*)GTK_RESIZE_QUEUE,
11572 g_object_connect (button,
11573 "signal::clicked", toggle_idle_container, container,
11575 button2 = gtk_widget_new (GTK_TYPE_RADIO_BUTTON,
11576 "label", "Resize-Immediate",
11577 "user_data", (void*)GTK_RESIZE_IMMEDIATE,
11579 g_object_connect (button2,
11580 "signal::clicked", toggle_idle_container, container,
11582 g_object_set (button2,
11588 button = gtk_button_new_with_label ("close");
11589 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
11590 GTK_SIGNAL_FUNC(gtk_widget_destroy),
11591 GTK_OBJECT (window));
11592 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
11593 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
11594 button, TRUE, TRUE, 0);
11595 gtk_widget_grab_default (button);
11596 gtk_widget_show (button);
11598 button = gtk_button_new_with_label ("start");
11599 gtk_signal_connect (GTK_OBJECT (button), "clicked",
11600 GTK_SIGNAL_FUNC(start_idle_test),
11602 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
11603 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
11604 button, TRUE, TRUE, 0);
11605 gtk_widget_show (button);
11607 button = gtk_button_new_with_label ("stop");
11608 gtk_signal_connect (GTK_OBJECT (button), "clicked",
11609 GTK_SIGNAL_FUNC(stop_idle_test),
11611 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
11612 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
11613 button, TRUE, TRUE, 0);
11614 gtk_widget_show (button);
11617 if (!GTK_WIDGET_VISIBLE (window))
11618 gtk_widget_show (window);
11620 gtk_widget_destroy (window);
11628 reload_all_rc_files (void)
11630 static GdkAtom atom_rcfiles = GDK_NONE;
11632 GdkEvent *send_event = gdk_event_new (GDK_CLIENT_EVENT);
11636 atom_rcfiles = gdk_atom_intern("_GTK_READ_RCFILES", FALSE);
11638 for(i = 0; i < 5; i++)
11639 send_event->client.data.l[i] = 0;
11640 send_event->client.data_format = 32;
11641 send_event->client.message_type = atom_rcfiles;
11642 gdk_event_send_clientmessage_toall (send_event);
11644 gdk_event_free (send_event);
11648 create_rc_file (GtkWidget *widget)
11650 static GtkWidget *window = NULL;
11658 window = gtk_dialog_new ();
11660 gtk_window_set_screen (GTK_WINDOW (window),
11661 gtk_widget_get_screen (widget));
11663 gtk_signal_connect (GTK_OBJECT (window), "destroy",
11664 GTK_SIGNAL_FUNC(destroy_idle_test),
11667 frame = gtk_aspect_frame_new ("Testing RC file prioritization", 0.5, 0.5, 0.0, TRUE);
11668 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox), frame, FALSE, FALSE, 0);
11670 vbox = gtk_vbox_new (FALSE, 0);
11671 gtk_container_add (GTK_CONTAINER (frame), vbox);
11673 label = gtk_label_new ("This label should be red");
11674 gtk_widget_set_name (label, "testgtk-red-label");
11675 gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
11677 label = gtk_label_new ("This label should be green");
11678 gtk_widget_set_name (label, "testgtk-green-label");
11679 gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
11681 label = gtk_label_new ("This label should be blue");
11682 gtk_widget_set_name (label, "testgtk-blue-label");
11683 gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
11685 gtk_window_set_title (GTK_WINDOW (window), "Reload Rc file");
11686 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
11688 button = gtk_button_new_with_label ("Reload");
11689 gtk_signal_connect (GTK_OBJECT (button), "clicked",
11690 GTK_SIGNAL_FUNC(gtk_rc_reparse_all), NULL);
11691 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
11692 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
11693 button, TRUE, TRUE, 0);
11694 gtk_widget_grab_default (button);
11696 button = gtk_button_new_with_label ("Reload All");
11697 gtk_signal_connect (GTK_OBJECT (button), "clicked",
11698 GTK_SIGNAL_FUNC(reload_all_rc_files), NULL);
11699 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
11700 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
11701 button, TRUE, TRUE, 0);
11703 button = gtk_button_new_with_label ("Close");
11704 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
11705 GTK_SIGNAL_FUNC(gtk_widget_destroy),
11706 GTK_OBJECT (window));
11707 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
11708 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
11709 button, TRUE, TRUE, 0);
11712 if (!GTK_WIDGET_VISIBLE (window))
11713 gtk_widget_show_all (window);
11715 gtk_widget_destroy (window);
11719 * Test of recursive mainloop
11723 mainloop_destroyed (GtkWidget *w, GtkWidget **window)
11730 create_mainloop (GtkWidget *widget)
11732 static GtkWidget *window = NULL;
11738 window = gtk_dialog_new ();
11740 gtk_window_set_screen (GTK_WINDOW (window),
11741 gtk_widget_get_screen (widget));
11743 gtk_window_set_title (GTK_WINDOW (window), "Test Main Loop");
11745 gtk_signal_connect (GTK_OBJECT (window), "destroy",
11746 GTK_SIGNAL_FUNC(mainloop_destroyed),
11749 label = gtk_label_new ("In recursive main loop...");
11750 gtk_misc_set_padding (GTK_MISC(label), 20, 20);
11752 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox), label,
11754 gtk_widget_show (label);
11756 button = gtk_button_new_with_label ("Leave");
11757 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area), button,
11760 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
11761 GTK_SIGNAL_FUNC (gtk_widget_destroy),
11762 GTK_OBJECT (window));
11764 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
11765 gtk_widget_grab_default (button);
11767 gtk_widget_show (button);
11770 if (!GTK_WIDGET_VISIBLE (window))
11772 gtk_widget_show (window);
11774 g_print ("create_mainloop: start\n");
11776 g_print ("create_mainloop: done\n");
11779 gtk_widget_destroy (window);
11783 layout_expose_handler (GtkWidget *widget, GdkEventExpose *event)
11788 gint imin, imax, jmin, jmax;
11790 layout = GTK_LAYOUT (widget);
11792 if (event->window != layout->bin_window)
11795 imin = (event->area.x) / 10;
11796 imax = (event->area.x + event->area.width + 9) / 10;
11798 jmin = (event->area.y) / 10;
11799 jmax = (event->area.y + event->area.height + 9) / 10;
11801 for (i=imin; i<imax; i++)
11802 for (j=jmin; j<jmax; j++)
11804 gdk_draw_rectangle (layout->bin_window,
11805 widget->style->black_gc,
11813 void create_layout (GtkWidget *widget)
11815 static GtkWidget *window = NULL;
11817 GtkWidget *scrolledwindow;
11826 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
11827 gtk_window_set_screen (GTK_WINDOW (window),
11828 gtk_widget_get_screen (widget));
11830 gtk_signal_connect (GTK_OBJECT (window), "destroy",
11831 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
11834 gtk_window_set_title (GTK_WINDOW (window), "Layout");
11835 gtk_widget_set_usize (window, 200, 200);
11837 scrolledwindow = gtk_scrolled_window_new (NULL, NULL);
11838 gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolledwindow),
11840 gtk_scrolled_window_set_placement (GTK_SCROLLED_WINDOW (scrolledwindow),
11841 GTK_CORNER_TOP_RIGHT);
11843 gtk_container_add (GTK_CONTAINER (window), scrolledwindow);
11845 layout = gtk_layout_new (NULL, NULL);
11846 gtk_container_add (GTK_CONTAINER (scrolledwindow), layout);
11848 /* We set step sizes here since GtkLayout does not set
11851 GTK_LAYOUT (layout)->hadjustment->step_increment = 10.0;
11852 GTK_LAYOUT (layout)->vadjustment->step_increment = 10.0;
11854 gtk_widget_set_events (layout, GDK_EXPOSURE_MASK);
11855 gtk_signal_connect (GTK_OBJECT (layout), "expose_event",
11856 GTK_SIGNAL_FUNC (layout_expose_handler), NULL);
11858 gtk_layout_set_size (GTK_LAYOUT (layout), 1600, 128000);
11860 for (i=0 ; i < 16 ; i++)
11861 for (j=0 ; j < 16 ; j++)
11863 sprintf(buf, "Button %d, %d", i, j);
11865 button = gtk_button_new_with_label (buf);
11867 button = gtk_label_new (buf);
11869 gtk_layout_put (GTK_LAYOUT (layout), button,
11873 for (i=16; i < 1280; i++)
11875 sprintf(buf, "Button %d, %d", i, 0);
11877 button = gtk_button_new_with_label (buf);
11879 button = gtk_label_new (buf);
11881 gtk_layout_put (GTK_LAYOUT (layout), button,
11886 if (!GTK_WIDGET_VISIBLE (window))
11887 gtk_widget_show_all (window);
11889 gtk_widget_destroy (window);
11893 create_styles (GtkWidget *widget)
11895 static GtkWidget *window = NULL;
11900 static GdkColor red = { 0, 0xffff, 0, 0 };
11901 static GdkColor green = { 0, 0, 0xffff, 0 };
11902 static GdkColor blue = { 0, 0, 0, 0xffff };
11903 static GdkColor yellow = { 0, 0xffff, 0xffff, 0 };
11904 static GdkColor cyan = { 0, 0 , 0xffff, 0xffff };
11905 PangoFontDescription *font_desc;
11907 GtkRcStyle *rc_style;
11911 window = gtk_dialog_new ();
11912 gtk_window_set_screen (GTK_WINDOW (window),
11913 gtk_widget_get_screen (widget));
11915 gtk_signal_connect (GTK_OBJECT (window), "destroy",
11916 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
11920 button = gtk_button_new_with_label ("Close");
11921 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
11922 GTK_SIGNAL_FUNC(gtk_widget_destroy),
11923 GTK_OBJECT (window));
11924 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
11925 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
11926 button, TRUE, TRUE, 0);
11927 gtk_widget_show (button);
11929 vbox = gtk_vbox_new (FALSE, 5);
11930 gtk_container_set_border_width (GTK_CONTAINER (vbox), 10);
11931 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox), vbox, FALSE, FALSE, 0);
11933 label = gtk_label_new ("Font:");
11934 gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
11935 gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
11937 font_desc = pango_font_description_from_string ("Helvetica,Sans Oblique 18");
11939 button = gtk_button_new_with_label ("Some Text");
11940 gtk_widget_modify_font (GTK_BIN (button)->child, font_desc);
11941 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
11943 label = gtk_label_new ("Foreground:");
11944 gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
11945 gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
11947 button = gtk_button_new_with_label ("Some Text");
11948 gtk_widget_modify_fg (GTK_BIN (button)->child, GTK_STATE_NORMAL, &red);
11949 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
11951 label = gtk_label_new ("Background:");
11952 gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
11953 gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
11955 button = gtk_button_new_with_label ("Some Text");
11956 gtk_widget_modify_bg (button, GTK_STATE_NORMAL, &green);
11957 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
11959 label = gtk_label_new ("Text:");
11960 gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
11961 gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
11963 entry = gtk_entry_new ();
11964 gtk_entry_set_text (GTK_ENTRY (entry), "Some Text");
11965 gtk_widget_modify_text (entry, GTK_STATE_NORMAL, &blue);
11966 gtk_box_pack_start (GTK_BOX (vbox), entry, FALSE, FALSE, 0);
11968 label = gtk_label_new ("Base:");
11969 gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
11970 gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
11972 entry = gtk_entry_new ();
11973 gtk_entry_set_text (GTK_ENTRY (entry), "Some Text");
11974 gtk_widget_modify_base (entry, GTK_STATE_NORMAL, &yellow);
11975 gtk_box_pack_start (GTK_BOX (vbox), entry, FALSE, FALSE, 0);
11977 label = gtk_label_new ("Multiple:");
11978 gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
11979 gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
11981 button = gtk_button_new_with_label ("Some Text");
11983 rc_style = gtk_rc_style_new ();
11985 rc_style->font_desc = pango_font_description_copy (font_desc);
11986 rc_style->color_flags[GTK_STATE_NORMAL] = GTK_RC_FG | GTK_RC_BG;
11987 rc_style->color_flags[GTK_STATE_PRELIGHT] = GTK_RC_FG | GTK_RC_BG;
11988 rc_style->color_flags[GTK_STATE_ACTIVE] = GTK_RC_FG | GTK_RC_BG;
11989 rc_style->fg[GTK_STATE_NORMAL] = yellow;
11990 rc_style->bg[GTK_STATE_NORMAL] = blue;
11991 rc_style->fg[GTK_STATE_PRELIGHT] = blue;
11992 rc_style->bg[GTK_STATE_PRELIGHT] = yellow;
11993 rc_style->fg[GTK_STATE_ACTIVE] = red;
11994 rc_style->bg[GTK_STATE_ACTIVE] = cyan;
11995 rc_style->xthickness = 5;
11996 rc_style->ythickness = 5;
11998 gtk_widget_modify_style (button, rc_style);
11999 gtk_widget_modify_style (GTK_BIN (button)->child, rc_style);
12001 g_object_unref (G_OBJECT (rc_style));
12003 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
12006 if (!GTK_WIDGET_VISIBLE (window))
12007 gtk_widget_show_all (window);
12009 gtk_widget_destroy (window);
12013 * Main Window and Exit
12017 do_exit (GtkWidget *widget, GtkWidget *window)
12019 gtk_widget_destroy (window);
12026 gboolean do_not_benchmark;
12029 { "big windows", create_big_windows },
12030 { "button box", create_button_box },
12031 { "buttons", create_buttons },
12032 { "check buttons", create_check_buttons },
12033 { "clist", create_clist},
12034 { "color selection", create_color_selection },
12035 { "ctree", create_ctree },
12036 { "cursors", create_cursors },
12037 { "dialog", create_dialog },
12038 { "display & screen", create_display_screen },
12039 { "entry", create_entry },
12040 { "event watcher", create_event_watcher },
12041 { "file selection", create_file_selection },
12042 { "flipping", create_flipping },
12043 { "focus", create_focus },
12044 { "font selection", create_font_selection },
12045 { "gamma curve", create_gamma_curve, TRUE },
12046 { "gridded geometry", create_gridded_geometry, TRUE },
12047 { "handle box", create_handle_box },
12048 { "image from drawable", create_get_image },
12049 { "image", create_image },
12050 { "item factory", create_item_factory },
12051 { "key lookup", create_key_lookup },
12052 { "labels", create_labels },
12053 { "layout", create_layout },
12054 { "list", create_list },
12055 { "menus", create_menus },
12056 { "message dialog", create_message_dialog },
12057 { "modal window", create_modal_window, TRUE },
12058 { "notebook", create_notebook },
12059 { "panes", create_panes },
12060 { "paned keyboard", create_paned_keyboard_navigation },
12061 { "pixmap", create_pixmap },
12062 { "preview color", create_color_preview, TRUE },
12063 { "preview gray", create_gray_preview, TRUE },
12064 { "progress bar", create_progress_bar },
12065 { "properties", create_properties },
12066 { "radio buttons", create_radio_buttons },
12067 { "range controls", create_range_controls },
12068 { "rc file", create_rc_file },
12069 { "reparent", create_reparent },
12070 { "rulers", create_rulers },
12071 { "saved position", create_saved_position },
12072 { "scrolled windows", create_scrolled_windows },
12073 { "shapes", create_shapes },
12074 { "size groups", create_size_groups },
12075 { "spinbutton", create_spins },
12076 { "statusbar", create_statusbar },
12077 { "styles", create_styles },
12078 { "test idle", create_idle_test },
12079 { "test mainloop", create_mainloop, TRUE },
12080 { "test scrolling", create_scroll_test },
12081 { "test selection", create_selection_test },
12082 { "test timeout", create_timeout_test },
12083 { "text", create_text },
12084 { "toggle buttons", create_toggle_buttons },
12085 { "toolbar", create_toolbar },
12086 { "tooltips", create_tooltips },
12087 { "tree", create_tree_mode_window},
12088 { "WM hints", create_wmhints },
12089 { "window sizing", create_window_sizing },
12090 { "window states", create_window_states }
12092 int nbuttons = sizeof (buttons) / sizeof (buttons[0]);
12095 create_main_window (void)
12100 GtkWidget *scrolled_window;
12104 GtkWidget *separator;
12105 GdkGeometry geometry;
12108 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
12109 gtk_widget_set_name (window, "main window");
12110 gtk_widget_set_uposition (window, 20, 20);
12111 gtk_window_set_default_size (GTK_WINDOW (window), -1, 400);
12113 geometry.min_width = -1;
12114 geometry.min_height = -1;
12115 geometry.max_width = -1;
12116 geometry.max_height = G_MAXSHORT;
12117 gtk_window_set_geometry_hints (GTK_WINDOW (window), NULL,
12119 GDK_HINT_MIN_SIZE | GDK_HINT_MAX_SIZE);
12121 gtk_signal_connect (GTK_OBJECT (window), "destroy",
12122 GTK_SIGNAL_FUNC(gtk_main_quit),
12124 gtk_signal_connect (GTK_OBJECT (window), "delete-event",
12125 GTK_SIGNAL_FUNC (gtk_false),
12128 box1 = gtk_vbox_new (FALSE, 0);
12129 gtk_container_add (GTK_CONTAINER (window), box1);
12131 if (gtk_micro_version > 0)
12136 gtk_micro_version);
12141 gtk_minor_version);
12143 label = gtk_label_new (buffer);
12144 gtk_box_pack_start (GTK_BOX (box1), label, FALSE, FALSE, 0);
12145 gtk_widget_set_name (label, "testgtk-version-label");
12147 scrolled_window = gtk_scrolled_window_new (NULL, NULL);
12148 gtk_container_set_border_width (GTK_CONTAINER (scrolled_window), 10);
12149 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
12151 GTK_POLICY_AUTOMATIC);
12152 gtk_box_pack_start (GTK_BOX (box1), scrolled_window, TRUE, TRUE, 0);
12154 box2 = gtk_vbox_new (FALSE, 0);
12155 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
12156 gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scrolled_window), box2);
12157 gtk_container_set_focus_vadjustment (GTK_CONTAINER (box2),
12158 gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (scrolled_window)));
12159 gtk_widget_show (box2);
12161 for (i = 0; i < nbuttons; i++)
12163 button = gtk_button_new_with_label (buttons[i].label);
12164 if (buttons[i].func)
12165 gtk_signal_connect (GTK_OBJECT (button),
12167 GTK_SIGNAL_FUNC(buttons[i].func),
12170 gtk_widget_set_sensitive (button, FALSE);
12171 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
12174 separator = gtk_hseparator_new ();
12175 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
12177 box2 = gtk_vbox_new (FALSE, 10);
12178 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
12179 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
12181 button = gtk_button_new_with_mnemonic ("_Close");
12182 gtk_signal_connect (GTK_OBJECT (button), "clicked",
12183 GTK_SIGNAL_FUNC (do_exit),
12185 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
12186 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
12187 gtk_widget_grab_default (button);
12189 gtk_widget_show_all (window);
12195 if (g_file_test ("../gdk-pixbuf/libpixbufloader-pnm.la",
12196 G_FILE_TEST_EXISTS))
12198 putenv ("GDK_PIXBUF_MODULE_FILE=../gdk-pixbuf/gdk-pixbuf.loaders");
12199 putenv ("GTK_IM_MODULE_FILE=../modules/input/gtk.immodules");
12204 pad (const char *str, int to)
12206 static char buf[256];
12207 int len = strlen (str);
12210 for (i = 0; i < to; i++)
12215 memcpy (buf, str, len);
12221 bench_iteration (void (* fn) ())
12224 while (g_main_iteration (FALSE));
12226 while (g_main_iteration (FALSE));
12230 do_real_bench (void (* fn) (), char *name, int num)
12236 static gboolean printed_headers = FALSE;
12238 if (!printed_headers) {
12239 g_print ("Test Iters First Other\n");
12240 g_print ("-------------------- ----- ---------- ----------\n");
12241 printed_headers = TRUE;
12244 g_get_current_time (&tv0);
12245 bench_iteration (fn);
12246 g_get_current_time (&tv1);
12248 dt_first = ((double)tv1.tv_sec - tv0.tv_sec) * 1000.0
12249 + (tv1.tv_usec - tv0.tv_usec) / 1000.0;
12251 g_get_current_time (&tv0);
12252 for (n = 0; n < num - 1; n++)
12253 bench_iteration (fn);
12254 g_get_current_time (&tv1);
12255 dt = ((double)tv1.tv_sec - tv0.tv_sec) * 1000.0
12256 + (tv1.tv_usec - tv0.tv_usec) / 1000.0;
12258 g_print ("%s %5d ", pad (name, 20), num);
12260 g_print ("%10.1f %10.1f\n", dt_first, dt/(num-1));
12262 g_print ("%10.1f\n", dt_first);
12266 do_bench (char* what, int num)
12272 if (g_strcasecmp (what, "ALL") == 0)
12274 for (i = 0; i < nbuttons; i++)
12276 if (!buttons[i].do_not_benchmark)
12277 do_real_bench (buttons[i].func, buttons[i].label, num);
12284 for (i = 0; i < nbuttons; i++)
12286 if (strcmp (buttons[i].label, what) == 0)
12288 fn = buttons[i].func;
12294 g_print ("Can't bench: \"%s\" not found.\n", what);
12296 do_real_bench (fn, buttons[i].label, num);
12303 fprintf (stderr, "Usage: testgtk [--bench ALL|<bench>[:<count>]]\n");
12308 main (int argc, char *argv[])
12310 GtkBindingSet *binding_set;
12312 gboolean done_benchmarks = FALSE;
12314 srand (time (NULL));
12318 /* Check to see if we are being run from the correct
12321 if (file_exists ("testgtkrc"))
12322 gtk_rc_add_default_file ("testgtkrc");
12324 gtk_init (&argc, &argv);
12328 for (i = 1; i < argc; i++)
12330 if (strncmp (argv[i], "--bench", strlen("--bench")) == 0)
12337 nextarg = strchr (argv[i], '=');
12348 count = strchr (nextarg, ':');
12351 what = g_strndup (nextarg, count - nextarg);
12353 num = atoi (count);
12358 what = g_strdup (nextarg);
12360 do_bench (what, num ? num : 1);
12361 done_benchmarks = TRUE;
12366 if (done_benchmarks)
12371 binding_set = gtk_binding_set_by_class (gtk_type_class (GTK_TYPE_WIDGET));
12372 gtk_binding_entry_add_signal (binding_set,
12373 '9', GDK_CONTROL_MASK | GDK_RELEASE_MASK,
12376 GTK_TYPE_STRING, "GtkWidgetClass <ctrl><release>9 test");
12378 /* We use gtk_rc_parse_string() here so we can make sure it works across theme
12382 gtk_rc_parse_string ("style \"testgtk-version-label\" { "
12383 " fg[NORMAL] = \"#ff0000\"\n"
12384 " font = \"Sans 18\"\n"
12386 "widget \"*.testgtk-version-label\" style \"testgtk-version-label\"");
12388 create_main_window ();
12394 while (g_main_pending ())
12395 g_main_iteration (FALSE);
12398 while (g_main_pending ())
12399 g_main_iteration (FALSE);