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 "circles.xbm"
53 typedef struct _OptionMenuItem
60 file_exists (const char *filename)
64 return stat (filename, &statbuf) == 0;
68 shape_create_icon (char *xpm_file,
76 build_option_menu (OptionMenuItem items[],
81 /* macro, structure and variables used by tree window demos */
82 #define DEFAULT_NUMBER_OF_ITEM 3
83 #define DEFAULT_RECURSION_LEVEL 3
86 GSList* selection_mode_group;
87 GtkWidget* single_button;
88 GtkWidget* browse_button;
89 GtkWidget* multiple_button;
90 GtkWidget* draw_line_button;
91 GtkWidget* view_line_button;
92 GtkWidget* no_root_item_button;
93 GtkWidget* nb_item_spinner;
94 GtkWidget* recursion_spinner;
95 } sTreeSampleSelection;
97 typedef struct sTreeButtons {
99 GtkWidget* add_button;
100 GtkWidget* remove_button;
101 GtkWidget* subtree_button;
103 /* end of tree section */
106 build_option_menu (OptionMenuItem items[],
113 GtkWidget *menu_item;
117 omenu = gtk_option_menu_new ();
119 menu = gtk_menu_new ();
122 for (i = 0; i < num_items; i++)
124 menu_item = gtk_radio_menu_item_new_with_label (group, items[i].name);
125 gtk_signal_connect (GTK_OBJECT (menu_item), "activate",
126 (GtkSignalFunc) items[i].func, data);
127 group = gtk_radio_menu_item_group (GTK_RADIO_MENU_ITEM (menu_item));
128 gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_item);
130 gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (menu_item), TRUE);
131 gtk_widget_show (menu_item);
134 gtk_option_menu_set_menu (GTK_OPTION_MENU (omenu), menu);
135 gtk_option_menu_set_history (GTK_OPTION_MENU (omenu), history);
141 destroy_tooltips (GtkWidget *widget, GtkWindow **window)
143 GtkTooltips *tt = gtk_object_get_data (GTK_OBJECT (*window), "tooltips");
144 gtk_object_unref (GTK_OBJECT (tt));
153 button_window (GtkWidget *widget,
156 if (!GTK_WIDGET_VISIBLE (button))
157 gtk_widget_show (button);
159 gtk_widget_hide (button);
163 create_buttons (void)
165 static GtkWidget *window = NULL;
169 GtkWidget *button[10];
170 GtkWidget *separator;
174 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
176 gtk_signal_connect (GTK_OBJECT (window), "destroy",
177 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
180 gtk_window_set_title (GTK_WINDOW (window), "GtkButton");
181 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
183 box1 = gtk_vbox_new (FALSE, 0);
184 gtk_container_add (GTK_CONTAINER (window), box1);
186 table = gtk_table_new (3, 3, FALSE);
187 gtk_table_set_row_spacings (GTK_TABLE (table), 5);
188 gtk_table_set_col_spacings (GTK_TABLE (table), 5);
189 gtk_container_set_border_width (GTK_CONTAINER (table), 10);
190 gtk_box_pack_start (GTK_BOX (box1), table, TRUE, TRUE, 0);
192 button[0] = gtk_button_new_with_label ("button1");
193 button[1] = gtk_button_new_with_mnemonic ("_button2");
194 button[2] = gtk_button_new_with_mnemonic ("_button3");
195 button[3] = gtk_button_new_from_stock (GTK_STOCK_BUTTON_OK);
196 button[4] = gtk_button_new_with_label ("button5");
197 button[5] = gtk_button_new_with_label ("button6");
198 button[6] = gtk_button_new_with_label ("button7");
199 button[7] = gtk_button_new_from_stock (GTK_STOCK_BUTTON_CLOSE);
200 button[8] = gtk_button_new_with_label ("button9");
202 gtk_signal_connect (GTK_OBJECT (button[0]), "clicked",
203 GTK_SIGNAL_FUNC(button_window),
206 gtk_table_attach (GTK_TABLE (table), button[0], 0, 1, 0, 1,
207 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
209 gtk_signal_connect (GTK_OBJECT (button[1]), "clicked",
210 GTK_SIGNAL_FUNC(button_window),
213 gtk_table_attach (GTK_TABLE (table), button[1], 1, 2, 1, 2,
214 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
216 gtk_signal_connect (GTK_OBJECT (button[2]), "clicked",
217 GTK_SIGNAL_FUNC(button_window),
219 gtk_table_attach (GTK_TABLE (table), button[2], 2, 3, 2, 3,
220 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
222 gtk_signal_connect (GTK_OBJECT (button[3]), "clicked",
223 GTK_SIGNAL_FUNC(button_window),
225 gtk_table_attach (GTK_TABLE (table), button[3], 0, 1, 2, 3,
226 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
228 gtk_signal_connect (GTK_OBJECT (button[4]), "clicked",
229 GTK_SIGNAL_FUNC(button_window),
231 gtk_table_attach (GTK_TABLE (table), button[4], 2, 3, 0, 1,
232 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
234 gtk_signal_connect (GTK_OBJECT (button[5]), "clicked",
235 GTK_SIGNAL_FUNC(button_window),
237 gtk_table_attach (GTK_TABLE (table), button[5], 1, 2, 2, 3,
238 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
240 gtk_signal_connect (GTK_OBJECT (button[6]), "clicked",
241 GTK_SIGNAL_FUNC(button_window),
243 gtk_table_attach (GTK_TABLE (table), button[6], 1, 2, 0, 1,
244 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
246 gtk_signal_connect (GTK_OBJECT (button[7]), "clicked",
247 GTK_SIGNAL_FUNC(button_window),
249 gtk_table_attach (GTK_TABLE (table), button[7], 2, 3, 1, 2,
250 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
252 gtk_signal_connect (GTK_OBJECT (button[8]), "clicked",
253 GTK_SIGNAL_FUNC(button_window),
255 gtk_table_attach (GTK_TABLE (table), button[8], 0, 1, 1, 2,
256 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
258 separator = gtk_hseparator_new ();
259 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
261 box2 = gtk_vbox_new (FALSE, 10);
262 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
263 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
265 button[9] = gtk_button_new_with_label ("close");
266 gtk_signal_connect_object (GTK_OBJECT (button[9]), "clicked",
267 GTK_SIGNAL_FUNC(gtk_widget_destroy),
268 GTK_OBJECT (window));
269 gtk_box_pack_start (GTK_BOX (box2), button[9], TRUE, TRUE, 0);
270 GTK_WIDGET_SET_FLAGS (button[9], GTK_CAN_DEFAULT);
271 gtk_widget_grab_default (button[9]);
274 if (!GTK_WIDGET_VISIBLE (window))
275 gtk_widget_show_all (window);
277 gtk_widget_hide (window);
285 create_toggle_buttons (void)
287 static GtkWidget *window = NULL;
291 GtkWidget *separator;
295 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
297 gtk_signal_connect (GTK_OBJECT (window), "destroy",
298 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
301 gtk_window_set_title (GTK_WINDOW (window), "GtkToggleButton");
302 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
304 box1 = gtk_vbox_new (FALSE, 0);
305 gtk_container_add (GTK_CONTAINER (window), box1);
307 box2 = gtk_vbox_new (FALSE, 10);
308 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
309 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
311 button = gtk_toggle_button_new_with_label ("button1");
312 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
314 button = gtk_toggle_button_new_with_label ("button2");
315 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
317 button = gtk_toggle_button_new_with_label ("button3");
318 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
320 button = gtk_toggle_button_new_with_label ("inconsistent");
321 gtk_toggle_button_set_inconsistent (GTK_TOGGLE_BUTTON (button), TRUE);
322 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
324 separator = gtk_hseparator_new ();
325 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
327 box2 = gtk_vbox_new (FALSE, 10);
328 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
329 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
331 button = gtk_button_new_with_label ("close");
332 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
333 GTK_SIGNAL_FUNC(gtk_widget_destroy),
334 GTK_OBJECT (window));
335 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
336 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
337 gtk_widget_grab_default (button);
340 if (!GTK_WIDGET_VISIBLE (window))
341 gtk_widget_show_all (window);
343 gtk_widget_destroy (window);
351 create_check_buttons (void)
353 static GtkWidget *window = NULL;
357 GtkWidget *separator;
361 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
363 gtk_signal_connect (GTK_OBJECT (window), "destroy",
364 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
367 gtk_window_set_title (GTK_WINDOW (window), "GtkCheckButton");
368 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
370 box1 = gtk_vbox_new (FALSE, 0);
371 gtk_container_add (GTK_CONTAINER (window), box1);
373 box2 = gtk_vbox_new (FALSE, 10);
374 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
375 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
377 button = gtk_check_button_new_with_mnemonic ("_button1");
378 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
380 button = gtk_check_button_new_with_label ("button2");
381 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
383 button = gtk_check_button_new_with_label ("button3");
384 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
386 button = gtk_check_button_new_with_label ("inconsistent");
387 gtk_toggle_button_set_inconsistent (GTK_TOGGLE_BUTTON (button), TRUE);
388 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
390 separator = gtk_hseparator_new ();
391 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
393 box2 = gtk_vbox_new (FALSE, 10);
394 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
395 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
397 button = gtk_button_new_with_label ("close");
398 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
399 GTK_SIGNAL_FUNC(gtk_widget_destroy),
400 GTK_OBJECT (window));
401 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
402 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
403 gtk_widget_grab_default (button);
406 if (!GTK_WIDGET_VISIBLE (window))
407 gtk_widget_show_all (window);
409 gtk_widget_destroy (window);
417 create_radio_buttons (void)
419 static GtkWidget *window = NULL;
423 GtkWidget *separator;
427 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
429 gtk_signal_connect (GTK_OBJECT (window), "destroy",
430 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
433 gtk_window_set_title (GTK_WINDOW (window), "radio buttons");
434 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
436 box1 = gtk_vbox_new (FALSE, 0);
437 gtk_container_add (GTK_CONTAINER (window), box1);
439 box2 = gtk_vbox_new (FALSE, 10);
440 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
441 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
443 button = gtk_radio_button_new_with_label (NULL, "button1");
444 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
446 button = gtk_radio_button_new_with_label (
447 gtk_radio_button_group (GTK_RADIO_BUTTON (button)),
449 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE);
450 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
452 button = gtk_radio_button_new_with_label (
453 gtk_radio_button_group (GTK_RADIO_BUTTON (button)),
455 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
457 button = gtk_radio_button_new_with_label (
458 gtk_radio_button_group (GTK_RADIO_BUTTON (button)),
460 gtk_toggle_button_set_inconsistent (GTK_TOGGLE_BUTTON (button), TRUE);
461 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
463 separator = gtk_hseparator_new ();
464 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
466 box2 = gtk_vbox_new (FALSE, 10);
467 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
468 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
470 button = gtk_button_new_with_label ("close");
471 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
472 GTK_SIGNAL_FUNC(gtk_widget_destroy),
473 GTK_OBJECT (window));
474 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
475 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
476 gtk_widget_grab_default (button);
479 if (!GTK_WIDGET_VISIBLE (window))
480 gtk_widget_show_all (window);
482 gtk_widget_destroy (window);
490 create_bbox (gint horizontal,
501 frame = gtk_frame_new (title);
504 bbox = gtk_hbutton_box_new ();
506 bbox = gtk_vbutton_box_new ();
508 gtk_container_set_border_width (GTK_CONTAINER (bbox), 5);
509 gtk_container_add (GTK_CONTAINER (frame), bbox);
511 gtk_button_box_set_layout (GTK_BUTTON_BOX (bbox), layout);
512 gtk_box_set_spacing (GTK_BOX (bbox), spacing);
513 gtk_button_box_set_child_size (GTK_BUTTON_BOX (bbox), child_w, child_h);
515 button = gtk_button_new_with_label ("OK");
516 gtk_container_add (GTK_CONTAINER (bbox), button);
518 button = gtk_button_new_with_label ("Cancel");
519 gtk_container_add (GTK_CONTAINER (bbox), button);
521 button = gtk_button_new_with_label ("Help");
522 gtk_container_add (GTK_CONTAINER (bbox), button);
528 create_button_box (void)
530 static GtkWidget* window = NULL;
531 GtkWidget *main_vbox;
534 GtkWidget *frame_horz;
535 GtkWidget *frame_vert;
539 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
540 gtk_window_set_title (GTK_WINDOW (window), "Button Boxes");
542 gtk_signal_connect (GTK_OBJECT (window), "destroy",
543 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
546 gtk_container_set_border_width (GTK_CONTAINER (window), 10);
548 main_vbox = gtk_vbox_new (FALSE, 0);
549 gtk_container_add (GTK_CONTAINER (window), main_vbox);
551 frame_horz = gtk_frame_new ("Horizontal Button Boxes");
552 gtk_box_pack_start (GTK_BOX (main_vbox), frame_horz, TRUE, TRUE, 10);
554 vbox = gtk_vbox_new (FALSE, 0);
555 gtk_container_set_border_width (GTK_CONTAINER (vbox), 10);
556 gtk_container_add (GTK_CONTAINER (frame_horz), vbox);
558 gtk_box_pack_start (GTK_BOX (vbox),
559 create_bbox (TRUE, "Spread", 40, 85, 20, GTK_BUTTONBOX_SPREAD),
562 gtk_box_pack_start (GTK_BOX (vbox),
563 create_bbox (TRUE, "Edge", 40, 85, 20, GTK_BUTTONBOX_EDGE),
566 gtk_box_pack_start (GTK_BOX (vbox),
567 create_bbox (TRUE, "Start", 40, 85, 20, GTK_BUTTONBOX_START),
570 gtk_box_pack_start (GTK_BOX (vbox),
571 create_bbox (TRUE, "End", 40, 85, 20, GTK_BUTTONBOX_END),
574 frame_vert = gtk_frame_new ("Vertical Button Boxes");
575 gtk_box_pack_start (GTK_BOX (main_vbox), frame_vert, TRUE, TRUE, 10);
577 hbox = gtk_hbox_new (FALSE, 0);
578 gtk_container_set_border_width (GTK_CONTAINER (hbox), 10);
579 gtk_container_add (GTK_CONTAINER (frame_vert), hbox);
581 gtk_box_pack_start (GTK_BOX (hbox),
582 create_bbox (FALSE, "Spread", 30, 85, 20, GTK_BUTTONBOX_SPREAD),
585 gtk_box_pack_start (GTK_BOX (hbox),
586 create_bbox (FALSE, "Edge", 30, 85, 20, GTK_BUTTONBOX_EDGE),
589 gtk_box_pack_start (GTK_BOX (hbox),
590 create_bbox (FALSE, "Start", 30, 85, 20, GTK_BUTTONBOX_START),
593 gtk_box_pack_start (GTK_BOX (hbox),
594 create_bbox (FALSE, "End", 30, 85, 20, GTK_BUTTONBOX_END),
598 if (!GTK_WIDGET_VISIBLE (window))
599 gtk_widget_show_all (window);
601 gtk_widget_destroy (window);
609 new_pixmap (char *filename,
611 GdkColor *background)
617 if (strcmp (filename, "test.xpm") == 0 ||
618 !file_exists (filename))
620 pixmap = gdk_pixmap_create_from_xpm_d (window, &mask,
625 pixmap = gdk_pixmap_create_from_xpm (window, &mask,
629 wpixmap = gtk_pixmap_new (pixmap, mask);
636 set_toolbar_small_stock (GtkWidget *widget,
639 gtk_toolbar_set_icon_size (GTK_TOOLBAR (data), GTK_ICON_SIZE_SMALL_TOOLBAR);
643 set_toolbar_large_stock (GtkWidget *widget,
646 gtk_toolbar_set_icon_size (GTK_TOOLBAR (data), GTK_ICON_SIZE_LARGE_TOOLBAR);
650 set_toolbar_horizontal (GtkWidget *widget,
653 gtk_toolbar_set_orientation (GTK_TOOLBAR (data), GTK_ORIENTATION_HORIZONTAL);
657 set_toolbar_vertical (GtkWidget *widget,
660 gtk_toolbar_set_orientation (GTK_TOOLBAR (data), GTK_ORIENTATION_VERTICAL);
664 set_toolbar_icons (GtkWidget *widget,
667 gtk_toolbar_set_style (GTK_TOOLBAR (data), GTK_TOOLBAR_ICONS);
671 set_toolbar_text (GtkWidget *widget,
674 gtk_toolbar_set_style (GTK_TOOLBAR (data), GTK_TOOLBAR_TEXT);
678 set_toolbar_both (GtkWidget *widget,
681 gtk_toolbar_set_style (GTK_TOOLBAR (data), GTK_TOOLBAR_BOTH);
685 set_toolbar_both_horiz (GtkWidget *widget,
688 gtk_toolbar_set_style (GTK_TOOLBAR (data), GTK_TOOLBAR_BOTH_HORIZ);
692 set_toolbar_small_space (GtkWidget *widget,
695 gtk_toolbar_set_space_size (GTK_TOOLBAR (data), 5);
699 set_toolbar_big_space (GtkWidget *widget,
702 gtk_toolbar_set_space_size (GTK_TOOLBAR (data), 10);
706 set_toolbar_enable (GtkWidget *widget,
709 gtk_toolbar_set_tooltips (GTK_TOOLBAR (data), TRUE);
713 set_toolbar_disable (GtkWidget *widget,
716 gtk_toolbar_set_tooltips (GTK_TOOLBAR (data), FALSE);
720 set_toolbar_borders (GtkWidget *widget,
723 gtk_toolbar_set_button_relief (GTK_TOOLBAR (data), GTK_RELIEF_NORMAL);
727 set_toolbar_borderless (GtkWidget *widget,
730 gtk_toolbar_set_button_relief (GTK_TOOLBAR (data), GTK_RELIEF_NONE);
734 set_toolbar_space_style_empty (GtkWidget *widget,
737 gtk_toolbar_set_space_style (GTK_TOOLBAR (data), GTK_TOOLBAR_SPACE_EMPTY);
741 set_toolbar_space_style_line (GtkWidget *widget,
744 gtk_toolbar_set_space_style (GTK_TOOLBAR (data), GTK_TOOLBAR_SPACE_LINE);
748 create_toolbar (void)
750 static GtkWidget *window = NULL;
756 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
757 gtk_window_set_title (GTK_WINDOW (window), "Toolbar test");
758 gtk_window_set_policy (GTK_WINDOW (window), FALSE, TRUE, TRUE);
760 gtk_signal_connect (GTK_OBJECT (window), "destroy",
761 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
764 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
765 gtk_widget_realize (window);
767 toolbar = gtk_toolbar_new (GTK_ORIENTATION_HORIZONTAL, GTK_TOOLBAR_BOTH);
768 gtk_toolbar_set_button_relief (GTK_TOOLBAR (toolbar), GTK_RELIEF_NONE);
770 gtk_toolbar_insert_stock (GTK_TOOLBAR (toolbar),
772 "Stock icon: New", "Toolbar/New",
773 (GtkSignalFunc) set_toolbar_small_stock, toolbar, -1);
775 gtk_toolbar_insert_stock (GTK_TOOLBAR (toolbar),
777 "Stock icon: Open", "Toolbar/Open",
778 (GtkSignalFunc) set_toolbar_large_stock, toolbar, -1);
780 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
781 "Horizontal", "Horizontal toolbar layout", "Toolbar/Horizontal",
782 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
783 (GtkSignalFunc) set_toolbar_horizontal, toolbar);
784 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
785 "Vertical", "Vertical toolbar layout", "Toolbar/Vertical",
786 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
787 (GtkSignalFunc) set_toolbar_vertical, toolbar);
789 gtk_toolbar_append_space (GTK_TOOLBAR(toolbar));
791 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
792 "Icons", "Only show toolbar icons", "Toolbar/IconsOnly",
793 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
794 (GtkSignalFunc) set_toolbar_icons, toolbar);
795 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
796 "Text", "Only show toolbar text", "Toolbar/TextOnly",
797 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
798 (GtkSignalFunc) set_toolbar_text, toolbar);
799 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
800 "Both", "Show toolbar icons and text", "Toolbar/Both",
801 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
802 (GtkSignalFunc) set_toolbar_both, toolbar);
803 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
805 "Show toolbar icons and text in a horizontal fashion",
807 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
808 (GtkSignalFunc) set_toolbar_both_horiz, toolbar);
810 gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
812 entry = gtk_entry_new ();
814 gtk_toolbar_append_widget (GTK_TOOLBAR (toolbar), entry, "This is an unusable GtkEntry ;)", "Hey don't click me!!!");
816 gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
818 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
819 "Small", "Use small spaces", "Toolbar/Small",
820 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
821 (GtkSignalFunc) set_toolbar_small_space, toolbar);
822 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
823 "Big", "Use big spaces", "Toolbar/Big",
824 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
825 (GtkSignalFunc) set_toolbar_big_space, toolbar);
827 gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
829 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
830 "Enable", "Enable tooltips", NULL,
831 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
832 (GtkSignalFunc) set_toolbar_enable, toolbar);
833 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
834 "Disable", "Disable tooltips", NULL,
835 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
836 (GtkSignalFunc) set_toolbar_disable, toolbar);
838 gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
840 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
841 "Borders", "Show Borders", NULL,
842 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
843 (GtkSignalFunc) set_toolbar_borders, toolbar);
844 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
845 "Borderless", "Hide Borders", NULL,
846 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
847 (GtkSignalFunc) set_toolbar_borderless, toolbar);
849 gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
851 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
852 "Empty", "Empty spaces", NULL,
853 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
854 (GtkSignalFunc) set_toolbar_space_style_empty, toolbar);
855 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
856 "Lines", "Lines in spaces", NULL,
857 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
858 (GtkSignalFunc) set_toolbar_space_style_line, toolbar);
860 gtk_container_add (GTK_CONTAINER (window), toolbar);
863 if (!GTK_WIDGET_VISIBLE (window))
864 gtk_widget_show_all (window);
866 gtk_widget_destroy (window);
870 make_toolbar (GtkWidget *window)
874 if (!GTK_WIDGET_REALIZED (window))
875 gtk_widget_realize (window);
877 toolbar = gtk_toolbar_new (GTK_ORIENTATION_HORIZONTAL, GTK_TOOLBAR_BOTH);
878 gtk_toolbar_set_button_relief (GTK_TOOLBAR (toolbar), GTK_RELIEF_NONE);
880 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
881 "Horizontal", "Horizontal toolbar layout", NULL,
882 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
883 (GtkSignalFunc) set_toolbar_horizontal, toolbar);
884 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
885 "Vertical", "Vertical toolbar layout", NULL,
886 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
887 (GtkSignalFunc) set_toolbar_vertical, toolbar);
889 gtk_toolbar_append_space (GTK_TOOLBAR(toolbar));
891 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
892 "Icons", "Only show toolbar icons", NULL,
893 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
894 (GtkSignalFunc) set_toolbar_icons, toolbar);
895 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
896 "Text", "Only show toolbar text", NULL,
897 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
898 (GtkSignalFunc) set_toolbar_text, toolbar);
899 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
900 "Both", "Show toolbar icons and text", NULL,
901 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
902 (GtkSignalFunc) set_toolbar_both, toolbar);
904 gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
906 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
907 "Small", "Use small spaces", NULL,
908 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
909 (GtkSignalFunc) set_toolbar_small_space, toolbar);
910 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
911 "Big", "Use big spaces", "Toolbar/Big",
912 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
913 (GtkSignalFunc) set_toolbar_big_space, toolbar);
915 gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
917 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
918 "Enable", "Enable tooltips", NULL,
919 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
920 (GtkSignalFunc) set_toolbar_enable, toolbar);
921 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
922 "Disable", "Disable tooltips", NULL,
923 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
924 (GtkSignalFunc) set_toolbar_disable, toolbar);
926 gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
928 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
929 "Borders", "Show Borders", NULL,
930 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
931 (GtkSignalFunc) set_toolbar_borders, toolbar);
932 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
933 "Borderless", "Hide Borders", NULL,
934 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
935 (GtkSignalFunc) set_toolbar_borderless, toolbar);
944 static guint statusbar_counter = 1;
947 statusbar_push (GtkWidget *button,
948 GtkStatusbar *statusbar)
952 sprintf (text, "something %d", statusbar_counter++);
954 gtk_statusbar_push (statusbar, 1, text);
958 statusbar_pop (GtkWidget *button,
959 GtkStatusbar *statusbar)
961 gtk_statusbar_pop (statusbar, 1);
965 statusbar_steal (GtkWidget *button,
966 GtkStatusbar *statusbar)
968 gtk_statusbar_remove (statusbar, 1, 4);
972 statusbar_popped (GtkStatusbar *statusbar,
976 if (!statusbar->messages)
977 statusbar_counter = 1;
981 statusbar_contexts (GtkStatusbar *statusbar)
985 string = "any context";
986 g_print ("GtkStatusBar: context=\"%s\", context_id=%d\n",
988 gtk_statusbar_get_context_id (statusbar, string));
990 string = "idle messages";
991 g_print ("GtkStatusBar: context=\"%s\", context_id=%d\n",
993 gtk_statusbar_get_context_id (statusbar, string));
995 string = "some text";
996 g_print ("GtkStatusBar: context=\"%s\", context_id=%d\n",
998 gtk_statusbar_get_context_id (statusbar, string));
1000 string = "hit the mouse";
1001 g_print ("GtkStatusBar: context=\"%s\", context_id=%d\n",
1003 gtk_statusbar_get_context_id (statusbar, string));
1005 string = "hit the mouse2";
1006 g_print ("GtkStatusBar: context=\"%s\", context_id=%d\n",
1008 gtk_statusbar_get_context_id (statusbar, string));
1012 create_statusbar (void)
1014 static GtkWidget *window = NULL;
1018 GtkWidget *separator;
1019 GtkWidget *statusbar;
1023 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
1025 gtk_signal_connect (GTK_OBJECT (window), "destroy",
1026 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
1029 gtk_window_set_title (GTK_WINDOW (window), "statusbar");
1030 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
1032 box1 = gtk_vbox_new (FALSE, 0);
1033 gtk_container_add (GTK_CONTAINER (window), box1);
1035 box2 = gtk_vbox_new (FALSE, 10);
1036 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
1037 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
1039 statusbar = gtk_statusbar_new ();
1040 gtk_box_pack_end (GTK_BOX (box1), statusbar, TRUE, TRUE, 0);
1041 gtk_signal_connect (GTK_OBJECT (statusbar),
1043 GTK_SIGNAL_FUNC (statusbar_popped),
1046 button = gtk_widget_new (gtk_button_get_type (),
1047 "label", "push something",
1051 g_object_connect (G_OBJECT (button),
1052 "signal::clicked", statusbar_push, statusbar,
1055 button = g_object_connect (gtk_widget_new (gtk_button_get_type (),
1060 "signal_after::clicked", statusbar_pop, statusbar,
1063 button = g_object_connect (gtk_widget_new (gtk_button_get_type (),
1064 "label", "steal #4",
1068 "signal_after::clicked", statusbar_steal, statusbar,
1071 button = g_object_connect (gtk_widget_new (gtk_button_get_type (),
1072 "label", "test contexts",
1076 "swapped_signal_after::clicked", statusbar_contexts, statusbar,
1079 separator = gtk_hseparator_new ();
1080 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
1082 box2 = gtk_vbox_new (FALSE, 10);
1083 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
1084 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
1086 button = gtk_button_new_with_label ("close");
1087 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
1088 GTK_SIGNAL_FUNC(gtk_widget_destroy),
1089 GTK_OBJECT (window));
1090 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
1091 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
1092 gtk_widget_grab_default (button);
1095 if (!GTK_WIDGET_VISIBLE (window))
1096 gtk_widget_show_all (window);
1098 gtk_widget_destroy (window);
1106 cb_tree_destroy_event(GtkWidget* w)
1108 sTreeButtons* tree_buttons;
1110 /* free buttons structure associate at this tree */
1111 tree_buttons = gtk_object_get_user_data (GTK_OBJECT (w));
1112 g_free (tree_buttons);
1116 cb_add_new_item(GtkWidget* w, GtkTree* tree)
1118 sTreeButtons* tree_buttons;
1119 GList* selected_list;
1120 GtkWidget* selected_item;
1122 GtkWidget* item_new;
1125 tree_buttons = gtk_object_get_user_data(GTK_OBJECT(tree));
1127 selected_list = GTK_TREE_SELECTION_OLD(tree);
1129 if(selected_list == NULL)
1131 /* there is no item in tree */
1132 subtree = GTK_WIDGET(tree);
1136 /* list can have only one element */
1137 selected_item = GTK_WIDGET(selected_list->data);
1139 subtree = GTK_TREE_ITEM_SUBTREE(selected_item);
1143 /* current selected item have not subtree ... create it */
1144 subtree = gtk_tree_new();
1145 gtk_tree_item_set_subtree(GTK_TREE_ITEM(selected_item),
1150 /* at this point, we know which subtree will be used to add new item */
1151 /* create a new item */
1152 sprintf(buffer, "item add %d", tree_buttons->nb_item_add);
1153 item_new = gtk_tree_item_new_with_label(buffer);
1154 gtk_tree_append(GTK_TREE(subtree), item_new);
1155 gtk_widget_show(item_new);
1157 tree_buttons->nb_item_add++;
1161 cb_remove_item(GtkWidget*w, GtkTree* tree)
1163 GList* selected_list;
1166 selected_list = GTK_TREE_SELECTION_OLD(tree);
1170 while (selected_list)
1172 clear_list = g_list_prepend (clear_list, selected_list->data);
1173 selected_list = selected_list->next;
1176 clear_list = g_list_reverse (clear_list);
1177 gtk_tree_remove_items(tree, clear_list);
1179 g_list_free (clear_list);
1183 cb_remove_subtree(GtkWidget*w, GtkTree* tree)
1185 GList* selected_list;
1188 selected_list = GTK_TREE_SELECTION_OLD(tree);
1192 item = GTK_TREE_ITEM (selected_list->data);
1194 gtk_tree_item_remove_subtree (item);
1199 cb_tree_changed(GtkTree* tree)
1201 sTreeButtons* tree_buttons;
1202 GList* selected_list;
1205 tree_buttons = gtk_object_get_user_data(GTK_OBJECT(tree));
1207 selected_list = GTK_TREE_SELECTION_OLD(tree);
1208 nb_selected = g_list_length(selected_list);
1210 if(nb_selected == 0)
1212 if(tree->children == NULL)
1213 gtk_widget_set_sensitive(tree_buttons->add_button, TRUE);
1215 gtk_widget_set_sensitive(tree_buttons->add_button, FALSE);
1216 gtk_widget_set_sensitive(tree_buttons->remove_button, FALSE);
1217 gtk_widget_set_sensitive(tree_buttons->subtree_button, FALSE);
1221 gtk_widget_set_sensitive(tree_buttons->remove_button, TRUE);
1222 gtk_widget_set_sensitive(tree_buttons->add_button, (nb_selected == 1));
1223 gtk_widget_set_sensitive(tree_buttons->subtree_button, (nb_selected == 1));
1228 create_subtree(GtkWidget* item, guint level, guint nb_item_max, guint recursion_level_max)
1230 GtkWidget* item_subtree;
1231 GtkWidget* item_new;
1236 if(level == recursion_level_max) return;
1240 /* query with no root item */
1242 item_subtree = item;
1247 /* query with no root item */
1248 /* create subtree and associate it with current item */
1249 item_subtree = gtk_tree_new();
1253 for(nb_item = 0; nb_item < nb_item_max; nb_item++)
1255 sprintf(buffer, "item %d-%d", level, nb_item);
1256 item_new = gtk_tree_item_new_with_label(buffer);
1257 gtk_tree_append(GTK_TREE(item_subtree), item_new);
1258 create_subtree(item_new, level+1, nb_item_max, recursion_level_max);
1259 gtk_widget_show(item_new);
1263 gtk_tree_item_set_subtree(GTK_TREE_ITEM(item), item_subtree);
1267 create_tree_sample(guint selection_mode,
1268 guint draw_line, guint view_line, guint no_root_item,
1269 guint nb_item_max, guint recursion_level_max)
1274 GtkWidget* separator;
1276 GtkWidget* scrolled_win;
1277 GtkWidget* root_tree;
1278 GtkWidget* root_item;
1279 sTreeButtons* tree_buttons;
1281 /* create tree buttons struct */
1282 if ((tree_buttons = g_malloc (sizeof (sTreeButtons))) == NULL)
1284 g_error("can't allocate memory for tree structure !\n");
1287 tree_buttons->nb_item_add = 0;
1289 /* create top level window */
1290 window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
1291 gtk_window_set_title(GTK_WINDOW(window), "Tree Sample");
1292 gtk_signal_connect(GTK_OBJECT(window), "destroy",
1293 (GtkSignalFunc) cb_tree_destroy_event, NULL);
1294 gtk_object_set_user_data(GTK_OBJECT(window), tree_buttons);
1296 box1 = gtk_vbox_new(FALSE, 0);
1297 gtk_container_add(GTK_CONTAINER(window), box1);
1298 gtk_widget_show(box1);
1300 /* create tree box */
1301 box2 = gtk_vbox_new(FALSE, 0);
1302 gtk_box_pack_start(GTK_BOX(box1), box2, TRUE, TRUE, 0);
1303 gtk_container_set_border_width(GTK_CONTAINER(box2), 5);
1304 gtk_widget_show(box2);
1306 /* create scrolled window */
1307 scrolled_win = gtk_scrolled_window_new (NULL, NULL);
1308 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win),
1309 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
1310 gtk_box_pack_start (GTK_BOX (box2), scrolled_win, TRUE, TRUE, 0);
1311 gtk_widget_set_usize (scrolled_win, 200, 200);
1312 gtk_widget_show (scrolled_win);
1314 /* create root tree widget */
1315 root_tree = gtk_tree_new();
1316 gtk_signal_connect(GTK_OBJECT(root_tree), "selection_changed",
1317 (GtkSignalFunc)cb_tree_changed,
1319 gtk_object_set_user_data(GTK_OBJECT(root_tree), tree_buttons);
1320 gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scrolled_win), root_tree);
1321 gtk_tree_set_selection_mode(GTK_TREE(root_tree), selection_mode);
1322 gtk_tree_set_view_lines(GTK_TREE(root_tree), draw_line);
1323 gtk_tree_set_view_mode(GTK_TREE(root_tree), !view_line);
1324 gtk_widget_show(root_tree);
1328 /* set root tree to subtree function with root item variable */
1329 root_item = GTK_WIDGET(root_tree);
1333 /* create root tree item widget */
1334 root_item = gtk_tree_item_new_with_label("root item");
1335 gtk_tree_append(GTK_TREE(root_tree), root_item);
1336 gtk_widget_show(root_item);
1338 create_subtree(root_item, -no_root_item, nb_item_max, recursion_level_max);
1340 box2 = gtk_vbox_new(FALSE, 0);
1341 gtk_box_pack_start(GTK_BOX(box1), box2, FALSE, FALSE, 0);
1342 gtk_container_set_border_width(GTK_CONTAINER(box2), 5);
1343 gtk_widget_show(box2);
1345 button = gtk_button_new_with_label("Add Item");
1346 gtk_widget_set_sensitive(button, FALSE);
1347 gtk_signal_connect(GTK_OBJECT (button), "clicked",
1348 (GtkSignalFunc) cb_add_new_item,
1349 (gpointer)root_tree);
1350 gtk_box_pack_start(GTK_BOX(box2), button, TRUE, TRUE, 0);
1351 gtk_widget_show(button);
1352 tree_buttons->add_button = button;
1354 button = gtk_button_new_with_label("Remove Item(s)");
1355 gtk_widget_set_sensitive(button, FALSE);
1356 gtk_signal_connect(GTK_OBJECT (button), "clicked",
1357 (GtkSignalFunc) cb_remove_item,
1358 (gpointer)root_tree);
1359 gtk_box_pack_start(GTK_BOX(box2), button, TRUE, TRUE, 0);
1360 gtk_widget_show(button);
1361 tree_buttons->remove_button = button;
1363 button = gtk_button_new_with_label("Remove Subtree");
1364 gtk_widget_set_sensitive(button, FALSE);
1365 gtk_signal_connect(GTK_OBJECT (button), "clicked",
1366 (GtkSignalFunc) cb_remove_subtree,
1367 (gpointer)root_tree);
1368 gtk_box_pack_start(GTK_BOX(box2), button, TRUE, TRUE, 0);
1369 gtk_widget_show(button);
1370 tree_buttons->subtree_button = button;
1372 /* create separator */
1373 separator = gtk_hseparator_new();
1374 gtk_box_pack_start(GTK_BOX(box1), separator, FALSE, FALSE, 0);
1375 gtk_widget_show(separator);
1377 /* create button box */
1378 box2 = gtk_vbox_new(FALSE, 0);
1379 gtk_box_pack_start(GTK_BOX(box1), box2, FALSE, FALSE, 0);
1380 gtk_container_set_border_width(GTK_CONTAINER(box2), 5);
1381 gtk_widget_show(box2);
1383 button = gtk_button_new_with_label("Close");
1384 gtk_box_pack_start(GTK_BOX(box2), button, TRUE, TRUE, 0);
1385 gtk_signal_connect_object(GTK_OBJECT (button), "clicked",
1386 (GtkSignalFunc) gtk_widget_destroy,
1387 GTK_OBJECT(window));
1388 gtk_widget_show(button);
1390 gtk_widget_show(window);
1394 cb_create_tree(GtkWidget* w)
1396 guint selection_mode = GTK_SELECTION_SINGLE;
1401 guint recursion_level;
1403 /* get selection mode choice */
1404 if(GTK_TOGGLE_BUTTON(sTreeSampleSelection.single_button)->active)
1405 selection_mode = GTK_SELECTION_SINGLE;
1407 if(GTK_TOGGLE_BUTTON(sTreeSampleSelection.browse_button)->active)
1408 selection_mode = GTK_SELECTION_BROWSE;
1410 selection_mode = GTK_SELECTION_MULTIPLE;
1412 /* get options choice */
1413 draw_line = GTK_TOGGLE_BUTTON(sTreeSampleSelection.draw_line_button)->active;
1414 view_line = GTK_TOGGLE_BUTTON(sTreeSampleSelection.view_line_button)->active;
1415 no_root_item = GTK_TOGGLE_BUTTON(sTreeSampleSelection.no_root_item_button)->active;
1418 nb_item = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(sTreeSampleSelection.nb_item_spinner));
1419 recursion_level = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(sTreeSampleSelection.recursion_spinner));
1421 if (pow (nb_item, recursion_level) > 10000)
1423 g_print ("%g total items? That will take a very long time. Try less\n",
1424 pow (nb_item, recursion_level));
1428 create_tree_sample(selection_mode, draw_line, view_line, no_root_item, nb_item, recursion_level);
1432 create_tree_mode_window(void)
1434 static GtkWidget* window;
1442 GtkWidget* separator;
1449 /* create toplevel window */
1450 window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
1451 gtk_window_set_title(GTK_WINDOW(window), "Set Tree Parameters");
1452 gtk_signal_connect (GTK_OBJECT (window), "destroy",
1453 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
1455 box1 = gtk_vbox_new(FALSE, 0);
1456 gtk_container_add(GTK_CONTAINER(window), box1);
1458 /* create upper box - selection box */
1459 box2 = gtk_vbox_new(FALSE, 5);
1460 gtk_box_pack_start(GTK_BOX(box1), box2, TRUE, TRUE, 0);
1461 gtk_container_set_border_width(GTK_CONTAINER(box2), 5);
1463 box3 = gtk_hbox_new(FALSE, 5);
1464 gtk_box_pack_start(GTK_BOX(box2), box3, TRUE, TRUE, 0);
1466 /* create selection mode frame */
1467 frame = gtk_frame_new("Selection Mode");
1468 gtk_box_pack_start(GTK_BOX(box3), frame, TRUE, TRUE, 0);
1470 box4 = gtk_vbox_new(FALSE, 0);
1471 gtk_container_add(GTK_CONTAINER(frame), box4);
1472 gtk_container_set_border_width(GTK_CONTAINER(box4), 5);
1474 /* create radio button */
1475 button = gtk_radio_button_new_with_label(NULL, "SINGLE");
1476 gtk_box_pack_start(GTK_BOX(box4), button, TRUE, TRUE, 0);
1477 sTreeSampleSelection.single_button = button;
1479 button = gtk_radio_button_new_with_label(gtk_radio_button_group (GTK_RADIO_BUTTON (button)),
1481 gtk_box_pack_start(GTK_BOX(box4), button, TRUE, TRUE, 0);
1482 sTreeSampleSelection.browse_button = button;
1484 button = gtk_radio_button_new_with_label(gtk_radio_button_group (GTK_RADIO_BUTTON (button)),
1486 gtk_box_pack_start(GTK_BOX(box4), button, TRUE, TRUE, 0);
1487 sTreeSampleSelection.multiple_button = button;
1489 sTreeSampleSelection.selection_mode_group = gtk_radio_button_group (GTK_RADIO_BUTTON (button));
1491 /* create option mode frame */
1492 frame = gtk_frame_new("Options");
1493 gtk_box_pack_start(GTK_BOX(box3), frame, TRUE, TRUE, 0);
1495 box4 = gtk_vbox_new(FALSE, 0);
1496 gtk_container_add(GTK_CONTAINER(frame), box4);
1497 gtk_container_set_border_width(GTK_CONTAINER(box4), 5);
1499 /* create check button */
1500 button = gtk_check_button_new_with_label("Draw line");
1501 gtk_box_pack_start(GTK_BOX(box4), button, TRUE, TRUE, 0);
1502 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), TRUE);
1503 sTreeSampleSelection.draw_line_button = button;
1505 button = gtk_check_button_new_with_label("View Line mode");
1506 gtk_box_pack_start(GTK_BOX(box4), button, TRUE, TRUE, 0);
1507 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), TRUE);
1508 sTreeSampleSelection.view_line_button = button;
1510 button = gtk_check_button_new_with_label("Without Root item");
1511 gtk_box_pack_start(GTK_BOX(box4), button, TRUE, TRUE, 0);
1512 sTreeSampleSelection.no_root_item_button = button;
1514 /* create recursion parameter */
1515 frame = gtk_frame_new("Size Parameters");
1516 gtk_box_pack_start(GTK_BOX(box2), frame, TRUE, TRUE, 0);
1518 box4 = gtk_hbox_new(FALSE, 5);
1519 gtk_container_add(GTK_CONTAINER(frame), box4);
1520 gtk_container_set_border_width(GTK_CONTAINER(box4), 5);
1522 /* create number of item spin button */
1523 box5 = gtk_hbox_new(FALSE, 5);
1524 gtk_box_pack_start(GTK_BOX(box4), box5, FALSE, FALSE, 0);
1526 label = gtk_label_new("Number of items : ");
1527 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
1528 gtk_box_pack_start (GTK_BOX (box5), label, FALSE, TRUE, 0);
1530 adj = (GtkAdjustment *) gtk_adjustment_new (DEFAULT_NUMBER_OF_ITEM, 1.0, 255.0, 1.0,
1532 spinner = gtk_spin_button_new (adj, 0, 0);
1533 gtk_box_pack_start (GTK_BOX (box5), spinner, FALSE, TRUE, 0);
1534 sTreeSampleSelection.nb_item_spinner = spinner;
1536 /* create recursion level spin button */
1537 box5 = gtk_hbox_new(FALSE, 5);
1538 gtk_box_pack_start(GTK_BOX(box4), box5, FALSE, FALSE, 0);
1540 label = gtk_label_new("Depth : ");
1541 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
1542 gtk_box_pack_start (GTK_BOX (box5), label, FALSE, TRUE, 0);
1544 adj = (GtkAdjustment *) gtk_adjustment_new (DEFAULT_RECURSION_LEVEL, 0.0, 255.0, 1.0,
1546 spinner = gtk_spin_button_new (adj, 0, 0);
1547 gtk_box_pack_start (GTK_BOX (box5), spinner, FALSE, TRUE, 0);
1548 sTreeSampleSelection.recursion_spinner = spinner;
1550 /* create horizontal separator */
1551 separator = gtk_hseparator_new();
1552 gtk_box_pack_start(GTK_BOX(box1), separator, FALSE, FALSE, 0);
1554 /* create bottom button box */
1555 box2 = gtk_hbox_new(TRUE, 10);
1556 gtk_box_pack_start(GTK_BOX(box1), box2, FALSE, FALSE, 0);
1557 gtk_container_set_border_width(GTK_CONTAINER(box2), 5);
1559 button = gtk_button_new_with_label("Create Tree");
1560 gtk_box_pack_start(GTK_BOX(box2), button, TRUE, TRUE, 0);
1561 gtk_signal_connect(GTK_OBJECT (button), "clicked",
1562 (GtkSignalFunc) cb_create_tree, NULL);
1564 button = gtk_button_new_with_label("Close");
1565 gtk_box_pack_start(GTK_BOX(box2), button, TRUE, TRUE, 0);
1566 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
1567 GTK_SIGNAL_FUNC(gtk_widget_destroy),
1568 GTK_OBJECT (window));
1570 if (!GTK_WIDGET_VISIBLE (window))
1571 gtk_widget_show_all (window);
1573 gtk_widget_destroy (window);
1581 handle_box_child_signal (GtkHandleBox *hb,
1583 const gchar *action)
1585 printf ("%s: child <%s> %sed\n",
1586 gtk_type_name (GTK_OBJECT_TYPE (hb)),
1587 gtk_type_name (GTK_OBJECT_TYPE (child)),
1592 create_handle_box (void)
1594 static GtkWidget* window = NULL;
1595 GtkWidget *handle_box;
1596 GtkWidget *handle_box2;
1601 GtkWidget *separator;
1605 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
1606 gtk_window_set_title (GTK_WINDOW (window),
1608 gtk_window_set_policy (GTK_WINDOW (window),
1613 gtk_signal_connect (GTK_OBJECT (window), "destroy",
1614 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
1617 gtk_container_set_border_width (GTK_CONTAINER (window), 20);
1619 vbox = gtk_vbox_new (FALSE, 0);
1620 gtk_container_add (GTK_CONTAINER (window), vbox);
1621 gtk_widget_show (vbox);
1623 label = gtk_label_new ("Above");
1624 gtk_container_add (GTK_CONTAINER (vbox), label);
1625 gtk_widget_show (label);
1627 separator = gtk_hseparator_new ();
1628 gtk_container_add (GTK_CONTAINER (vbox), separator);
1629 gtk_widget_show (separator);
1631 hbox = gtk_hbox_new (FALSE, 10);
1632 gtk_container_add (GTK_CONTAINER (vbox), hbox);
1633 gtk_widget_show (hbox);
1635 separator = gtk_hseparator_new ();
1636 gtk_container_add (GTK_CONTAINER (vbox), separator);
1637 gtk_widget_show (separator);
1639 label = gtk_label_new ("Below");
1640 gtk_container_add (GTK_CONTAINER (vbox), label);
1641 gtk_widget_show (label);
1643 handle_box = gtk_handle_box_new ();
1644 gtk_box_pack_start (GTK_BOX (hbox), handle_box, FALSE, FALSE, 0);
1645 gtk_signal_connect (GTK_OBJECT (handle_box),
1647 GTK_SIGNAL_FUNC (handle_box_child_signal),
1649 gtk_signal_connect (GTK_OBJECT (handle_box),
1651 GTK_SIGNAL_FUNC (handle_box_child_signal),
1653 gtk_widget_show (handle_box);
1655 toolbar = make_toolbar (window);
1656 gtk_toolbar_set_button_relief (GTK_TOOLBAR (toolbar), GTK_RELIEF_NORMAL);
1657 gtk_container_add (GTK_CONTAINER (handle_box), toolbar);
1658 gtk_widget_show (toolbar);
1660 handle_box = gtk_handle_box_new ();
1661 gtk_box_pack_start (GTK_BOX (hbox), handle_box, FALSE, FALSE, 0);
1662 gtk_signal_connect (GTK_OBJECT (handle_box),
1664 GTK_SIGNAL_FUNC (handle_box_child_signal),
1666 gtk_signal_connect (GTK_OBJECT (handle_box),
1668 GTK_SIGNAL_FUNC (handle_box_child_signal),
1670 gtk_widget_show (handle_box);
1672 handle_box2 = gtk_handle_box_new ();
1673 gtk_container_add (GTK_CONTAINER (handle_box), handle_box2);
1674 gtk_signal_connect (GTK_OBJECT (handle_box2),
1676 GTK_SIGNAL_FUNC (handle_box_child_signal),
1678 gtk_signal_connect (GTK_OBJECT (handle_box2),
1680 GTK_SIGNAL_FUNC (handle_box_child_signal),
1682 gtk_widget_show (handle_box2);
1684 label = gtk_label_new ("Fooo!");
1685 gtk_container_add (GTK_CONTAINER (handle_box2), label);
1686 gtk_widget_show (label);
1689 if (!GTK_WIDGET_VISIBLE (window))
1690 gtk_widget_show (window);
1692 gtk_widget_destroy (window);
1696 * Test for getting an image from a drawable
1707 take_snapshot (GtkWidget *button,
1710 struct GetImageData *gid = data;
1711 GdkRectangle visible;
1713 int height_fraction;
1716 GdkColor color = { 0, 30000, 0, 0 };
1717 GdkRectangle target;
1720 /* Do some begin_paint_rect on some random rects, draw some
1721 * distinctive stuff into those rects, then take the snapshot.
1722 * figure out whether any rects were overlapped and report to
1726 visible = gid->sw->allocation;
1728 visible.x = gtk_scrolled_window_get_hadjustment (GTK_SCROLLED_WINDOW (gid->sw))->value;
1729 visible.y = gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (gid->sw))->value;
1731 width_fraction = visible.width / 4;
1732 height_fraction = visible.height / 4;
1734 gc = gdk_gc_new (gid->src->window);
1735 black_gc = gid->src->style->black_gc;
1737 gdk_gc_set_rgb_fg_color (gc, &color);
1740 target.x = visible.x + width_fraction;
1741 target.y = visible.y + height_fraction * 3;
1742 target.width = width_fraction;
1743 target.height = height_fraction / 2;
1745 gdk_window_begin_paint_rect (gid->src->window,
1748 gdk_draw_rectangle (gid->src->window,
1752 target.width, target.height);
1754 gdk_draw_rectangle (gid->src->window,
1757 target.x + 10, target.y + 10,
1758 target.width - 20, target.height - 20);
1760 target.x = visible.x + width_fraction;
1761 target.y = visible.y + height_fraction;
1762 target.width = width_fraction;
1763 target.height = height_fraction;
1765 gdk_window_begin_paint_rect (gid->src->window,
1768 gdk_draw_rectangle (gid->src->window,
1772 target.width, target.height);
1774 gdk_draw_rectangle (gid->src->window,
1777 target.x + 10, target.y + 10,
1778 target.width - 20, target.height - 20);
1780 target.x = visible.x + width_fraction * 3;
1781 target.y = visible.y + height_fraction;
1782 target.width = width_fraction / 2;
1783 target.height = height_fraction;
1785 gdk_window_begin_paint_rect (gid->src->window,
1788 gdk_draw_rectangle (gid->src->window,
1792 target.width, target.height);
1794 gdk_draw_rectangle (gid->src->window,
1797 target.x + 10, target.y + 10,
1798 target.width - 20, target.height - 20);
1800 target.x = visible.x + width_fraction * 2;
1801 target.y = visible.y + height_fraction * 2;
1802 target.width = width_fraction / 4;
1803 target.height = height_fraction / 4;
1805 gdk_window_begin_paint_rect (gid->src->window,
1808 gdk_draw_rectangle (gid->src->window,
1812 target.width, target.height);
1814 gdk_draw_rectangle (gid->src->window,
1817 target.x + 10, target.y + 10,
1818 target.width - 20, target.height - 20);
1820 target.x += target.width / 2;
1821 target.y += target.width / 2;
1823 gdk_window_begin_paint_rect (gid->src->window,
1826 gdk_draw_rectangle (gid->src->window,
1830 target.width, target.height);
1832 gdk_draw_rectangle (gid->src->window,
1835 target.x + 10, target.y + 10,
1836 target.width - 20, target.height - 20);
1838 /* Screen shot area */
1840 target.x = visible.x + width_fraction * 1.5;
1841 target.y = visible.y + height_fraction * 1.5;
1842 target.width = width_fraction * 2;
1843 target.height = height_fraction * 2;
1845 shot = gdk_drawable_get_image (gid->src->window,
1847 target.width, target.height);
1849 gtk_image_set_from_image (GTK_IMAGE (gid->snap),
1852 g_object_unref (G_OBJECT (shot));
1854 gdk_window_end_paint (gid->src->window);
1855 gdk_window_end_paint (gid->src->window);
1856 gdk_window_end_paint (gid->src->window);
1857 gdk_window_end_paint (gid->src->window);
1858 gdk_window_end_paint (gid->src->window);
1860 gdk_draw_rectangle (gid->src->window,
1861 gid->src->style->black_gc,
1864 target.width, target.height);
1866 g_object_unref (G_OBJECT (gc));
1870 image_source_expose (GtkWidget *da,
1871 GdkEventExpose *event,
1874 int x = event->area.x;
1875 GdkColor red = { 0, 65535, 0, 0 };
1876 GdkColor green = { 0, 0, 65535, 0 };
1877 GdkColor blue = { 0, 0, 0, 65535 };
1880 gc = gdk_gc_new (event->window);
1882 while (x < (event->area.x + event->area.width))
1889 gdk_gc_set_rgb_fg_color (gc, &red);
1895 gdk_gc_set_rgb_fg_color (gc, &green);
1901 gdk_gc_set_rgb_fg_color (gc, &blue);
1905 g_assert_not_reached ();
1909 gdk_draw_line (event->window,
1912 x, event->area.y + event->area.height);
1917 g_object_unref (G_OBJECT (gc));
1923 create_get_image (void)
1925 static GtkWidget *window = NULL;
1928 gtk_widget_destroy (window);
1937 struct GetImageData *gid;
1939 gid = g_new (struct GetImageData, 1);
1941 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
1943 gtk_signal_connect (GTK_OBJECT (window),
1945 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
1948 gtk_object_set_data_full (GTK_OBJECT (window),
1949 "testgtk-get-image-data",
1953 vbox = gtk_vbox_new (FALSE, 0);
1955 gtk_container_add (GTK_CONTAINER (window), vbox);
1957 sw = gtk_scrolled_window_new (NULL, NULL);
1958 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw),
1959 GTK_POLICY_AUTOMATIC,
1960 GTK_POLICY_AUTOMATIC);
1964 gtk_widget_set_usize (sw, 400, 400);
1966 src = gtk_drawing_area_new ();
1967 gtk_widget_set_usize (src, 10000, 10000);
1969 gtk_signal_connect (GTK_OBJECT (src),
1971 GTK_SIGNAL_FUNC (image_source_expose),
1976 gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (sw),
1979 gtk_box_pack_start (GTK_BOX (vbox),
1983 hbox = gtk_hbox_new (FALSE, 3);
1985 snap = gtk_widget_new (GTK_TYPE_IMAGE, NULL);
1989 sw = gtk_scrolled_window_new (NULL, NULL);
1990 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw),
1991 GTK_POLICY_AUTOMATIC,
1992 GTK_POLICY_AUTOMATIC);
1993 gtk_widget_set_usize (sw, 300, 300);
1995 gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (sw), snap);
1997 gtk_box_pack_end (GTK_BOX (hbox), sw, FALSE, FALSE, 5);
1999 button = gtk_button_new_with_label ("Get image from drawable");
2001 gtk_signal_connect (GTK_OBJECT (button),
2003 GTK_SIGNAL_FUNC (take_snapshot),
2006 gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, FALSE, 0);
2008 gtk_box_pack_end (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
2010 gtk_widget_show_all (window);
2018 sensitivity_toggled (GtkWidget *toggle,
2021 gtk_widget_set_sensitive (widget, GTK_TOGGLE_BUTTON (toggle)->active);
2025 create_sensitivity_control (GtkWidget *widget)
2029 button = gtk_toggle_button_new_with_label ("Sensitive");
2031 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button),
2032 GTK_WIDGET_IS_SENSITIVE (widget));
2034 gtk_signal_connect (GTK_OBJECT (button),
2036 GTK_SIGNAL_FUNC (sensitivity_toggled),
2039 gtk_widget_show_all (button);
2045 set_selectable_recursive (GtkWidget *widget,
2048 if (GTK_IS_CONTAINER (widget))
2053 children = gtk_container_children (GTK_CONTAINER (widget));
2057 set_selectable_recursive (tmp->data, setting);
2061 g_list_free (children);
2063 else if (GTK_IS_LABEL (widget))
2065 gtk_label_set_selectable (GTK_LABEL (widget), setting);
2070 selectable_toggled (GtkWidget *toggle,
2073 set_selectable_recursive (widget,
2074 GTK_TOGGLE_BUTTON (toggle)->active);
2078 create_selectable_control (GtkWidget *widget)
2082 button = gtk_toggle_button_new_with_label ("Selectable");
2084 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button),
2087 gtk_signal_connect (GTK_OBJECT (button),
2089 GTK_SIGNAL_FUNC (selectable_toggled),
2092 gtk_widget_show_all (button);
2097 void create_labels (void)
2099 static GtkWidget *window = NULL;
2108 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
2109 gtk_signal_connect (GTK_OBJECT (window), "destroy",
2110 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
2113 gtk_window_set_title (GTK_WINDOW (window), "Label");
2115 vbox = gtk_vbox_new (FALSE, 5);
2117 hbox = gtk_hbox_new (FALSE, 5);
2118 gtk_container_add (GTK_CONTAINER (window), vbox);
2120 gtk_box_pack_end (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
2122 button = create_sensitivity_control (hbox);
2124 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
2126 button = create_selectable_control (hbox);
2128 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
2130 vbox = gtk_vbox_new (FALSE, 5);
2132 gtk_box_pack_start (GTK_BOX (hbox), vbox, FALSE, FALSE, 0);
2133 gtk_container_set_border_width (GTK_CONTAINER (window), 5);
2135 frame = gtk_frame_new ("Normal Label");
2136 label = gtk_label_new ("This is a Normal label");
2137 gtk_container_add (GTK_CONTAINER (frame), label);
2138 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
2140 frame = gtk_frame_new ("Multi-line Label");
2141 label = gtk_label_new ("This is a Multi-line label.\nSecond line\nThird line");
2142 gtk_container_add (GTK_CONTAINER (frame), label);
2143 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
2145 frame = gtk_frame_new ("Left Justified Label");
2146 label = gtk_label_new ("This is a Left-Justified\nMulti-line label.\nThird line");
2147 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
2148 gtk_container_add (GTK_CONTAINER (frame), label);
2149 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
2151 frame = gtk_frame_new ("Right Justified Label");
2152 label = gtk_label_new ("This is a Right-Justified\nMulti-line label.\nFourth line, (j/k)");
2153 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_RIGHT);
2154 gtk_container_add (GTK_CONTAINER (frame), label);
2155 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
2157 frame = gtk_frame_new ("Internationalized Label");
2158 label = gtk_label_new ("French (Français) Bonjour, Salut\n"
2159 "Korean (한글) 안녕하세요, 안녕하십니까\n"
2160 "Russian (Русский) Здравствуйте!");
2161 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
2162 gtk_container_add (GTK_CONTAINER (frame), label);
2163 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
2165 frame = gtk_frame_new ("Bidirection Label");
2166 label = gtk_label_new ("Arabic السلام عليكم\n"
2168 gtk_widget_set_direction (label, GTK_TEXT_DIR_RTL);
2169 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_RIGHT);
2170 gtk_container_add (GTK_CONTAINER (frame), label);
2171 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
2173 vbox = gtk_vbox_new (FALSE, 5);
2174 gtk_box_pack_start (GTK_BOX (hbox), vbox, FALSE, FALSE, 0);
2175 frame = gtk_frame_new ("Line wrapped label");
2176 label = gtk_label_new ("This is an example of a line-wrapped label. It should not be taking "\
2177 "up the entire "/* big space to test spacing */\
2178 "width allocated to it, but automatically wraps the words to fit. "\
2179 "The time has come, for all good men, to come to the aid of their party. "\
2180 "The sixth sheik's six sheep's sick.\n"\
2181 " It supports multiple paragraphs correctly, and correctly adds "\
2182 "many extra spaces. ");
2184 gtk_label_set_line_wrap (GTK_LABEL (label), TRUE);
2185 gtk_container_add (GTK_CONTAINER (frame), label);
2186 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
2188 frame = gtk_frame_new ("Filled, wrapped label");
2189 label = gtk_label_new ("This is an example of a line-wrapped, filled label. It should be taking "\
2190 "up the entire width allocated to it. Here is a seneance to prove "\
2191 "my point. Here is another sentence. "\
2192 "Here comes the sun, do de do de do.\n"\
2193 " This is a new paragraph.\n"\
2194 " This is another newer, longer, better paragraph. It is coming to an end, "\
2196 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_FILL);
2197 gtk_label_set_line_wrap (GTK_LABEL (label), TRUE);
2198 gtk_container_add (GTK_CONTAINER (frame), label);
2199 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
2201 frame = gtk_frame_new ("Underlined label");
2202 label = gtk_label_new ("This label is underlined!\n"
2203 "This one is underlined (こんにちは) in quite a funky fashion");
2204 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
2205 gtk_label_set_pattern (GTK_LABEL (label), "_________________________ _ _________ _ _____ _ __ __ ___ ____ _____");
2206 gtk_container_add (GTK_CONTAINER (frame), label);
2207 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
2209 frame = gtk_frame_new ("Markup label");
2210 label = gtk_label_new (NULL);
2212 /* There's also a gtk_label_set_markup() without accel if you
2213 * don't have an accelerator key
2215 gtk_label_set_markup_with_mnemonic (GTK_LABEL (label),
2216 "This <span foreground=\"blue\" background=\"orange\">label</span> has "
2217 "<b>markup</b> _such as "
2218 "<big><i>Big Italics</i></big>\n"
2219 "<tt>Monospace font</tt>\n"
2220 "<u>Underline!</u>\n"
2222 "<span foreground=\"green\" background=\"red\">Ugly colors</span>\n"
2223 "and nothing on this line,\n"
2226 "or even on this one\n"
2227 "la <big>la <big>la <big>la <big>la</big></big></big></big>\n"
2228 "but this _word is <span foreground=\"purple\"><big>purple</big></span>\n"
2229 "<span underline=\"double\">We like <sup>superscript</sup> and <sub>subscript</sub> too</span>");
2231 g_assert (gtk_label_get_mnemonic_keyval (GTK_LABEL (label)) == GDK_s);
2233 gtk_container_add (GTK_CONTAINER (frame), label);
2234 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
2237 if (!GTK_WIDGET_VISIBLE (window))
2238 gtk_widget_show_all (window);
2240 gtk_widget_destroy (window);
2248 reparent_label (GtkWidget *widget,
2249 GtkWidget *new_parent)
2253 label = gtk_object_get_user_data (GTK_OBJECT (widget));
2255 gtk_widget_reparent (label, new_parent);
2259 set_parent_signal (GtkWidget *child,
2260 GtkWidget *old_parent,
2263 g_print ("set_parent for \"%s\": new parent: \"%s\", old parent: \"%s\", data: %d\n",
2264 gtk_type_name (GTK_OBJECT_TYPE (child)),
2265 child->parent ? gtk_type_name (GTK_OBJECT_TYPE (child->parent)) : "NULL",
2266 old_parent ? gtk_type_name (GTK_OBJECT_TYPE (old_parent)) : "NULL",
2267 GPOINTER_TO_INT (func_data));
2271 create_reparent (void)
2273 static GtkWidget *window = NULL;
2280 GtkWidget *separator;
2284 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
2286 gtk_signal_connect (GTK_OBJECT (window), "destroy",
2287 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
2290 gtk_window_set_title (GTK_WINDOW (window), "reparent");
2291 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
2293 box1 = gtk_vbox_new (FALSE, 0);
2294 gtk_container_add (GTK_CONTAINER (window), box1);
2296 box2 = gtk_hbox_new (FALSE, 5);
2297 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
2298 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
2300 label = gtk_label_new ("Hello World");
2302 frame = gtk_frame_new ("Frame 1");
2303 gtk_box_pack_start (GTK_BOX (box2), frame, TRUE, TRUE, 0);
2305 box3 = gtk_vbox_new (FALSE, 5);
2306 gtk_container_set_border_width (GTK_CONTAINER (box3), 5);
2307 gtk_container_add (GTK_CONTAINER (frame), box3);
2309 button = gtk_button_new_with_label ("switch");
2310 gtk_signal_connect (GTK_OBJECT (button), "clicked",
2311 GTK_SIGNAL_FUNC(reparent_label),
2313 gtk_object_set_user_data (GTK_OBJECT (button), label);
2314 gtk_box_pack_start (GTK_BOX (box3), button, FALSE, TRUE, 0);
2316 gtk_box_pack_start (GTK_BOX (box3), label, FALSE, TRUE, 0);
2317 gtk_signal_connect (GTK_OBJECT (label),
2319 GTK_SIGNAL_FUNC (set_parent_signal),
2320 GINT_TO_POINTER (42));
2322 frame = gtk_frame_new ("Frame 2");
2323 gtk_box_pack_start (GTK_BOX (box2), frame, TRUE, TRUE, 0);
2325 box3 = gtk_vbox_new (FALSE, 5);
2326 gtk_container_set_border_width (GTK_CONTAINER (box3), 5);
2327 gtk_container_add (GTK_CONTAINER (frame), box3);
2329 button = gtk_button_new_with_label ("switch");
2330 gtk_signal_connect (GTK_OBJECT (button), "clicked",
2331 GTK_SIGNAL_FUNC(reparent_label),
2333 gtk_object_set_user_data (GTK_OBJECT (button), label);
2334 gtk_box_pack_start (GTK_BOX (box3), button, FALSE, TRUE, 0);
2336 separator = gtk_hseparator_new ();
2337 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
2339 box2 = gtk_vbox_new (FALSE, 10);
2340 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
2341 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
2343 button = gtk_button_new_with_label ("close");
2344 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
2345 GTK_SIGNAL_FUNC(gtk_widget_destroy),
2346 GTK_OBJECT (window));
2347 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
2348 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
2349 gtk_widget_grab_default (button);
2352 if (!GTK_WIDGET_VISIBLE (window))
2353 gtk_widget_show_all (window);
2355 gtk_widget_destroy (window);
2361 gint upositionx = 0;
2362 gint upositiony = 0;
2365 uposition_configure (GtkWidget *window)
2371 lx = gtk_object_get_data (GTK_OBJECT (window), "x");
2372 ly = gtk_object_get_data (GTK_OBJECT (window), "y");
2374 gdk_window_get_root_origin (window->window, &upositionx, &upositiony);
2375 sprintf (buffer, "%d", upositionx);
2376 gtk_label_set_text (lx, buffer);
2377 sprintf (buffer, "%d", upositiony);
2378 gtk_label_set_text (ly, buffer);
2384 uposition_stop_configure (GtkToggleButton *toggle,
2388 gtk_signal_handler_block_by_func (window, GTK_SIGNAL_FUNC (uposition_configure), NULL);
2390 gtk_signal_handler_unblock_by_func (window, GTK_SIGNAL_FUNC (uposition_configure), NULL);
2394 create_saved_position (void)
2396 static GtkWidget *window = NULL;
2401 GtkWidget *main_vbox;
2409 window = g_object_connect (gtk_widget_new (GTK_TYPE_WINDOW,
2410 "type", GTK_WINDOW_TOPLEVEL,
2413 "title", "Saved Position",
2415 "signal::configure_event", uposition_configure, NULL,
2418 gtk_signal_connect (GTK_OBJECT (window), "destroy",
2419 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
2422 main_vbox = gtk_vbox_new (FALSE, 5);
2423 gtk_container_set_border_width (GTK_CONTAINER (main_vbox), 0);
2424 gtk_container_add (GTK_CONTAINER (window), main_vbox);
2427 gtk_widget_new (gtk_vbox_get_type (),
2428 "GtkBox::homogeneous", FALSE,
2429 "GtkBox::spacing", 5,
2430 "GtkContainer::border_width", 10,
2431 "GtkWidget::parent", main_vbox,
2432 "GtkWidget::visible", TRUE,
2433 "child", g_object_connect (gtk_widget_new (GTK_TYPE_TOGGLE_BUTTON,
2434 "label", "Stop Events",
2438 "signal::clicked", uposition_stop_configure, window,
2442 hbox = gtk_hbox_new (FALSE, 0);
2443 gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
2444 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0);
2446 label = gtk_label_new ("X Origin : ");
2447 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
2448 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
2450 x_label = gtk_label_new ("");
2451 gtk_box_pack_start (GTK_BOX (hbox), x_label, TRUE, TRUE, 0);
2452 gtk_object_set_data (GTK_OBJECT (window), "x", x_label);
2454 hbox = gtk_hbox_new (FALSE, 0);
2455 gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
2456 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0);
2458 label = gtk_label_new ("Y Origin : ");
2459 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
2460 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
2462 y_label = gtk_label_new ("");
2463 gtk_box_pack_start (GTK_BOX (hbox), y_label, TRUE, TRUE, 0);
2464 gtk_object_set_data (GTK_OBJECT (window), "y", y_label);
2467 gtk_widget_new (gtk_hseparator_get_type (),
2468 "GtkWidget::visible", TRUE,
2470 gtk_box_pack_start (GTK_BOX (main_vbox), any, FALSE, TRUE, 0);
2472 hbox = gtk_hbox_new (FALSE, 0);
2473 gtk_container_set_border_width (GTK_CONTAINER (hbox), 10);
2474 gtk_box_pack_start (GTK_BOX (main_vbox), hbox, FALSE, TRUE, 0);
2476 button = gtk_button_new_with_label ("Close");
2477 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
2478 GTK_SIGNAL_FUNC (gtk_widget_destroy),
2479 GTK_OBJECT (window));
2480 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
2481 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
2482 gtk_widget_grab_default (button);
2484 gtk_widget_show_all (window);
2487 gtk_widget_destroy (window);
2495 create_pixmap (void)
2497 static GtkWidget *window = NULL;
2503 GtkWidget *separator;
2504 GtkWidget *pixmapwid;
2508 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
2510 gtk_signal_connect (GTK_OBJECT (window), "destroy",
2511 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
2514 gtk_window_set_title (GTK_WINDOW (window), "GtkPixmap");
2515 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
2516 gtk_widget_realize(window);
2518 box1 = gtk_vbox_new (FALSE, 0);
2519 gtk_container_add (GTK_CONTAINER (window), box1);
2521 box2 = gtk_vbox_new (FALSE, 10);
2522 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
2523 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
2525 button = gtk_button_new ();
2526 gtk_box_pack_start (GTK_BOX (box2), button, FALSE, FALSE, 0);
2528 pixmapwid = new_pixmap ("test.xpm", window->window, NULL);
2530 label = gtk_label_new ("Pixmap\ntest");
2531 box3 = gtk_hbox_new (FALSE, 0);
2532 gtk_container_set_border_width (GTK_CONTAINER (box3), 2);
2533 gtk_container_add (GTK_CONTAINER (box3), pixmapwid);
2534 gtk_container_add (GTK_CONTAINER (box3), label);
2535 gtk_container_add (GTK_CONTAINER (button), box3);
2537 button = gtk_button_new ();
2538 gtk_box_pack_start (GTK_BOX (box2), button, FALSE, FALSE, 0);
2540 pixmapwid = new_pixmap ("test.xpm", window->window, NULL);
2542 label = gtk_label_new ("Pixmap\ntest");
2543 box3 = gtk_hbox_new (FALSE, 0);
2544 gtk_container_set_border_width (GTK_CONTAINER (box3), 2);
2545 gtk_container_add (GTK_CONTAINER (box3), pixmapwid);
2546 gtk_container_add (GTK_CONTAINER (box3), label);
2547 gtk_container_add (GTK_CONTAINER (button), box3);
2549 gtk_widget_set_sensitive (button, FALSE);
2551 separator = gtk_hseparator_new ();
2552 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
2554 box2 = gtk_vbox_new (FALSE, 10);
2555 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
2556 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
2558 button = gtk_button_new_with_label ("close");
2559 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
2560 GTK_SIGNAL_FUNC(gtk_widget_destroy),
2561 GTK_OBJECT (window));
2562 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
2563 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
2564 gtk_widget_grab_default (button);
2567 if (!GTK_WIDGET_VISIBLE (window))
2568 gtk_widget_show_all (window);
2570 gtk_widget_destroy (window);
2574 tips_query_widget_entered (GtkTipsQuery *tips_query,
2576 const gchar *tip_text,
2577 const gchar *tip_private,
2580 if (GTK_TOGGLE_BUTTON (toggle)->active)
2582 gtk_label_set_text (GTK_LABEL (tips_query), tip_text ? "There is a Tip!" : "There is no Tip!");
2583 /* don't let GtkTipsQuery reset its label */
2584 gtk_signal_emit_stop_by_name (GTK_OBJECT (tips_query), "widget_entered");
2589 tips_query_widget_selected (GtkWidget *tips_query,
2591 const gchar *tip_text,
2592 const gchar *tip_private,
2593 GdkEventButton *event,
2597 g_print ("Help \"%s\" requested for <%s>\n",
2598 tip_private ? tip_private : "None",
2599 gtk_type_name (GTK_OBJECT_TYPE (widget)));
2604 create_tooltips (void)
2606 static GtkWidget *window = NULL;
2613 GtkWidget *tips_query;
2614 GtkWidget *separator;
2615 GtkTooltips *tooltips;
2620 gtk_widget_new (gtk_window_get_type (),
2621 "GtkWindow::type", GTK_WINDOW_TOPLEVEL,
2622 "GtkContainer::border_width", 0,
2623 "GtkWindow::title", "Tooltips",
2624 "GtkWindow::allow_shrink", TRUE,
2625 "GtkWindow::allow_grow", FALSE,
2626 "GtkWindow::auto_shrink", TRUE,
2627 "GtkWidget::width", 200,
2630 gtk_signal_connect (GTK_OBJECT (window), "destroy",
2631 GTK_SIGNAL_FUNC (destroy_tooltips),
2634 tooltips=gtk_tooltips_new();
2635 gtk_object_set_data (GTK_OBJECT (window), "tooltips", tooltips);
2637 box1 = gtk_vbox_new (FALSE, 0);
2638 gtk_container_add (GTK_CONTAINER (window), box1);
2640 box2 = gtk_vbox_new (FALSE, 10);
2641 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
2642 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
2644 button = gtk_toggle_button_new_with_label ("button1");
2645 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
2647 gtk_tooltips_set_tip (tooltips,button,"This is button 1", "ContextHelp/buttons/1");
2649 button = gtk_toggle_button_new_with_label ("button2");
2650 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
2652 gtk_tooltips_set_tip (tooltips,
2654 "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.",
2655 "ContextHelp/buttons/2_long");
2657 toggle = gtk_toggle_button_new_with_label ("Override TipsQuery Label");
2658 gtk_box_pack_start (GTK_BOX (box2), toggle, TRUE, TRUE, 0);
2660 gtk_tooltips_set_tip (tooltips, toggle, "Toggle TipsQuery view.", "Hi msw! ;)");
2663 gtk_widget_new (gtk_vbox_get_type (),
2664 "homogeneous", FALSE,
2670 tips_query = gtk_tips_query_new ();
2673 gtk_widget_new (gtk_button_get_type (),
2678 g_object_connect (G_OBJECT (button),
2679 "swapped_signal::clicked", gtk_tips_query_start_query, tips_query,
2681 gtk_box_set_child_packing (GTK_BOX (box3), button, FALSE, FALSE, 0, GTK_PACK_START);
2682 gtk_tooltips_set_tip (tooltips,
2684 "Start the Tooltips Inspector",
2685 "ContextHelp/buttons/?");
2688 gtk_widget_set (g_object_connect (tips_query,
2689 "signal::widget_entered", tips_query_widget_entered, toggle,
2690 "signal::widget_selected", tips_query_widget_selected, NULL,
2697 frame = gtk_widget_new (gtk_frame_get_type (),
2698 "label", "ToolTips Inspector",
2699 "label_xalign", (double) 0.5,
2705 gtk_box_set_child_packing (GTK_BOX (box2), frame, TRUE, TRUE, 10, GTK_PACK_START);
2707 separator = gtk_hseparator_new ();
2708 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
2710 box2 = gtk_vbox_new (FALSE, 10);
2711 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
2712 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
2714 button = gtk_button_new_with_label ("close");
2715 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
2716 GTK_SIGNAL_FUNC(gtk_widget_destroy),
2717 GTK_OBJECT (window));
2718 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
2719 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
2720 gtk_widget_grab_default (button);
2722 gtk_tooltips_set_tip (tooltips, button, "Push this button to close window", "ContextHelp/buttons/Close");
2725 if (!GTK_WIDGET_VISIBLE (window))
2726 gtk_widget_show_all (window);
2728 gtk_widget_destroy (window);
2736 pack_image (GtkWidget *box,
2740 gtk_box_pack_start (GTK_BOX (box),
2741 gtk_label_new (text),
2744 gtk_box_pack_start (GTK_BOX (box),
2752 static GtkWidget *window = NULL;
2760 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
2762 gtk_signal_connect (GTK_OBJECT (window), "destroy",
2763 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
2766 vbox = gtk_vbox_new (FALSE, 5);
2768 gtk_container_add (GTK_CONTAINER (window), vbox);
2770 pack_image (vbox, "Stock Warning Dialog",
2771 gtk_image_new_from_stock (GTK_STOCK_DIALOG_WARNING,
2772 GTK_ICON_SIZE_DIALOG));
2774 pixmap = gdk_pixmap_colormap_create_from_xpm_d (NULL,
2775 gtk_widget_get_colormap (window),
2780 pack_image (vbox, "Pixmap",
2781 gtk_image_new_from_pixmap (pixmap, mask));
2784 if (!GTK_WIDGET_VISIBLE (window))
2785 gtk_widget_show_all (window);
2787 gtk_widget_destroy (window);
2795 create_menu (gint depth, gint length, gboolean tearoff)
2798 GtkWidget *menuitem;
2807 menu = gtk_menu_new ();
2812 menuitem = gtk_tearoff_menu_item_new ();
2813 gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem);
2814 gtk_widget_show (menuitem);
2817 image = gtk_image_new_from_stock (GTK_STOCK_OPEN,
2818 GTK_ICON_SIZE_MENU);
2819 gtk_widget_show (image);
2820 menuitem = gtk_image_menu_item_new (image, "Image item");
2821 gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem);
2822 gtk_widget_show (menuitem);
2824 for (i = 0, j = 1; i < length; i++, j++)
2826 sprintf (buf, "item %2d - %d", depth, j);
2828 menuitem = gtk_radio_menu_item_new_with_label (group, buf);
2829 group = gtk_radio_menu_item_group (GTK_RADIO_MENU_ITEM (menuitem));
2832 gtk_check_menu_item_set_show_toggle (GTK_CHECK_MENU_ITEM (menuitem), TRUE);
2834 gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem);
2835 gtk_widget_show (menuitem);
2837 gtk_widget_set_sensitive (menuitem, FALSE);
2840 gtk_check_menu_item_set_inconsistent (GTK_CHECK_MENU_ITEM (menuitem),
2844 gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem), create_menu (depth - 1, 5, TRUE));
2853 static GtkWidget *window = NULL;
2857 GtkWidget *optionmenu;
2858 GtkWidget *separator;
2864 GtkWidget *menuitem;
2865 GtkAccelGroup *accel_group;
2868 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
2870 gtk_signal_connect (GTK_OBJECT (window), "destroy",
2871 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
2873 gtk_signal_connect (GTK_OBJECT (window), "delete-event",
2874 GTK_SIGNAL_FUNC (gtk_true),
2877 accel_group = gtk_accel_group_new ();
2878 gtk_accel_group_attach (accel_group, GTK_OBJECT (window));
2880 gtk_window_set_title (GTK_WINDOW (window), "menus");
2881 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
2884 box1 = gtk_vbox_new (FALSE, 0);
2885 gtk_container_add (GTK_CONTAINER (window), box1);
2886 gtk_widget_show (box1);
2888 menubar = gtk_menu_bar_new ();
2889 gtk_box_pack_start (GTK_BOX (box1), menubar, FALSE, TRUE, 0);
2890 gtk_widget_show (menubar);
2892 menu = create_menu (2, 50, TRUE);
2894 menuitem = gtk_menu_item_new_with_label ("test\nline2");
2895 gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem), menu);
2896 gtk_menu_bar_append (GTK_MENU_BAR (menubar), menuitem);
2897 gtk_widget_show (menuitem);
2899 menuitem = gtk_menu_item_new_with_label ("foo");
2900 gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem), create_menu (3, 5, TRUE));
2901 gtk_menu_bar_append (GTK_MENU_BAR (menubar), menuitem);
2902 gtk_widget_show (menuitem);
2904 image = gtk_image_new_from_stock (GTK_STOCK_HELP,
2905 GTK_ICON_SIZE_MENU);
2906 gtk_widget_show (image);
2907 menuitem = gtk_image_menu_item_new (image, "Help");
2908 gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem), create_menu (4, 5, TRUE));
2909 gtk_menu_item_right_justify (GTK_MENU_ITEM (menuitem));
2910 gtk_menu_bar_append (GTK_MENU_BAR (menubar), menuitem);
2911 gtk_widget_show (menuitem);
2913 box2 = gtk_vbox_new (FALSE, 10);
2914 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
2915 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
2916 gtk_widget_show (box2);
2918 menu = create_menu (1, 5, FALSE);
2919 gtk_menu_set_accel_group (GTK_MENU (menu), accel_group);
2921 menuitem = gtk_image_menu_item_new_from_stock (GTK_STOCK_NEW, accel_group);
2922 gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem);
2923 gtk_widget_show (menuitem);
2925 menuitem = gtk_check_menu_item_new_with_label ("Accelerate Me");
2926 gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem);
2927 gtk_widget_show (menuitem);
2928 gtk_widget_add_accelerator (menuitem,
2933 GTK_ACCEL_VISIBLE | GTK_ACCEL_SIGNAL_VISIBLE);
2934 menuitem = gtk_check_menu_item_new_with_label ("Accelerator Locked");
2935 gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem);
2936 gtk_widget_show (menuitem);
2937 gtk_widget_add_accelerator (menuitem,
2942 GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
2943 menuitem = gtk_check_menu_item_new_with_label ("Accelerators Frozen");
2944 gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem);
2945 gtk_widget_show (menuitem);
2946 gtk_widget_add_accelerator (menuitem,
2952 gtk_widget_add_accelerator (menuitem,
2958 gtk_widget_lock_accelerators (menuitem);
2960 optionmenu = gtk_option_menu_new ();
2961 gtk_option_menu_set_menu (GTK_OPTION_MENU (optionmenu), menu);
2962 gtk_option_menu_set_history (GTK_OPTION_MENU (optionmenu), 3);
2963 gtk_box_pack_start (GTK_BOX (box2), optionmenu, TRUE, TRUE, 0);
2964 gtk_widget_show (optionmenu);
2966 separator = gtk_hseparator_new ();
2967 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
2968 gtk_widget_show (separator);
2970 box2 = gtk_vbox_new (FALSE, 10);
2971 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
2972 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
2973 gtk_widget_show (box2);
2975 button = gtk_button_new_with_label ("close");
2976 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
2977 GTK_SIGNAL_FUNC(gtk_widget_destroy),
2978 GTK_OBJECT (window));
2979 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
2980 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
2981 gtk_widget_grab_default (button);
2982 gtk_widget_show (button);
2985 if (!GTK_WIDGET_VISIBLE (window))
2986 gtk_widget_show (window);
2988 gtk_widget_destroy (window);
2992 gtk_ifactory_cb (gpointer callback_data,
2993 guint callback_action,
2996 g_message ("ItemFactory: activated \"%s\"", gtk_item_factory_path_from_widget (widget));
2999 /* This file was automatically generated by the make-inline-pixbuf program.
3000 * It contains inline RGB image data.
3002 static const guchar apple[] =
3004 /* File magic (1197763408) */
3005 0x47, 0x64, 0x6b, 0x50,
3006 /* Format of following stuff (0) */
3007 0x00, 0x00, 0x00, 0x00,
3008 /* Rowstride (64) */
3009 0x00, 0x00, 0x00, 0x40,
3011 0x00, 0x00, 0x00, 0x10,
3013 0x00, 0x00, 0x00, 0x10,
3014 /* Has an alpha channel (TRUE) */
3016 /* Colorspace (0 == RGB, no other options implemented) (0) */
3017 0x00, 0x00, 0x00, 0x00,
3018 /* Number of channels (4) */
3019 0x00, 0x00, 0x00, 0x04,
3020 /* Bits per sample (8) */
3021 0x00, 0x00, 0x00, 0x08,
3023 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
3024 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
3025 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
3026 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
3027 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
3028 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
3029 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
3030 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x16, 0x14, 0x0f, 0x04,
3031 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
3032 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
3033 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
3034 0x00, 0x00, 0x00, 0x00, 0x61, 0x6d, 0x5b, 0x2b, 0x6e, 0x7c, 0x61, 0xd9,
3035 0x71, 0x80, 0x63, 0xd7, 0x5f, 0x6b, 0x5b, 0x35, 0x00, 0x00, 0x00, 0x00,
3036 0x3a, 0x35, 0x28, 0x8f, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00, 0x00,
3037 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
3038 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
3039 0x00, 0x00, 0x00, 0x00, 0x60, 0x6c, 0x5c, 0x07, 0x6d, 0x7b, 0x61, 0xd8,
3040 0x75, 0x84, 0x65, 0xf6, 0x76, 0x86, 0x66, 0xf7, 0x6a, 0x77, 0x60, 0xec,
3041 0x5e, 0x6a, 0x58, 0x47, 0x1c, 0x1a, 0x13, 0xa2, 0x4b, 0x47, 0x30, 0x07,
3042 0x55, 0x4e, 0x33, 0x21, 0x48, 0x3e, 0x2a, 0x08, 0xd0, 0xb8, 0x84, 0x00,
3043 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
3044 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x69, 0x76, 0x5f, 0x74,
3045 0x75, 0x84, 0x65, 0xf3, 0x67, 0x75, 0x5e, 0xc4, 0x69, 0x62, 0x55, 0x75,
3046 0x94, 0x50, 0x50, 0x69, 0x75, 0x5c, 0x52, 0xb2, 0x69, 0x38, 0x34, 0xa2,
3047 0xa7, 0x5b, 0x53, 0xea, 0xa3, 0x52, 0x4f, 0xff, 0x90, 0x47, 0x42, 0xfa,
3048 0x76, 0x44, 0x36, 0xb9, 0x59, 0x38, 0x29, 0x3c, 0x00, 0x00, 0x00, 0x00,
3049 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5f, 0x6b, 0x5a, 0x09,
3050 0x69, 0x76, 0x5e, 0xb0, 0x5f, 0x6b, 0x59, 0x57, 0x9a, 0x4b, 0x4d, 0x5b,
3051 0xb8, 0x5f, 0x63, 0xfa, 0xcc, 0x7d, 0x7e, 0xff, 0xc5, 0x69, 0x68, 0xff,
3052 0xc7, 0x6b, 0x67, 0xff, 0xc5, 0x6f, 0x67, 0xff, 0xba, 0x5e, 0x5a, 0xff,
3053 0xb1, 0x4d, 0x4d, 0xff, 0x92, 0x4b, 0x42, 0xff, 0x6a, 0x3e, 0x30, 0xfc,
3054 0x5c, 0x3b, 0x27, 0x6d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
3055 0x5d, 0x69, 0x57, 0x09, 0x5d, 0x69, 0x57, 0x09, 0x92, 0x47, 0x46, 0x1e,
3056 0xba, 0x65, 0x64, 0xf4, 0xe7, 0xbf, 0xc0, 0xff, 0xdf, 0xa5, 0xa3, 0xff,
3057 0xd4, 0x84, 0x81, 0xff, 0xd1, 0x7c, 0x76, 0xff, 0xc9, 0x78, 0x6d, 0xff,
3058 0xbb, 0x6a, 0x5d, 0xff, 0xb3, 0x5a, 0x52, 0xff, 0x9f, 0x4b, 0x47, 0xff,
3059 0x78, 0x45, 0x35, 0xff, 0x5f, 0x3c, 0x28, 0xfa, 0x53, 0x5a, 0x38, 0x24,
3060 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
3061 0xa1, 0x54, 0x4d, 0x8c, 0xcf, 0x8e, 0x89, 0xff, 0xe3, 0xb1, 0xae, 0xff,
3062 0xd8, 0x94, 0x8e, 0xff, 0xd3, 0x8a, 0x82, 0xff, 0xcf, 0x80, 0x76, 0xff,
3063 0xc4, 0x75, 0x67, 0xff, 0xb7, 0x6c, 0x5c, 0xff, 0xab, 0x5e, 0x51, 0xff,
3064 0x9c, 0x4c, 0x46, 0xff, 0x7e, 0x4a, 0x3a, 0xff, 0x5c, 0x3c, 0x26, 0xff,
3065 0x58, 0x3d, 0x28, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
3066 0x00, 0x00, 0x00, 0x00, 0xa2, 0x59, 0x4f, 0xc3, 0xcd, 0x8e, 0x88, 0xff,
3067 0xd3, 0x93, 0x8c, 0xff, 0xd0, 0x8c, 0x83, 0xff, 0xcc, 0x84, 0x79, 0xff,
3068 0xc7, 0x7c, 0x6e, 0xff, 0xbc, 0x73, 0x61, 0xff, 0xb1, 0x6b, 0x59, 0xff,
3069 0xa3, 0x5f, 0x4f, 0xff, 0x93, 0x50, 0x44, 0xff, 0x78, 0x48, 0x35, 0xff,
3070 0x59, 0x3b, 0x25, 0xff, 0x4f, 0x3d, 0x28, 0x4f, 0x00, 0x00, 0x00, 0x00,
3071 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9b, 0x5b, 0x4d, 0xbc,
3072 0xbd, 0x7e, 0x72, 0xff, 0xc6, 0x86, 0x7a, 0xff, 0xc5, 0x7f, 0x72, 0xff,
3073 0xc2, 0x7b, 0x6c, 0xff, 0xbf, 0x77, 0x63, 0xff, 0xb7, 0x72, 0x5b, 0xff,
3074 0xa9, 0x6b, 0x53, 0xff, 0x9a, 0x60, 0x4b, 0xff, 0x8b, 0x56, 0x41, 0xff,
3075 0x6a, 0x44, 0x2e, 0xff, 0x53, 0x38, 0x21, 0xfd, 0x42, 0x4b, 0x2e, 0x1a,
3076 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
3077 0x8e, 0x57, 0x48, 0x6e, 0xa6, 0x6b, 0x5a, 0xff, 0xb3, 0x74, 0x62, 0xff,
3078 0xb8, 0x75, 0x61, 0xff, 0xba, 0x76, 0x61, 0xff, 0xb7, 0x74, 0x5c, 0xff,
3079 0xae, 0x6e, 0x54, 0xff, 0x9f, 0x67, 0x4c, 0xff, 0x90, 0x5d, 0x43, 0xff,
3080 0x79, 0x4d, 0x38, 0xff, 0x5c, 0x3d, 0x25, 0xff, 0x50, 0x39, 0x23, 0xb8,
3081 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
3082 0x00, 0x00, 0x00, 0x00, 0x78, 0x52, 0x43, 0x07, 0x92, 0x5c, 0x47, 0xdc,
3083 0x9e, 0x64, 0x4e, 0xff, 0xa8, 0x6b, 0x52, 0xff, 0xaa, 0x6d, 0x53, 0xff,
3084 0xa7, 0x6d, 0x50, 0xff, 0x9c, 0x67, 0x4a, 0xff, 0x8e, 0x5d, 0x41, 0xff,
3085 0x7d, 0x54, 0x3a, 0xff, 0x6a, 0x4b, 0x32, 0xff, 0x51, 0x39, 0x23, 0xff,
3086 0x28, 0x20, 0x12, 0x77, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x01,
3087 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
3088 0x6f, 0x4a, 0x37, 0x2a, 0x81, 0x54, 0x3d, 0xec, 0x8b, 0x5a, 0x41, 0xff,
3089 0x8b, 0x5a, 0x3f, 0xff, 0x85, 0x56, 0x3c, 0xff, 0x7d, 0x52, 0x38, 0xff,
3090 0x77, 0x51, 0x33, 0xff, 0x6f, 0x4e, 0x34, 0xff, 0x5f, 0x45, 0x2c, 0xff,
3091 0x2e, 0x21, 0x14, 0xff, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x92,
3092 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00,
3093 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x11, 0x0b, 0x08, 0xb4,
3094 0x50, 0x37, 0x25, 0xfe, 0x6d, 0x49, 0x2f, 0xff, 0x52, 0x37, 0x22, 0xff,
3095 0x50, 0x37, 0x21, 0xff, 0x66, 0x45, 0x2b, 0xff, 0x60, 0x46, 0x2c, 0xff,
3096 0x2d, 0x22, 0x16, 0xff, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0xd2,
3097 0x00, 0x00, 0x00, 0x63, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00,
3098 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,
3099 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x64, 0x09, 0x0a, 0x07, 0xa4,
3100 0x00, 0x00, 0x00, 0xbd, 0x00, 0x00, 0x00, 0xbe, 0x00, 0x00, 0x00, 0xc4,
3101 0x00, 0x00, 0x00, 0xb8, 0x00, 0x00, 0x00, 0x9d, 0x00, 0x00, 0x00, 0x6c,
3102 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00,
3103 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
3104 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
3105 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x0d,
3106 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x06,
3107 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
3108 0x00, 0x00, 0x00, 0x00
3113 dump_accels (gpointer callback_data,
3114 guint callback_action,
3117 gtk_item_factory_dump_items (NULL, FALSE, gtk_item_factory_print_func, stdout);
3120 static GtkItemFactoryEntry menu_items[] =
3122 { "/_File", NULL, 0, 0, "<Branch>" },
3123 { "/File/tearoff1", NULL, gtk_ifactory_cb, 0, "<Tearoff>" },
3124 { "/File/_New", NULL, gtk_ifactory_cb, 0, "<StockItem>", GTK_STOCK_NEW },
3125 { "/File/_Open", NULL, gtk_ifactory_cb, 0, "<StockItem>", GTK_STOCK_OPEN },
3126 { "/File/_Save", NULL, gtk_ifactory_cb, 0, "<StockItem>", GTK_STOCK_SAVE },
3127 { "/File/Save _As...", "<control>A", gtk_ifactory_cb, 0, "<StockItem>", GTK_STOCK_SAVE },
3128 { "/File/_Dump \"_Accels\"", NULL, dump_accels, 0 },
3129 { "/File/\\/Test__Escaping/And\\/\n\tWei\\\\rdly",
3130 NULL, gtk_ifactory_cb, 0 },
3131 { "/File/sep1", NULL, gtk_ifactory_cb, 0, "<Separator>" },
3132 { "/File/_Quit", NULL, gtk_ifactory_cb, 0, "<StockItem>", GTK_STOCK_QUIT },
3134 { "/_Preferences", NULL, 0, 0, "<Branch>" },
3135 { "/_Preferences/_Color", NULL, 0, 0, "<Branch>" },
3136 { "/_Preferences/Color/_Red", NULL, gtk_ifactory_cb, 0, "<RadioItem>" },
3137 { "/_Preferences/Color/_Green", NULL, gtk_ifactory_cb, 0, "/Preferences/Color/Red" },
3138 { "/_Preferences/Color/_Blue", NULL, gtk_ifactory_cb, 0, "/Preferences/Color/Red" },
3139 { "/_Preferences/_Shape", NULL, 0, 0, "<Branch>" },
3140 { "/_Preferences/Shape/_Square", NULL, gtk_ifactory_cb, 0, "<RadioItem>" },
3141 { "/_Preferences/Shape/_Rectangle", NULL, gtk_ifactory_cb, 0, "/Preferences/Shape/Square" },
3142 { "/_Preferences/Shape/_Oval", NULL, gtk_ifactory_cb, 0, "/Preferences/Shape/Rectangle" },
3143 { "/_Preferences/Shape/_Rectangle", NULL, gtk_ifactory_cb, 0, "/Preferences/Shape/Square" },
3144 { "/_Preferences/Shape/_Oval", NULL, gtk_ifactory_cb, 0, "/Preferences/Shape/Rectangle" },
3145 { "/_Preferences/Shape/_Image", NULL, gtk_ifactory_cb, 0, "<ImageItem>", (gchar**) apple, sizeof(apple) },
3147 /* For testing deletion of menus */
3148 { "/_Preferences/Should_NotAppear", NULL, 0, 0, "<Branch>" },
3149 { "/Preferences/ShouldNotAppear/SubItem1", NULL, gtk_ifactory_cb, 0 },
3150 { "/Preferences/ShouldNotAppear/SubItem2", NULL, gtk_ifactory_cb, 0 },
3152 { "/_Help", NULL, 0, 0, "<LastBranch>" },
3153 { "/Help/_Help", NULL, gtk_ifactory_cb, 0, "<StockItem>", GTK_STOCK_HELP},
3154 { "/Help/_About", NULL, gtk_ifactory_cb, 0 },
3158 static int nmenu_items = sizeof (menu_items) / sizeof (menu_items[0]);
3161 create_item_factory (void)
3163 static GtkWidget *window = NULL;
3169 GtkWidget *separator;
3172 GtkAccelGroup *accel_group;
3173 GtkItemFactory *item_factory;
3175 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
3177 gtk_signal_connect (GTK_OBJECT (window), "destroy",
3178 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
3180 gtk_signal_connect (GTK_OBJECT (window), "delete-event",
3181 GTK_SIGNAL_FUNC (gtk_true),
3184 accel_group = gtk_accel_group_new ();
3185 item_factory = gtk_item_factory_new (GTK_TYPE_MENU_BAR, "<main>", accel_group);
3186 gtk_object_set_data_full (GTK_OBJECT (window),
3189 (GtkDestroyNotify) gtk_object_unref);
3190 gtk_accel_group_attach (accel_group, GTK_OBJECT (window));
3191 gtk_window_set_title (GTK_WINDOW (window), "Item Factory");
3192 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
3193 gtk_item_factory_create_items (item_factory, nmenu_items, menu_items, NULL);
3195 /* preselect /Preferences/Shape/Oval over the other radios
3197 gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (gtk_item_factory_get_item (item_factory,
3198 "/Preferences/Shape/Oval")),
3201 box1 = gtk_vbox_new (FALSE, 0);
3202 gtk_container_add (GTK_CONTAINER (window), box1);
3204 gtk_box_pack_start (GTK_BOX (box1),
3205 gtk_item_factory_get_widget (item_factory, "<main>"),
3208 label = gtk_label_new ("Type\n<alt>\nto start");
3209 gtk_widget_set_usize (label, 200, 200);
3210 gtk_misc_set_alignment (GTK_MISC (label), 0.5, 0.5);
3211 gtk_box_pack_start (GTK_BOX (box1), label, TRUE, TRUE, 0);
3214 separator = gtk_hseparator_new ();
3215 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
3218 box2 = gtk_vbox_new (FALSE, 10);
3219 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
3220 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
3222 button = gtk_button_new_with_label ("close");
3223 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
3224 GTK_SIGNAL_FUNC(gtk_widget_destroy),
3225 GTK_OBJECT (window));
3226 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
3227 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
3228 gtk_widget_grab_default (button);
3230 gtk_item_factory_delete_item (item_factory, "/Preferences/ShouldNotAppear");
3232 gtk_widget_show_all (window);
3235 gtk_widget_destroy (window);
3243 cmw_destroy_cb(GtkWidget *widget)
3245 /* This is needed to get out of gtk_main */
3252 cmw_color (GtkWidget *widget, GtkWidget *parent)
3256 csd=gtk_color_selection_dialog_new ("This is a modal color selection dialog");
3259 gtk_window_set_modal (GTK_WINDOW(csd),TRUE);
3261 /* And mark it as a transient dialog */
3262 gtk_window_set_transient_for (GTK_WINDOW (csd), GTK_WINDOW (parent));
3264 gtk_signal_connect (GTK_OBJECT(csd), "destroy",
3265 GTK_SIGNAL_FUNC(cmw_destroy_cb),NULL);
3267 gtk_signal_connect_object (GTK_OBJECT(GTK_COLOR_SELECTION_DIALOG(csd)->ok_button),
3268 "clicked", GTK_SIGNAL_FUNC(gtk_widget_destroy),
3270 gtk_signal_connect_object (GTK_OBJECT(GTK_COLOR_SELECTION_DIALOG(csd)->cancel_button),
3271 "clicked", GTK_SIGNAL_FUNC(gtk_widget_destroy),
3274 /* wait until destroy calls gtk_main_quit */
3275 gtk_widget_show (csd);
3280 cmw_file (GtkWidget *widget, GtkWidget *parent)
3284 fs = gtk_file_selection_new("This is a modal file selection dialog");
3287 gtk_window_set_modal (GTK_WINDOW(fs),TRUE);
3289 /* And mark it as a transient dialog */
3290 gtk_window_set_transient_for (GTK_WINDOW (fs), GTK_WINDOW (parent));
3292 gtk_signal_connect (GTK_OBJECT(fs), "destroy",
3293 GTK_SIGNAL_FUNC(cmw_destroy_cb),NULL);
3295 gtk_signal_connect_object (GTK_OBJECT(GTK_FILE_SELECTION(fs)->ok_button),
3296 "clicked",GTK_SIGNAL_FUNC(gtk_widget_destroy),
3298 gtk_signal_connect_object (GTK_OBJECT(GTK_FILE_SELECTION(fs)->cancel_button),
3299 "clicked",GTK_SIGNAL_FUNC(gtk_widget_destroy),
3302 /* wait until destroy calls gtk_main_quit */
3303 gtk_widget_show (fs);
3310 create_modal_window (void)
3312 GtkWidget *window = NULL;
3313 GtkWidget *box1,*box2;
3315 GtkWidget *btnColor,*btnFile,*btnClose;
3317 /* Create modal window (Here you can use any window descendent )*/
3318 window=gtk_window_new (GTK_WINDOW_TOPLEVEL);
3319 gtk_window_set_title (GTK_WINDOW(window),"This window is modal");
3321 /* Set window as modal */
3322 gtk_window_set_modal (GTK_WINDOW(window),TRUE);
3324 /* Create widgets */
3325 box1 = gtk_vbox_new (FALSE,5);
3326 frame1 = gtk_frame_new ("Standard dialogs in modal form");
3327 box2 = gtk_vbox_new (TRUE,5);
3328 btnColor = gtk_button_new_with_label ("Color");
3329 btnFile = gtk_button_new_with_label ("File Selection");
3330 btnClose = gtk_button_new_with_label ("Close");
3333 gtk_container_set_border_width (GTK_CONTAINER(box1),3);
3334 gtk_container_set_border_width (GTK_CONTAINER(box2),3);
3337 gtk_container_add (GTK_CONTAINER (window), box1);
3338 gtk_box_pack_start (GTK_BOX (box1), frame1, TRUE, TRUE, 4);
3339 gtk_container_add (GTK_CONTAINER (frame1), box2);
3340 gtk_box_pack_start (GTK_BOX (box2), btnColor, FALSE, FALSE, 4);
3341 gtk_box_pack_start (GTK_BOX (box2), btnFile, FALSE, FALSE, 4);
3342 gtk_box_pack_start (GTK_BOX (box1), gtk_hseparator_new (), FALSE, FALSE, 4);
3343 gtk_box_pack_start (GTK_BOX (box1), btnClose, FALSE, FALSE, 4);
3345 /* connect signals */
3346 gtk_signal_connect_object (GTK_OBJECT (btnClose), "clicked",
3347 GTK_SIGNAL_FUNC (gtk_widget_destroy),
3348 GTK_OBJECT (window));
3350 gtk_signal_connect (GTK_OBJECT (window), "destroy",
3351 GTK_SIGNAL_FUNC (cmw_destroy_cb),NULL);
3353 gtk_signal_connect (GTK_OBJECT (btnColor), "clicked",
3354 GTK_SIGNAL_FUNC (cmw_color),window);
3355 gtk_signal_connect (GTK_OBJECT (btnFile), "clicked",
3356 GTK_SIGNAL_FUNC (cmw_file),window);
3359 gtk_widget_show_all (window);
3361 /* wait until dialog get destroyed */
3370 make_message_dialog (GtkWidget **dialog,
3371 GtkMessageType type,
3372 GtkButtonsType buttons)
3376 gtk_widget_destroy (*dialog);
3381 *dialog = gtk_message_dialog_new (NULL, 0, type, buttons,
3382 "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.)");
3384 gtk_signal_connect_object (GTK_OBJECT (*dialog),
3386 GTK_SIGNAL_FUNC (gtk_widget_destroy),
3387 GTK_OBJECT (*dialog));
3389 gtk_signal_connect (GTK_OBJECT (*dialog),
3391 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
3394 gtk_widget_show (*dialog);
3398 create_message_dialog (void)
3400 static GtkWidget *info = NULL;
3401 static GtkWidget *warning = NULL;
3402 static GtkWidget *error = NULL;
3403 static GtkWidget *question = NULL;
3405 make_message_dialog (&info, GTK_MESSAGE_INFO, GTK_BUTTONS_OK);
3406 make_message_dialog (&warning, GTK_MESSAGE_WARNING, GTK_BUTTONS_CLOSE);
3407 make_message_dialog (&error, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK_CANCEL);
3408 make_message_dialog (&question, GTK_MESSAGE_QUESTION, GTK_BUTTONS_YES_NO);
3415 static GtkWidget *sw_parent = NULL;
3416 static GtkWidget *sw_float_parent;
3417 static guint sw_destroyed_handler = 0;
3420 scrolled_windows_delete_cb (GtkWidget *widget, GdkEventAny *event, GtkWidget *scrollwin)
3422 gtk_widget_reparent (scrollwin, sw_parent);
3424 gtk_signal_disconnect (GTK_OBJECT (sw_parent), sw_destroyed_handler);
3425 sw_float_parent = NULL;
3427 sw_destroyed_handler = 0;
3433 scrolled_windows_destroy_cb (GtkWidget *widget, GtkWidget *scrollwin)
3435 gtk_widget_destroy (sw_float_parent);
3437 sw_float_parent = NULL;
3439 sw_destroyed_handler = 0;
3443 scrolled_windows_remove (GtkWidget *widget, GtkWidget *scrollwin)
3447 gtk_widget_reparent (scrollwin, sw_parent);
3448 gtk_widget_destroy (sw_float_parent);
3450 gtk_signal_disconnect (GTK_OBJECT (sw_parent), sw_destroyed_handler);
3451 sw_float_parent = NULL;
3453 sw_destroyed_handler = 0;
3457 sw_parent = scrollwin->parent;
3458 sw_float_parent = gtk_window_new (GTK_WINDOW_TOPLEVEL);
3459 gtk_window_set_default_size (GTK_WINDOW (sw_float_parent), 200, 200);
3461 gtk_widget_reparent (scrollwin, sw_float_parent);
3462 gtk_widget_show (sw_float_parent);
3464 sw_destroyed_handler =
3465 gtk_signal_connect (GTK_OBJECT (sw_parent), "destroy",
3466 GTK_SIGNAL_FUNC (scrolled_windows_destroy_cb), scrollwin);
3467 gtk_signal_connect (GTK_OBJECT (sw_float_parent), "delete_event",
3468 GTK_SIGNAL_FUNC (scrolled_windows_delete_cb), scrollwin);
3473 create_scrolled_windows (void)
3475 static GtkWidget *window;
3476 GtkWidget *scrolled_window;
3484 window = gtk_dialog_new ();
3486 gtk_signal_connect (GTK_OBJECT (window), "destroy",
3487 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
3490 gtk_window_set_title (GTK_WINDOW (window), "dialog");
3491 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
3494 scrolled_window = gtk_scrolled_window_new (NULL, NULL);
3495 gtk_container_set_border_width (GTK_CONTAINER (scrolled_window), 10);
3496 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
3497 GTK_POLICY_AUTOMATIC,
3498 GTK_POLICY_AUTOMATIC);
3499 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox),
3500 scrolled_window, TRUE, TRUE, 0);
3501 gtk_widget_show (scrolled_window);
3503 table = gtk_table_new (20, 20, FALSE);
3504 gtk_table_set_row_spacings (GTK_TABLE (table), 10);
3505 gtk_table_set_col_spacings (GTK_TABLE (table), 10);
3506 gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scrolled_window), table);
3507 gtk_container_set_focus_hadjustment (GTK_CONTAINER (table),
3508 gtk_scrolled_window_get_hadjustment (GTK_SCROLLED_WINDOW (scrolled_window)));
3509 gtk_container_set_focus_vadjustment (GTK_CONTAINER (table),
3510 gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (scrolled_window)));
3511 gtk_widget_show (table);
3513 for (i = 0; i < 20; i++)
3514 for (j = 0; j < 20; j++)
3516 sprintf (buffer, "button (%d,%d)\n", i, j);
3517 button = gtk_toggle_button_new_with_label (buffer);
3518 gtk_table_attach_defaults (GTK_TABLE (table), button,
3520 gtk_widget_show (button);
3524 button = gtk_button_new_with_label ("Close");
3525 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
3526 GTK_SIGNAL_FUNC(gtk_widget_destroy),
3527 GTK_OBJECT (window));
3528 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
3529 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
3530 button, TRUE, TRUE, 0);
3531 gtk_widget_grab_default (button);
3532 gtk_widget_show (button);
3534 button = gtk_button_new_with_label ("Reparent Out");
3535 gtk_signal_connect (GTK_OBJECT (button), "clicked",
3536 GTK_SIGNAL_FUNC(scrolled_windows_remove),
3538 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
3539 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
3540 button, TRUE, TRUE, 0);
3541 gtk_widget_grab_default (button);
3542 gtk_widget_show (button);
3544 gtk_window_set_default_size (GTK_WINDOW (window), 300, 300);
3547 if (!GTK_WIDGET_VISIBLE (window))
3548 gtk_widget_show (window);
3550 gtk_widget_destroy (window);
3558 entry_toggle_frame (GtkWidget *checkbutton,
3561 gtk_entry_set_has_frame (GTK_ENTRY(entry),
3562 GTK_TOGGLE_BUTTON(checkbutton)->active);
3566 entry_toggle_editable (GtkWidget *checkbutton,
3569 gtk_entry_set_editable(GTK_ENTRY(entry),
3570 GTK_TOGGLE_BUTTON(checkbutton)->active);
3574 entry_toggle_sensitive (GtkWidget *checkbutton,
3577 gtk_widget_set_sensitive (entry, GTK_TOGGLE_BUTTON(checkbutton)->active);
3581 entry_toggle_visibility (GtkWidget *checkbutton,
3584 gtk_entry_set_visibility (GTK_ENTRY (entry),
3585 GTK_TOGGLE_BUTTON (checkbutton)->active);
3589 entry_toggle_invisible_char (GtkWidget *checkbutton,
3592 if (GTK_TOGGLE_BUTTON (checkbutton)->active)
3593 gtk_entry_set_invisible_char (GTK_ENTRY (entry), 0);
3595 gtk_entry_set_invisible_char (GTK_ENTRY (entry), '*');
3600 entry_toggle_activate_default (GtkWidget *checkbutton,
3603 gtk_entry_set_activates_default (GTK_ENTRY (entry),
3604 GTK_TOGGLE_BUTTON (checkbutton)->active);
3610 static GtkWidget *window = NULL;
3613 GtkWidget *editable_check;
3614 GtkWidget *sensitive_check;
3615 GtkWidget *invisible_char_check;
3616 GtkWidget *activate_check;
3617 GtkWidget *entry, *cb;
3619 GtkWidget *separator;
3620 GList *cbitems = NULL;
3624 cbitems = g_list_append(cbitems, "item0");
3625 cbitems = g_list_append(cbitems, "item1 item1");
3626 cbitems = g_list_append(cbitems, "item2 item2 item2");
3627 cbitems = g_list_append(cbitems, "item3 item3 item3 item3");
3628 cbitems = g_list_append(cbitems, "item4 item4 item4 item4 item4");
3629 cbitems = g_list_append(cbitems, "item5 item5 item5 item5 item5 item5");
3630 cbitems = g_list_append(cbitems, "item6 item6 item6 item6 item6");
3631 cbitems = g_list_append(cbitems, "item7 item7 item7 item7");
3632 cbitems = g_list_append(cbitems, "item8 item8 item8");
3633 cbitems = g_list_append(cbitems, "item9 item9");
3635 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
3637 gtk_signal_connect (GTK_OBJECT (window), "destroy",
3638 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
3641 gtk_window_set_title (GTK_WINDOW (window), "entry");
3642 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
3645 box1 = gtk_vbox_new (FALSE, 0);
3646 gtk_container_add (GTK_CONTAINER (window), box1);
3647 gtk_widget_show (box1);
3650 box2 = gtk_vbox_new (FALSE, 10);
3651 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
3652 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
3653 gtk_widget_show (box2);
3655 entry = gtk_entry_new ();
3656 gtk_entry_set_text (GTK_ENTRY (entry), "hello world السلام عليكم");
3657 gtk_editable_select_region (GTK_EDITABLE (entry), 0, 5);
3658 gtk_box_pack_start (GTK_BOX (box2), entry, TRUE, TRUE, 0);
3659 gtk_widget_show (entry);
3661 cb = gtk_combo_new ();
3662 gtk_combo_set_popdown_strings (GTK_COMBO (cb), cbitems);
3663 gtk_entry_set_text (GTK_ENTRY (GTK_COMBO(cb)->entry), "hello world");
3664 gtk_editable_select_region (GTK_EDITABLE (GTK_COMBO(cb)->entry),
3666 gtk_box_pack_start (GTK_BOX (box2), cb, TRUE, TRUE, 0);
3667 gtk_widget_show (cb);
3669 editable_check = gtk_check_button_new_with_label("Editable");
3670 gtk_box_pack_start (GTK_BOX (box2), editable_check, FALSE, TRUE, 0);
3671 gtk_signal_connect (GTK_OBJECT(editable_check), "toggled",
3672 GTK_SIGNAL_FUNC(entry_toggle_editable), entry);
3673 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(editable_check), TRUE);
3674 gtk_widget_show (editable_check);
3676 editable_check = gtk_check_button_new_with_label("Visible");
3677 gtk_box_pack_start (GTK_BOX (box2), editable_check, FALSE, TRUE, 0);
3678 gtk_signal_connect (GTK_OBJECT(editable_check), "toggled",
3679 GTK_SIGNAL_FUNC(entry_toggle_visibility), entry);
3680 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(editable_check), TRUE);
3681 gtk_widget_show (editable_check);
3683 sensitive_check = gtk_check_button_new_with_label("Sensitive");
3684 gtk_box_pack_start (GTK_BOX (box2), sensitive_check, FALSE, TRUE, 0);
3685 gtk_signal_connect (GTK_OBJECT(sensitive_check), "toggled",
3686 GTK_SIGNAL_FUNC(entry_toggle_sensitive), entry);
3687 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(sensitive_check), TRUE);
3688 gtk_widget_show (sensitive_check);
3690 activate_check = gtk_check_button_new_with_label ("Activates default");
3691 gtk_box_pack_start (GTK_BOX (box2), activate_check, FALSE, TRUE, 0);
3692 gtk_signal_connect (GTK_OBJECT (activate_check), "toggled",
3693 GTK_SIGNAL_FUNC (entry_toggle_activate_default), entry);
3694 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (activate_check), FALSE);
3695 gtk_widget_show (activate_check);
3697 invisible_char_check = gtk_check_button_new_with_label("invisible_char = 0");
3698 gtk_box_pack_start (GTK_BOX (box2), invisible_char_check, FALSE, TRUE, 0);
3699 gtk_signal_connect (GTK_OBJECT(invisible_char_check), "toggled",
3700 GTK_SIGNAL_FUNC(entry_toggle_invisible_char), entry);
3701 gtk_widget_show (invisible_char_check);
3703 editable_check = gtk_check_button_new_with_label("Has Frame");
3704 gtk_box_pack_start (GTK_BOX (box2), editable_check, FALSE, TRUE, 0);
3705 gtk_signal_connect (GTK_OBJECT(editable_check), "toggled",
3706 GTK_SIGNAL_FUNC(entry_toggle_frame), entry);
3707 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(editable_check), TRUE);
3708 gtk_widget_show (editable_check);
3710 separator = gtk_hseparator_new ();
3711 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
3712 gtk_widget_show (separator);
3714 box2 = gtk_vbox_new (FALSE, 10);
3715 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
3716 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
3717 gtk_widget_show (box2);
3720 button = gtk_button_new_with_label ("close");
3721 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
3722 GTK_SIGNAL_FUNC(gtk_widget_destroy),
3723 GTK_OBJECT (window));
3724 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
3725 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
3726 gtk_widget_grab_default (button);
3727 gtk_widget_show (button);
3730 if (!GTK_WIDGET_VISIBLE (window))
3731 gtk_widget_show (window);
3733 gtk_widget_destroy (window);
3740 static GtkWidget *spinner1;
3743 toggle_snap (GtkWidget *widget, GtkSpinButton *spin)
3745 gtk_spin_button_set_snap_to_ticks (spin, GTK_TOGGLE_BUTTON (widget)->active);
3749 toggle_numeric (GtkWidget *widget, GtkSpinButton *spin)
3751 gtk_spin_button_set_numeric (spin, GTK_TOGGLE_BUTTON (widget)->active);
3755 change_digits (GtkWidget *widget, GtkSpinButton *spin)
3757 gtk_spin_button_set_digits (GTK_SPIN_BUTTON (spinner1),
3758 gtk_spin_button_get_value_as_int (spin));
3762 get_value (GtkWidget *widget, gpointer data)
3766 GtkSpinButton *spin;
3768 spin = GTK_SPIN_BUTTON (spinner1);
3769 label = GTK_LABEL (gtk_object_get_user_data (GTK_OBJECT (widget)));
3770 if (GPOINTER_TO_INT (data) == 1)
3771 sprintf (buf, "%d", gtk_spin_button_get_value_as_int (spin));
3773 sprintf (buf, "%0.*f", spin->digits,
3774 gtk_spin_button_get_value_as_float (spin));
3775 gtk_label_set_text (label, buf);
3779 get_spin_value (GtkWidget *widget, gpointer data)
3783 GtkSpinButton *spin;
3785 spin = GTK_SPIN_BUTTON (widget);
3786 label = GTK_LABEL (data);
3788 buffer = g_strdup_printf ("%0.*f", spin->digits,
3789 gtk_spin_button_get_value_as_float (spin));
3790 gtk_label_set_text (label, buffer);
3796 spin_button_time_output_func (GtkSpinButton *spin_button)
3798 static gchar buf[6];
3802 hours = spin_button->adjustment->value / 60.0;
3803 minutes = (fabs(floor (hours) - hours) < 1e-5) ? 0.0 : 30;
3804 sprintf (buf, "%02.0f:%02.0f", floor (hours), minutes);
3805 if (strcmp (buf, gtk_entry_get_text (GTK_ENTRY (spin_button))))
3806 gtk_entry_set_text (GTK_ENTRY (spin_button), buf);
3811 spin_button_month_input_func (GtkSpinButton *spin_button,
3815 static gchar *month[12] = { "January", "February", "March", "April",
3816 "May", "June", "July", "August",
3817 "September", "October", "November", "December" };
3819 gboolean found = FALSE;
3821 for (i = 1; i <= 12; i++)
3823 tmp1 = g_strdup (month[i-1]);
3825 tmp2 = g_strdup (gtk_entry_get_text (GTK_ENTRY (spin_button)));
3827 if (strstr (tmp1, tmp2) == tmp1)
3837 return GTK_INPUT_ERROR;
3839 *new_val = (gdouble) i;
3844 spin_button_month_output_func (GtkSpinButton *spin_button)
3847 static gchar *month[12] = { "January", "February", "March", "April",
3848 "May", "June", "July", "August", "September",
3849 "October", "November", "December" };
3851 for (i = 1; i <= 12; i++)
3852 if (fabs (spin_button->adjustment->value - (double)i) < 1e-5)
3854 if (strcmp (month[i-1], gtk_entry_get_text (GTK_ENTRY (spin_button))))
3855 gtk_entry_set_text (GTK_ENTRY (spin_button), month[i-1]);
3861 spin_button_hex_input_func (GtkSpinButton *spin_button,
3868 buf = gtk_entry_get_text (GTK_ENTRY (spin_button));
3869 res = strtol(buf, &err, 16);
3872 return GTK_INPUT_ERROR;
3878 spin_button_hex_output_func (GtkSpinButton *spin_button)
3880 static gchar buf[7];
3883 val = (gint) spin_button->adjustment->value;
3884 if (fabs (val) < 1e-5)
3885 sprintf (buf, "0x00");
3887 sprintf (buf, "0x%.2X", val);
3888 if (strcmp (buf, gtk_entry_get_text (GTK_ENTRY (spin_button))))
3889 gtk_entry_set_text (GTK_ENTRY (spin_button), buf);
3896 static GtkWidget *window = NULL;
3899 GtkWidget *main_vbox;
3902 GtkWidget *spinner2;
3906 GtkWidget *val_label;
3911 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
3913 gtk_signal_connect (GTK_OBJECT (window), "destroy",
3914 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
3917 gtk_window_set_title (GTK_WINDOW (window), "GtkSpinButton");
3919 main_vbox = gtk_vbox_new (FALSE, 5);
3920 gtk_container_set_border_width (GTK_CONTAINER (main_vbox), 10);
3921 gtk_container_add (GTK_CONTAINER (window), main_vbox);
3923 frame = gtk_frame_new ("Not accelerated");
3924 gtk_box_pack_start (GTK_BOX (main_vbox), frame, TRUE, TRUE, 0);
3926 vbox = gtk_vbox_new (FALSE, 0);
3927 gtk_container_set_border_width (GTK_CONTAINER (vbox), 5);
3928 gtk_container_add (GTK_CONTAINER (frame), vbox);
3930 /* Time, month, hex spinners */
3932 hbox = gtk_hbox_new (FALSE, 0);
3933 gtk_box_pack_start (GTK_BOX (vbox), hbox, TRUE, TRUE, 5);
3935 vbox2 = gtk_vbox_new (FALSE, 0);
3936 gtk_box_pack_start (GTK_BOX (hbox), vbox2, TRUE, TRUE, 5);
3938 label = gtk_label_new ("Time :");
3939 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
3940 gtk_box_pack_start (GTK_BOX (vbox2), label, FALSE, TRUE, 0);
3942 adj = (GtkAdjustment *) gtk_adjustment_new (0, 0, 1410, 30, 60, 0);
3943 spinner = gtk_spin_button_new (adj, 0, 0);
3944 gtk_editable_set_editable (GTK_EDITABLE (spinner), FALSE);
3945 gtk_signal_connect (GTK_OBJECT (spinner),
3947 GTK_SIGNAL_FUNC (spin_button_time_output_func),
3949 gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (spinner), TRUE);
3950 gtk_widget_set_usize (spinner, 55, -1);
3951 gtk_box_pack_start (GTK_BOX (vbox2), spinner, FALSE, TRUE, 0);
3953 vbox2 = gtk_vbox_new (FALSE, 0);
3954 gtk_box_pack_start (GTK_BOX (hbox), vbox2, TRUE, TRUE, 5);
3956 label = gtk_label_new ("Month :");
3957 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
3958 gtk_box_pack_start (GTK_BOX (vbox2), label, FALSE, TRUE, 0);
3960 adj = (GtkAdjustment *) gtk_adjustment_new (1.0, 1.0, 12.0, 1.0,
3962 spinner = gtk_spin_button_new (adj, 0, 0);
3963 gtk_spin_button_set_update_policy (GTK_SPIN_BUTTON (spinner),
3964 GTK_UPDATE_IF_VALID);
3965 gtk_signal_connect (GTK_OBJECT (spinner),
3967 GTK_SIGNAL_FUNC (spin_button_month_input_func),
3969 gtk_signal_connect (GTK_OBJECT (spinner),
3971 GTK_SIGNAL_FUNC (spin_button_month_output_func),
3973 gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (spinner), TRUE);
3974 gtk_widget_set_usize (spinner, 85, -1);
3975 gtk_box_pack_start (GTK_BOX (vbox2), spinner, FALSE, TRUE, 0);
3977 vbox2 = gtk_vbox_new (FALSE, 0);
3978 gtk_box_pack_start (GTK_BOX (hbox), vbox2, TRUE, TRUE, 5);
3980 label = gtk_label_new ("Hex :");
3981 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
3982 gtk_box_pack_start (GTK_BOX (vbox2), label, FALSE, TRUE, 0);
3984 adj = (GtkAdjustment *) gtk_adjustment_new (0, 0, 255, 1, 16, 0);
3985 spinner = gtk_spin_button_new (adj, 0, 0);
3986 gtk_editable_set_editable (GTK_EDITABLE (spinner), TRUE);
3987 gtk_signal_connect (GTK_OBJECT (spinner),
3989 GTK_SIGNAL_FUNC (spin_button_hex_input_func),
3991 gtk_signal_connect (GTK_OBJECT (spinner),
3993 GTK_SIGNAL_FUNC (spin_button_hex_output_func),
3995 gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (spinner), TRUE);
3996 gtk_widget_set_usize (spinner, 55, 0);
3997 gtk_box_pack_start (GTK_BOX (vbox2), spinner, FALSE, TRUE, 0);
3999 frame = gtk_frame_new ("Accelerated");
4000 gtk_box_pack_start (GTK_BOX (main_vbox), frame, TRUE, TRUE, 0);
4002 vbox = gtk_vbox_new (FALSE, 0);
4003 gtk_container_set_border_width (GTK_CONTAINER (vbox), 5);
4004 gtk_container_add (GTK_CONTAINER (frame), vbox);
4006 hbox = gtk_hbox_new (FALSE, 0);
4007 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 5);
4009 vbox2 = gtk_vbox_new (FALSE, 0);
4010 gtk_box_pack_start (GTK_BOX (hbox), vbox2, FALSE, FALSE, 5);
4012 label = gtk_label_new ("Value :");
4013 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
4014 gtk_box_pack_start (GTK_BOX (vbox2), label, FALSE, TRUE, 0);
4016 adj = (GtkAdjustment *) gtk_adjustment_new (0.0, -10000.0, 10000.0,
4018 spinner1 = gtk_spin_button_new (adj, 1.0, 2);
4019 gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (spinner1), TRUE);
4020 gtk_box_pack_start (GTK_BOX (vbox2), spinner1, FALSE, TRUE, 0);
4022 vbox2 = gtk_vbox_new (FALSE, 0);
4023 gtk_box_pack_start (GTK_BOX (hbox), vbox2, FALSE, FALSE, 5);
4025 label = gtk_label_new ("Digits :");
4026 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
4027 gtk_box_pack_start (GTK_BOX (vbox2), label, FALSE, TRUE, 0);
4029 adj = (GtkAdjustment *) gtk_adjustment_new (2, 1, 5, 1, 1, 0);
4030 spinner2 = gtk_spin_button_new (adj, 0.0, 0);
4031 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
4032 GTK_SIGNAL_FUNC (change_digits),
4033 (gpointer) spinner2);
4034 gtk_box_pack_start (GTK_BOX (vbox2), spinner2, FALSE, TRUE, 0);
4036 hbox = gtk_hbox_new (FALSE, 0);
4037 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 5);
4039 button = gtk_check_button_new_with_label ("Snap to 0.5-ticks");
4040 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4041 GTK_SIGNAL_FUNC (toggle_snap),
4043 gtk_box_pack_start (GTK_BOX (vbox), button, TRUE, TRUE, 0);
4044 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE);
4046 button = gtk_check_button_new_with_label ("Numeric only input mode");
4047 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4048 GTK_SIGNAL_FUNC (toggle_numeric),
4050 gtk_box_pack_start (GTK_BOX (vbox), button, TRUE, TRUE, 0);
4051 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE);
4053 val_label = gtk_label_new ("");
4055 hbox = gtk_hbox_new (FALSE, 0);
4056 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 5);
4058 button = gtk_button_new_with_label ("Value as Int");
4059 gtk_object_set_user_data (GTK_OBJECT (button), val_label);
4060 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4061 GTK_SIGNAL_FUNC (get_value),
4062 GINT_TO_POINTER (1));
4063 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
4065 button = gtk_button_new_with_label ("Value as Float");
4066 gtk_object_set_user_data (GTK_OBJECT (button), val_label);
4067 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4068 GTK_SIGNAL_FUNC (get_value),
4069 GINT_TO_POINTER (2));
4070 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
4072 gtk_box_pack_start (GTK_BOX (vbox), val_label, TRUE, TRUE, 0);
4073 gtk_label_set_text (GTK_LABEL (val_label), "0");
4075 frame = gtk_frame_new ("Using Convenience Constructor");
4076 gtk_box_pack_start (GTK_BOX (main_vbox), frame, TRUE, TRUE, 0);
4078 hbox = gtk_hbox_new (FALSE, 0);
4079 gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
4080 gtk_container_add (GTK_CONTAINER (frame), hbox);
4082 val_label = gtk_label_new ("0.0");
4084 spinner = gtk_spin_button_new_with_range (0.0, 10.0, 0.009);
4085 gtk_spin_button_set_value (GTK_SPIN_BUTTON (spinner), 0.0);
4086 gtk_signal_connect (GTK_OBJECT (spinner), "value_changed",
4087 GTK_SIGNAL_FUNC (get_spin_value), val_label);
4088 gtk_box_pack_start (GTK_BOX (hbox), spinner, TRUE, TRUE, 5);
4089 gtk_box_pack_start (GTK_BOX (hbox), val_label, TRUE, TRUE, 5);
4091 hbox = gtk_hbox_new (FALSE, 0);
4092 gtk_box_pack_start (GTK_BOX (main_vbox), hbox, FALSE, TRUE, 0);
4094 button = gtk_button_new_with_label ("Close");
4095 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
4096 GTK_SIGNAL_FUNC (gtk_widget_destroy),
4097 GTK_OBJECT (window));
4098 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
4101 if (!GTK_WIDGET_VISIBLE (window))
4102 gtk_widget_show_all (window);
4104 gtk_widget_destroy (window);
4113 cursor_expose_event (GtkWidget *widget,
4117 GtkDrawingArea *darea;
4118 GdkDrawable *drawable;
4125 g_return_val_if_fail (widget != NULL, TRUE);
4126 g_return_val_if_fail (GTK_IS_DRAWING_AREA (widget), TRUE);
4128 darea = GTK_DRAWING_AREA (widget);
4129 drawable = widget->window;
4130 white_gc = widget->style->white_gc;
4131 gray_gc = widget->style->bg_gc[GTK_STATE_NORMAL];
4132 black_gc = widget->style->black_gc;
4133 max_width = widget->allocation.width;
4134 max_height = widget->allocation.height;
4136 gdk_draw_rectangle (drawable, white_gc,
4143 gdk_draw_rectangle (drawable, black_gc,
4150 gdk_draw_rectangle (drawable, gray_gc,
4161 set_cursor (GtkWidget *spinner,
4169 c = CLAMP (gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (spinner)), 0, 152);
4172 label = gtk_object_get_user_data (GTK_OBJECT (spinner));
4173 vals = gtk_type_enum_get_values (GDK_TYPE_CURSOR_TYPE);
4174 while (vals && vals->value != c)
4177 gtk_label_set_text (GTK_LABEL (label), vals->value_nick);
4179 gtk_label_set_text (GTK_LABEL (label), "<unknown>");
4181 cursor = gdk_cursor_new (c);
4182 gdk_window_set_cursor (widget->window, cursor);
4183 gdk_cursor_unref (cursor);
4187 cursor_event (GtkWidget *widget,
4189 GtkSpinButton *spinner)
4191 if ((event->type == GDK_BUTTON_PRESS) &&
4192 ((event->button.button == 1) ||
4193 (event->button.button == 3)))
4195 gtk_spin_button_spin (spinner, event->button.button == 1 ?
4196 GTK_SPIN_STEP_FORWARD : GTK_SPIN_STEP_BACKWARD, 0);
4204 create_cursors (void)
4206 static GtkWidget *window = NULL;
4209 GtkWidget *main_vbox;
4220 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
4222 gtk_signal_connect (GTK_OBJECT (window), "destroy",
4223 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
4226 gtk_window_set_title (GTK_WINDOW (window), "Cursors");
4228 main_vbox = gtk_vbox_new (FALSE, 5);
4229 gtk_container_set_border_width (GTK_CONTAINER (main_vbox), 0);
4230 gtk_container_add (GTK_CONTAINER (window), main_vbox);
4233 gtk_widget_new (gtk_vbox_get_type (),
4234 "GtkBox::homogeneous", FALSE,
4235 "GtkBox::spacing", 5,
4236 "GtkContainer::border_width", 10,
4237 "GtkWidget::parent", main_vbox,
4238 "GtkWidget::visible", TRUE,
4241 hbox = gtk_hbox_new (FALSE, 0);
4242 gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
4243 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0);
4245 label = gtk_label_new ("Cursor Value : ");
4246 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
4247 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
4249 adj = (GtkAdjustment *) gtk_adjustment_new (0,
4253 spinner = gtk_spin_button_new (adj, 0, 0);
4254 gtk_box_pack_start (GTK_BOX (hbox), spinner, TRUE, TRUE, 0);
4257 gtk_widget_new (gtk_frame_get_type (),
4258 "GtkFrame::shadow", GTK_SHADOW_ETCHED_IN,
4259 "GtkFrame::label_xalign", 0.5,
4260 "GtkFrame::label", "Cursor Area",
4261 "GtkContainer::border_width", 10,
4262 "GtkWidget::parent", vbox,
4263 "GtkWidget::visible", TRUE,
4266 darea = gtk_drawing_area_new ();
4267 gtk_widget_set_usize (darea, 80, 80);
4268 gtk_container_add (GTK_CONTAINER (frame), darea);
4269 gtk_signal_connect (GTK_OBJECT (darea),
4271 GTK_SIGNAL_FUNC (cursor_expose_event),
4273 gtk_widget_set_events (darea, GDK_EXPOSURE_MASK | GDK_BUTTON_PRESS_MASK);
4274 gtk_signal_connect (GTK_OBJECT (darea),
4275 "button_press_event",
4276 GTK_SIGNAL_FUNC (cursor_event),
4278 gtk_widget_show (darea);
4280 gtk_signal_connect (GTK_OBJECT (spinner), "changed",
4281 GTK_SIGNAL_FUNC (set_cursor),
4284 label = gtk_widget_new (GTK_TYPE_LABEL,
4289 gtk_container_child_set (GTK_CONTAINER (vbox), label,
4292 gtk_object_set_user_data (GTK_OBJECT (spinner), label);
4295 gtk_widget_new (gtk_hseparator_get_type (),
4296 "GtkWidget::visible", TRUE,
4298 gtk_box_pack_start (GTK_BOX (main_vbox), any, FALSE, TRUE, 0);
4300 hbox = gtk_hbox_new (FALSE, 0);
4301 gtk_container_set_border_width (GTK_CONTAINER (hbox), 10);
4302 gtk_box_pack_start (GTK_BOX (main_vbox), hbox, FALSE, TRUE, 0);
4304 button = gtk_button_new_with_label ("Close");
4305 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
4306 GTK_SIGNAL_FUNC (gtk_widget_destroy),
4307 GTK_OBJECT (window));
4308 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
4310 gtk_widget_show_all (window);
4312 set_cursor (spinner, darea);
4315 gtk_widget_destroy (window);
4323 list_add (GtkWidget *widget,
4328 GtkWidget *list_item;
4329 GtkContainer *container;
4331 container = GTK_CONTAINER (list);
4333 sprintf (buffer, "added item %d", i++);
4334 list_item = gtk_list_item_new_with_label (buffer);
4335 gtk_widget_show (list_item);
4337 gtk_container_add (container, list_item);
4341 list_remove (GtkWidget *widget,
4344 GList *clear_list = NULL;
4345 GList *sel_row = NULL;
4348 if (list->selection_mode == GTK_SELECTION_EXTENDED)
4352 item = GTK_CONTAINER (list)->focus_child;
4353 if (!item && list->selection)
4354 item = list->selection->data;
4358 work = g_list_find (list->children, item);
4359 for (sel_row = work; sel_row; sel_row = sel_row->next)
4360 if (GTK_WIDGET (sel_row->data)->state != GTK_STATE_SELECTED)
4365 for (sel_row = work; sel_row; sel_row = sel_row->prev)
4366 if (GTK_WIDGET (sel_row->data)->state != GTK_STATE_SELECTED)
4372 for (work = list->selection; work; work = work->next)
4373 clear_list = g_list_prepend (clear_list, work->data);
4375 clear_list = g_list_reverse (clear_list);
4376 gtk_list_remove_items (GTK_LIST (list), clear_list);
4377 g_list_free (clear_list);
4379 if (list->selection_mode == GTK_SELECTION_EXTENDED && sel_row)
4380 gtk_list_select_child (list, GTK_WIDGET(sel_row->data));
4384 list_clear (GtkWidget *widget,
4387 gtk_list_clear_items (GTK_LIST (list), 0, -1);
4390 #define RADIOMENUTOGGLED(_rmi_, __i) { \
4393 __g = gtk_radio_menu_item_group(_rmi_); \
4394 while( __g && !((GtkCheckMenuItem *)(__g->data))->active) { \
4400 static GtkWidget *list_omenu;
4403 list_toggle_sel_mode (GtkWidget *widget, GtkList *list)
4407 if (!GTK_WIDGET_MAPPED (widget))
4410 RADIOMENUTOGGLED ((GtkRadioMenuItem *)
4411 (((GtkOptionMenu *)list_omenu)->menu_item), i);
4413 gtk_list_set_selection_mode (list, (GtkSelectionMode) (3-i));
4419 static GtkWidget *window = NULL;
4421 static OptionMenuItem items[] =
4423 { "Single", GTK_SIGNAL_FUNC (list_toggle_sel_mode) },
4424 { "Browse", GTK_SIGNAL_FUNC (list_toggle_sel_mode) },
4425 { "Multiple", GTK_SIGNAL_FUNC (list_toggle_sel_mode) },
4426 { "Extended", GTK_SIGNAL_FUNC (list_toggle_sel_mode) }
4435 GtkWidget *scrolled_win;
4438 GtkWidget *separator;
4441 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
4443 gtk_signal_connect (GTK_OBJECT (window), "destroy",
4444 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
4447 gtk_window_set_title (GTK_WINDOW (window), "list");
4448 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
4450 vbox = gtk_vbox_new (FALSE, 0);
4451 gtk_container_add (GTK_CONTAINER (window), vbox);
4453 scrolled_win = gtk_scrolled_window_new (NULL, NULL);
4454 gtk_container_set_border_width (GTK_CONTAINER (scrolled_win), 5);
4455 gtk_widget_set_usize (scrolled_win, -1, 300);
4456 gtk_box_pack_start (GTK_BOX (vbox), scrolled_win, TRUE, TRUE, 0);
4457 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win),
4458 GTK_POLICY_AUTOMATIC,
4459 GTK_POLICY_AUTOMATIC);
4461 list = gtk_list_new ();
4462 gtk_list_set_selection_mode (GTK_LIST (list), GTK_SELECTION_EXTENDED);
4463 gtk_scrolled_window_add_with_viewport
4464 (GTK_SCROLLED_WINDOW (scrolled_win), list);
4465 gtk_container_set_focus_vadjustment
4466 (GTK_CONTAINER (list),
4467 gtk_scrolled_window_get_vadjustment
4468 (GTK_SCROLLED_WINDOW (scrolled_win)));
4469 gtk_container_set_focus_hadjustment
4470 (GTK_CONTAINER (list),
4471 gtk_scrolled_window_get_hadjustment
4472 (GTK_SCROLLED_WINDOW (scrolled_win)));
4474 if ((infile = fopen("gtkenums.h", "r")))
4480 while (fgets (buffer, 256, infile))
4482 if ((pos = strchr (buffer, '\n')))
4484 item = gtk_list_item_new_with_label (buffer);
4485 gtk_container_add (GTK_CONTAINER (list), item);
4492 hbox = gtk_hbox_new (TRUE, 5);
4493 gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
4494 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0);
4496 button = gtk_button_new_with_label ("Insert Row");
4497 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4498 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4499 GTK_SIGNAL_FUNC (list_add),
4502 button = gtk_button_new_with_label ("Clear List");
4503 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4504 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4505 GTK_SIGNAL_FUNC (list_clear),
4508 button = gtk_button_new_with_label ("Remove Selection");
4509 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4510 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4511 GTK_SIGNAL_FUNC (list_remove),
4514 cbox = gtk_hbox_new (FALSE, 0);
4515 gtk_box_pack_start (GTK_BOX (vbox), cbox, FALSE, TRUE, 0);
4517 hbox = gtk_hbox_new (FALSE, 5);
4518 gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
4519 gtk_box_pack_start (GTK_BOX (cbox), hbox, TRUE, FALSE, 0);
4521 label = gtk_label_new ("Selection Mode :");
4522 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
4524 list_omenu = build_option_menu (items, 4, 3, list);
4525 gtk_box_pack_start (GTK_BOX (hbox), list_omenu, FALSE, TRUE, 0);
4527 separator = gtk_hseparator_new ();
4528 gtk_box_pack_start (GTK_BOX (vbox), separator, FALSE, TRUE, 0);
4530 cbox = gtk_hbox_new (FALSE, 0);
4531 gtk_box_pack_start (GTK_BOX (vbox), cbox, FALSE, TRUE, 0);
4533 button = gtk_button_new_with_label ("close");
4534 gtk_container_set_border_width (GTK_CONTAINER (button), 10);
4535 gtk_box_pack_start (GTK_BOX (cbox), button, TRUE, TRUE, 0);
4536 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
4537 GTK_SIGNAL_FUNC(gtk_widget_destroy),
4538 GTK_OBJECT (window));
4540 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
4541 gtk_widget_grab_default (button);
4544 if (!GTK_WIDGET_VISIBLE (window))
4545 gtk_widget_show_all (window);
4547 gtk_widget_destroy (window);
4554 static char * book_open_xpm[] = {
4577 static char * book_closed_xpm[] = {
4602 static char * mini_page_xpm[] = {
4625 static char * gtk_mini_xpm[] = {
4665 #define TESTGTK_CLIST_COLUMNS 12
4666 static gint clist_rows = 0;
4667 static GtkWidget *clist_omenu;
4670 add1000_clist (GtkWidget *widget, gpointer data)
4673 char text[TESTGTK_CLIST_COLUMNS][50];
4674 char *texts[TESTGTK_CLIST_COLUMNS];
4679 clist = GTK_CLIST (data);
4681 pixmap = gdk_pixmap_create_from_xpm_d (clist->clist_window,
4683 >K_WIDGET (data)->style->white,
4686 for (i = 0; i < TESTGTK_CLIST_COLUMNS; i++)
4689 sprintf (text[i], "Column %d", i);
4693 sprintf (text[1], "Right");
4694 sprintf (text[2], "Center");
4696 gtk_clist_freeze (GTK_CLIST (data));
4697 for (i = 0; i < 1000; i++)
4699 sprintf (text[0], "CListRow %d", rand() % 10000);
4700 row = gtk_clist_append (clist, texts);
4701 gtk_clist_set_pixtext (clist, row, 3, "gtk+", 5, pixmap, mask);
4704 gtk_clist_thaw (GTK_CLIST (data));
4706 gdk_pixmap_unref (pixmap);
4707 gdk_bitmap_unref (mask);
4711 add10000_clist (GtkWidget *widget, gpointer data)
4714 char text[TESTGTK_CLIST_COLUMNS][50];
4715 char *texts[TESTGTK_CLIST_COLUMNS];
4717 for (i = 0; i < TESTGTK_CLIST_COLUMNS; i++)
4720 sprintf (text[i], "Column %d", i);
4723 sprintf (text[1], "Right");
4724 sprintf (text[2], "Center");
4726 gtk_clist_freeze (GTK_CLIST (data));
4727 for (i = 0; i < 10000; i++)
4729 sprintf (text[0], "CListRow %d", rand() % 10000);
4730 gtk_clist_append (GTK_CLIST (data), texts);
4732 gtk_clist_thaw (GTK_CLIST (data));
4736 clear_clist (GtkWidget *widget, gpointer data)
4738 gtk_clist_clear (GTK_CLIST (data));
4742 void clist_remove_selection (GtkWidget *widget, GtkCList *clist)
4744 gtk_clist_freeze (clist);
4746 while (clist->selection)
4751 row = GPOINTER_TO_INT (clist->selection->data);
4753 gtk_clist_remove (clist, row);
4755 if (clist->selection_mode == GTK_SELECTION_BROWSE)
4759 if (clist->selection_mode == GTK_SELECTION_EXTENDED && !clist->selection &&
4760 clist->focus_row >= 0)
4761 gtk_clist_select_row (clist, clist->focus_row, -1);
4763 gtk_clist_thaw (clist);
4766 void toggle_title_buttons (GtkWidget *widget, GtkCList *clist)
4768 if (GTK_TOGGLE_BUTTON (widget)->active)
4769 gtk_clist_column_titles_show (clist);
4771 gtk_clist_column_titles_hide (clist);
4774 void toggle_reorderable (GtkWidget *widget, GtkCList *clist)
4776 gtk_clist_set_reorderable (clist, GTK_TOGGLE_BUTTON (widget)->active);
4780 insert_row_clist (GtkWidget *widget, gpointer data)
4782 static char *text[] =
4784 "This", "is an", "inserted", "row.",
4785 "This", "is an", "inserted", "row.",
4786 "This", "is an", "inserted", "row."
4789 static GtkStyle *style1 = NULL;
4790 static GtkStyle *style2 = NULL;
4791 static GtkStyle *style3 = NULL;
4794 if (GTK_CLIST (data)->focus_row >= 0)
4795 row = gtk_clist_insert (GTK_CLIST (data), GTK_CLIST (data)->focus_row,
4798 row = gtk_clist_prepend (GTK_CLIST (data), text);
4812 style1 = gtk_style_copy (GTK_WIDGET (data)->style);
4813 style1->base[GTK_STATE_NORMAL] = col1;
4814 style1->base[GTK_STATE_SELECTED] = col2;
4816 style2 = gtk_style_copy (GTK_WIDGET (data)->style);
4817 style2->fg[GTK_STATE_NORMAL] = col1;
4818 style2->fg[GTK_STATE_SELECTED] = col2;
4820 style3 = gtk_style_copy (GTK_WIDGET (data)->style);
4821 style3->fg[GTK_STATE_NORMAL] = col1;
4822 style3->base[GTK_STATE_NORMAL] = col2;
4823 pango_font_description_free (style3->font_desc);
4824 style3->font_desc = pango_font_description_from_string ("courier 12");
4827 gtk_clist_set_cell_style (GTK_CLIST (data), row, 3, style1);
4828 gtk_clist_set_cell_style (GTK_CLIST (data), row, 4, style2);
4829 gtk_clist_set_cell_style (GTK_CLIST (data), row, 0, style3);
4835 clist_warning_test (GtkWidget *button,
4839 static gboolean add_remove = FALSE;
4841 add_remove = !add_remove;
4843 child = gtk_label_new ("Test");
4844 gtk_widget_ref (child);
4845 gtk_object_sink (GTK_OBJECT (child));
4848 gtk_container_add (GTK_CONTAINER (clist), child);
4851 child->parent = clist;
4852 gtk_container_remove (GTK_CONTAINER (clist), child);
4853 child->parent = NULL;
4856 gtk_widget_destroy (child);
4857 gtk_widget_unref (child);
4861 undo_selection (GtkWidget *button, GtkCList *clist)
4863 gtk_clist_undo_selection (clist);
4867 clist_toggle_sel_mode (GtkWidget *widget, GtkCList *clist)
4871 if (!GTK_WIDGET_MAPPED (widget))
4874 RADIOMENUTOGGLED ((GtkRadioMenuItem *)
4875 (((GtkOptionMenu *)clist_omenu)->menu_item), i);
4877 gtk_clist_set_selection_mode (clist, (GtkSelectionMode) (3-i));
4881 clist_click_column (GtkCList *clist, gint column, gpointer data)
4884 gtk_clist_set_column_visibility (clist, column, FALSE);
4885 else if (column == clist->sort_column)
4887 if (clist->sort_type == GTK_SORT_ASCENDING)
4888 clist->sort_type = GTK_SORT_DESCENDING;
4890 clist->sort_type = GTK_SORT_ASCENDING;
4893 gtk_clist_set_sort_column (clist, column);
4895 gtk_clist_sort (clist);
4902 static GtkWidget *window = NULL;
4904 static char *titles[] =
4906 "auto resize", "not resizeable", "max width 100", "min width 50",
4907 "hide column", "Title 5", "Title 6", "Title 7",
4908 "Title 8", "Title 9", "Title 10", "Title 11"
4911 static OptionMenuItem items[] =
4913 { "Single", GTK_SIGNAL_FUNC (clist_toggle_sel_mode) },
4914 { "Browse", GTK_SIGNAL_FUNC (clist_toggle_sel_mode) },
4915 { "Multiple", GTK_SIGNAL_FUNC (clist_toggle_sel_mode) },
4916 { "Extended", GTK_SIGNAL_FUNC (clist_toggle_sel_mode) }
4919 char text[TESTGTK_CLIST_COLUMNS][50];
4920 char *texts[TESTGTK_CLIST_COLUMNS];
4926 GtkWidget *separator;
4927 GtkWidget *scrolled_win;
4930 GtkWidget *undo_button;
4940 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
4942 gtk_signal_connect (GTK_OBJECT (window), "destroy",
4943 GTK_SIGNAL_FUNC (gtk_widget_destroyed), &window);
4945 gtk_window_set_title (GTK_WINDOW (window), "clist");
4946 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
4948 vbox = gtk_vbox_new (FALSE, 0);
4949 gtk_container_add (GTK_CONTAINER (window), vbox);
4951 scrolled_win = gtk_scrolled_window_new (NULL, NULL);
4952 gtk_container_set_border_width (GTK_CONTAINER (scrolled_win), 5);
4953 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win),
4954 GTK_POLICY_AUTOMATIC,
4955 GTK_POLICY_AUTOMATIC);
4957 /* create GtkCList here so we have a pointer to throw at the
4958 * button callbacks -- more is done with it later */
4959 clist = gtk_clist_new_with_titles (TESTGTK_CLIST_COLUMNS, titles);
4960 gtk_container_add (GTK_CONTAINER (scrolled_win), clist);
4961 gtk_signal_connect (GTK_OBJECT (clist), "click_column",
4962 (GtkSignalFunc) clist_click_column, NULL);
4964 /* control buttons */
4965 hbox = gtk_hbox_new (FALSE, 5);
4966 gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
4967 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
4969 button = gtk_button_new_with_label ("Insert Row");
4970 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4971 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4972 (GtkSignalFunc) insert_row_clist, (gpointer) clist);
4974 button = gtk_button_new_with_label ("Add 1,000 Rows With Pixmaps");
4975 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4976 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4977 (GtkSignalFunc) add1000_clist, (gpointer) clist);
4979 button = gtk_button_new_with_label ("Add 10,000 Rows");
4980 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4981 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4982 (GtkSignalFunc) add10000_clist, (gpointer) clist);
4984 /* second layer of buttons */
4985 hbox = gtk_hbox_new (FALSE, 5);
4986 gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
4987 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
4989 button = gtk_button_new_with_label ("Clear List");
4990 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4991 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4992 (GtkSignalFunc) clear_clist, (gpointer) clist);
4994 button = gtk_button_new_with_label ("Remove Selection");
4995 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4996 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4997 (GtkSignalFunc) clist_remove_selection,
5000 undo_button = gtk_button_new_with_label ("Undo Selection");
5001 gtk_box_pack_start (GTK_BOX (hbox), undo_button, TRUE, TRUE, 0);
5002 gtk_signal_connect (GTK_OBJECT (undo_button), "clicked",
5003 (GtkSignalFunc) undo_selection, (gpointer) clist);
5005 button = gtk_button_new_with_label ("Warning Test");
5006 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
5007 gtk_signal_connect (GTK_OBJECT (button), "clicked",
5008 (GtkSignalFunc) clist_warning_test,(gpointer) clist);
5010 /* third layer of buttons */
5011 hbox = gtk_hbox_new (FALSE, 5);
5012 gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
5013 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
5015 check = gtk_check_button_new_with_label ("Show Title Buttons");
5016 gtk_box_pack_start (GTK_BOX (hbox), check, FALSE, TRUE, 0);
5017 gtk_signal_connect (GTK_OBJECT (check), "clicked",
5018 GTK_SIGNAL_FUNC (toggle_title_buttons), clist);
5019 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check), TRUE);
5021 check = gtk_check_button_new_with_label ("Reorderable");
5022 gtk_box_pack_start (GTK_BOX (hbox), check, FALSE, TRUE, 0);
5023 gtk_signal_connect (GTK_OBJECT (check), "clicked",
5024 GTK_SIGNAL_FUNC (toggle_reorderable), clist);
5025 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check), TRUE);
5027 label = gtk_label_new ("Selection Mode :");
5028 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
5030 clist_omenu = build_option_menu (items, 4, 3, clist);
5031 gtk_box_pack_start (GTK_BOX (hbox), clist_omenu, FALSE, TRUE, 0);
5034 * the rest of the clist configuration
5037 gtk_box_pack_start (GTK_BOX (vbox), scrolled_win, TRUE, TRUE, 0);
5038 gtk_clist_set_row_height (GTK_CLIST (clist), 18);
5039 gtk_widget_set_usize (clist, -1, 300);
5041 for (i = 1; i < TESTGTK_CLIST_COLUMNS; i++)
5042 gtk_clist_set_column_width (GTK_CLIST (clist), i, 80);
5044 gtk_clist_set_column_auto_resize (GTK_CLIST (clist), 0, TRUE);
5045 gtk_clist_set_column_resizeable (GTK_CLIST (clist), 1, FALSE);
5046 gtk_clist_set_column_max_width (GTK_CLIST (clist), 2, 100);
5047 gtk_clist_set_column_min_width (GTK_CLIST (clist), 3, 50);
5048 gtk_clist_set_selection_mode (GTK_CLIST (clist), GTK_SELECTION_EXTENDED);
5049 gtk_clist_set_column_justification (GTK_CLIST (clist), 1,
5051 gtk_clist_set_column_justification (GTK_CLIST (clist), 2,
5052 GTK_JUSTIFY_CENTER);
5054 for (i = 0; i < TESTGTK_CLIST_COLUMNS; i++)
5057 sprintf (text[i], "Column %d", i);
5060 sprintf (text[1], "Right");
5061 sprintf (text[2], "Center");
5070 style = gtk_style_new ();
5071 style->fg[GTK_STATE_NORMAL] = col1;
5072 style->base[GTK_STATE_NORMAL] = col2;
5074 style->font_desc->size = 14 * PANGO_SCALE;
5075 style->font_desc->weight = PANGO_WEIGHT_BOLD;
5077 for (i = 0; i < 10; i++)
5079 sprintf (text[0], "CListRow %d", clist_rows++);
5080 gtk_clist_append (GTK_CLIST (clist), texts);
5085 gtk_clist_set_row_style (GTK_CLIST (clist), i, style);
5088 gtk_clist_set_cell_style (GTK_CLIST (clist), i, i % 4, style);
5093 gtk_style_unref (style);
5095 separator = gtk_hseparator_new ();
5096 gtk_box_pack_start (GTK_BOX (vbox), separator, FALSE, TRUE, 0);
5098 hbox = gtk_hbox_new (FALSE, 0);
5099 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0);
5101 button = gtk_button_new_with_label ("close");
5102 gtk_container_set_border_width (GTK_CONTAINER (button), 10);
5103 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
5104 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
5105 GTK_SIGNAL_FUNC(gtk_widget_destroy),
5106 GTK_OBJECT (window));
5108 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
5109 gtk_widget_grab_default (button);
5112 if (!GTK_WIDGET_VISIBLE (window))
5113 gtk_widget_show_all (window);
5117 gtk_widget_destroy (window);
5132 static gint books = 0;
5133 static gint pages = 0;
5135 static GtkWidget *book_label;
5136 static GtkWidget *page_label;
5137 static GtkWidget *sel_label;
5138 static GtkWidget *vis_label;
5139 static GtkWidget *omenu1;
5140 static GtkWidget *omenu2;
5141 static GtkWidget *omenu3;
5142 static GtkWidget *omenu4;
5143 static GtkWidget *spin1;
5144 static GtkWidget *spin2;
5145 static GtkWidget *spin3;
5146 static gint line_style;
5148 void after_press (GtkCTree *ctree, gpointer data)
5152 sprintf (buf, "%d", g_list_length (GTK_CLIST (ctree)->selection));
5153 gtk_label_set_text (GTK_LABEL (sel_label), buf);
5155 sprintf (buf, "%d", g_list_length (GTK_CLIST (ctree)->row_list));
5156 gtk_label_set_text (GTK_LABEL (vis_label), buf);
5158 sprintf (buf, "%d", books);
5159 gtk_label_set_text (GTK_LABEL (book_label), buf);
5161 sprintf (buf, "%d", pages);
5162 gtk_label_set_text (GTK_LABEL (page_label), buf);
5165 void after_move (GtkCTree *ctree, GtkCTreeNode *child, GtkCTreeNode *parent,
5166 GtkCTreeNode *sibling, gpointer data)
5172 gtk_ctree_get_node_info (ctree, child, &source,
5173 NULL, NULL, NULL, NULL, NULL, NULL, NULL);
5175 gtk_ctree_get_node_info (ctree, parent, &target1,
5176 NULL, NULL, NULL, NULL, NULL, NULL, NULL);
5178 gtk_ctree_get_node_info (ctree, sibling, &target2,
5179 NULL, NULL, NULL, NULL, NULL, NULL, NULL);
5181 g_print ("Moving \"%s\" to \"%s\" with sibling \"%s\".\n", source,
5182 (parent) ? target1 : "nil", (sibling) ? target2 : "nil");
5185 void count_items (GtkCTree *ctree, GtkCTreeNode *list)
5187 if (GTK_CTREE_ROW (list)->is_leaf)
5193 void expand_all (GtkWidget *widget, GtkCTree *ctree)
5195 gtk_ctree_expand_recursive (ctree, NULL);
5196 after_press (ctree, NULL);
5199 void collapse_all (GtkWidget *widget, GtkCTree *ctree)
5201 gtk_ctree_collapse_recursive (ctree, NULL);
5202 after_press (ctree, NULL);
5205 void select_all (GtkWidget *widget, GtkCTree *ctree)
5207 gtk_ctree_select_recursive (ctree, NULL);
5208 after_press (ctree, NULL);
5211 void change_style (GtkWidget *widget, GtkCTree *ctree)
5213 static GtkStyle *style1 = NULL;
5214 static GtkStyle *style2 = NULL;
5220 if (GTK_CLIST (ctree)->focus_row >= 0)
5221 node = GTK_CTREE_NODE
5222 (g_list_nth (GTK_CLIST (ctree)->row_list,GTK_CLIST (ctree)->focus_row));
5224 node = GTK_CTREE_NODE (GTK_CLIST (ctree)->row_list);
5238 style1 = gtk_style_new ();
5239 style1->base[GTK_STATE_NORMAL] = col1;
5240 style1->fg[GTK_STATE_SELECTED] = col2;
5242 style2 = gtk_style_new ();
5243 style2->base[GTK_STATE_SELECTED] = col2;
5244 style2->fg[GTK_STATE_NORMAL] = col1;
5245 style2->base[GTK_STATE_NORMAL] = col2;
5246 pango_font_description_free (style2->font_desc);
5247 style2->font_desc = pango_font_description_from_string ("courier 30");
5250 gtk_ctree_node_set_cell_style (ctree, node, 1, style1);
5251 gtk_ctree_node_set_cell_style (ctree, node, 0, style2);
5253 if (GTK_CTREE_ROW (node)->children)
5254 gtk_ctree_node_set_row_style (ctree, GTK_CTREE_ROW (node)->children,
5258 void unselect_all (GtkWidget *widget, GtkCTree *ctree)
5260 gtk_ctree_unselect_recursive (ctree, NULL);
5261 after_press (ctree, NULL);
5264 void remove_selection (GtkWidget *widget, GtkCTree *ctree)
5269 clist = GTK_CLIST (ctree);
5271 gtk_clist_freeze (clist);
5273 while (clist->selection)
5275 node = clist->selection->data;
5277 if (GTK_CTREE_ROW (node)->is_leaf)
5280 gtk_ctree_post_recursive (ctree, node,
5281 (GtkCTreeFunc) count_items, NULL);
5283 gtk_ctree_remove_node (ctree, node);
5285 if (clist->selection_mode == GTK_SELECTION_BROWSE)
5289 if (clist->selection_mode == GTK_SELECTION_EXTENDED && !clist->selection &&
5290 clist->focus_row >= 0)
5292 node = gtk_ctree_node_nth (ctree, clist->focus_row);
5295 gtk_ctree_select (ctree, node);
5298 gtk_clist_thaw (clist);
5299 after_press (ctree, NULL);
5302 struct _ExportStruct {
5308 typedef struct _ExportStruct ExportStruct;
5311 gnode2ctree (GtkCTree *ctree,
5314 GtkCTreeNode *cnode,
5318 GdkPixmap *pixmap_closed;
5319 GdkBitmap *mask_closed;
5320 GdkPixmap *pixmap_opened;
5321 GdkBitmap *mask_opened;
5323 if (!cnode || !gnode || (!(es = gnode->data)))
5328 pixmap_closed = pixmap3;
5329 mask_closed = mask3;
5330 pixmap_opened = NULL;
5335 pixmap_closed = pixmap1;
5336 mask_closed = mask1;
5337 pixmap_opened = pixmap2;
5338 mask_opened = mask2;
5341 gtk_ctree_set_node_info (ctree, cnode, es->tree, 2, pixmap_closed,
5342 mask_closed, pixmap_opened, mask_opened,
5343 es->is_leaf, (depth < 3));
5344 gtk_ctree_node_set_text (ctree, cnode, 1, es->info);
5352 ctree2gnode (GtkCTree *ctree,
5355 GtkCTreeNode *cnode,
5360 if (!cnode || !gnode)
5363 es = g_new (ExportStruct, 1);
5365 es->is_leaf = GTK_CTREE_ROW (cnode)->is_leaf;
5366 es->tree = GTK_CELL_PIXTEXT (GTK_CTREE_ROW (cnode)->row.cell[0])->text;
5367 es->info = GTK_CELL_PIXTEXT (GTK_CTREE_ROW (cnode)->row.cell[1])->text;
5371 void export_ctree (GtkWidget *widget, GtkCTree *ctree)
5373 char *title[] = { "Tree" , "Info" };
5374 static GtkWidget *export_window = NULL;
5375 static GtkCTree *export_ctree;
5377 GtkWidget *scrolled_win;
5385 export_window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
5387 gtk_signal_connect (GTK_OBJECT (export_window), "destroy",
5388 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
5391 gtk_window_set_title (GTK_WINDOW (export_window), "exported ctree");
5392 gtk_container_set_border_width (GTK_CONTAINER (export_window), 5);
5394 vbox = gtk_vbox_new (FALSE, 0);
5395 gtk_container_add (GTK_CONTAINER (export_window), vbox);
5397 button = gtk_button_new_with_label ("Close");
5398 gtk_box_pack_end (GTK_BOX (vbox), button, FALSE, TRUE, 0);
5400 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
5401 (GtkSignalFunc) gtk_widget_destroy,
5402 GTK_OBJECT(export_window));
5404 sep = gtk_hseparator_new ();
5405 gtk_box_pack_end (GTK_BOX (vbox), sep, FALSE, TRUE, 10);
5407 export_ctree = GTK_CTREE (gtk_ctree_new_with_titles (2, 0, title));
5408 gtk_ctree_set_line_style (export_ctree, GTK_CTREE_LINES_DOTTED);
5410 scrolled_win = gtk_scrolled_window_new (NULL, NULL);
5411 gtk_container_add (GTK_CONTAINER (scrolled_win),
5412 GTK_WIDGET (export_ctree));
5413 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win),
5414 GTK_POLICY_AUTOMATIC,
5415 GTK_POLICY_AUTOMATIC);
5416 gtk_box_pack_start (GTK_BOX (vbox), scrolled_win, TRUE, TRUE, 0);
5417 gtk_clist_set_selection_mode (GTK_CLIST (export_ctree),
5418 GTK_SELECTION_EXTENDED);
5419 gtk_clist_set_column_width (GTK_CLIST (export_ctree), 0, 200);
5420 gtk_clist_set_column_width (GTK_CLIST (export_ctree), 1, 200);
5421 gtk_widget_set_usize (GTK_WIDGET (export_ctree), 300, 200);
5424 if (!GTK_WIDGET_VISIBLE (export_window))
5425 gtk_widget_show_all (export_window);
5427 gtk_clist_clear (GTK_CLIST (export_ctree));
5429 node = GTK_CTREE_NODE (g_list_nth (GTK_CLIST (ctree)->row_list,
5430 GTK_CLIST (ctree)->focus_row));
5434 gnode = gtk_ctree_export_to_gnode (ctree, NULL, NULL, node,
5438 gtk_ctree_insert_gnode (export_ctree, NULL, NULL, gnode,
5440 g_node_destroy (gnode);
5444 void change_indent (GtkWidget *widget, GtkCTree *ctree)
5446 gtk_ctree_set_indent (ctree, GTK_ADJUSTMENT (widget)->value);
5449 void change_spacing (GtkWidget *widget, GtkCTree *ctree)
5451 gtk_ctree_set_spacing (ctree, GTK_ADJUSTMENT (widget)->value);
5454 void change_row_height (GtkWidget *widget, GtkCList *clist)
5456 gtk_clist_set_row_height (clist, GTK_ADJUSTMENT (widget)->value);
5459 void set_background (GtkCTree *ctree, GtkCTreeNode *node, gpointer data)
5461 GtkStyle *style = NULL;
5466 if (ctree->line_style != GTK_CTREE_LINES_TABBED)
5468 if (!GTK_CTREE_ROW (node)->is_leaf)
5469 style = GTK_CTREE_ROW (node)->row.data;
5470 else if (GTK_CTREE_ROW (node)->parent)
5471 style = GTK_CTREE_ROW (GTK_CTREE_ROW (node)->parent)->row.data;
5474 gtk_ctree_node_set_row_style (ctree, node, style);
5477 void ctree_toggle_line_style (GtkWidget *widget, GtkCTree *ctree)
5481 if (!GTK_WIDGET_MAPPED (widget))
5484 RADIOMENUTOGGLED ((GtkRadioMenuItem *)
5485 (((GtkOptionMenu *)omenu1)->menu_item), i);
5487 if ((ctree->line_style == GTK_CTREE_LINES_TABBED &&
5488 ((GtkCTreeLineStyle) (3 - i)) != GTK_CTREE_LINES_TABBED) ||
5489 (ctree->line_style != GTK_CTREE_LINES_TABBED &&
5490 ((GtkCTreeLineStyle) (3 - i)) == GTK_CTREE_LINES_TABBED))
5491 gtk_ctree_pre_recursive (ctree, NULL, set_background, NULL);
5492 gtk_ctree_set_line_style (ctree, 3 - i);
5496 void ctree_toggle_expander_style (GtkWidget *widget, GtkCTree *ctree)
5500 if (!GTK_WIDGET_MAPPED (widget))
5503 RADIOMENUTOGGLED ((GtkRadioMenuItem *)
5504 (((GtkOptionMenu *)omenu2)->menu_item), i);
5506 gtk_ctree_set_expander_style (ctree, (GtkCTreeExpanderStyle) (3 - i));
5509 void ctree_toggle_justify (GtkWidget *widget, GtkCTree *ctree)
5513 if (!GTK_WIDGET_MAPPED (widget))
5516 RADIOMENUTOGGLED ((GtkRadioMenuItem *)
5517 (((GtkOptionMenu *)omenu3)->menu_item), i);
5519 gtk_clist_set_column_justification (GTK_CLIST (ctree), ctree->tree_column,
5520 (GtkJustification) (1 - i));
5523 void ctree_toggle_sel_mode (GtkWidget *widget, GtkCTree *ctree)
5527 if (!GTK_WIDGET_MAPPED (widget))
5530 RADIOMENUTOGGLED ((GtkRadioMenuItem *)
5531 (((GtkOptionMenu *)omenu4)->menu_item), i);
5533 gtk_clist_set_selection_mode (GTK_CLIST (ctree), (GtkSelectionMode) (3 - i));
5534 after_press (ctree, NULL);
5537 void build_recursive (GtkCTree *ctree, gint cur_depth, gint depth,
5538 gint num_books, gint num_pages, GtkCTreeNode *parent)
5543 GtkCTreeNode *sibling;
5550 for (i = num_pages + num_books; i > num_books; i--)
5553 sprintf (buf1, "Page %02d", (gint) rand() % 100);
5554 sprintf (buf2, "Item %d-%d", cur_depth, i);
5555 sibling = gtk_ctree_insert_node (ctree, parent, sibling, text, 5,
5556 pixmap3, mask3, NULL, NULL,
5559 if (parent && ctree->line_style == GTK_CTREE_LINES_TABBED)
5560 gtk_ctree_node_set_row_style (ctree, sibling,
5561 GTK_CTREE_ROW (parent)->row.style);
5564 if (cur_depth == depth)
5567 for (i = num_books; i > 0; i--)
5572 sprintf (buf1, "Book %02d", (gint) rand() % 100);
5573 sprintf (buf2, "Item %d-%d", cur_depth, i);
5574 sibling = gtk_ctree_insert_node (ctree, parent, sibling, text, 5,
5575 pixmap1, mask1, pixmap2, mask2,
5578 style = gtk_style_new ();
5579 switch (cur_depth % 3)
5582 style->base[GTK_STATE_NORMAL].red = 10000 * (cur_depth % 6);
5583 style->base[GTK_STATE_NORMAL].green = 0;
5584 style->base[GTK_STATE_NORMAL].blue = 65535 - ((i * 10000) % 65535);
5587 style->base[GTK_STATE_NORMAL].red = 10000 * (cur_depth % 6);
5588 style->base[GTK_STATE_NORMAL].green = 65535 - ((i * 10000) % 65535);
5589 style->base[GTK_STATE_NORMAL].blue = 0;
5592 style->base[GTK_STATE_NORMAL].red = 65535 - ((i * 10000) % 65535);
5593 style->base[GTK_STATE_NORMAL].green = 0;
5594 style->base[GTK_STATE_NORMAL].blue = 10000 * (cur_depth % 6);
5597 gtk_ctree_node_set_row_data_full (ctree, sibling, style,
5598 (GtkDestroyNotify) gtk_style_unref);
5600 if (ctree->line_style == GTK_CTREE_LINES_TABBED)
5601 gtk_ctree_node_set_row_style (ctree, sibling, style);
5603 build_recursive (ctree, cur_depth + 1, depth, num_books, num_pages,
5608 void rebuild_tree (GtkWidget *widget, GtkCTree *ctree)
5611 gchar label1[] = "Root";
5612 gchar label2[] = "";
5613 GtkCTreeNode *parent;
5620 d = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (spin1));
5621 b = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (spin2));
5622 p = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (spin3));
5624 n = ((pow (b, d) - 1) / (b - 1)) * (p + 1);
5628 g_print ("%d total items? Try less\n",n);
5632 gtk_clist_freeze (GTK_CLIST (ctree));
5633 gtk_clist_clear (GTK_CLIST (ctree));
5638 parent = gtk_ctree_insert_node (ctree, NULL, NULL, text, 5, pixmap1,
5639 mask1, pixmap2, mask2, FALSE, TRUE);
5641 style = gtk_style_new ();
5642 style->base[GTK_STATE_NORMAL].red = 0;
5643 style->base[GTK_STATE_NORMAL].green = 45000;
5644 style->base[GTK_STATE_NORMAL].blue = 55000;
5645 gtk_ctree_node_set_row_data_full (ctree, parent, style,
5646 (GtkDestroyNotify) gtk_style_unref);
5648 if (ctree->line_style == GTK_CTREE_LINES_TABBED)
5649 gtk_ctree_node_set_row_style (ctree, parent, style);
5651 build_recursive (ctree, 1, d, b, p, parent);
5652 gtk_clist_thaw (GTK_CLIST (ctree));
5653 after_press (ctree, NULL);
5657 ctree_click_column (GtkCTree *ctree, gint column, gpointer data)
5661 clist = GTK_CLIST (ctree);
5663 if (column == clist->sort_column)
5665 if (clist->sort_type == GTK_SORT_ASCENDING)
5666 clist->sort_type = GTK_SORT_DESCENDING;
5668 clist->sort_type = GTK_SORT_ASCENDING;
5671 gtk_clist_set_sort_column (clist, column);
5673 gtk_ctree_sort_recursive (ctree, NULL);
5676 void create_ctree (void)
5678 static GtkWidget *window = NULL;
5679 GtkTooltips *tooltips;
5681 GtkWidget *scrolled_win;
5693 GdkColor transparent = { 0 };
5695 char *title[] = { "Tree" , "Info" };
5698 static OptionMenuItem items1[] =
5700 { "No lines", GTK_SIGNAL_FUNC (ctree_toggle_line_style) },
5701 { "Solid", GTK_SIGNAL_FUNC (ctree_toggle_line_style) },
5702 { "Dotted", GTK_SIGNAL_FUNC (ctree_toggle_line_style) },
5703 { "Tabbed", GTK_SIGNAL_FUNC (ctree_toggle_line_style) }
5706 static OptionMenuItem items2[] =
5708 { "None", GTK_SIGNAL_FUNC (ctree_toggle_expander_style) },
5709 { "Square", GTK_SIGNAL_FUNC (ctree_toggle_expander_style) },
5710 { "Triangle", GTK_SIGNAL_FUNC (ctree_toggle_expander_style) },
5711 { "Circular", GTK_SIGNAL_FUNC (ctree_toggle_expander_style) }
5714 static OptionMenuItem items3[] =
5716 { "Left", GTK_SIGNAL_FUNC (ctree_toggle_justify) },
5717 { "Right", GTK_SIGNAL_FUNC (ctree_toggle_justify) }
5720 static OptionMenuItem items4[] =
5722 { "Single", GTK_SIGNAL_FUNC (ctree_toggle_sel_mode) },
5723 { "Browse", GTK_SIGNAL_FUNC (ctree_toggle_sel_mode) },
5724 { "Multiple", GTK_SIGNAL_FUNC (ctree_toggle_sel_mode) },
5725 { "Extended", GTK_SIGNAL_FUNC (ctree_toggle_sel_mode) }
5730 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
5732 gtk_signal_connect (GTK_OBJECT (window), "destroy",
5733 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
5736 gtk_window_set_title (GTK_WINDOW (window), "GtkCTree");
5737 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
5739 tooltips = gtk_tooltips_new ();
5740 gtk_object_ref (GTK_OBJECT (tooltips));
5741 gtk_object_sink (GTK_OBJECT (tooltips));
5743 gtk_object_set_data_full (GTK_OBJECT (window), "tooltips", tooltips,
5744 (GtkDestroyNotify) gtk_object_unref);
5746 vbox = gtk_vbox_new (FALSE, 0);
5747 gtk_container_add (GTK_CONTAINER (window), vbox);
5749 hbox = gtk_hbox_new (FALSE, 5);
5750 gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
5751 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0);
5753 label = gtk_label_new ("Depth :");
5754 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
5756 adj = (GtkAdjustment *) gtk_adjustment_new (4, 1, 10, 1, 5, 0);
5757 spin1 = gtk_spin_button_new (adj, 0, 0);
5758 gtk_box_pack_start (GTK_BOX (hbox), spin1, FALSE, TRUE, 5);
5760 label = gtk_label_new ("Books :");
5761 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
5763 adj = (GtkAdjustment *) gtk_adjustment_new (3, 1, 20, 1, 5, 0);
5764 spin2 = gtk_spin_button_new (adj, 0, 0);
5765 gtk_box_pack_start (GTK_BOX (hbox), spin2, FALSE, TRUE, 5);
5767 label = gtk_label_new ("Pages :");
5768 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
5770 adj = (GtkAdjustment *) gtk_adjustment_new (5, 1, 20, 1, 5, 0);
5771 spin3 = gtk_spin_button_new (adj, 0, 0);
5772 gtk_box_pack_start (GTK_BOX (hbox), spin3, FALSE, TRUE, 5);
5774 button = gtk_button_new_with_label ("Close");
5775 gtk_box_pack_end (GTK_BOX (hbox), button, TRUE, TRUE, 0);
5777 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
5778 (GtkSignalFunc) gtk_widget_destroy,
5779 GTK_OBJECT(window));
5781 button = gtk_button_new_with_label ("Rebuild Tree");
5782 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
5784 scrolled_win = gtk_scrolled_window_new (NULL, NULL);
5785 gtk_container_set_border_width (GTK_CONTAINER (scrolled_win), 5);
5786 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win),
5787 GTK_POLICY_AUTOMATIC,
5789 gtk_box_pack_start (GTK_BOX (vbox), scrolled_win, TRUE, TRUE, 0);
5791 ctree = GTK_CTREE (gtk_ctree_new_with_titles (2, 0, title));
5792 gtk_container_add (GTK_CONTAINER (scrolled_win), GTK_WIDGET (ctree));
5794 gtk_clist_set_column_auto_resize (GTK_CLIST (ctree), 0, TRUE);
5795 gtk_clist_set_column_width (GTK_CLIST (ctree), 1, 200);
5796 gtk_clist_set_selection_mode (GTK_CLIST (ctree), GTK_SELECTION_EXTENDED);
5797 gtk_ctree_set_line_style (ctree, GTK_CTREE_LINES_DOTTED);
5798 line_style = GTK_CTREE_LINES_DOTTED;
5800 gtk_signal_connect (GTK_OBJECT (button), "clicked",
5801 GTK_SIGNAL_FUNC (rebuild_tree), ctree);
5802 gtk_signal_connect (GTK_OBJECT (ctree), "click_column",
5803 (GtkSignalFunc) ctree_click_column, NULL);
5805 gtk_signal_connect_after (GTK_OBJECT (ctree), "button_press_event",
5806 GTK_SIGNAL_FUNC (after_press), NULL);
5807 gtk_signal_connect_after (GTK_OBJECT (ctree), "button_release_event",
5808 GTK_SIGNAL_FUNC (after_press), NULL);
5809 gtk_signal_connect_after (GTK_OBJECT (ctree), "tree_move",
5810 GTK_SIGNAL_FUNC (after_move), NULL);
5811 gtk_signal_connect_after (GTK_OBJECT (ctree), "end_selection",
5812 GTK_SIGNAL_FUNC (after_press), NULL);
5813 gtk_signal_connect_after (GTK_OBJECT (ctree), "toggle_focus_row",
5814 GTK_SIGNAL_FUNC (after_press), NULL);
5815 gtk_signal_connect_after (GTK_OBJECT (ctree), "select_all",
5816 GTK_SIGNAL_FUNC (after_press), NULL);
5817 gtk_signal_connect_after (GTK_OBJECT (ctree), "unselect_all",
5818 GTK_SIGNAL_FUNC (after_press), NULL);
5819 gtk_signal_connect_after (GTK_OBJECT (ctree), "scroll_vertical",
5820 GTK_SIGNAL_FUNC (after_press), NULL);
5822 bbox = gtk_hbox_new (FALSE, 5);
5823 gtk_container_set_border_width (GTK_CONTAINER (bbox), 5);
5824 gtk_box_pack_start (GTK_BOX (vbox), bbox, FALSE, TRUE, 0);
5826 mbox = gtk_vbox_new (TRUE, 5);
5827 gtk_box_pack_start (GTK_BOX (bbox), mbox, FALSE, TRUE, 0);
5829 label = gtk_label_new ("Row Height :");
5830 gtk_box_pack_start (GTK_BOX (mbox), label, FALSE, FALSE, 0);
5832 label = gtk_label_new ("Indent :");
5833 gtk_box_pack_start (GTK_BOX (mbox), label, FALSE, FALSE, 0);
5835 label = gtk_label_new ("Spacing :");
5836 gtk_box_pack_start (GTK_BOX (mbox), label, FALSE, FALSE, 0);
5838 mbox = gtk_vbox_new (TRUE, 5);
5839 gtk_box_pack_start (GTK_BOX (bbox), mbox, FALSE, TRUE, 0);
5841 adj = (GtkAdjustment *) gtk_adjustment_new (20, 12, 100, 1, 10, 0);
5842 spinner = gtk_spin_button_new (adj, 0, 0);
5843 gtk_box_pack_start (GTK_BOX (mbox), spinner, FALSE, FALSE, 5);
5844 gtk_tooltips_set_tip (tooltips, spinner,
5845 "Row height of list items", NULL);
5846 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
5847 GTK_SIGNAL_FUNC (change_row_height), ctree);
5848 gtk_clist_set_row_height ( GTK_CLIST (ctree), adj->value);
5850 adj = (GtkAdjustment *) gtk_adjustment_new (20, 0, 60, 1, 10, 0);
5851 spinner = gtk_spin_button_new (adj, 0, 0);
5852 gtk_box_pack_start (GTK_BOX (mbox), spinner, FALSE, FALSE, 5);
5853 gtk_tooltips_set_tip (tooltips, spinner, "Tree Indentation.", NULL);
5854 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
5855 GTK_SIGNAL_FUNC (change_indent), ctree);
5857 adj = (GtkAdjustment *) gtk_adjustment_new (5, 0, 60, 1, 10, 0);
5858 spinner = gtk_spin_button_new (adj, 0, 0);
5859 gtk_box_pack_start (GTK_BOX (mbox), spinner, FALSE, FALSE, 5);
5860 gtk_tooltips_set_tip (tooltips, spinner, "Tree Spacing.", NULL);
5861 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
5862 GTK_SIGNAL_FUNC (change_spacing), ctree);
5864 mbox = gtk_vbox_new (TRUE, 5);
5865 gtk_box_pack_start (GTK_BOX (bbox), mbox, FALSE, TRUE, 0);
5867 hbox = gtk_hbox_new (FALSE, 5);
5868 gtk_box_pack_start (GTK_BOX (mbox), hbox, FALSE, FALSE, 0);
5870 button = gtk_button_new_with_label ("Expand All");
5871 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
5872 gtk_signal_connect (GTK_OBJECT (button), "clicked",
5873 GTK_SIGNAL_FUNC (expand_all), ctree);
5875 button = gtk_button_new_with_label ("Collapse All");
5876 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
5877 gtk_signal_connect (GTK_OBJECT (button), "clicked",
5878 GTK_SIGNAL_FUNC (collapse_all), ctree);
5880 button = gtk_button_new_with_label ("Change Style");
5881 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
5882 gtk_signal_connect (GTK_OBJECT (button), "clicked",
5883 GTK_SIGNAL_FUNC (change_style), ctree);
5885 button = gtk_button_new_with_label ("Export Tree");
5886 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
5887 gtk_signal_connect (GTK_OBJECT (button), "clicked",
5888 GTK_SIGNAL_FUNC (export_ctree), ctree);
5890 hbox = gtk_hbox_new (FALSE, 5);
5891 gtk_box_pack_start (GTK_BOX (mbox), hbox, FALSE, FALSE, 0);
5893 button = gtk_button_new_with_label ("Select All");
5894 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
5895 gtk_signal_connect (GTK_OBJECT (button), "clicked",
5896 GTK_SIGNAL_FUNC (select_all), ctree);
5898 button = gtk_button_new_with_label ("Unselect All");
5899 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
5900 gtk_signal_connect (GTK_OBJECT (button), "clicked",
5901 GTK_SIGNAL_FUNC (unselect_all), ctree);
5903 button = gtk_button_new_with_label ("Remove Selection");
5904 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
5905 gtk_signal_connect (GTK_OBJECT (button), "clicked",
5906 GTK_SIGNAL_FUNC (remove_selection), ctree);
5908 check = gtk_check_button_new_with_label ("Reorderable");
5909 gtk_box_pack_start (GTK_BOX (hbox), check, FALSE, TRUE, 0);
5910 gtk_tooltips_set_tip (tooltips, check,
5911 "Tree items can be reordered by dragging.", NULL);
5912 gtk_signal_connect (GTK_OBJECT (check), "clicked",
5913 GTK_SIGNAL_FUNC (toggle_reorderable), ctree);
5914 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check), TRUE);
5916 hbox = gtk_hbox_new (TRUE, 5);
5917 gtk_box_pack_start (GTK_BOX (mbox), hbox, FALSE, FALSE, 0);
5919 omenu1 = build_option_menu (items1, 4, 2, ctree);
5920 gtk_box_pack_start (GTK_BOX (hbox), omenu1, FALSE, TRUE, 0);
5921 gtk_tooltips_set_tip (tooltips, omenu1, "The tree's line style.", NULL);
5923 omenu2 = build_option_menu (items2, 4, 1, ctree);
5924 gtk_box_pack_start (GTK_BOX (hbox), omenu2, FALSE, TRUE, 0);
5925 gtk_tooltips_set_tip (tooltips, omenu2, "The tree's expander style.",
5928 omenu3 = build_option_menu (items3, 2, 0, ctree);
5929 gtk_box_pack_start (GTK_BOX (hbox), omenu3, FALSE, TRUE, 0);
5930 gtk_tooltips_set_tip (tooltips, omenu3, "The tree's justification.",
5933 omenu4 = build_option_menu (items4, 4, 3, ctree);
5934 gtk_box_pack_start (GTK_BOX (hbox), omenu4, FALSE, TRUE, 0);
5935 gtk_tooltips_set_tip (tooltips, omenu4, "The list's selection mode.",
5938 gtk_widget_realize (window);
5941 pixmap1 = gdk_pixmap_create_from_xpm_d (window->window, &mask1,
5942 &transparent, book_closed_xpm);
5944 pixmap2 = gdk_pixmap_create_from_xpm_d (window->window, &mask2,
5945 &transparent, book_open_xpm);
5947 pixmap3 = gdk_pixmap_create_from_xpm_d (window->window, &mask3,
5948 &transparent, mini_page_xpm);
5950 gtk_widget_set_usize (GTK_WIDGET (ctree), 0, 300);
5952 frame = gtk_frame_new (NULL);
5953 gtk_container_set_border_width (GTK_CONTAINER (frame), 0);
5954 gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_OUT);
5955 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, TRUE, 0);
5957 hbox = gtk_hbox_new (TRUE, 2);
5958 gtk_container_set_border_width (GTK_CONTAINER (hbox), 2);
5959 gtk_container_add (GTK_CONTAINER (frame), hbox);
5961 frame = gtk_frame_new (NULL);
5962 gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN);
5963 gtk_box_pack_start (GTK_BOX (hbox), frame, FALSE, TRUE, 0);
5965 hbox2 = gtk_hbox_new (FALSE, 0);
5966 gtk_container_set_border_width (GTK_CONTAINER (hbox2), 2);
5967 gtk_container_add (GTK_CONTAINER (frame), hbox2);
5969 label = gtk_label_new ("Books :");
5970 gtk_box_pack_start (GTK_BOX (hbox2), label, FALSE, TRUE, 0);
5972 sprintf (buf, "%d", books);
5973 book_label = gtk_label_new (buf);
5974 gtk_box_pack_end (GTK_BOX (hbox2), book_label, FALSE, TRUE, 5);
5976 frame = gtk_frame_new (NULL);
5977 gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN);
5978 gtk_box_pack_start (GTK_BOX (hbox), frame, FALSE, TRUE, 0);
5980 hbox2 = gtk_hbox_new (FALSE, 0);
5981 gtk_container_set_border_width (GTK_CONTAINER (hbox2), 2);
5982 gtk_container_add (GTK_CONTAINER (frame), hbox2);
5984 label = gtk_label_new ("Pages :");
5985 gtk_box_pack_start (GTK_BOX (hbox2), label, FALSE, TRUE, 0);
5987 sprintf (buf, "%d", pages);
5988 page_label = gtk_label_new (buf);
5989 gtk_box_pack_end (GTK_BOX (hbox2), page_label, FALSE, TRUE, 5);
5991 frame = gtk_frame_new (NULL);
5992 gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN);
5993 gtk_box_pack_start (GTK_BOX (hbox), frame, FALSE, TRUE, 0);
5995 hbox2 = gtk_hbox_new (FALSE, 0);
5996 gtk_container_set_border_width (GTK_CONTAINER (hbox2), 2);
5997 gtk_container_add (GTK_CONTAINER (frame), hbox2);
5999 label = gtk_label_new ("Selected :");
6000 gtk_box_pack_start (GTK_BOX (hbox2), label, FALSE, TRUE, 0);
6002 sprintf (buf, "%d", g_list_length (GTK_CLIST (ctree)->selection));
6003 sel_label = gtk_label_new (buf);
6004 gtk_box_pack_end (GTK_BOX (hbox2), sel_label, FALSE, TRUE, 5);
6006 frame = gtk_frame_new (NULL);
6007 gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN);
6008 gtk_box_pack_start (GTK_BOX (hbox), frame, FALSE, TRUE, 0);
6010 hbox2 = gtk_hbox_new (FALSE, 0);
6011 gtk_container_set_border_width (GTK_CONTAINER (hbox2), 2);
6012 gtk_container_add (GTK_CONTAINER (frame), hbox2);
6014 label = gtk_label_new ("Visible :");
6015 gtk_box_pack_start (GTK_BOX (hbox2), label, FALSE, TRUE, 0);
6017 sprintf (buf, "%d", g_list_length (GTK_CLIST (ctree)->row_list));
6018 vis_label = gtk_label_new (buf);
6019 gtk_box_pack_end (GTK_BOX (hbox2), vis_label, FALSE, TRUE, 5);
6021 rebuild_tree (NULL, ctree);
6024 if (!GTK_WIDGET_VISIBLE (window))
6025 gtk_widget_show_all (window);
6027 gtk_widget_destroy (window);
6035 color_selection_ok (GtkWidget *w,
6036 GtkColorSelectionDialog *cs)
6038 GtkColorSelection *colorsel;
6041 colorsel=GTK_COLOR_SELECTION(cs->colorsel);
6043 gtk_color_selection_get_color(colorsel,color);
6044 gtk_color_selection_set_color(colorsel,color);
6048 color_selection_changed (GtkWidget *w,
6049 GtkColorSelectionDialog *cs)
6051 GtkColorSelection *colorsel;
6054 colorsel=GTK_COLOR_SELECTION(cs->colorsel);
6055 gtk_color_selection_get_color(colorsel,color);
6059 opacity_toggled_cb (GtkWidget *w,
6060 GtkColorSelectionDialog *cs)
6062 GtkColorSelection *colorsel;
6064 colorsel = GTK_COLOR_SELECTION (cs->colorsel);
6065 gtk_color_selection_set_use_opacity (colorsel,
6066 gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (w)));
6070 palette_toggled_cb (GtkWidget *w,
6071 GtkColorSelectionDialog *cs)
6073 GtkColorSelection *colorsel;
6075 colorsel = GTK_COLOR_SELECTION (cs->colorsel);
6076 gtk_color_selection_set_use_palette (colorsel,
6077 gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (w)));
6081 create_color_selection (void)
6083 static GtkWidget *window = NULL;
6087 GtkWidget *options_hbox;
6088 GtkWidget *check_button;
6090 window = gtk_color_selection_dialog_new ("color selection dialog");
6092 gtk_window_set_position (GTK_WINDOW (window), GTK_WIN_POS_MOUSE);
6094 gtk_signal_connect (GTK_OBJECT (window), "destroy",
6095 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
6098 options_hbox = gtk_hbox_new (FALSE, 0);
6099 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox), options_hbox, FALSE, FALSE, 0);
6100 gtk_container_set_border_width (GTK_CONTAINER (options_hbox), 10);
6102 check_button = gtk_check_button_new_with_label ("Show Opacity");
6103 gtk_box_pack_start (GTK_BOX (options_hbox), check_button, FALSE, FALSE, 0);
6104 gtk_signal_connect (GTK_OBJECT (check_button), "toggled",
6105 GTK_SIGNAL_FUNC (opacity_toggled_cb), window);
6107 check_button = gtk_check_button_new_with_label ("Show Palette");
6108 gtk_box_pack_end (GTK_BOX (options_hbox), check_button, FALSE, FALSE, 0);
6109 gtk_signal_connect (GTK_OBJECT (check_button), "toggled",
6110 GTK_SIGNAL_FUNC (palette_toggled_cb), window);
6112 gtk_widget_show_all (options_hbox);
6114 gtk_signal_connect (
6115 GTK_OBJECT (GTK_COLOR_SELECTION_DIALOG (window)->colorsel),
6117 GTK_SIGNAL_FUNC(color_selection_changed),
6120 gtk_signal_connect (
6121 GTK_OBJECT (GTK_COLOR_SELECTION_DIALOG (window)->ok_button),
6123 GTK_SIGNAL_FUNC(color_selection_ok),
6126 gtk_signal_connect_object (
6127 GTK_OBJECT (GTK_COLOR_SELECTION_DIALOG (window)->cancel_button),
6129 GTK_SIGNAL_FUNC(gtk_widget_destroy),
6130 GTK_OBJECT (window));
6133 if (!GTK_WIDGET_VISIBLE (window))
6134 gtk_widget_show (window);
6136 gtk_widget_destroy (window);
6144 file_selection_hide_fileops (GtkWidget *widget,
6145 GtkFileSelection *fs)
6147 gtk_file_selection_hide_fileop_buttons (fs);
6151 file_selection_ok (GtkWidget *w,
6152 GtkFileSelection *fs)
6154 g_print ("%s\n", gtk_file_selection_get_filename (fs));
6155 gtk_widget_destroy (GTK_WIDGET (fs));
6159 create_file_selection (void)
6161 static GtkWidget *window = NULL;
6166 window = gtk_file_selection_new ("file selection dialog");
6168 gtk_file_selection_hide_fileop_buttons (GTK_FILE_SELECTION (window));
6170 gtk_window_set_position (GTK_WINDOW (window), GTK_WIN_POS_MOUSE);
6172 gtk_signal_connect (GTK_OBJECT (window), "destroy",
6173 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
6176 gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (window)->ok_button),
6177 "clicked", GTK_SIGNAL_FUNC(file_selection_ok),
6179 gtk_signal_connect_object (GTK_OBJECT (GTK_FILE_SELECTION (window)->cancel_button),
6180 "clicked", GTK_SIGNAL_FUNC(gtk_widget_destroy),
6181 GTK_OBJECT (window));
6183 button = gtk_button_new_with_label ("Hide Fileops");
6184 gtk_signal_connect (GTK_OBJECT (button), "clicked",
6185 (GtkSignalFunc) file_selection_hide_fileops,
6187 gtk_box_pack_start (GTK_BOX (GTK_FILE_SELECTION (window)->action_area),
6188 button, FALSE, FALSE, 0);
6189 gtk_widget_show (button);
6191 button = gtk_button_new_with_label ("Show Fileops");
6192 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
6193 (GtkSignalFunc) gtk_file_selection_show_fileop_buttons,
6195 gtk_box_pack_start (GTK_BOX (GTK_FILE_SELECTION (window)->action_area),
6196 button, FALSE, FALSE, 0);
6197 gtk_widget_show (button);
6200 if (!GTK_WIDGET_VISIBLE (window))
6201 gtk_widget_show (window);
6203 gtk_widget_destroy (window);
6207 flipping_toggled_cb (GtkWidget *widget, gpointer data)
6209 int state = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget));
6210 int new_direction = state ? GTK_TEXT_DIR_RTL : GTK_TEXT_DIR_LTR;
6212 gtk_widget_set_default_direction (new_direction);
6216 create_flipping (void)
6218 static GtkWidget *window = NULL;
6219 GtkWidget *check_button, *button;
6223 window = gtk_dialog_new ();
6225 gtk_signal_connect (GTK_OBJECT (window), "destroy",
6226 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
6229 gtk_window_set_title (GTK_WINDOW (window), "Bidirectional Flipping");
6231 check_button = gtk_check_button_new_with_label ("Right-to-left global direction");
6232 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox),
6233 check_button, TRUE, TRUE, 0);
6235 if (gtk_widget_get_default_direction () == GTK_TEXT_DIR_RTL)
6236 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check_button), TRUE);
6238 gtk_signal_connect (GTK_OBJECT (check_button), "toggled",
6239 GTK_SIGNAL_FUNC (flipping_toggled_cb), FALSE);
6241 gtk_container_set_border_width (GTK_CONTAINER (check_button), 10);
6243 button = gtk_button_new_with_label ("Close");
6244 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
6245 GTK_SIGNAL_FUNC (gtk_widget_destroy), GTK_OBJECT (window));
6246 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
6247 button, TRUE, TRUE, 0);
6250 if (!GTK_WIDGET_VISIBLE (window))
6251 gtk_widget_show_all (window);
6253 gtk_widget_destroy (window);
6261 make_focus_table (GList **list)
6266 table = gtk_table_new (5, 5, FALSE);
6279 widget = gtk_entry_new ();
6281 widget = gtk_button_new_with_label ("Foo");
6283 *list = g_list_prepend (*list, widget);
6285 gtk_table_attach (GTK_TABLE (table),
6289 GTK_EXPAND | GTK_FILL,
6290 GTK_EXPAND | GTK_FILL,
6299 *list = g_list_reverse (*list);
6307 static GtkWidget *window = NULL;
6315 window = gtk_dialog_new_with_buttons ("Keyboard focus navigation",
6317 GTK_STOCK_BUTTON_CLOSE,
6321 gtk_signal_connect (GTK_OBJECT (window), "destroy",
6322 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
6325 gtk_signal_connect (GTK_OBJECT (window), "response",
6326 GTK_SIGNAL_FUNC (gtk_widget_destroy),
6329 gtk_window_set_title (GTK_WINDOW (window), "Keyboard Focus Navigation");
6331 frame = gtk_frame_new ("Weird tab focus chain");
6333 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox),
6334 frame, TRUE, TRUE, 0);
6336 table = make_focus_table (&list);
6338 gtk_container_add (GTK_CONTAINER (frame), table);
6340 gtk_container_set_focus_chain (GTK_CONTAINER (table),
6345 frame = gtk_frame_new ("Default tab focus chain");
6347 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox),
6348 frame, TRUE, TRUE, 0);
6351 table = make_focus_table (&list);
6355 gtk_container_add (GTK_CONTAINER (frame), table);
6358 if (!GTK_WIDGET_VISIBLE (window))
6359 gtk_widget_show_all (window);
6361 gtk_widget_destroy (window);
6369 font_selection_ok (GtkWidget *w,
6370 GtkFontSelectionDialog *fs)
6372 gchar *s = gtk_font_selection_dialog_get_font_name (fs);
6374 g_print ("%s\n", s);
6376 gtk_widget_destroy (GTK_WIDGET (fs));
6380 create_font_selection (void)
6382 static GtkWidget *window = NULL;
6386 window = gtk_font_selection_dialog_new ("Font Selection Dialog");
6388 gtk_window_set_position (GTK_WINDOW (window), GTK_WIN_POS_MOUSE);
6390 gtk_signal_connect (GTK_OBJECT (window), "destroy",
6391 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
6394 gtk_signal_connect (GTK_OBJECT (GTK_FONT_SELECTION_DIALOG (window)->ok_button),
6395 "clicked", GTK_SIGNAL_FUNC(font_selection_ok),
6396 GTK_FONT_SELECTION_DIALOG (window));
6397 gtk_signal_connect_object (GTK_OBJECT (GTK_FONT_SELECTION_DIALOG (window)->cancel_button),
6398 "clicked", GTK_SIGNAL_FUNC(gtk_widget_destroy),
6399 GTK_OBJECT (window));
6402 if (!GTK_WIDGET_VISIBLE (window))
6403 gtk_widget_show (window);
6405 gtk_widget_destroy (window);
6412 static GtkWidget *dialog_window = NULL;
6415 label_toggle (GtkWidget *widget,
6420 *label = gtk_label_new ("Dialog Test");
6421 gtk_signal_connect (GTK_OBJECT (*label),
6423 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
6425 gtk_misc_set_padding (GTK_MISC (*label), 10, 10);
6426 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog_window)->vbox),
6427 *label, TRUE, TRUE, 0);
6428 gtk_widget_show (*label);
6431 gtk_widget_destroy (*label);
6434 #define RESPONSE_TOGGLE_SEPARATOR 1
6437 print_response (GtkWidget *dialog,
6441 g_print ("response signal received (%d)\n", response_id);
6443 if (response_id == RESPONSE_TOGGLE_SEPARATOR)
6445 gtk_dialog_set_has_separator (GTK_DIALOG (dialog),
6446 !gtk_dialog_get_has_separator (GTK_DIALOG (dialog)));
6451 create_dialog (void)
6453 static GtkWidget *label;
6458 /* This is a terrible example; it's much simpler to create
6459 * dialogs than this. Don't use testgtk for example code,
6463 dialog_window = gtk_dialog_new ();
6465 gtk_signal_connect (GTK_OBJECT (dialog_window),
6467 GTK_SIGNAL_FUNC (print_response),
6470 gtk_signal_connect (GTK_OBJECT (dialog_window), "destroy",
6471 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
6474 gtk_window_set_title (GTK_WINDOW (dialog_window), "GtkDialog");
6475 gtk_container_set_border_width (GTK_CONTAINER (dialog_window), 0);
6477 button = gtk_button_new_with_label ("OK");
6478 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
6479 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog_window)->action_area),
6480 button, TRUE, TRUE, 0);
6481 gtk_widget_grab_default (button);
6482 gtk_widget_show (button);
6484 button = gtk_button_new_with_label ("Toggle");
6485 gtk_signal_connect (GTK_OBJECT (button), "clicked",
6486 GTK_SIGNAL_FUNC (label_toggle),
6488 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
6489 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog_window)->action_area),
6490 button, TRUE, TRUE, 0);
6491 gtk_widget_show (button);
6495 button = gtk_button_new_with_label ("Separator");
6497 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
6499 gtk_dialog_add_action_widget (GTK_DIALOG (dialog_window),
6501 RESPONSE_TOGGLE_SEPARATOR);
6502 gtk_widget_show (button);
6505 if (!GTK_WIDGET_VISIBLE (dialog_window))
6506 gtk_widget_show (dialog_window);
6508 gtk_widget_destroy (dialog_window);
6513 static gboolean event_watcher_enter_id = 0;
6514 static gboolean event_watcher_leave_id = 0;
6517 event_watcher (GSignalInvocationHint *ihint,
6518 guint n_param_values,
6519 const GValue *param_values,
6522 g_print ("Watch: \"%s\" emitted for %s\n",
6523 gtk_signal_name (ihint->signal_id),
6524 gtk_type_name (GTK_OBJECT_TYPE (g_value_get_object (param_values + 0))));
6530 event_watcher_down (void)
6532 if (event_watcher_enter_id)
6536 signal_id = gtk_signal_lookup ("enter_notify_event", GTK_TYPE_WIDGET);
6537 g_signal_remove_emission_hook (signal_id, event_watcher_enter_id);
6538 event_watcher_enter_id = 0;
6539 signal_id = gtk_signal_lookup ("leave_notify_event", GTK_TYPE_WIDGET);
6540 g_signal_remove_emission_hook (signal_id, event_watcher_leave_id);
6541 event_watcher_leave_id = 0;
6546 event_watcher_toggle (void)
6548 if (event_watcher_enter_id)
6549 event_watcher_down ();
6554 signal_id = gtk_signal_lookup ("enter_notify_event", GTK_TYPE_WIDGET);
6555 event_watcher_enter_id = g_signal_add_emission_hook (signal_id, 0, event_watcher, NULL, NULL);
6556 signal_id = gtk_signal_lookup ("leave_notify_event", GTK_TYPE_WIDGET);
6557 event_watcher_leave_id = g_signal_add_emission_hook (signal_id, 0, event_watcher, NULL, NULL);
6562 create_event_watcher (void)
6568 dialog_window = gtk_dialog_new ();
6570 gtk_signal_connect (GTK_OBJECT (dialog_window), "destroy",
6571 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
6573 gtk_signal_connect (GTK_OBJECT (dialog_window),
6575 GTK_SIGNAL_FUNC (event_watcher_down),
6578 gtk_window_set_title (GTK_WINDOW (dialog_window), "Event Watcher");
6579 gtk_container_set_border_width (GTK_CONTAINER (dialog_window), 0);
6580 gtk_widget_set_usize (dialog_window, 200, 110);
6582 button = gtk_toggle_button_new_with_label ("Activate Watch");
6583 gtk_signal_connect (GTK_OBJECT (button), "clicked",
6584 GTK_SIGNAL_FUNC (event_watcher_toggle),
6586 gtk_container_set_border_width (GTK_CONTAINER (button), 10);
6587 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog_window)->vbox),
6588 button, TRUE, TRUE, 0);
6589 gtk_widget_show (button);
6591 button = gtk_button_new_with_label ("Close");
6592 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
6593 GTK_SIGNAL_FUNC (gtk_widget_destroy),
6594 (GtkObject*) dialog_window);
6595 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
6596 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog_window)->action_area),
6597 button, TRUE, TRUE, 0);
6598 gtk_widget_grab_default (button);
6599 gtk_widget_show (button);
6602 if (!GTK_WIDGET_VISIBLE (dialog_window))
6603 gtk_widget_show (dialog_window);
6605 gtk_widget_destroy (dialog_window);
6613 create_range_controls (void)
6615 static GtkWidget *window = NULL;
6619 GtkWidget *scrollbar;
6621 GtkWidget *separator;
6622 GtkObject *adjustment;
6627 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
6629 gtk_signal_connect (GTK_OBJECT (window), "destroy",
6630 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
6633 gtk_window_set_title (GTK_WINDOW (window), "range controls");
6634 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
6637 box1 = gtk_vbox_new (FALSE, 0);
6638 gtk_container_add (GTK_CONTAINER (window), box1);
6639 gtk_widget_show (box1);
6642 box2 = gtk_vbox_new (FALSE, 10);
6643 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
6644 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
6645 gtk_widget_show (box2);
6648 adjustment = gtk_adjustment_new (0.0, 0.0, 101.0, 0.1, 1.0, 1.0);
6650 scale = gtk_hscale_new (GTK_ADJUSTMENT (adjustment));
6651 gtk_widget_set_usize (GTK_WIDGET (scale), 150, 30);
6652 gtk_range_set_update_policy (GTK_RANGE (scale), GTK_UPDATE_DELAYED);
6653 gtk_scale_set_digits (GTK_SCALE (scale), 1);
6654 gtk_scale_set_draw_value (GTK_SCALE (scale), TRUE);
6655 gtk_box_pack_start (GTK_BOX (box2), scale, TRUE, TRUE, 0);
6656 gtk_widget_show (scale);
6658 scrollbar = gtk_hscrollbar_new (GTK_ADJUSTMENT (adjustment));
6659 gtk_range_set_update_policy (GTK_RANGE (scrollbar),
6660 GTK_UPDATE_CONTINUOUS);
6661 gtk_box_pack_start (GTK_BOX (box2), scrollbar, TRUE, TRUE, 0);
6662 gtk_widget_show (scrollbar);
6664 hbox = gtk_hbox_new (FALSE, 0);
6666 scale = gtk_vscale_new (GTK_ADJUSTMENT (adjustment));
6667 gtk_widget_set_usize (scale, -1, 200);
6668 gtk_scale_set_digits (GTK_SCALE (scale), 2);
6669 gtk_scale_set_draw_value (GTK_SCALE (scale), TRUE);
6670 gtk_box_pack_start (GTK_BOX (hbox), scale, TRUE, TRUE, 0);
6671 gtk_widget_show (scale);
6673 scale = gtk_vscale_new (GTK_ADJUSTMENT (adjustment));
6674 gtk_widget_set_usize (scale, -1, 200);
6675 gtk_scale_set_digits (GTK_SCALE (scale), 2);
6676 gtk_scale_set_draw_value (GTK_SCALE (scale), TRUE);
6677 gtk_range_set_inverted (GTK_RANGE (scale), TRUE);
6678 gtk_box_pack_start (GTK_BOX (hbox), scale, TRUE, TRUE, 0);
6679 gtk_widget_show (scale);
6681 gtk_box_pack_start (GTK_BOX (box2), hbox, TRUE, TRUE, 0);
6682 gtk_widget_show (hbox);
6684 separator = gtk_hseparator_new ();
6685 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
6686 gtk_widget_show (separator);
6689 box2 = gtk_vbox_new (FALSE, 10);
6690 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
6691 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
6692 gtk_widget_show (box2);
6695 button = gtk_button_new_with_label ("close");
6696 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
6697 GTK_SIGNAL_FUNC(gtk_widget_destroy),
6698 GTK_OBJECT (window));
6699 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
6700 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
6701 gtk_widget_grab_default (button);
6702 gtk_widget_show (button);
6705 if (!GTK_WIDGET_VISIBLE (window))
6706 gtk_widget_show (window);
6708 gtk_widget_destroy (window);
6716 create_rulers (void)
6718 static GtkWidget *window = NULL;
6724 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
6725 gtk_window_set_policy (GTK_WINDOW (window), TRUE, TRUE, FALSE);
6727 gtk_signal_connect (GTK_OBJECT (window), "destroy",
6728 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
6731 gtk_window_set_title (GTK_WINDOW (window), "rulers");
6732 gtk_widget_set_usize (window, 300, 300);
6733 gtk_widget_set_events (window,
6734 GDK_POINTER_MOTION_MASK
6735 | GDK_POINTER_MOTION_HINT_MASK);
6736 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
6738 table = gtk_table_new (2, 2, FALSE);
6739 gtk_container_add (GTK_CONTAINER (window), table);
6740 gtk_widget_show (table);
6742 ruler = gtk_hruler_new ();
6743 gtk_ruler_set_metric (GTK_RULER (ruler), GTK_CENTIMETERS);
6744 gtk_ruler_set_range (GTK_RULER (ruler), 100, 0, 0, 20);
6746 gtk_signal_connect_object (GTK_OBJECT (window),
6747 "motion_notify_event",
6748 GTK_SIGNAL_FUNC (GTK_WIDGET_GET_CLASS (ruler)->motion_notify_event),
6749 GTK_OBJECT (ruler));
6751 gtk_table_attach (GTK_TABLE (table), ruler, 1, 2, 0, 1,
6752 GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 0);
6753 gtk_widget_show (ruler);
6756 ruler = gtk_vruler_new ();
6757 gtk_ruler_set_range (GTK_RULER (ruler), 5, 15, 0, 20);
6759 gtk_signal_connect_object (GTK_OBJECT (window),
6760 "motion_notify_event",
6761 GTK_SIGNAL_FUNC (GTK_WIDGET_GET_CLASS (ruler)->motion_notify_event),
6762 GTK_OBJECT (ruler));
6764 gtk_table_attach (GTK_TABLE (table), ruler, 0, 1, 1, 2,
6765 GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
6766 gtk_widget_show (ruler);
6769 if (!GTK_WIDGET_VISIBLE (window))
6770 gtk_widget_show (window);
6772 gtk_widget_destroy (window);
6776 text_toggle_editable (GtkWidget *checkbutton,
6779 gtk_text_set_editable(GTK_TEXT(text),
6780 GTK_TOGGLE_BUTTON(checkbutton)->active);
6784 text_toggle_word_wrap (GtkWidget *checkbutton,
6787 gtk_text_set_word_wrap(GTK_TEXT(text),
6788 GTK_TOGGLE_BUTTON(checkbutton)->active);
6795 { { 0, 0x0000, 0x0000, 0x0000 }, "black" },
6796 { { 0, 0xFFFF, 0xFFFF, 0xFFFF }, "white" },
6797 { { 0, 0xFFFF, 0x0000, 0x0000 }, "red" },
6798 { { 0, 0x0000, 0xFFFF, 0x0000 }, "green" },
6799 { { 0, 0x0000, 0x0000, 0xFFFF }, "blue" },
6800 { { 0, 0x0000, 0xFFFF, 0xFFFF }, "cyan" },
6801 { { 0, 0xFFFF, 0x0000, 0xFFFF }, "magenta" },
6802 { { 0, 0xFFFF, 0xFFFF, 0x0000 }, "yellow" }
6805 int ntext_colors = sizeof(text_colors) / sizeof(text_colors[0]);
6811 text_insert_random (GtkWidget *w, GtkText *text)
6815 for (i=0; i<10; i++)
6817 c = 'A' + rand() % ('Z' - 'A');
6818 gtk_text_set_point (text, rand() % gtk_text_get_length (text));
6819 gtk_text_insert (text, NULL, NULL, NULL, &c, 1);
6828 static GtkWidget *window = NULL;
6834 GtkWidget *separator;
6835 GtkWidget *scrolled_window;
6842 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
6843 gtk_widget_set_name (window, "text window");
6844 gtk_widget_set_usize (window, 500, 500);
6845 gtk_window_set_policy (GTK_WINDOW(window), TRUE, TRUE, FALSE);
6847 gtk_signal_connect (GTK_OBJECT (window), "destroy",
6848 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
6851 gtk_window_set_title (GTK_WINDOW (window), "test");
6852 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
6855 box1 = gtk_vbox_new (FALSE, 0);
6856 gtk_container_add (GTK_CONTAINER (window), box1);
6857 gtk_widget_show (box1);
6860 box2 = gtk_vbox_new (FALSE, 10);
6861 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
6862 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
6863 gtk_widget_show (box2);
6866 scrolled_window = gtk_scrolled_window_new (NULL, NULL);
6867 gtk_box_pack_start (GTK_BOX (box2), scrolled_window, TRUE, TRUE, 0);
6868 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
6871 gtk_widget_show (scrolled_window);
6873 text = gtk_text_new (NULL, NULL);
6874 gtk_text_set_editable (GTK_TEXT (text), TRUE);
6875 gtk_container_add (GTK_CONTAINER (scrolled_window), text);
6876 gtk_widget_grab_focus (text);
6877 gtk_widget_show (text);
6880 gtk_text_freeze (GTK_TEXT (text));
6882 for (i=0; i<ntext_colors; i++)
6884 gtk_text_insert (GTK_TEXT (text), NULL, NULL, NULL,
6885 text_colors[i].name, -1);
6886 gtk_text_insert (GTK_TEXT (text), NULL, NULL, NULL, "\t", -1);
6888 for (j=0; j<ntext_colors; j++)
6890 gtk_text_insert (GTK_TEXT (text), NULL,
6891 &text_colors[j].color, &text_colors[i].color,
6894 gtk_text_insert (GTK_TEXT (text), NULL, NULL, NULL, "\n", -1);
6897 infile = fopen("testgtk.c", "r");
6902 int nbytes_read, nbytes_alloc;
6905 nbytes_alloc = 1024;
6906 buffer = g_new (char, nbytes_alloc);
6910 if (nbytes_alloc < nbytes_read + 1024)
6913 buffer = g_realloc (buffer, nbytes_alloc);
6915 len = fread (buffer + nbytes_read, 1, 1024, infile);
6921 gtk_text_insert (GTK_TEXT (text), NULL, NULL,
6922 NULL, buffer, nbytes_read);
6927 gtk_text_thaw (GTK_TEXT (text));
6929 hbox = gtk_hbutton_box_new ();
6930 gtk_box_pack_start (GTK_BOX (box2), hbox, FALSE, FALSE, 0);
6931 gtk_widget_show (hbox);
6933 check = gtk_check_button_new_with_label("Editable");
6934 gtk_box_pack_start (GTK_BOX (hbox), check, FALSE, FALSE, 0);
6935 gtk_signal_connect (GTK_OBJECT(check), "toggled",
6936 GTK_SIGNAL_FUNC(text_toggle_editable), text);
6937 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check), TRUE);
6938 gtk_widget_show (check);
6940 check = gtk_check_button_new_with_label("Wrap Words");
6941 gtk_box_pack_start (GTK_BOX (hbox), check, FALSE, TRUE, 0);
6942 gtk_signal_connect (GTK_OBJECT(check), "toggled",
6943 GTK_SIGNAL_FUNC(text_toggle_word_wrap), text);
6944 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check), FALSE);
6945 gtk_widget_show (check);
6947 separator = gtk_hseparator_new ();
6948 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
6949 gtk_widget_show (separator);
6952 box2 = gtk_vbox_new (FALSE, 10);
6953 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
6954 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
6955 gtk_widget_show (box2);
6958 button = gtk_button_new_with_label ("insert random");
6959 gtk_signal_connect (GTK_OBJECT (button), "clicked",
6960 GTK_SIGNAL_FUNC(text_insert_random),
6962 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
6963 gtk_widget_show (button);
6965 button = gtk_button_new_with_label ("close");
6966 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
6967 GTK_SIGNAL_FUNC(gtk_widget_destroy),
6968 GTK_OBJECT (window));
6969 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
6970 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
6971 gtk_widget_grab_default (button);
6972 gtk_widget_show (button);
6975 if (!GTK_WIDGET_VISIBLE (window))
6976 gtk_widget_show (window);
6978 gtk_widget_destroy (window);
6985 GdkPixmap *book_open;
6986 GdkPixmap *book_closed;
6987 GdkBitmap *book_open_mask;
6988 GdkBitmap *book_closed_mask;
6989 GtkWidget *sample_notebook;
6992 set_page_pixmaps (GtkNotebook *notebook, gint page_num,
6993 GdkPixmap *pixmap, GdkPixmap *mask)
6995 GtkWidget *page_widget;
6998 page_widget = gtk_notebook_get_nth_page (notebook, page_num);
7000 pixwid = gtk_object_get_data (GTK_OBJECT (page_widget), "tab_pixmap");
7001 gtk_pixmap_set (GTK_PIXMAP (pixwid), pixmap, mask);
7003 pixwid = gtk_object_get_data (GTK_OBJECT (page_widget), "menu_pixmap");
7004 gtk_pixmap_set (GTK_PIXMAP (pixwid), pixmap, mask);
7008 page_switch (GtkWidget *widget, GtkNotebookPage *page, gint page_num)
7010 GtkNotebook *notebook = GTK_NOTEBOOK (widget);
7011 gint old_page_num = gtk_notebook_get_current_page (notebook);
7013 if (page_num == old_page_num)
7016 set_page_pixmaps (notebook, page_num, book_open, book_open_mask);
7018 if (old_page_num != -1)
7019 set_page_pixmaps (notebook, old_page_num, book_closed, book_closed_mask);
7023 tab_fill (GtkToggleButton *button, GtkWidget *child)
7026 GtkPackType pack_type;
7028 gtk_notebook_query_tab_label_packing (GTK_NOTEBOOK (sample_notebook), child,
7029 &expand, NULL, &pack_type);
7030 gtk_notebook_set_tab_label_packing (GTK_NOTEBOOK (sample_notebook), child,
7031 expand, button->active, pack_type);
7035 tab_expand (GtkToggleButton *button, GtkWidget *child)
7038 GtkPackType pack_type;
7040 gtk_notebook_query_tab_label_packing (GTK_NOTEBOOK (sample_notebook), child,
7041 NULL, &fill, &pack_type);
7042 gtk_notebook_set_tab_label_packing (GTK_NOTEBOOK (sample_notebook), child,
7043 button->active, fill, pack_type);
7047 tab_pack (GtkToggleButton *button, GtkWidget *child)
7053 gtk_notebook_query_tab_label_packing (GTK_NOTEBOOK (sample_notebook), child,
7054 &expand, &fill, NULL);
7055 gtk_notebook_set_tab_label_packing (GTK_NOTEBOOK (sample_notebook), child,
7056 expand, fill, button->active);
7060 create_pages (GtkNotebook *notebook, gint start, gint end)
7062 GtkWidget *child = NULL;
7067 GtkWidget *label_box;
7068 GtkWidget *menu_box;
7072 char accel_buffer[32];
7074 for (i = start; i <= end; i++)
7076 sprintf (buffer, "Page %d", i);
7077 sprintf (accel_buffer, "Page _%d", i);
7079 child = gtk_frame_new (buffer);
7080 gtk_container_set_border_width (GTK_CONTAINER (child), 10);
7082 vbox = gtk_vbox_new (TRUE,0);
7083 gtk_container_set_border_width (GTK_CONTAINER (vbox), 10);
7084 gtk_container_add (GTK_CONTAINER (child), vbox);
7086 hbox = gtk_hbox_new (TRUE,0);
7087 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 5);
7089 button = gtk_check_button_new_with_label ("Fill Tab");
7090 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
7091 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE);
7092 gtk_signal_connect (GTK_OBJECT (button), "toggled",
7093 GTK_SIGNAL_FUNC (tab_fill), child);
7095 button = gtk_check_button_new_with_label ("Expand Tab");
7096 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
7097 gtk_signal_connect (GTK_OBJECT (button), "toggled",
7098 GTK_SIGNAL_FUNC (tab_expand), child);
7100 button = gtk_check_button_new_with_label ("Pack end");
7101 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
7102 gtk_signal_connect (GTK_OBJECT (button), "toggled",
7103 GTK_SIGNAL_FUNC (tab_pack), child);
7105 button = gtk_button_new_with_label ("Hide Page");
7106 gtk_box_pack_end (GTK_BOX (vbox), button, FALSE, FALSE, 5);
7107 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
7108 GTK_SIGNAL_FUNC (gtk_widget_hide),
7109 GTK_OBJECT (child));
7111 gtk_widget_show_all (child);
7113 label_box = gtk_hbox_new (FALSE, 0);
7114 pixwid = gtk_pixmap_new (book_closed, book_closed_mask);
7115 gtk_object_set_data (GTK_OBJECT (child), "tab_pixmap", pixwid);
7117 gtk_box_pack_start (GTK_BOX (label_box), pixwid, FALSE, TRUE, 0);
7118 gtk_misc_set_padding (GTK_MISC (pixwid), 3, 1);
7119 label = gtk_label_new_with_mnemonic (accel_buffer);
7120 gtk_box_pack_start (GTK_BOX (label_box), label, FALSE, TRUE, 0);
7121 gtk_widget_show_all (label_box);
7124 menu_box = gtk_hbox_new (FALSE, 0);
7125 pixwid = gtk_pixmap_new (book_closed, book_closed_mask);
7126 gtk_object_set_data (GTK_OBJECT (child), "menu_pixmap", pixwid);
7128 gtk_box_pack_start (GTK_BOX (menu_box), pixwid, FALSE, TRUE, 0);
7129 gtk_misc_set_padding (GTK_MISC (pixwid), 3, 1);
7130 label = gtk_label_new (buffer);
7131 gtk_box_pack_start (GTK_BOX (menu_box), label, FALSE, TRUE, 0);
7132 gtk_widget_show_all (menu_box);
7134 gtk_notebook_append_page_menu (notebook, child, label_box, menu_box);
7139 rotate_notebook (GtkButton *button,
7140 GtkNotebook *notebook)
7142 gtk_notebook_set_tab_pos (notebook, (notebook->tab_pos + 1) % 4);
7146 show_all_pages (GtkButton *button,
7147 GtkNotebook *notebook)
7149 gtk_container_foreach (GTK_CONTAINER (notebook),
7150 (GtkCallback) gtk_widget_show, NULL);
7154 standard_notebook (GtkButton *button,
7155 GtkNotebook *notebook)
7159 gtk_notebook_set_show_tabs (notebook, TRUE);
7160 gtk_notebook_set_show_border (notebook, TRUE);
7161 gtk_notebook_set_scrollable (notebook, FALSE);
7162 if (g_list_length (notebook->children) == 15)
7163 for (i = 0; i < 10; i++)
7164 gtk_notebook_remove_page (notebook, 5);
7168 notabs_notebook (GtkButton *button,
7169 GtkNotebook *notebook)
7173 gtk_notebook_set_show_tabs (notebook, FALSE);
7174 gtk_notebook_set_show_border (notebook, TRUE);
7175 if (g_list_length (notebook->children) == 15)
7176 for (i = 0; i < 10; i++)
7177 gtk_notebook_remove_page (notebook, 5);
7181 borderless_notebook (GtkButton *button,
7182 GtkNotebook *notebook)
7186 gtk_notebook_set_show_tabs (notebook, FALSE);
7187 gtk_notebook_set_show_border (notebook, FALSE);
7188 if (g_list_length (notebook->children) == 15)
7189 for (i = 0; i < 10; i++)
7190 gtk_notebook_remove_page (notebook, 5);
7194 scrollable_notebook (GtkButton *button,
7195 GtkNotebook *notebook)
7197 gtk_notebook_set_show_tabs (notebook, TRUE);
7198 gtk_notebook_set_show_border (notebook, TRUE);
7199 gtk_notebook_set_scrollable (notebook, TRUE);
7200 if (g_list_length (notebook->children) == 5)
7201 create_pages (notebook, 6, 15);
7205 notebook_popup (GtkToggleButton *button,
7206 GtkNotebook *notebook)
7209 gtk_notebook_popup_enable (notebook);
7211 gtk_notebook_popup_disable (notebook);
7215 notebook_homogeneous (GtkToggleButton *button,
7216 GtkNotebook *notebook)
7218 gtk_notebook_set_homogeneous_tabs (notebook, button->active);
7222 create_notebook (void)
7224 static GtkWidget *window = NULL;
7228 GtkWidget *separator;
7230 GdkColor *transparent = NULL;
7233 static OptionMenuItem items[] =
7235 { "Standard", GTK_SIGNAL_FUNC (standard_notebook) },
7236 { "No tabs", GTK_SIGNAL_FUNC (notabs_notebook) },
7237 { "Borderless", GTK_SIGNAL_FUNC (borderless_notebook) },
7238 { "Scrollable", GTK_SIGNAL_FUNC (scrollable_notebook) },
7243 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
7245 gtk_signal_connect (GTK_OBJECT (window), "destroy",
7246 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
7249 gtk_window_set_title (GTK_WINDOW (window), "notebook");
7250 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
7252 box1 = gtk_vbox_new (FALSE, 0);
7253 gtk_container_add (GTK_CONTAINER (window), box1);
7255 sample_notebook = gtk_notebook_new ();
7256 gtk_signal_connect (GTK_OBJECT (sample_notebook), "switch_page",
7257 GTK_SIGNAL_FUNC (page_switch), NULL);
7258 gtk_notebook_set_tab_pos (GTK_NOTEBOOK (sample_notebook), GTK_POS_TOP);
7259 gtk_box_pack_start (GTK_BOX (box1), sample_notebook, TRUE, TRUE, 0);
7260 gtk_container_set_border_width (GTK_CONTAINER (sample_notebook), 10);
7262 gtk_widget_realize (sample_notebook);
7264 book_open = gdk_pixmap_create_from_xpm_d (sample_notebook->window,
7269 book_closed = gdk_pixmap_create_from_xpm_d (sample_notebook->window,
7274 create_pages (GTK_NOTEBOOK (sample_notebook), 1, 5);
7276 separator = gtk_hseparator_new ();
7277 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 10);
7279 box2 = gtk_hbox_new (FALSE, 5);
7280 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
7281 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
7283 button = gtk_check_button_new_with_label ("popup menu");
7284 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, FALSE, 0);
7285 gtk_signal_connect (GTK_OBJECT(button), "clicked",
7286 GTK_SIGNAL_FUNC (notebook_popup),
7287 GTK_OBJECT (sample_notebook));
7289 button = gtk_check_button_new_with_label ("homogeneous tabs");
7290 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, FALSE, 0);
7291 gtk_signal_connect (GTK_OBJECT(button), "clicked",
7292 GTK_SIGNAL_FUNC (notebook_homogeneous),
7293 GTK_OBJECT (sample_notebook));
7295 box2 = gtk_hbox_new (FALSE, 5);
7296 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
7297 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
7299 label = gtk_label_new ("Notebook Style :");
7300 gtk_box_pack_start (GTK_BOX (box2), label, FALSE, TRUE, 0);
7302 omenu = build_option_menu (items, G_N_ELEMENTS (items), 0, sample_notebook);
7303 gtk_box_pack_start (GTK_BOX (box2), omenu, FALSE, TRUE, 0);
7305 button = gtk_button_new_with_label ("Show all Pages");
7306 gtk_box_pack_start (GTK_BOX (box2), button, FALSE, TRUE, 0);
7307 gtk_signal_connect (GTK_OBJECT (button), "clicked",
7308 GTK_SIGNAL_FUNC (show_all_pages), sample_notebook);
7310 box2 = gtk_hbox_new (TRUE, 10);
7311 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
7312 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
7314 button = gtk_button_new_with_label ("prev");
7315 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
7316 GTK_SIGNAL_FUNC (gtk_notebook_prev_page),
7317 GTK_OBJECT (sample_notebook));
7318 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
7320 button = gtk_button_new_with_label ("next");
7321 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
7322 GTK_SIGNAL_FUNC (gtk_notebook_next_page),
7323 GTK_OBJECT (sample_notebook));
7324 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
7326 button = gtk_button_new_with_label ("rotate");
7327 gtk_signal_connect (GTK_OBJECT (button), "clicked",
7328 GTK_SIGNAL_FUNC (rotate_notebook), sample_notebook);
7329 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
7331 separator = gtk_hseparator_new ();
7332 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 5);
7334 button = gtk_button_new_with_label ("close");
7335 gtk_container_set_border_width (GTK_CONTAINER (button), 5);
7336 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
7337 GTK_SIGNAL_FUNC (gtk_widget_destroy),
7338 GTK_OBJECT (window));
7339 gtk_box_pack_start (GTK_BOX (box1), button, FALSE, FALSE, 0);
7340 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
7341 gtk_widget_grab_default (button);
7344 if (!GTK_WIDGET_VISIBLE (window))
7345 gtk_widget_show_all (window);
7347 gtk_widget_destroy (window);
7355 toggle_resize (GtkWidget *widget, GtkWidget *child)
7357 GtkPaned *paned = GTK_PANED (child->parent);
7358 gboolean is_child1 = (child == paned->child1);
7359 gboolean resize, shrink;
7361 resize = is_child1 ? paned->child1_resize : paned->child2_resize;
7362 shrink = is_child1 ? paned->child1_shrink : paned->child2_shrink;
7364 gtk_widget_ref (child);
7365 gtk_container_remove (GTK_CONTAINER (child->parent), child);
7367 gtk_paned_pack1 (paned, child, !resize, shrink);
7369 gtk_paned_pack2 (paned, child, !resize, shrink);
7370 gtk_widget_unref (child);
7374 toggle_shrink (GtkWidget *widget, GtkWidget *child)
7376 GtkPaned *paned = GTK_PANED (child->parent);
7377 gboolean is_child1 = (child == paned->child1);
7378 gboolean resize, shrink;
7380 resize = is_child1 ? paned->child1_resize : paned->child2_resize;
7381 shrink = is_child1 ? paned->child1_shrink : paned->child2_shrink;
7383 gtk_widget_ref (child);
7384 gtk_container_remove (GTK_CONTAINER (child->parent), child);
7386 gtk_paned_pack1 (paned, child, resize, !shrink);
7388 gtk_paned_pack2 (paned, child, resize, !shrink);
7389 gtk_widget_unref (child);
7393 create_pane_options (GtkPaned *paned,
7394 const gchar *frame_label,
7395 const gchar *label1,
7396 const gchar *label2)
7401 GtkWidget *check_button;
7403 frame = gtk_frame_new (frame_label);
7404 gtk_container_set_border_width (GTK_CONTAINER (frame), 4);
7406 table = gtk_table_new (3, 2, 4);
7407 gtk_container_add (GTK_CONTAINER (frame), table);
7409 label = gtk_label_new (label1);
7410 gtk_table_attach_defaults (GTK_TABLE (table), label,
7413 check_button = gtk_check_button_new_with_label ("Resize");
7414 gtk_table_attach_defaults (GTK_TABLE (table), check_button,
7416 gtk_signal_connect (GTK_OBJECT (check_button), "toggled",
7417 GTK_SIGNAL_FUNC (toggle_resize),
7420 check_button = gtk_check_button_new_with_label ("Shrink");
7421 gtk_table_attach_defaults (GTK_TABLE (table), check_button,
7423 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check_button),
7425 gtk_signal_connect (GTK_OBJECT (check_button), "toggled",
7426 GTK_SIGNAL_FUNC (toggle_shrink),
7429 label = gtk_label_new (label2);
7430 gtk_table_attach_defaults (GTK_TABLE (table), label,
7433 check_button = gtk_check_button_new_with_label ("Resize");
7434 gtk_table_attach_defaults (GTK_TABLE (table), check_button,
7436 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check_button),
7438 gtk_signal_connect (GTK_OBJECT (check_button), "toggled",
7439 GTK_SIGNAL_FUNC (toggle_resize),
7442 check_button = gtk_check_button_new_with_label ("Shrink");
7443 gtk_table_attach_defaults (GTK_TABLE (table), check_button,
7445 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check_button),
7447 gtk_signal_connect (GTK_OBJECT (check_button), "toggled",
7448 GTK_SIGNAL_FUNC (toggle_shrink),
7457 static GtkWidget *window = NULL;
7466 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
7468 gtk_signal_connect (GTK_OBJECT (window), "destroy",
7469 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
7472 gtk_window_set_title (GTK_WINDOW (window), "Panes");
7473 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
7475 vbox = gtk_vbox_new (FALSE, 0);
7476 gtk_container_add (GTK_CONTAINER (window), vbox);
7478 vpaned = gtk_vpaned_new ();
7479 gtk_box_pack_start (GTK_BOX (vbox), vpaned, TRUE, TRUE, 0);
7480 gtk_container_set_border_width (GTK_CONTAINER(vpaned), 5);
7482 hpaned = gtk_hpaned_new ();
7483 gtk_paned_add1 (GTK_PANED (vpaned), hpaned);
7485 frame = gtk_frame_new (NULL);
7486 gtk_frame_set_shadow_type (GTK_FRAME(frame), GTK_SHADOW_IN);
7487 gtk_widget_set_usize (frame, 60, 60);
7488 gtk_paned_add1 (GTK_PANED (hpaned), frame);
7490 button = gtk_button_new_with_label ("Hi there");
7491 gtk_container_add (GTK_CONTAINER(frame), button);
7493 frame = gtk_frame_new (NULL);
7494 gtk_frame_set_shadow_type (GTK_FRAME(frame), GTK_SHADOW_IN);
7495 gtk_widget_set_usize (frame, 80, 60);
7496 gtk_paned_add2 (GTK_PANED (hpaned), frame);
7498 frame = gtk_frame_new (NULL);
7499 gtk_frame_set_shadow_type (GTK_FRAME(frame), GTK_SHADOW_IN);
7500 gtk_widget_set_usize (frame, 60, 80);
7501 gtk_paned_add2 (GTK_PANED (vpaned), frame);
7503 /* Now create toggle buttons to control sizing */
7505 gtk_box_pack_start (GTK_BOX (vbox),
7506 create_pane_options (GTK_PANED (hpaned),
7512 gtk_box_pack_start (GTK_BOX (vbox),
7513 create_pane_options (GTK_PANED (vpaned),
7519 gtk_widget_show_all (vbox);
7522 if (!GTK_WIDGET_VISIBLE (window))
7523 gtk_widget_show (window);
7525 gtk_widget_destroy (window);
7534 dnd_drop_destroy_popup (GtkWidget *widget, GtkWindow **window)
7536 if(GTK_IS_BUTTON(widget)) /* I.e. they clicked the close button */
7537 gtk_widget_destroy(GTK_WIDGET(*window));
7539 gtk_grab_remove(GTK_WIDGET(*window));
7547 dnd_drop (GtkWidget *button, GdkEvent *event)
7549 static GtkWidget *window = NULL;
7550 GtkWidget *vbox, *lbl, *btn;
7553 /* DND doesn't obey gtk_grab's, so check if we're already displaying
7554 * drop modal dialog first
7559 window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
7560 gtk_container_set_border_width (GTK_CONTAINER(window), 10);
7562 gtk_signal_connect (GTK_OBJECT (window), "destroy",
7563 GTK_SIGNAL_FUNC(dnd_drop_destroy_popup),
7565 gtk_signal_connect (GTK_OBJECT (window), "delete-event",
7566 GTK_SIGNAL_FUNC(gtk_false),
7569 vbox = gtk_vbox_new(FALSE, 5);
7571 /* Display message that we got from drop source */
7572 msg = g_malloc(strlen(event->dropdataavailable.data)
7573 + strlen(event->dropdataavailable.data_type) + 100);
7574 sprintf(msg, "Drop data of type %s was:\n\n%s",
7575 event->dropdataavailable.data_type,
7576 (char *)event->dropdataavailable.data);
7577 lbl = gtk_label_new(msg);
7578 gtk_label_set_justify(GTK_LABEL(lbl), GTK_JUSTIFY_FILL);
7580 gtk_widget_show(lbl);
7581 gtk_box_pack_start_defaults(GTK_BOX(vbox), lbl);
7583 /* Provide an obvious way out of this heinousness */
7584 btn = gtk_button_new_with_label("Continue with life in\nspite of this oppression");
7585 gtk_signal_connect_object (GTK_OBJECT (btn), "clicked",
7586 GTK_SIGNAL_FUNC(gtk_widget_destroy),
7587 GTK_OBJECT (window));
7588 gtk_widget_show(btn);
7589 gtk_box_pack_start_defaults(GTK_BOX(vbox), btn);
7591 gtk_container_add(GTK_CONTAINER(window), vbox);
7593 gtk_widget_show(vbox);
7594 gtk_grab_add(window);
7595 gtk_widget_show(window);
7599 dnd_drag_request (GtkWidget *button, GdkEvent *event)
7601 #define DND_STRING "Bill Gates demands royalties for\nyour use of his innovation."
7602 gtk_widget_dnd_data_set (button, event, DND_STRING, strlen(DND_STRING) + 1);
7608 static GtkWidget *window = NULL;
7614 GtkWidget *separator;
7616 /* For clarity... */
7617 char *possible_drag_types[] = {"text/plain"};
7618 char *accepted_drop_types[] = {"text/plain"};
7620 static GtkWidget *drag_icon = NULL;
7621 static GtkWidget *drop_icon = NULL;
7625 GdkPoint hotspot = {5,5};
7629 drag_icon = shape_create_icon ("Modeller.xpm",
7630 440, 140, 0,0, GTK_WINDOW_POPUP);
7632 gtk_signal_connect (GTK_OBJECT (drag_icon), "destroy",
7633 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
7636 gtk_widget_hide (drag_icon);
7641 drop_icon = shape_create_icon ("3DRings.xpm",
7642 440, 140, 0,0, GTK_WINDOW_POPUP);
7644 gtk_signal_connect (GTK_OBJECT (drop_icon), "destroy",
7645 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
7648 gtk_widget_hide (drop_icon);
7651 gdk_dnd_set_drag_shape(drag_icon->window,
7656 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
7658 gtk_signal_connect (GTK_OBJECT (window), "destroy",
7659 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
7662 gtk_window_set_title (GTK_WINDOW (window), "Drag -N- Drop");
7663 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
7665 box1 = gtk_vbox_new (FALSE, 0);
7666 gtk_container_add (GTK_CONTAINER (window), box1);
7667 gtk_widget_show (box1);
7669 box2 = gtk_hbox_new (FALSE, 5);
7670 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
7671 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
7672 gtk_widget_show (box2);
7674 frame = gtk_frame_new ("Drag");
7675 gtk_box_pack_start (GTK_BOX (box2), frame, TRUE, TRUE, 0);
7676 gtk_widget_show (frame);
7678 box3 = gtk_vbox_new (FALSE, 5);
7679 gtk_container_set_border_width (GTK_CONTAINER (box3), 5);
7680 gtk_container_add (GTK_CONTAINER (frame), box3);
7681 gtk_widget_show (box3);
7686 button = gtk_button_new_with_label ("Drag me!");
7687 gtk_box_pack_start (GTK_BOX (box3), button, FALSE, TRUE, 0);
7688 gtk_widget_show (button);
7691 * currently, the widget has to be realized to
7692 * set dnd on it, this needs to change
7694 gtk_widget_realize (button);
7695 gtk_signal_connect (GTK_OBJECT (button),
7696 "drag_request_event",
7697 GTK_SIGNAL_FUNC(dnd_drag_request),
7700 gtk_widget_dnd_drag_set (button, TRUE, possible_drag_types, 1);
7703 frame = gtk_frame_new ("Drop");
7704 gtk_box_pack_start (GTK_BOX (box2), frame, TRUE, TRUE, 0);
7705 gtk_widget_show (frame);
7707 box3 = gtk_vbox_new (FALSE, 5);
7708 gtk_container_set_border_width (GTK_CONTAINER (box3), 5);
7709 gtk_container_add (GTK_CONTAINER (frame), box3);
7710 gtk_widget_show (box3);
7716 button = gtk_button_new_with_label ("To");
7717 gtk_box_pack_start (GTK_BOX (box3), button, FALSE, TRUE, 0);
7718 gtk_widget_show (button);
7720 gtk_widget_realize (button);
7721 gtk_signal_connect (GTK_OBJECT (button),
7722 "drop_data_available_event",
7723 GTK_SIGNAL_FUNC(dnd_drop),
7726 gtk_widget_dnd_drop_set (button, TRUE, accepted_drop_types, 1, FALSE);
7729 separator = gtk_hseparator_new ();
7730 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
7731 gtk_widget_show (separator);
7734 box2 = gtk_vbox_new (FALSE, 10);
7735 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
7736 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
7737 gtk_widget_show (box2);
7740 button = gtk_button_new_with_label ("close");
7742 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
7743 GTK_SIGNAL_FUNC(gtk_widget_destroy),
7744 GTK_OBJECT (window));
7746 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
7747 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
7748 gtk_widget_grab_default (button);
7749 gtk_widget_show (button);
7752 if (!GTK_WIDGET_VISIBLE (window))
7753 gtk_widget_show (window);
7755 gtk_widget_destroy (window);
7763 typedef struct _cursoroffset {gint x,y;} CursorOffset;
7766 shape_pressed (GtkWidget *widget, GdkEventButton *event)
7770 /* ignore double and triple click */
7771 if (event->type != GDK_BUTTON_PRESS)
7774 p = gtk_object_get_user_data (GTK_OBJECT(widget));
7775 p->x = (int) event->x;
7776 p->y = (int) event->y;
7778 gtk_grab_add (widget);
7779 gdk_pointer_grab (widget->window, TRUE,
7780 GDK_BUTTON_RELEASE_MASK |
7781 GDK_BUTTON_MOTION_MASK |
7782 GDK_POINTER_MOTION_HINT_MASK,
7787 shape_released (GtkWidget *widget)
7789 gtk_grab_remove (widget);
7790 gdk_pointer_ungrab (0);
7794 shape_motion (GtkWidget *widget,
7795 GdkEventMotion *event)
7799 GdkModifierType mask;
7801 p = gtk_object_get_user_data (GTK_OBJECT (widget));
7804 * Can't use event->x / event->y here
7805 * because I need absolute coordinates.
7807 gdk_window_get_pointer (NULL, &xp, &yp, &mask);
7808 gtk_widget_set_uposition (widget, xp - p->x, yp - p->y);
7812 shape_create_icon (char *xpm_file,
7822 CursorOffset* icon_pos;
7824 GdkBitmap *gdk_pixmap_mask;
7825 GdkPixmap *gdk_pixmap;
7828 style = gtk_widget_get_default_style ();
7829 gc = style->black_gc;
7832 * GDK_WINDOW_TOPLEVEL works also, giving you a title border
7834 window = gtk_window_new (window_type);
7836 fixed = gtk_fixed_new ();
7837 gtk_widget_set_usize (fixed, 100,100);
7838 gtk_container_add (GTK_CONTAINER (window), fixed);
7839 gtk_widget_show (fixed);
7841 gtk_widget_set_events (window,
7842 gtk_widget_get_events (window) |
7843 GDK_BUTTON_MOTION_MASK |
7844 GDK_POINTER_MOTION_HINT_MASK |
7845 GDK_BUTTON_PRESS_MASK);
7847 gtk_widget_realize (window);
7848 gdk_pixmap = gdk_pixmap_create_from_xpm (window->window, &gdk_pixmap_mask,
7849 &style->bg[GTK_STATE_NORMAL],
7852 pixmap = gtk_pixmap_new (gdk_pixmap, gdk_pixmap_mask);
7853 gtk_fixed_put (GTK_FIXED (fixed), pixmap, px,py);
7854 gtk_widget_show (pixmap);
7856 gtk_widget_shape_combine_mask (window, gdk_pixmap_mask, px, py);
7858 gdk_drawable_unref (gdk_pixmap_mask);
7859 gdk_drawable_unref (gdk_pixmap);
7861 gtk_signal_connect (GTK_OBJECT (window), "button_press_event",
7862 GTK_SIGNAL_FUNC (shape_pressed),NULL);
7863 gtk_signal_connect (GTK_OBJECT (window), "button_release_event",
7864 GTK_SIGNAL_FUNC (shape_released),NULL);
7865 gtk_signal_connect (GTK_OBJECT (window), "motion_notify_event",
7866 GTK_SIGNAL_FUNC (shape_motion),NULL);
7868 icon_pos = g_new (CursorOffset, 1);
7869 gtk_object_set_user_data(GTK_OBJECT(window), icon_pos);
7871 gtk_widget_set_uposition (window, x, y);
7872 gtk_widget_show (window);
7878 create_shapes (void)
7880 /* Variables used by the Drag/Drop and Shape Window demos */
7881 static GtkWidget *modeller = NULL;
7882 static GtkWidget *sheets = NULL;
7883 static GtkWidget *rings = NULL;
7884 static GtkWidget *with_region = NULL;
7886 if (!(file_exists ("Modeller.xpm") &&
7887 file_exists ("FilesQueue.xpm") &&
7888 file_exists ("3DRings.xpm")))
7894 modeller = shape_create_icon ("Modeller.xpm",
7895 440, 140, 0,0, GTK_WINDOW_POPUP);
7897 gtk_signal_connect (GTK_OBJECT (modeller), "destroy",
7898 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
7902 gtk_widget_destroy (modeller);
7906 sheets = shape_create_icon ("FilesQueue.xpm",
7907 580, 170, 0,0, GTK_WINDOW_POPUP);
7909 gtk_signal_connect (GTK_OBJECT (sheets), "destroy",
7910 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
7915 gtk_widget_destroy (sheets);
7919 rings = shape_create_icon ("3DRings.xpm",
7920 460, 270, 25,25, GTK_WINDOW_TOPLEVEL);
7922 gtk_signal_connect (GTK_OBJECT (rings), "destroy",
7923 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
7927 gtk_widget_destroy (rings);
7934 with_region = shape_create_icon ("3DRings.xpm",
7935 460, 270, 25,25, GTK_WINDOW_TOPLEVEL);
7937 gtk_window_set_decorated (GTK_WINDOW (with_region), FALSE);
7939 gtk_signal_connect (GTK_OBJECT (with_region), "destroy",
7940 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
7943 /* reset shape from mask to a region */
7946 region = gdk_region_new ();
7958 gdk_region_union_with_rect (region, &rect);
7966 gdk_window_shape_combine_region (with_region->window,
7971 gtk_widget_destroy (with_region);
7979 create_wmhints (void)
7981 static GtkWidget *window = NULL;
7983 GtkWidget *separator;
7992 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
7994 gtk_signal_connect (GTK_OBJECT (window), "destroy",
7995 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
7998 gtk_window_set_title (GTK_WINDOW (window), "WM Hints");
7999 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
8001 gtk_widget_realize (window);
8003 circles = gdk_bitmap_create_from_data (window->window,
8007 gdk_window_set_icon (window->window, NULL,
8010 gdk_window_set_icon_name (window->window, "WMHints Test Icon");
8012 gdk_window_set_decorations (window->window, GDK_DECOR_ALL | GDK_DECOR_MENU);
8013 gdk_window_set_functions (window->window, GDK_FUNC_ALL | GDK_FUNC_RESIZE);
8015 box1 = gtk_vbox_new (FALSE, 0);
8016 gtk_container_add (GTK_CONTAINER (window), box1);
8017 gtk_widget_show (box1);
8019 label = gtk_label_new ("Try iconizing me!");
8020 gtk_widget_set_usize (label, 150, 50);
8021 gtk_box_pack_start (GTK_BOX (box1), label, TRUE, TRUE, 0);
8022 gtk_widget_show (label);
8025 separator = gtk_hseparator_new ();
8026 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
8027 gtk_widget_show (separator);
8030 box2 = gtk_vbox_new (FALSE, 10);
8031 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
8032 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
8033 gtk_widget_show (box2);
8036 button = gtk_button_new_with_label ("close");
8038 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
8039 GTK_SIGNAL_FUNC(gtk_widget_destroy),
8040 GTK_OBJECT (window));
8042 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
8043 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
8044 gtk_widget_grab_default (button);
8045 gtk_widget_show (button);
8048 if (!GTK_WIDGET_VISIBLE (window))
8049 gtk_widget_show (window);
8051 gtk_widget_destroy (window);
8056 * Window state tracking
8060 window_state_callback (GtkWidget *widget,
8061 GdkEventWindowState *event,
8064 GtkWidget *label = data;
8067 msg = g_strconcat (GTK_WINDOW (widget)->title, ": ",
8068 (event->new_window_state & GDK_WINDOW_STATE_WITHDRAWN) ?
8069 "withdrawn" : "not withdrawn", ", ",
8070 (event->new_window_state & GDK_WINDOW_STATE_ICONIFIED) ?
8071 "iconified" : "not iconified", ", ",
8072 (event->new_window_state & GDK_WINDOW_STATE_STICKY) ?
8073 "sticky" : "not sticky", ", ",
8074 (event->new_window_state & GDK_WINDOW_STATE_MAXIMIZED) ?
8075 "maximized" : "not maximized",
8078 gtk_label_set_text (GTK_LABEL (label), msg);
8086 tracking_label (GtkWidget *window)
8092 hbox = gtk_hbox_new (FALSE, 5);
8094 gtk_signal_connect_object (GTK_OBJECT (hbox),
8096 GTK_SIGNAL_FUNC (gtk_widget_destroy),
8097 GTK_OBJECT (window));
8099 label = gtk_label_new ("<no window state events received>");
8100 gtk_label_set_line_wrap (GTK_LABEL (label), TRUE);
8101 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
8103 gtk_signal_connect (GTK_OBJECT (window),
8104 "window_state_event",
8105 GTK_SIGNAL_FUNC (window_state_callback),
8108 button = gtk_button_new_with_label ("Deiconify");
8109 gtk_signal_connect_object (GTK_OBJECT (button),
8111 GTK_SIGNAL_FUNC (gtk_window_deiconify),
8112 GTK_OBJECT (window));
8113 gtk_box_pack_end (GTK_BOX (hbox), button, FALSE, FALSE, 0);
8115 button = gtk_button_new_with_label ("Iconify");
8116 gtk_signal_connect_object (GTK_OBJECT (button),
8118 GTK_SIGNAL_FUNC (gtk_window_iconify),
8119 GTK_OBJECT (window));
8120 gtk_box_pack_end (GTK_BOX (hbox), button, FALSE, FALSE, 0);
8122 button = gtk_button_new_with_label ("Present");
8123 gtk_signal_connect_object (GTK_OBJECT (button),
8125 GTK_SIGNAL_FUNC (gtk_window_present),
8126 GTK_OBJECT (window));
8127 gtk_box_pack_end (GTK_BOX (hbox), button, FALSE, FALSE, 0);
8129 button = gtk_button_new_with_label ("Show");
8130 gtk_signal_connect_object (GTK_OBJECT (button),
8132 GTK_SIGNAL_FUNC (gtk_widget_show),
8133 GTK_OBJECT (window));
8134 gtk_box_pack_end (GTK_BOX (hbox), button, FALSE, FALSE, 0);
8136 gtk_widget_show_all (hbox);
8142 get_state_controls (GtkWidget *window)
8147 vbox = gtk_vbox_new (FALSE, 0);
8149 button = gtk_button_new_with_label ("Stick");
8150 gtk_signal_connect_object (GTK_OBJECT (button),
8152 GTK_SIGNAL_FUNC (gtk_window_stick),
8153 GTK_OBJECT (window));
8154 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
8156 button = gtk_button_new_with_label ("Unstick");
8157 gtk_signal_connect_object (GTK_OBJECT (button),
8159 GTK_SIGNAL_FUNC (gtk_window_unstick),
8160 GTK_OBJECT (window));
8161 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
8163 button = gtk_button_new_with_label ("Maximize");
8164 gtk_signal_connect_object (GTK_OBJECT (button),
8166 GTK_SIGNAL_FUNC (gtk_window_maximize),
8167 GTK_OBJECT (window));
8168 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
8170 button = gtk_button_new_with_label ("Unmaximize");
8171 gtk_signal_connect_object (GTK_OBJECT (button),
8173 GTK_SIGNAL_FUNC (gtk_window_unmaximize),
8174 GTK_OBJECT (window));
8175 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
8177 button = gtk_button_new_with_label ("Iconify");
8178 gtk_signal_connect_object (GTK_OBJECT (button),
8180 GTK_SIGNAL_FUNC (gtk_window_iconify),
8181 GTK_OBJECT (window));
8182 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
8184 button = gtk_button_new_with_label ("Hide (withdraw)");
8185 gtk_signal_connect_object (GTK_OBJECT (button),
8187 GTK_SIGNAL_FUNC (gtk_widget_hide),
8188 GTK_OBJECT (window));
8189 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
8191 gtk_widget_show_all (vbox);
8197 create_window_states (void)
8199 static GtkWidget *window = NULL;
8202 GtkWidget *iconified;
8204 GtkWidget *controls;
8208 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
8210 gtk_signal_connect (GTK_OBJECT (window), "destroy",
8211 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
8214 gtk_window_set_title (GTK_WINDOW (window), "Window states");
8216 box1 = gtk_vbox_new (FALSE, 0);
8217 gtk_container_add (GTK_CONTAINER (window), box1);
8219 iconified = gtk_window_new (GTK_WINDOW_TOPLEVEL);
8220 gtk_window_iconify (GTK_WINDOW (iconified));
8221 gtk_window_set_title (GTK_WINDOW (iconified), "Iconified initially");
8222 controls = get_state_controls (iconified);
8223 gtk_container_add (GTK_CONTAINER (iconified), controls);
8225 normal = gtk_window_new (GTK_WINDOW_TOPLEVEL);
8226 gtk_window_set_title (GTK_WINDOW (normal), "Deiconified initially");
8227 controls = get_state_controls (normal);
8228 gtk_container_add (GTK_CONTAINER (normal), controls);
8230 label = tracking_label (iconified);
8231 gtk_container_add (GTK_CONTAINER (box1), label);
8233 label = tracking_label (normal);
8234 gtk_container_add (GTK_CONTAINER (box1), label);
8236 gtk_widget_show_all (iconified);
8237 gtk_widget_show_all (normal);
8238 gtk_widget_show_all (box1);
8241 if (!GTK_WIDGET_VISIBLE (window))
8242 gtk_widget_show (window);
8244 gtk_widget_destroy (window);
8252 configure_event_callback (GtkWidget *widget,
8253 GdkEventConfigure *event,
8256 GtkWidget *label = data;
8260 x = widget->allocation.x;
8261 y = widget->allocation.y;
8263 msg = g_strdup_printf ("event: %d,%d %d x %d\n"
8265 event->x, event->y, event->width, event->height,
8268 gtk_label_set_text (GTK_LABEL (label), msg);
8276 get_ints (GtkWidget *window,
8283 spin1 = g_object_get_data (G_OBJECT (window), "spin1");
8284 spin2 = g_object_get_data (G_OBJECT (window), "spin2");
8286 *a = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (spin1));
8287 *b = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (spin2));
8291 set_size_callback (GtkWidget *widget,
8296 get_ints (data, &w, &h);
8298 gtk_window_set_default_size (GTK_WINDOW (g_object_get_data (data, "target")), w, h);
8302 set_default_size_callback (GtkWidget *widget,
8307 get_ints (data, &w, &h);
8309 gtk_window_set_default_size (g_object_get_data (data, "target"),
8314 set_usize_callback (GtkWidget *widget,
8319 get_ints (data, &w, &h);
8321 gtk_widget_set_usize (g_object_get_data (data, "target"),
8326 set_location_callback (GtkWidget *widget,
8331 get_ints (data, &x, &y);
8333 gtk_widget_set_uposition (g_object_get_data (data, "target"), x, y);
8337 allow_shrink_callback (GtkWidget *widget,
8340 g_object_set (G_OBJECT (g_object_get_data (data, "target")),
8342 GTK_TOGGLE_BUTTON (widget)->active,
8347 allow_grow_callback (GtkWidget *widget,
8350 g_object_set (G_OBJECT (g_object_get_data (data, "target")),
8352 GTK_TOGGLE_BUTTON (widget)->active,
8357 auto_shrink_callback (GtkWidget *widget,
8360 g_object_set (G_OBJECT (g_object_get_data (data, "target")),
8362 GTK_TOGGLE_BUTTON (widget)->active,
8367 gravity_selected (GtkWidget *widget,
8370 gtk_window_set_gravity (GTK_WINDOW (g_object_get_data (data, "target")),
8371 gtk_option_menu_get_history (GTK_OPTION_MENU (widget)) + GDK_GRAVITY_NORTH_WEST);
8375 window_controls (GtkWidget *window)
8377 GtkWidget *control_window;
8387 control_window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
8389 gtk_window_set_title (GTK_WINDOW (control_window), "Size controls");
8391 g_object_set_data (G_OBJECT (control_window),
8395 gtk_signal_connect_object (GTK_OBJECT (control_window),
8397 GTK_SIGNAL_FUNC (gtk_widget_destroy),
8398 GTK_OBJECT (window));
8400 vbox = gtk_vbox_new (FALSE, 5);
8402 gtk_container_add (GTK_CONTAINER (control_window), vbox);
8404 label = gtk_label_new ("<no configure events>");
8405 gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
8407 gtk_signal_connect (GTK_OBJECT (window),
8409 GTK_SIGNAL_FUNC (configure_event_callback),
8412 adj = (GtkAdjustment *) gtk_adjustment_new (10.0, -3.0, 800.0, 1.0,
8414 spin = gtk_spin_button_new (adj, 0, 0);
8416 gtk_box_pack_start (GTK_BOX (vbox), spin, FALSE, FALSE, 0);
8418 g_object_set_data (G_OBJECT (control_window), "spin1", spin);
8420 adj = (GtkAdjustment *) gtk_adjustment_new (10.0, -3.0, 800.0, 1.0,
8422 spin = gtk_spin_button_new (adj, 0, 0);
8424 gtk_box_pack_start (GTK_BOX (vbox), spin, FALSE, FALSE, 0);
8426 g_object_set_data (G_OBJECT (control_window), "spin2", spin);
8428 button = gtk_button_new_with_label ("Queue resize");
8429 gtk_signal_connect_object (GTK_WIDGET (button),
8431 GTK_SIGNAL_FUNC (gtk_widget_queue_resize),
8432 GTK_OBJECT (control_window));
8433 gtk_box_pack_end (GTK_BOX (vbox), button, FALSE, FALSE, 0);
8435 button = gtk_button_new_with_label ("Set size");
8436 gtk_signal_connect (GTK_WIDGET (button),
8438 GTK_SIGNAL_FUNC (set_size_callback),
8439 GTK_OBJECT (control_window));
8440 gtk_box_pack_end (GTK_BOX (vbox), button, FALSE, FALSE, 0);
8442 button = gtk_button_new_with_label ("Set default size");
8443 gtk_signal_connect (GTK_WIDGET (button),
8445 GTK_SIGNAL_FUNC (set_default_size_callback),
8446 GTK_OBJECT (control_window));
8447 gtk_box_pack_end (GTK_BOX (vbox), button, FALSE, FALSE, 0);
8449 button = gtk_button_new_with_label ("Set usize");
8450 gtk_signal_connect (GTK_WIDGET (button),
8452 GTK_SIGNAL_FUNC (set_usize_callback),
8453 GTK_OBJECT (control_window));
8454 gtk_box_pack_end (GTK_BOX (vbox), button, FALSE, FALSE, 0);
8456 button = gtk_button_new_with_label ("Set location");
8457 gtk_signal_connect (GTK_WIDGET (button),
8459 GTK_SIGNAL_FUNC (set_location_callback),
8460 GTK_OBJECT (control_window));
8461 gtk_box_pack_end (GTK_BOX (vbox), button, FALSE, FALSE, 0);
8463 button = gtk_check_button_new_with_label ("Allow shrink");
8464 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), FALSE);
8465 gtk_signal_connect (GTK_WIDGET (button),
8467 GTK_SIGNAL_FUNC (allow_shrink_callback),
8468 GTK_OBJECT (control_window));
8469 gtk_box_pack_end (GTK_BOX (vbox), button, FALSE, FALSE, 0);
8471 button = gtk_check_button_new_with_label ("Allow grow");
8472 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE);
8473 gtk_signal_connect (GTK_WIDGET (button),
8475 GTK_SIGNAL_FUNC (allow_grow_callback),
8476 GTK_OBJECT (control_window));
8477 gtk_box_pack_end (GTK_BOX (vbox), button, FALSE, FALSE, 0);
8479 button = gtk_check_button_new_with_label ("Auto shrink");
8480 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), FALSE);
8481 gtk_signal_connect (GTK_WIDGET (button),
8483 GTK_SIGNAL_FUNC (auto_shrink_callback),
8484 GTK_OBJECT (control_window));
8485 gtk_box_pack_end (GTK_BOX (vbox), button, FALSE, FALSE, 0);
8487 menu = gtk_menu_new ();
8493 static gchar *names[] = {
8494 "GDK_GRAVITY_NORTH_WEST",
8495 "GDK_GRAVITY_NORTH",
8496 "GDK_GRAVITY_NORTH_EAST",
8498 "GDK_GRAVITY_CENTER",
8500 "GDK_GRAVITY_SOUTH_WEST",
8501 "GDK_GRAVITY_SOUTH",
8502 "GDK_GRAVITY_SOUTH_EAST",
8503 "GDK_GRAVITY_STATIC",
8507 g_assert (names[i]);
8509 mi = gtk_menu_item_new_with_label (names[i]);
8511 gtk_menu_shell_append (GTK_MENU_SHELL (menu), mi);
8516 gtk_widget_show_all (menu);
8518 om = gtk_option_menu_new ();
8519 gtk_option_menu_set_menu (GTK_OPTION_MENU (om), menu);
8522 gtk_signal_connect (GTK_OBJECT (om),
8524 GTK_SIGNAL_FUNC (gravity_selected),
8527 gtk_box_pack_end (GTK_BOX (vbox), om, FALSE, FALSE, 0);
8529 gtk_widget_show_all (vbox);
8531 return control_window;
8535 create_window_sizing (void)
8537 static GtkWidget *window = NULL;
8543 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
8545 label = gtk_label_new (NULL);
8546 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");
8547 gtk_container_add (GTK_CONTAINER (window), label);
8548 gtk_widget_show (label);
8550 gtk_signal_connect (GTK_OBJECT (window), "destroy",
8551 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
8554 gtk_window_set_title (GTK_WINDOW (window), "Window to size");
8556 gtk_widget_show (window_controls (window));
8559 if (!GTK_WIDGET_VISIBLE (window))
8560 gtk_widget_show (window);
8562 gtk_widget_destroy (window);
8569 typedef struct _ProgressData {
8572 GtkWidget *block_spin;
8573 GtkWidget *x_align_spin;
8574 GtkWidget *y_align_spin;
8575 GtkWidget *step_spin;
8576 GtkWidget *act_blocks_spin;
8585 progress_timeout (gpointer data)
8590 adj = GTK_PROGRESS (data)->adjustment;
8592 new_val = adj->value + 1;
8593 if (new_val > adj->upper)
8594 new_val = adj->lower;
8596 gtk_progress_set_value (GTK_PROGRESS (data), new_val);
8602 destroy_progress (GtkWidget *widget,
8603 ProgressData **pdata)
8605 gtk_timeout_remove ((*pdata)->timer);
8606 (*pdata)->timer = 0;
8607 (*pdata)->window = NULL;
8613 progressbar_toggle_orientation (GtkWidget *widget, ProgressData *pdata)
8617 if (!GTK_WIDGET_MAPPED (widget))
8620 RADIOMENUTOGGLED ((GtkRadioMenuItem *)
8621 (((GtkOptionMenu *)(pdata->omenu1))->menu_item), i);
8623 gtk_progress_bar_set_orientation (GTK_PROGRESS_BAR (pdata->pbar),
8624 (GtkProgressBarOrientation) (3-i));
8628 toggle_show_text (GtkWidget *widget, ProgressData *pdata)
8630 gtk_progress_set_show_text (GTK_PROGRESS (pdata->pbar),
8631 GTK_TOGGLE_BUTTON (widget)->active);
8632 gtk_widget_set_sensitive (pdata->entry, GTK_TOGGLE_BUTTON (widget)->active);
8633 gtk_widget_set_sensitive (pdata->x_align_spin,
8634 GTK_TOGGLE_BUTTON (widget)->active);
8635 gtk_widget_set_sensitive (pdata->y_align_spin,
8636 GTK_TOGGLE_BUTTON (widget)->active);
8640 progressbar_toggle_bar_style (GtkWidget *widget, ProgressData *pdata)
8644 if (!GTK_WIDGET_MAPPED (widget))
8647 RADIOMENUTOGGLED ((GtkRadioMenuItem *)
8648 (((GtkOptionMenu *)(pdata->omenu2))->menu_item), i);
8653 gtk_widget_set_sensitive (pdata->block_spin, TRUE);
8655 gtk_widget_set_sensitive (pdata->block_spin, FALSE);
8657 gtk_progress_bar_set_bar_style (GTK_PROGRESS_BAR (pdata->pbar),
8658 (GtkProgressBarStyle) i);
8662 progress_value_changed (GtkAdjustment *adj, ProgressData *pdata)
8666 if (GTK_PROGRESS (pdata->pbar)->activity_mode)
8667 sprintf (buf, "???");
8669 sprintf (buf, "%.0f%%", 100 *
8670 gtk_progress_get_current_percentage (GTK_PROGRESS (pdata->pbar)));
8671 gtk_label_set_text (GTK_LABEL (pdata->label), buf);
8675 adjust_blocks (GtkAdjustment *adj, ProgressData *pdata)
8677 gtk_progress_set_percentage (GTK_PROGRESS (pdata->pbar), 0);
8678 gtk_progress_bar_set_discrete_blocks (GTK_PROGRESS_BAR (pdata->pbar),
8679 gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (pdata->block_spin)));
8683 adjust_step (GtkAdjustment *adj, ProgressData *pdata)
8685 gtk_progress_bar_set_activity_step (GTK_PROGRESS_BAR (pdata->pbar),
8686 gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (pdata->step_spin)));
8690 adjust_act_blocks (GtkAdjustment *adj, ProgressData *pdata)
8692 gtk_progress_bar_set_activity_blocks (GTK_PROGRESS_BAR (pdata->pbar),
8693 gtk_spin_button_get_value_as_int
8694 (GTK_SPIN_BUTTON (pdata->act_blocks_spin)));
8698 adjust_align (GtkAdjustment *adj, ProgressData *pdata)
8700 gtk_progress_set_text_alignment (GTK_PROGRESS (pdata->pbar),
8701 gtk_spin_button_get_value_as_float
8702 (GTK_SPIN_BUTTON (pdata->x_align_spin)),
8703 gtk_spin_button_get_value_as_float
8704 (GTK_SPIN_BUTTON (pdata->y_align_spin)));
8708 toggle_activity_mode (GtkWidget *widget, ProgressData *pdata)
8710 gtk_progress_set_activity_mode (GTK_PROGRESS (pdata->pbar),
8711 GTK_TOGGLE_BUTTON (widget)->active);
8712 gtk_widget_set_sensitive (pdata->step_spin,
8713 GTK_TOGGLE_BUTTON (widget)->active);
8714 gtk_widget_set_sensitive (pdata->act_blocks_spin,
8715 GTK_TOGGLE_BUTTON (widget)->active);
8719 entry_changed (GtkWidget *widget, ProgressData *pdata)
8721 gtk_progress_set_format_string (GTK_PROGRESS (pdata->pbar),
8722 gtk_entry_get_text (GTK_ENTRY (pdata->entry)));
8726 create_progress_bar (void)
8738 static ProgressData *pdata = NULL;
8740 static OptionMenuItem items1[] =
8742 { "Left-Right", GTK_SIGNAL_FUNC (progressbar_toggle_orientation) },
8743 { "Right-Left", GTK_SIGNAL_FUNC (progressbar_toggle_orientation) },
8744 { "Bottom-Top", GTK_SIGNAL_FUNC (progressbar_toggle_orientation) },
8745 { "Top-Bottom", GTK_SIGNAL_FUNC (progressbar_toggle_orientation) }
8748 static OptionMenuItem items2[] =
8750 { "Continuous", GTK_SIGNAL_FUNC (progressbar_toggle_bar_style) },
8751 { "Discrete", GTK_SIGNAL_FUNC (progressbar_toggle_bar_style) }
8755 pdata = g_new0 (ProgressData, 1);
8759 pdata->window = gtk_dialog_new ();
8761 gtk_window_set_policy (GTK_WINDOW (pdata->window), FALSE, FALSE, TRUE);
8763 gtk_signal_connect (GTK_OBJECT (pdata->window), "destroy",
8764 GTK_SIGNAL_FUNC (destroy_progress),
8769 gtk_window_set_title (GTK_WINDOW (pdata->window), "GtkProgressBar");
8770 gtk_container_set_border_width (GTK_CONTAINER (pdata->window), 0);
8772 vbox = gtk_vbox_new (FALSE, 5);
8773 gtk_container_set_border_width (GTK_CONTAINER (vbox), 10);
8774 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (pdata->window)->vbox),
8775 vbox, FALSE, TRUE, 0);
8777 frame = gtk_frame_new ("Progress");
8778 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, TRUE, 0);
8780 vbox2 = gtk_vbox_new (FALSE, 5);
8781 gtk_container_add (GTK_CONTAINER (frame), vbox2);
8783 align = gtk_alignment_new (0.5, 0.5, 0, 0);
8784 gtk_box_pack_start (GTK_BOX (vbox2), align, FALSE, FALSE, 5);
8786 adj = (GtkAdjustment *) gtk_adjustment_new (0, 1, 300, 0, 0, 0);
8787 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
8788 GTK_SIGNAL_FUNC (progress_value_changed), pdata);
8790 pdata->pbar = gtk_progress_bar_new_with_adjustment (adj);
8791 gtk_progress_set_format_string (GTK_PROGRESS (pdata->pbar),
8792 "%v from [%l,%u] (=%p%%)");
8793 gtk_container_add (GTK_CONTAINER (align), pdata->pbar);
8794 pdata->timer = gtk_timeout_add (100, progress_timeout, pdata->pbar);
8796 align = gtk_alignment_new (0.5, 0.5, 0, 0);
8797 gtk_box_pack_start (GTK_BOX (vbox2), align, FALSE, FALSE, 5);
8799 hbox = gtk_hbox_new (FALSE, 5);
8800 gtk_container_add (GTK_CONTAINER (align), hbox);
8801 label = gtk_label_new ("Label updated by user :");
8802 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
8803 pdata->label = gtk_label_new ("");
8804 gtk_box_pack_start (GTK_BOX (hbox), pdata->label, FALSE, TRUE, 0);
8806 frame = gtk_frame_new ("Options");
8807 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, TRUE, 0);
8809 vbox2 = gtk_vbox_new (FALSE, 5);
8810 gtk_container_add (GTK_CONTAINER (frame), vbox2);
8812 tab = gtk_table_new (7, 2, FALSE);
8813 gtk_box_pack_start (GTK_BOX (vbox2), tab, FALSE, TRUE, 0);
8815 label = gtk_label_new ("Orientation :");
8816 gtk_table_attach (GTK_TABLE (tab), label, 0, 1, 0, 1,
8817 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
8819 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
8821 pdata->omenu1 = build_option_menu (items1, 4, 0, pdata);
8822 hbox = gtk_hbox_new (FALSE, 0);
8823 gtk_table_attach (GTK_TABLE (tab), hbox, 1, 2, 0, 1,
8824 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
8826 gtk_box_pack_start (GTK_BOX (hbox), pdata->omenu1, TRUE, TRUE, 0);
8828 check = gtk_check_button_new_with_label ("Show text");
8829 gtk_signal_connect (GTK_OBJECT (check), "clicked",
8830 GTK_SIGNAL_FUNC (toggle_show_text),
8832 gtk_table_attach (GTK_TABLE (tab), check, 0, 1, 1, 2,
8833 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
8836 hbox = gtk_hbox_new (FALSE, 0);
8837 gtk_table_attach (GTK_TABLE (tab), hbox, 1, 2, 1, 2,
8838 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
8841 label = gtk_label_new ("Format : ");
8842 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
8844 pdata->entry = gtk_entry_new ();
8845 gtk_signal_connect (GTK_OBJECT (pdata->entry), "changed",
8846 GTK_SIGNAL_FUNC (entry_changed),
8848 gtk_box_pack_start (GTK_BOX (hbox), pdata->entry, TRUE, TRUE, 0);
8849 gtk_entry_set_text (GTK_ENTRY (pdata->entry), "%v from [%l,%u] (=%p%%)");
8850 gtk_widget_set_usize (pdata->entry, 100, -1);
8851 gtk_widget_set_sensitive (pdata->entry, FALSE);
8853 label = gtk_label_new ("Text align :");
8854 gtk_table_attach (GTK_TABLE (tab), label, 0, 1, 2, 3,
8855 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
8857 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
8859 hbox = gtk_hbox_new (FALSE, 0);
8860 gtk_table_attach (GTK_TABLE (tab), hbox, 1, 2, 2, 3,
8861 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
8864 label = gtk_label_new ("x :");
8865 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 5);
8867 adj = (GtkAdjustment *) gtk_adjustment_new (0.5, 0, 1, 0.1, 0.1, 0);
8868 pdata->x_align_spin = gtk_spin_button_new (adj, 0, 1);
8869 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
8870 GTK_SIGNAL_FUNC (adjust_align), pdata);
8871 gtk_box_pack_start (GTK_BOX (hbox), pdata->x_align_spin, FALSE, TRUE, 0);
8872 gtk_widget_set_sensitive (pdata->x_align_spin, FALSE);
8874 label = gtk_label_new ("y :");
8875 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 5);
8877 adj = (GtkAdjustment *) gtk_adjustment_new (0.5, 0, 1, 0.1, 0.1, 0);
8878 pdata->y_align_spin = gtk_spin_button_new (adj, 0, 1);
8879 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
8880 GTK_SIGNAL_FUNC (adjust_align), pdata);
8881 gtk_box_pack_start (GTK_BOX (hbox), pdata->y_align_spin, FALSE, TRUE, 0);
8882 gtk_widget_set_sensitive (pdata->y_align_spin, FALSE);
8884 label = gtk_label_new ("Bar Style :");
8885 gtk_table_attach (GTK_TABLE (tab), label, 0, 1, 3, 4,
8886 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
8888 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
8890 pdata->omenu2 = build_option_menu (items2, 2, 0, pdata);
8891 hbox = gtk_hbox_new (FALSE, 0);
8892 gtk_table_attach (GTK_TABLE (tab), hbox, 1, 2, 3, 4,
8893 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
8895 gtk_box_pack_start (GTK_BOX (hbox), pdata->omenu2, TRUE, TRUE, 0);
8897 label = gtk_label_new ("Block count :");
8898 gtk_table_attach (GTK_TABLE (tab), label, 0, 1, 4, 5,
8899 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
8901 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
8903 hbox = gtk_hbox_new (FALSE, 0);
8904 gtk_table_attach (GTK_TABLE (tab), hbox, 1, 2, 4, 5,
8905 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
8907 adj = (GtkAdjustment *) gtk_adjustment_new (10, 2, 20, 1, 5, 0);
8908 pdata->block_spin = gtk_spin_button_new (adj, 0, 0);
8909 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
8910 GTK_SIGNAL_FUNC (adjust_blocks), pdata);
8911 gtk_box_pack_start (GTK_BOX (hbox), pdata->block_spin, FALSE, TRUE, 0);
8912 gtk_widget_set_sensitive (pdata->block_spin, FALSE);
8914 check = gtk_check_button_new_with_label ("Activity mode");
8915 gtk_signal_connect (GTK_OBJECT (check), "clicked",
8916 GTK_SIGNAL_FUNC (toggle_activity_mode),
8918 gtk_table_attach (GTK_TABLE (tab), check, 0, 1, 5, 6,
8919 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
8922 hbox = gtk_hbox_new (FALSE, 0);
8923 gtk_table_attach (GTK_TABLE (tab), hbox, 1, 2, 5, 6,
8924 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
8926 label = gtk_label_new ("Step size : ");
8927 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
8928 adj = (GtkAdjustment *) gtk_adjustment_new (3, 1, 20, 1, 5, 0);
8929 pdata->step_spin = gtk_spin_button_new (adj, 0, 0);
8930 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
8931 GTK_SIGNAL_FUNC (adjust_step), pdata);
8932 gtk_box_pack_start (GTK_BOX (hbox), pdata->step_spin, FALSE, TRUE, 0);
8933 gtk_widget_set_sensitive (pdata->step_spin, FALSE);
8935 hbox = gtk_hbox_new (FALSE, 0);
8936 gtk_table_attach (GTK_TABLE (tab), hbox, 1, 2, 6, 7,
8937 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
8939 label = gtk_label_new ("Blocks : ");
8940 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
8941 adj = (GtkAdjustment *) gtk_adjustment_new (5, 2, 10, 1, 5, 0);
8942 pdata->act_blocks_spin = gtk_spin_button_new (adj, 0, 0);
8943 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
8944 GTK_SIGNAL_FUNC (adjust_act_blocks), pdata);
8945 gtk_box_pack_start (GTK_BOX (hbox), pdata->act_blocks_spin, FALSE, TRUE,
8947 gtk_widget_set_sensitive (pdata->act_blocks_spin, FALSE);
8949 button = gtk_button_new_with_label ("close");
8950 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
8951 GTK_SIGNAL_FUNC (gtk_widget_destroy),
8952 GTK_OBJECT (pdata->window));
8953 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
8954 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (pdata->window)->action_area),
8955 button, TRUE, TRUE, 0);
8956 gtk_widget_grab_default (button);
8959 if (!GTK_WIDGET_VISIBLE (pdata->window))
8960 gtk_widget_show_all (pdata->window);
8962 gtk_widget_destroy (pdata->window);
8969 static int color_idle = 0;
8972 color_idle_func (GtkWidget *preview)
8974 static int count = 1;
8978 for (i = 0; i < 256; i++)
8980 for (j = 0, k = 0; j < 256; j++)
8982 buf[k+0] = i + count;
8984 buf[k+2] = j + count;
8988 gtk_preview_draw_row (GTK_PREVIEW (preview), buf, 0, i, 256);
8993 gtk_widget_draw (preview, NULL);
8999 color_preview_destroy (GtkWidget *widget,
9002 gtk_idle_remove (color_idle);
9009 create_color_preview (void)
9011 static GtkWidget *window = NULL;
9018 gtk_widget_push_colormap (gdk_rgb_get_cmap ());
9019 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
9020 gtk_widget_pop_colormap ();
9022 gtk_signal_connect (GTK_OBJECT (window), "destroy",
9023 GTK_SIGNAL_FUNC(color_preview_destroy),
9026 gtk_window_set_title (GTK_WINDOW (window), "test");
9027 gtk_container_set_border_width (GTK_CONTAINER (window), 10);
9029 preview = gtk_preview_new (GTK_PREVIEW_COLOR);
9030 gtk_preview_size (GTK_PREVIEW (preview), 256, 256);
9031 gtk_container_add (GTK_CONTAINER (window), preview);
9033 for (i = 0; i < 256; i++)
9035 for (j = 0, k = 0; j < 256; j++)
9043 gtk_preview_draw_row (GTK_PREVIEW (preview), buf, 0, i, 256);
9046 color_idle = gtk_idle_add ((GtkFunction) color_idle_func, preview);
9049 if (!GTK_WIDGET_VISIBLE (window))
9050 gtk_widget_show_all (window);
9052 gtk_widget_destroy (window);
9059 static int gray_idle = 0;
9062 gray_idle_func (GtkWidget *preview)
9064 static int count = 1;
9068 for (i = 0; i < 256; i++)
9070 for (j = 0; j < 256; j++)
9071 buf[j] = i + j + count;
9073 gtk_preview_draw_row (GTK_PREVIEW (preview), buf, 0, i, 256);
9078 gtk_widget_draw (preview, NULL);
9084 gray_preview_destroy (GtkWidget *widget,
9087 gtk_idle_remove (gray_idle);
9094 create_gray_preview (void)
9096 static GtkWidget *window = NULL;
9103 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
9105 gtk_signal_connect (GTK_OBJECT (window), "destroy",
9106 GTK_SIGNAL_FUNC(gray_preview_destroy),
9109 gtk_window_set_title (GTK_WINDOW (window), "test");
9110 gtk_container_set_border_width (GTK_CONTAINER (window), 10);
9112 preview = gtk_preview_new (GTK_PREVIEW_GRAYSCALE);
9113 gtk_preview_size (GTK_PREVIEW (preview), 256, 256);
9114 gtk_container_add (GTK_CONTAINER (window), preview);
9116 for (i = 0; i < 256; i++)
9118 for (j = 0; j < 256; j++)
9121 gtk_preview_draw_row (GTK_PREVIEW (preview), buf, 0, i, 256);
9124 gray_idle = gtk_idle_add ((GtkFunction) gray_idle_func, preview);
9127 if (!GTK_WIDGET_VISIBLE (window))
9128 gtk_widget_show_all (window);
9130 gtk_widget_destroy (window);
9139 selection_test_received (GtkWidget *list, GtkSelectionData *data)
9142 GtkWidget *list_item;
9146 if (data->length < 0)
9148 g_print ("Selection retrieval failed\n");
9151 if (data->type != GDK_SELECTION_TYPE_ATOM)
9153 g_print ("Selection \"TARGETS\" was not returned as atoms!\n");
9157 /* Clear out any current list items */
9159 gtk_list_clear_items (GTK_LIST(list), 0, -1);
9161 /* Add new items to list */
9163 atoms = (GdkAtom *)data->data;
9166 l = data->length / sizeof (GdkAtom);
9167 for (i = 0; i < l; i++)
9170 name = gdk_atom_name (atoms[i]);
9173 list_item = gtk_list_item_new_with_label (name);
9177 list_item = gtk_list_item_new_with_label ("(bad atom)");
9179 gtk_widget_show (list_item);
9180 item_list = g_list_append (item_list, list_item);
9183 gtk_list_append_items (GTK_LIST (list), item_list);
9189 selection_test_get_targets (GtkWidget *widget, GtkWidget *list)
9191 static GdkAtom targets_atom = GDK_NONE;
9193 if (targets_atom == GDK_NONE)
9194 targets_atom = gdk_atom_intern ("TARGETS", FALSE);
9196 gtk_selection_convert (list, GDK_SELECTION_PRIMARY, targets_atom,
9201 create_selection_test (void)
9203 static GtkWidget *window = NULL;
9206 GtkWidget *scrolled_win;
9212 window = gtk_dialog_new ();
9214 gtk_signal_connect (GTK_OBJECT (window), "destroy",
9215 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
9218 gtk_window_set_title (GTK_WINDOW (window), "Selection Test");
9219 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
9221 /* Create the list */
9223 vbox = gtk_vbox_new (FALSE, 5);
9224 gtk_container_set_border_width (GTK_CONTAINER (vbox), 10);
9225 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox), vbox,
9228 label = gtk_label_new ("Gets available targets for current selection");
9229 gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
9231 scrolled_win = gtk_scrolled_window_new (NULL, NULL);
9232 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win),
9233 GTK_POLICY_AUTOMATIC,
9234 GTK_POLICY_AUTOMATIC);
9235 gtk_box_pack_start (GTK_BOX (vbox), scrolled_win, TRUE, TRUE, 0);
9236 gtk_widget_set_usize (scrolled_win, 100, 200);
9238 list = gtk_list_new ();
9239 gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scrolled_win), list);
9241 gtk_signal_connect (GTK_OBJECT(list), "selection_received",
9242 GTK_SIGNAL_FUNC (selection_test_received), NULL);
9244 /* .. And create some buttons */
9245 button = gtk_button_new_with_label ("Get Targets");
9246 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
9247 button, TRUE, TRUE, 0);
9249 gtk_signal_connect (GTK_OBJECT (button), "clicked",
9250 GTK_SIGNAL_FUNC (selection_test_get_targets), list);
9252 button = gtk_button_new_with_label ("Quit");
9253 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
9254 button, TRUE, TRUE, 0);
9256 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
9257 GTK_SIGNAL_FUNC (gtk_widget_destroy),
9258 GTK_OBJECT (window));
9261 if (!GTK_WIDGET_VISIBLE (window))
9262 gtk_widget_show_all (window);
9264 gtk_widget_destroy (window);
9272 create_gamma_curve (void)
9274 static GtkWidget *window = NULL, *curve;
9275 static int count = 0;
9282 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
9283 gtk_window_set_title (GTK_WINDOW (window), "test");
9284 gtk_container_set_border_width (GTK_CONTAINER (window), 10);
9286 gtk_signal_connect (GTK_OBJECT (window), "destroy",
9287 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
9290 curve = gtk_gamma_curve_new ();
9291 gtk_container_add (GTK_CONTAINER (window), curve);
9292 gtk_widget_show (curve);
9295 max = 127 + (count % 2)*128;
9296 gtk_curve_set_range (GTK_CURVE (GTK_GAMMA_CURVE (curve)->curve),
9298 for (i = 0; i < max; ++i)
9299 vec[i] = (127 / sqrt (max)) * sqrt (i);
9300 gtk_curve_set_vector (GTK_CURVE (GTK_GAMMA_CURVE (curve)->curve),
9303 if (!GTK_WIDGET_VISIBLE (window))
9304 gtk_widget_show (window);
9305 else if (count % 4 == 3)
9307 gtk_widget_destroy (window);
9318 static int scroll_test_pos = 0.0;
9321 scroll_test_expose (GtkWidget *widget, GdkEventExpose *event,
9325 gint imin, imax, jmin, jmax;
9327 imin = (event->area.x) / 10;
9328 imax = (event->area.x + event->area.width + 9) / 10;
9330 jmin = ((int)adj->value + event->area.y) / 10;
9331 jmax = ((int)adj->value + event->area.y + event->area.height + 9) / 10;
9333 gdk_window_clear_area (widget->window,
9334 event->area.x, event->area.y,
9335 event->area.width, event->area.height);
9337 for (i=imin; i<imax; i++)
9338 for (j=jmin; j<jmax; j++)
9340 gdk_draw_rectangle (widget->window,
9341 widget->style->black_gc,
9343 10*i, 10*j - (int)adj->value, 1+i%10, 1+j%10);
9349 scroll_test_scroll (GtkWidget *widget, GdkEventScroll *event,
9352 gdouble new_value = adj->value + ((event->direction == GDK_SCROLL_UP) ?
9353 -adj->page_increment / 2:
9354 adj->page_increment / 2);
9355 new_value = CLAMP (new_value, adj->lower, adj->upper - adj->page_size);
9356 gtk_adjustment_set_value (adj, new_value);
9362 scroll_test_configure (GtkWidget *widget, GdkEventConfigure *event,
9365 adj->page_increment = 0.9 * widget->allocation.height;
9366 adj->page_size = widget->allocation.height;
9368 gtk_signal_emit_by_name (GTK_OBJECT (adj), "changed");
9372 scroll_test_adjustment_changed (GtkAdjustment *adj, GtkWidget *widget)
9374 gint source_min = (int)adj->value - scroll_test_pos;
9377 dy = scroll_test_pos - (int)adj->value;
9378 scroll_test_pos = adj->value;
9380 if (!GTK_WIDGET_DRAWABLE (widget))
9382 gdk_window_scroll (widget->window, 0, dy);
9383 gdk_window_process_updates (widget->window, FALSE);
9388 create_scroll_test (void)
9390 static GtkWidget *window = NULL;
9392 GtkWidget *drawing_area;
9393 GtkWidget *scrollbar;
9396 GdkGeometry geometry;
9397 GdkWindowHints geometry_mask;
9401 window = gtk_dialog_new ();
9403 gtk_signal_connect (GTK_OBJECT (window), "destroy",
9404 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
9407 gtk_window_set_title (GTK_WINDOW (window), "Scroll Test");
9408 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
9410 hbox = gtk_hbox_new (FALSE, 0);
9411 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox), hbox,
9413 gtk_widget_show (hbox);
9415 drawing_area = gtk_drawing_area_new ();
9416 gtk_drawing_area_size (GTK_DRAWING_AREA (drawing_area), 200, 200);
9417 gtk_box_pack_start (GTK_BOX (hbox), drawing_area, TRUE, TRUE, 0);
9418 gtk_widget_show (drawing_area);
9420 gtk_widget_set_events (drawing_area, GDK_EXPOSURE_MASK | GDK_SCROLL_MASK);
9422 adj = GTK_ADJUSTMENT (gtk_adjustment_new (0.0, 0.0, 1000.0, 1.0, 180.0, 200.0));
9423 scroll_test_pos = 0.0;
9425 scrollbar = gtk_vscrollbar_new (adj);
9426 gtk_box_pack_start (GTK_BOX (hbox), scrollbar, FALSE, FALSE, 0);
9427 gtk_widget_show (scrollbar);
9429 gtk_signal_connect (GTK_OBJECT (drawing_area), "expose_event",
9430 GTK_SIGNAL_FUNC (scroll_test_expose), adj);
9431 gtk_signal_connect (GTK_OBJECT (drawing_area), "configure_event",
9432 GTK_SIGNAL_FUNC (scroll_test_configure), adj);
9433 gtk_signal_connect (GTK_OBJECT (drawing_area), "scroll_event",
9434 GTK_SIGNAL_FUNC (scroll_test_scroll), adj);
9436 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
9437 GTK_SIGNAL_FUNC (scroll_test_adjustment_changed),
9440 /* .. And create some buttons */
9442 button = gtk_button_new_with_label ("Quit");
9443 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
9444 button, TRUE, TRUE, 0);
9446 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
9447 GTK_SIGNAL_FUNC (gtk_widget_destroy),
9448 GTK_OBJECT (window));
9449 gtk_widget_show (button);
9451 /* Set up gridded geometry */
9453 geometry_mask = GDK_HINT_MIN_SIZE |
9454 GDK_HINT_BASE_SIZE |
9455 GDK_HINT_RESIZE_INC;
9457 geometry.min_width = 20;
9458 geometry.min_height = 20;
9459 geometry.base_width = 0;
9460 geometry.base_height = 0;
9461 geometry.width_inc = 10;
9462 geometry.height_inc = 10;
9464 gtk_window_set_geometry_hints (GTK_WINDOW (window),
9465 drawing_area, &geometry, geometry_mask);
9468 if (!GTK_WIDGET_VISIBLE (window))
9469 gtk_widget_show (window);
9471 gtk_widget_destroy (window);
9478 static int timer = 0;
9481 timeout_test (GtkWidget *label)
9483 static int count = 0;
9484 static char buffer[32];
9486 sprintf (buffer, "count: %d", ++count);
9487 gtk_label_set_text (GTK_LABEL (label), buffer);
9493 start_timeout_test (GtkWidget *widget,
9498 timer = gtk_timeout_add (100, (GtkFunction) timeout_test, label);
9503 stop_timeout_test (GtkWidget *widget,
9508 gtk_timeout_remove (timer);
9514 destroy_timeout_test (GtkWidget *widget,
9517 stop_timeout_test (NULL, NULL);
9523 create_timeout_test (void)
9525 static GtkWidget *window = NULL;
9531 window = gtk_dialog_new ();
9533 gtk_signal_connect (GTK_OBJECT (window), "destroy",
9534 GTK_SIGNAL_FUNC(destroy_timeout_test),
9537 gtk_window_set_title (GTK_WINDOW (window), "Timeout Test");
9538 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
9540 label = gtk_label_new ("count: 0");
9541 gtk_misc_set_padding (GTK_MISC (label), 10, 10);
9542 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox),
9543 label, TRUE, TRUE, 0);
9544 gtk_widget_show (label);
9546 button = gtk_button_new_with_label ("close");
9547 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
9548 GTK_SIGNAL_FUNC(gtk_widget_destroy),
9549 GTK_OBJECT (window));
9550 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
9551 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
9552 button, TRUE, TRUE, 0);
9553 gtk_widget_grab_default (button);
9554 gtk_widget_show (button);
9556 button = gtk_button_new_with_label ("start");
9557 gtk_signal_connect (GTK_OBJECT (button), "clicked",
9558 GTK_SIGNAL_FUNC(start_timeout_test),
9560 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
9561 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
9562 button, TRUE, TRUE, 0);
9563 gtk_widget_show (button);
9565 button = gtk_button_new_with_label ("stop");
9566 gtk_signal_connect (GTK_OBJECT (button), "clicked",
9567 GTK_SIGNAL_FUNC(stop_timeout_test),
9569 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
9570 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
9571 button, TRUE, TRUE, 0);
9572 gtk_widget_show (button);
9575 if (!GTK_WIDGET_VISIBLE (window))
9576 gtk_widget_show (window);
9578 gtk_widget_destroy (window);
9585 static int idle_id = 0;
9588 idle_test (GtkWidget *label)
9590 static int count = 0;
9591 static char buffer[32];
9593 sprintf (buffer, "count: %d", ++count);
9594 gtk_label_set_text (GTK_LABEL (label), buffer);
9600 start_idle_test (GtkWidget *widget,
9605 idle_id = gtk_idle_add ((GtkFunction) idle_test, label);
9610 stop_idle_test (GtkWidget *widget,
9615 gtk_idle_remove (idle_id);
9621 destroy_idle_test (GtkWidget *widget,
9624 stop_idle_test (NULL, NULL);
9630 toggle_idle_container (GtkObject *button,
9631 GtkContainer *container)
9633 gtk_container_set_resize_mode (container, GPOINTER_TO_INT (gtk_object_get_user_data (button)));
9637 create_idle_test (void)
9639 static GtkWidget *window = NULL;
9642 GtkWidget *container;
9649 window = gtk_dialog_new ();
9651 gtk_signal_connect (GTK_OBJECT (window), "destroy",
9652 GTK_SIGNAL_FUNC(destroy_idle_test),
9655 gtk_window_set_title (GTK_WINDOW (window), "Idle Test");
9656 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
9658 label = gtk_label_new ("count: 0");
9659 gtk_misc_set_padding (GTK_MISC (label), 10, 10);
9660 gtk_widget_show (label);
9663 gtk_widget_new (GTK_TYPE_HBOX,
9665 /* "GtkContainer::child", gtk_widget_new (GTK_TYPE_HBOX,
9666 * "GtkWidget::visible", TRUE,
9671 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox),
9672 container, TRUE, TRUE, 0);
9675 gtk_widget_new (GTK_TYPE_FRAME,
9677 "label", "Label Container",
9679 "parent", GTK_DIALOG (window)->vbox,
9682 gtk_widget_new (GTK_TYPE_VBOX,
9687 g_object_connect (gtk_widget_new (GTK_TYPE_RADIO_BUTTON,
9688 "label", "Resize-Parent",
9689 "user_data", (void*)GTK_RESIZE_PARENT,
9693 "signal::clicked", toggle_idle_container, container,
9696 g_object_connect (gtk_widget_new (GTK_TYPE_RADIO_BUTTON,
9697 "label", "Resize-Queue",
9698 "user_data", (void*)GTK_RESIZE_QUEUE,
9703 "signal::clicked", toggle_idle_container, container,
9706 g_object_set (g_object_connect (gtk_widget_new (GTK_TYPE_RADIO_BUTTON,
9707 "label", "Resize-Immediate",
9708 "user_data", (void*)GTK_RESIZE_IMMEDIATE,
9710 "signal::clicked", toggle_idle_container, container,
9717 button = gtk_button_new_with_label ("close");
9718 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
9719 GTK_SIGNAL_FUNC(gtk_widget_destroy),
9720 GTK_OBJECT (window));
9721 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
9722 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
9723 button, TRUE, TRUE, 0);
9724 gtk_widget_grab_default (button);
9725 gtk_widget_show (button);
9727 button = gtk_button_new_with_label ("start");
9728 gtk_signal_connect (GTK_OBJECT (button), "clicked",
9729 GTK_SIGNAL_FUNC(start_idle_test),
9731 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
9732 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
9733 button, TRUE, TRUE, 0);
9734 gtk_widget_show (button);
9736 button = gtk_button_new_with_label ("stop");
9737 gtk_signal_connect (GTK_OBJECT (button), "clicked",
9738 GTK_SIGNAL_FUNC(stop_idle_test),
9740 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
9741 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
9742 button, TRUE, TRUE, 0);
9743 gtk_widget_show (button);
9746 if (!GTK_WIDGET_VISIBLE (window))
9747 gtk_widget_show (window);
9749 gtk_widget_destroy (window);
9757 reload_rc_file (void)
9761 if (gtk_rc_reparse_all ())
9763 toplevels = gdk_window_get_toplevels();
9767 gdk_window_get_user_data (toplevels->data, (gpointer *)&widget);
9770 gtk_widget_reset_rc_styles (widget);
9772 toplevels = toplevels->next;
9774 g_list_free (toplevels);
9779 reload_all_rc_files (void)
9781 static GdkAtom atom_rcfiles = GDK_NONE;
9787 atom_rcfiles = gdk_atom_intern("_GTK_READ_RCFILES", FALSE);
9789 for(i = 0; i < 5; i++)
9791 sev.data_format = 32;
9792 sev.message_type = atom_rcfiles;
9793 gdk_event_send_clientmessage_toall ((GdkEvent *) &sev);
9797 create_rc_file (void)
9799 static GtkWidget *window = NULL;
9804 window = gtk_dialog_new ();
9806 gtk_signal_connect (GTK_OBJECT (window), "destroy",
9807 GTK_SIGNAL_FUNC(destroy_idle_test),
9810 gtk_window_set_title (GTK_WINDOW (window), "Reload Rc file");
9811 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
9813 button = gtk_button_new_with_label ("Reload");
9814 gtk_signal_connect (GTK_OBJECT (button), "clicked",
9815 GTK_SIGNAL_FUNC(reload_rc_file), NULL);
9816 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
9817 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
9818 button, TRUE, TRUE, 0);
9819 gtk_widget_grab_default (button);
9820 gtk_widget_show (button);
9822 button = gtk_button_new_with_label ("Reload All");
9823 gtk_signal_connect (GTK_OBJECT (button), "clicked",
9824 GTK_SIGNAL_FUNC(reload_all_rc_files), NULL);
9825 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
9826 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
9827 button, TRUE, TRUE, 0);
9828 gtk_widget_show (button);
9830 button = gtk_button_new_with_label ("Close");
9831 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
9832 GTK_SIGNAL_FUNC(gtk_widget_destroy),
9833 GTK_OBJECT (window));
9834 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
9835 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
9836 button, TRUE, TRUE, 0);
9837 gtk_widget_show (button);
9841 if (!GTK_WIDGET_VISIBLE (window))
9842 gtk_widget_show (window);
9844 gtk_widget_destroy (window);
9848 * Test of recursive mainloop
9852 mainloop_destroyed (GtkWidget *w, GtkWidget **window)
9859 create_mainloop (void)
9861 static GtkWidget *window = NULL;
9867 window = gtk_dialog_new ();
9869 gtk_window_set_title (GTK_WINDOW (window), "Test Main Loop");
9871 gtk_signal_connect (GTK_OBJECT (window), "destroy",
9872 GTK_SIGNAL_FUNC(mainloop_destroyed),
9875 label = gtk_label_new ("In recursive main loop...");
9876 gtk_misc_set_padding (GTK_MISC(label), 20, 20);
9878 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox), label,
9880 gtk_widget_show (label);
9882 button = gtk_button_new_with_label ("Leave");
9883 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area), button,
9886 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
9887 GTK_SIGNAL_FUNC (gtk_widget_destroy),
9888 GTK_OBJECT (window));
9890 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
9891 gtk_widget_grab_default (button);
9893 gtk_widget_show (button);
9896 if (!GTK_WIDGET_VISIBLE (window))
9898 gtk_widget_show (window);
9900 g_print ("create_mainloop: start\n");
9902 g_print ("create_mainloop: done\n");
9905 gtk_widget_destroy (window);
9909 layout_expose_handler (GtkWidget *widget, GdkEventExpose *event)
9914 gint imin, imax, jmin, jmax;
9916 layout = GTK_LAYOUT (widget);
9918 imin = (layout->xoffset + event->area.x) / 10;
9919 imax = (layout->xoffset + event->area.x + event->area.width + 9) / 10;
9921 jmin = (layout->yoffset + event->area.y) / 10;
9922 jmax = (layout->yoffset + event->area.y + event->area.height + 9) / 10;
9924 gdk_window_clear_area (widget->window,
9925 event->area.x, event->area.y,
9926 event->area.width, event->area.height);
9928 for (i=imin; i<imax; i++)
9929 for (j=jmin; j<jmax; j++)
9931 gdk_draw_rectangle (layout->bin_window,
9932 widget->style->black_gc,
9934 10*i - layout->xoffset, 10*j - layout->yoffset,
9940 void create_layout (void)
9942 static GtkWidget *window = NULL;
9944 GtkWidget *scrolledwindow;
9953 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
9954 gtk_signal_connect (GTK_OBJECT (window), "destroy",
9955 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
9958 gtk_window_set_title (GTK_WINDOW (window), "Layout");
9959 gtk_widget_set_usize (window, 200, 200);
9961 scrolledwindow = gtk_scrolled_window_new (NULL, NULL);
9962 gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolledwindow),
9964 gtk_scrolled_window_set_placement (GTK_SCROLLED_WINDOW (scrolledwindow),
9965 GTK_CORNER_TOP_RIGHT);
9967 gtk_container_add (GTK_CONTAINER (window), scrolledwindow);
9969 layout = gtk_layout_new (NULL, NULL);
9970 gtk_container_add (GTK_CONTAINER (scrolledwindow), layout);
9972 /* We set step sizes here since GtkLayout does not set
9975 GTK_LAYOUT (layout)->hadjustment->step_increment = 10.0;
9976 GTK_LAYOUT (layout)->vadjustment->step_increment = 10.0;
9978 gtk_widget_set_events (layout, GDK_EXPOSURE_MASK);
9979 gtk_signal_connect (GTK_OBJECT (layout), "expose_event",
9980 GTK_SIGNAL_FUNC (layout_expose_handler), NULL);
9982 gtk_layout_set_size (GTK_LAYOUT (layout), 1600, 128000);
9984 for (i=0 ; i < 16 ; i++)
9985 for (j=0 ; j < 16 ; j++)
9987 sprintf(buf, "Button %d, %d", i, j);
9989 button = gtk_button_new_with_label (buf);
9991 button = gtk_label_new (buf);
9993 gtk_layout_put (GTK_LAYOUT (layout), button,
9997 for (i=16; i < 1280; i++)
9999 sprintf(buf, "Button %d, %d", i, 0);
10001 button = gtk_button_new_with_label (buf);
10003 button = gtk_label_new (buf);
10005 gtk_layout_put (GTK_LAYOUT (layout), button,
10010 if (!GTK_WIDGET_VISIBLE (window))
10011 gtk_widget_show_all (window);
10013 gtk_widget_destroy (window);
10017 create_styles (void)
10019 static GtkWidget *window = NULL;
10024 static GdkColor red = { 0, 0xffff, 0, 0 };
10025 static GdkColor green = { 0, 0, 0xffff, 0 };
10026 static GdkColor blue = { 0, 0, 0, 0xffff };
10027 static GdkColor yellow = { 0, 0xffff, 0xffff, 0 };
10028 static GdkColor cyan = { 0, 0 , 0xffff, 0xffff };
10029 PangoFontDescription *font_desc;
10031 GtkRcStyle *rc_style;
10035 window = gtk_dialog_new ();
10036 gtk_signal_connect (GTK_OBJECT (window), "destroy",
10037 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
10041 button = gtk_button_new_with_label ("Close");
10042 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
10043 GTK_SIGNAL_FUNC(gtk_widget_destroy),
10044 GTK_OBJECT (window));
10045 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
10046 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
10047 button, TRUE, TRUE, 0);
10048 gtk_widget_show (button);
10050 vbox = gtk_vbox_new (FALSE, 5);
10051 gtk_container_set_border_width (GTK_CONTAINER (vbox), 10);
10052 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox), vbox, FALSE, FALSE, 0);
10054 label = gtk_label_new ("Font:");
10055 gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
10056 gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
10058 font_desc = pango_font_description_from_string ("Helvetica,Sans Oblique 18");
10060 button = gtk_button_new_with_label ("Some Text");
10061 gtk_widget_modify_font (GTK_BIN (button)->child, font_desc);
10062 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
10064 label = gtk_label_new ("Foreground:");
10065 gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
10066 gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
10068 button = gtk_button_new_with_label ("Some Text");
10069 gtk_widget_modify_fg (GTK_BIN (button)->child, GTK_STATE_NORMAL, &red);
10070 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
10072 label = gtk_label_new ("Background:");
10073 gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
10074 gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
10076 button = gtk_button_new_with_label ("Some Text");
10077 gtk_widget_modify_bg (button, GTK_STATE_NORMAL, &green);
10078 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
10080 label = gtk_label_new ("Text:");
10081 gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
10082 gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
10084 entry = gtk_entry_new ();
10085 gtk_entry_set_text (GTK_ENTRY (entry), "Some Text");
10086 gtk_widget_modify_text (entry, GTK_STATE_NORMAL, &blue);
10087 gtk_box_pack_start (GTK_BOX (vbox), entry, FALSE, FALSE, 0);
10089 label = gtk_label_new ("Base:");
10090 gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
10091 gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
10093 entry = gtk_entry_new ();
10094 gtk_entry_set_text (GTK_ENTRY (entry), "Some Text");
10095 gtk_widget_modify_base (entry, GTK_STATE_NORMAL, &yellow);
10096 gtk_box_pack_start (GTK_BOX (vbox), entry, FALSE, FALSE, 0);
10098 label = gtk_label_new ("Multiple:");
10099 gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
10100 gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
10102 button = gtk_button_new_with_label ("Some Text");
10104 rc_style = gtk_rc_style_new ();
10106 rc_style->font_desc = font_desc;
10107 rc_style->color_flags[GTK_STATE_NORMAL] = GTK_RC_FG | GTK_RC_BG;
10108 rc_style->color_flags[GTK_STATE_PRELIGHT] = GTK_RC_FG | GTK_RC_BG;
10109 rc_style->color_flags[GTK_STATE_ACTIVE] = GTK_RC_FG | GTK_RC_BG;
10110 rc_style->fg[GTK_STATE_NORMAL] = yellow;
10111 rc_style->bg[GTK_STATE_NORMAL] = blue;
10112 rc_style->fg[GTK_STATE_PRELIGHT] = blue;
10113 rc_style->bg[GTK_STATE_PRELIGHT] = yellow;
10114 rc_style->fg[GTK_STATE_ACTIVE] = red;
10115 rc_style->bg[GTK_STATE_ACTIVE] = cyan;
10116 rc_style->xthickness = 5;
10117 rc_style->ythickness = 5;
10119 gtk_widget_modify_style (button, rc_style);
10120 gtk_widget_modify_style (GTK_BIN (button)->child, rc_style);
10122 g_object_unref (G_OBJECT (rc_style));
10124 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
10127 if (!GTK_WIDGET_VISIBLE (window))
10128 gtk_widget_show_all (window);
10130 gtk_widget_destroy (window);
10134 * Main Window and Exit
10138 do_exit (GtkWidget *widget, GtkWidget *window)
10140 gtk_widget_destroy (window);
10145 create_main_window (void)
10152 { "button box", create_button_box },
10153 { "buttons", create_buttons },
10154 { "check buttons", create_check_buttons },
10155 { "clist", create_clist},
10156 { "color selection", create_color_selection },
10157 { "ctree", create_ctree },
10158 { "cursors", create_cursors },
10159 { "dialog", create_dialog },
10160 /* { "dnd", create_dnd }, */
10161 { "entry", create_entry },
10162 { "event watcher", create_event_watcher },
10163 { "file selection", create_file_selection },
10164 { "flipping", create_flipping },
10165 { "focus", create_focus },
10166 { "font selection", create_font_selection },
10167 { "gamma curve", create_gamma_curve },
10168 { "handle box", create_handle_box },
10169 { "image from drawable", create_get_image },
10170 { "image", create_image },
10171 { "item factory", create_item_factory },
10172 { "labels", create_labels },
10173 { "layout", create_layout },
10174 { "list", create_list },
10175 { "menus", create_menus },
10176 { "message dialog", create_message_dialog },
10177 { "modal window", create_modal_window },
10178 { "notebook", create_notebook },
10179 { "panes", create_panes },
10180 { "pixmap", create_pixmap },
10181 { "preview color", create_color_preview },
10182 { "preview gray", create_gray_preview },
10183 { "progress bar", create_progress_bar },
10184 { "radio buttons", create_radio_buttons },
10185 { "range controls", create_range_controls },
10186 { "rc file", create_rc_file },
10187 { "reparent", create_reparent },
10188 { "rulers", create_rulers },
10189 { "saved position", create_saved_position },
10190 { "scrolled windows", create_scrolled_windows },
10191 { "shapes", create_shapes },
10192 { "spinbutton", create_spins },
10193 { "statusbar", create_statusbar },
10194 { "styles", create_styles },
10195 { "test idle", create_idle_test },
10196 { "test mainloop", create_mainloop },
10197 { "test scrolling", create_scroll_test },
10198 { "test selection", create_selection_test },
10199 { "test timeout", create_timeout_test },
10200 { "text", create_text },
10201 { "toggle buttons", create_toggle_buttons },
10202 { "toolbar", create_toolbar },
10203 { "tooltips", create_tooltips },
10204 { "tree", create_tree_mode_window},
10205 { "WM hints", create_wmhints },
10206 { "window sizing", create_window_sizing },
10207 { "window states", create_window_states }
10209 int nbuttons = sizeof (buttons) / sizeof (buttons[0]);
10213 GtkWidget *scrolled_window;
10217 GtkWidget *separator;
10218 GdkGeometry geometry;
10221 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
10222 gtk_widget_set_name (window, "main window");
10223 gtk_widget_set_uposition (window, 20, 20);
10224 gtk_window_set_default_size (GTK_WINDOW (window), -1, 400);
10226 geometry.min_width = -1;
10227 geometry.min_height = -1;
10228 geometry.max_width = -1;
10229 geometry.max_height = G_MAXSHORT;
10230 gtk_window_set_geometry_hints (GTK_WINDOW (window), NULL,
10232 GDK_HINT_MIN_SIZE | GDK_HINT_MAX_SIZE);
10234 gtk_signal_connect (GTK_OBJECT (window), "destroy",
10235 GTK_SIGNAL_FUNC(gtk_main_quit),
10237 gtk_signal_connect (GTK_OBJECT (window), "delete-event",
10238 GTK_SIGNAL_FUNC (gtk_false),
10241 box1 = gtk_vbox_new (FALSE, 0);
10242 gtk_container_add (GTK_CONTAINER (window), box1);
10244 if (gtk_micro_version > 0)
10249 gtk_micro_version);
10254 gtk_minor_version);
10256 label = gtk_label_new (buffer);
10257 gtk_box_pack_start (GTK_BOX (box1), label, FALSE, FALSE, 0);
10259 scrolled_window = gtk_scrolled_window_new (NULL, NULL);
10260 gtk_container_set_border_width (GTK_CONTAINER (scrolled_window), 10);
10261 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
10263 GTK_POLICY_AUTOMATIC);
10264 gtk_box_pack_start (GTK_BOX (box1), scrolled_window, TRUE, TRUE, 0);
10266 box2 = gtk_vbox_new (FALSE, 0);
10267 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
10268 gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scrolled_window), box2);
10269 gtk_container_set_focus_vadjustment (GTK_CONTAINER (box2),
10270 gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (scrolled_window)));
10271 gtk_widget_show (box2);
10273 for (i = 0; i < nbuttons; i++)
10275 button = gtk_button_new_with_label (buttons[i].label);
10276 if (buttons[i].func)
10277 gtk_signal_connect (GTK_OBJECT (button),
10279 GTK_SIGNAL_FUNC(buttons[i].func),
10282 gtk_widget_set_sensitive (button, FALSE);
10283 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
10286 separator = gtk_hseparator_new ();
10287 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
10289 box2 = gtk_vbox_new (FALSE, 10);
10290 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
10291 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
10293 button = gtk_button_new_with_mnemonic ("_Close");
10294 gtk_signal_connect (GTK_OBJECT (button), "clicked",
10295 GTK_SIGNAL_FUNC (do_exit),
10297 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
10298 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
10299 gtk_widget_grab_default (button);
10301 gtk_widget_show_all (window);
10307 if (file_exists ("../gdk-pixbuf/.libs/libpixbufloader-pnm.so"))
10309 putenv ("GDK_PIXBUF_MODULEDIR=../gdk-pixbuf/.libs");
10310 putenv ("GTK_IM_MODULE_FILE=../modules/input/gtk.immodules");
10315 main (int argc, char *argv[])
10317 GtkBindingSet *binding_set;
10319 srand (time (NULL));
10324 /* Check to see if we are being run from the correct
10327 if (file_exists ("testgtkrc"))
10328 gtk_rc_add_default_file ("testgtkrc");
10330 gtk_init (&argc, &argv);
10334 binding_set = gtk_binding_set_by_class (gtk_type_class (GTK_TYPE_WIDGET));
10335 gtk_binding_entry_add_signal (binding_set,
10336 '9', GDK_CONTROL_MASK | GDK_RELEASE_MASK,
10339 GTK_TYPE_STRING, "GtkWidgetClass <ctrl><release>9 test");
10341 create_main_window ();
10347 while (g_main_pending ())
10348 g_main_iteration (FALSE);
10351 while (g_main_pending ())
10352 g_main_iteration (FALSE);