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/.
44 #include "gdk/gdkkeysyms.h"
47 #define sleep(n) _sleep(n)
50 #include "prop-editor.h"
55 file_exists (const char *filename)
59 return stat (filename, &statbuf) == 0;
63 shape_create_icon (GdkScreen *screen,
72 build_option_menu (gchar *items[],
75 void (*func) (GtkWidget *widget, gpointer data),
78 /* macro, structure and variables used by tree window demos */
79 #define DEFAULT_NUMBER_OF_ITEM 3
80 #define DEFAULT_RECURSION_LEVEL 3
83 GSList* selection_mode_group;
84 GtkWidget* single_button;
85 GtkWidget* browse_button;
86 GtkWidget* multiple_button;
87 GtkWidget* draw_line_button;
88 GtkWidget* view_line_button;
89 GtkWidget* no_root_item_button;
90 GtkWidget* nb_item_spinner;
91 GtkWidget* recursion_spinner;
92 } sTreeSampleSelection;
94 typedef struct sTreeButtons {
96 GtkWidget* add_button;
97 GtkWidget* remove_button;
98 GtkWidget* subtree_button;
100 /* end of tree section */
103 build_option_menu (gchar *items[],
106 void (*func)(GtkWidget *widget, gpointer data),
112 omenu = gtk_combo_box_text_new ();
113 g_signal_connect (omenu, "changed",
114 G_CALLBACK (func), data);
116 for (i = 0; i < num_items; i++)
117 gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (omenu), items[i]);
119 gtk_combo_box_set_active (GTK_COMBO_BOX (omenu), history);
125 * Windows with an alpha channel
130 on_alpha_window_draw (GtkWidget *widget,
133 cairo_pattern_t *pattern;
134 int radius, width, height;
136 width = gtk_widget_get_allocated_width (widget);
137 height = gtk_widget_get_allocated_height (widget);
138 radius = MIN (width, height) / 2;
139 pattern = cairo_pattern_create_radial (width / 2,
146 if (gdk_screen_get_rgba_visual (gtk_widget_get_screen (widget)) &&
147 gtk_widget_is_composited (widget))
148 cairo_set_source_rgba (cr, 1.0, 1.0, 1.0, 0.0); /* transparent */
150 cairo_set_source_rgb (cr, 1.0, 1.0, 1.0); /* opaque white */
152 cairo_set_operator (cr, CAIRO_OPERATOR_SOURCE);
155 cairo_pattern_add_color_stop_rgba (pattern, 0.0,
156 1.0, 0.75, 0.0, 1.0); /* solid orange */
157 cairo_pattern_add_color_stop_rgba (pattern, 1.0,
158 1.0, 0.75, 0.0, 0.0); /* transparent orange */
160 cairo_set_source (cr, pattern);
161 cairo_pattern_destroy (pattern);
163 cairo_set_operator (cr, CAIRO_OPERATOR_OVER);
170 build_alpha_widgets (void)
173 GtkWidget *radio_button;
178 table = gtk_table_new (1, 1, FALSE);
180 radio_button = gtk_radio_button_new_with_label (NULL, "Red");
181 gtk_table_attach (GTK_TABLE (table),
184 GTK_EXPAND | GTK_FILL, 0,
187 radio_button = gtk_radio_button_new_with_label_from_widget (GTK_RADIO_BUTTON (radio_button), "Green");
188 gtk_table_attach (GTK_TABLE (table),
191 GTK_EXPAND | GTK_FILL, 0,
194 radio_button = gtk_radio_button_new_with_label_from_widget (GTK_RADIO_BUTTON (radio_button), "Blue"),
195 gtk_table_attach (GTK_TABLE (table),
198 GTK_EXPAND | GTK_FILL, 0,
201 gtk_table_attach (GTK_TABLE (table),
202 gtk_check_button_new_with_label ("Sedentary"),
204 GTK_EXPAND | GTK_FILL, 0,
206 gtk_table_attach (GTK_TABLE (table),
207 gtk_check_button_new_with_label ("Nocturnal"),
209 GTK_EXPAND | GTK_FILL, 0,
211 gtk_table_attach (GTK_TABLE (table),
212 gtk_check_button_new_with_label ("Compulsive"),
214 GTK_EXPAND | GTK_FILL, 0,
217 radio_button = gtk_radio_button_new_with_label_from_widget (GTK_RADIO_BUTTON (radio_button), "Green");
218 gtk_table_attach (GTK_TABLE (table),
221 GTK_EXPAND | GTK_FILL, 0,
224 radio_button = gtk_radio_button_new_with_label_from_widget (GTK_RADIO_BUTTON (radio_button), "Blue"),
225 gtk_table_attach (GTK_TABLE (table),
228 GTK_EXPAND | GTK_FILL, 0,
231 hbox = gtk_hbox_new (FALSE, 0);
232 label = gtk_label_new (NULL);
233 gtk_label_set_markup (GTK_LABEL (label), "<i>Entry: </i>");
234 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
235 entry = gtk_entry_new ();
236 gtk_box_pack_start (GTK_BOX (hbox), entry, TRUE, TRUE, 0);
237 gtk_table_attach (GTK_TABLE (table),
240 GTK_EXPAND | GTK_FILL, 0,
247 on_alpha_screen_changed (GtkWindow *window,
248 GdkScreen *old_screen,
251 GdkScreen *screen = gtk_widget_get_screen (GTK_WIDGET (window));
252 GdkVisual *visual = gdk_screen_get_rgba_visual (screen);
256 visual = gdk_screen_get_system_visual (screen);
257 gtk_label_set_markup (GTK_LABEL (label), "<b>Screen doesn't support alpha</b>");
261 gtk_label_set_markup (GTK_LABEL (label), "<b>Screen supports alpha</b>");
264 gtk_widget_set_visual (GTK_WIDGET (window), visual);
268 on_composited_changed (GtkWidget *window,
271 gboolean is_composited = gtk_widget_is_composited (window);
274 gtk_label_set_text (label, "Composited");
276 gtk_label_set_text (label, "Not composited");
280 create_alpha_window (GtkWidget *widget)
282 static GtkWidget *window;
286 GtkWidget *content_area;
290 window = gtk_dialog_new_with_buttons ("Alpha Window",
291 GTK_WINDOW (gtk_widget_get_toplevel (widget)), 0,
295 gtk_widget_set_app_paintable (window, TRUE);
296 g_signal_connect (window, "draw",
297 G_CALLBACK (on_alpha_window_draw), NULL);
299 content_area = gtk_dialog_get_content_area (GTK_DIALOG (window));
301 vbox = gtk_vbox_new (FALSE, 8);
302 gtk_container_set_border_width (GTK_CONTAINER (vbox), 12);
303 gtk_box_pack_start (GTK_BOX (content_area), vbox,
306 label = gtk_label_new (NULL);
307 gtk_box_pack_start (GTK_BOX (vbox), label, TRUE, TRUE, 0);
308 on_alpha_screen_changed (GTK_WINDOW (window), NULL, label);
309 g_signal_connect (window, "screen-changed",
310 G_CALLBACK (on_alpha_screen_changed), label);
312 label = gtk_label_new (NULL);
313 gtk_box_pack_start (GTK_BOX (vbox), label, TRUE, TRUE, 0);
314 on_composited_changed (window, GTK_LABEL (label));
315 g_signal_connect (window, "composited_changed", G_CALLBACK (on_composited_changed), label);
317 gtk_box_pack_start (GTK_BOX (vbox), build_alpha_widgets (), TRUE, TRUE, 0);
319 g_signal_connect (window, "destroy",
320 G_CALLBACK (gtk_widget_destroyed),
323 g_signal_connect (window, "response",
324 G_CALLBACK (gtk_widget_destroy),
328 if (!gtk_widget_get_visible (window))
329 gtk_widget_show_all (window);
331 gtk_widget_destroy (window);
335 * Composited non-toplevel window
338 /* The draw event handler for the event box.
340 * This function simply draws a transparency onto a widget on the area
341 * for which it receives expose events. This is intended to give the
342 * event box a "transparent" background.
344 * In order for this to work properly, the widget must have an RGBA
345 * colourmap. The widget should also be set as app-paintable since it
346 * doesn't make sense for GTK to draw a background if we are drawing it
347 * (and because GTK might actually replace our transparency with its
348 * default background colour).
351 transparent_draw (GtkWidget *widget,
354 cairo_set_operator (cr, CAIRO_OPERATOR_CLEAR);
360 /* The expose event handler for the window.
362 * This function performs the actual compositing of the event box onto
363 * the already-existing background of the window at 50% normal opacity.
365 * In this case we do not want app-paintable to be set on the widget
366 * since we want it to draw its own (red) background. Because of this,
367 * however, we must ensure that we use g_signal_register_after so that
368 * this handler is called after the red has been drawn. If it was
369 * called before then GTK would just blindly paint over our work.
372 window_draw (GtkWidget *widget,
375 GtkAllocation allocation;
378 /* get our child (in this case, the event box) */
379 child = gtk_bin_get_child (GTK_BIN (widget));
381 gtk_widget_get_allocation (child, &allocation);
383 /* the source data is the (composited) event box */
384 gdk_cairo_set_source_window (cr, gtk_widget_get_window (child),
388 /* composite, with a 50% opacity */
389 cairo_paint_with_alpha (cr, 0.5);
395 create_composited_window (GtkWidget *widget)
397 static GtkWidget *window;
401 GtkWidget *event, *button;
404 /* make the widgets */
405 button = gtk_button_new_with_label ("A Button");
406 event = gtk_event_box_new ();
407 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
409 g_signal_connect (window, "destroy",
410 G_CALLBACK (gtk_widget_destroyed),
413 /* put a red background on the window */
414 gdk_color_parse ("red", &red);
415 gtk_widget_modify_bg (window, GTK_STATE_NORMAL, &red);
417 /* set our event box to have a fully-transparent background
418 * drawn on it. currently there is no way to simply tell gtk
419 * that "transparency" is the background colour for a widget.
421 gtk_widget_set_app_paintable (GTK_WIDGET (event), TRUE);
422 g_signal_connect (event, "draw",
423 G_CALLBACK (transparent_draw), NULL);
425 /* put them inside one another */
426 gtk_container_set_border_width (GTK_CONTAINER (window), 10);
427 gtk_container_add (GTK_CONTAINER (window), event);
428 gtk_container_add (GTK_CONTAINER (event), button);
430 /* realise and show everything */
431 gtk_widget_realize (button);
433 /* set the event box GdkWindow to be composited.
434 * obviously must be performed after event box is realised.
436 gdk_window_set_composited (gtk_widget_get_window (event),
439 /* set up the compositing handler.
440 * note that we do _after so that the normal (red) background is drawn
441 * by gtk before our compositing occurs.
443 g_signal_connect_after (window, "draw",
444 G_CALLBACK (window_draw), NULL);
447 if (!gtk_widget_get_visible (window))
448 gtk_widget_show_all (window);
450 gtk_widget_destroy (window);
454 * Big windows and guffaw scrolling
458 pattern_set_bg (GtkWidget *widget,
462 static const GdkColor colors[] = {
463 { 0, 0x4444, 0x4444, 0xffff },
464 { 0, 0x8888, 0x8888, 0xffff },
465 { 0, 0xaaaa, 0xaaaa, 0xffff }
468 gdk_window_set_user_data (child, widget);
469 gdk_window_set_background (child, &colors[level]);
473 create_pattern (GtkWidget *widget,
484 while (2 * h <= height)
489 while (2 * w <= width)
491 if ((i + j) % 2 == 0)
496 GdkWindowAttr attributes;
498 attributes.window_type = GDK_WINDOW_CHILD;
501 attributes.width = w;
502 attributes.height = h;
503 attributes.wclass = GDK_INPUT_OUTPUT;
504 attributes.event_mask = GDK_EXPOSURE_MASK;
505 attributes.visual = gtk_widget_get_visual (widget);
507 child = gdk_window_new (parent, &attributes,
508 GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL);
510 pattern_set_bg (widget, child, level);
513 create_pattern (widget, child, level + 1, w, h);
515 gdk_window_show (child);
525 #define PATTERN_SIZE (1 << 18)
528 pattern_hadj_changed (GtkAdjustment *adj,
531 gint *old_value = g_object_get_data (G_OBJECT (adj), "old-value");
532 gint new_value = adj->value;
534 if (gtk_widget_get_realized (darea))
536 gdk_window_scroll (gtk_widget_get_window (darea),
537 *old_value - new_value, 0);
538 *old_value = new_value;
543 pattern_vadj_changed (GtkAdjustment *adj,
546 gint *old_value = g_object_get_data (G_OBJECT (adj), "old-value");
547 gint new_value = adj->value;
549 if (gtk_widget_get_realized (darea))
551 gdk_window_scroll (gtk_widget_get_window (darea),
552 0, *old_value - new_value);
553 *old_value = new_value;
558 pattern_realize (GtkWidget *widget,
563 window = gtk_widget_get_window (widget);
564 pattern_set_bg (widget, window, 0);
565 create_pattern (widget, window, 1, PATTERN_SIZE, PATTERN_SIZE);
569 create_big_windows (GtkWidget *widget)
571 static GtkWidget *window = NULL;
572 GtkWidget *content_area;
573 GtkWidget *darea, *table, *scrollbar;
577 static gint current_x;
578 static gint current_y;
585 window = gtk_dialog_new_with_buttons ("Big Windows",
591 gtk_window_set_screen (GTK_WINDOW (window),
592 gtk_widget_get_screen (widget));
594 gtk_window_set_default_size (GTK_WINDOW (window), 200, 300);
596 g_signal_connect (window, "destroy",
597 G_CALLBACK (gtk_widget_destroyed),
600 g_signal_connect (window, "response",
601 G_CALLBACK (gtk_widget_destroy),
604 content_area = gtk_dialog_get_content_area (GTK_DIALOG (window));
606 table = gtk_table_new (2, 2, FALSE);
607 gtk_box_pack_start (GTK_BOX (content_area), table, TRUE, TRUE, 0);
609 darea = gtk_drawing_area_new ();
611 hadj = gtk_adjustment_new (0, 0, PATTERN_SIZE, 10, 100, 100);
612 g_signal_connect (hadj, "value_changed",
613 G_CALLBACK (pattern_hadj_changed), darea);
614 g_object_set_data (G_OBJECT (hadj), "old-value", ¤t_x);
616 vadj = gtk_adjustment_new (0, 0, PATTERN_SIZE, 10, 100, 100);
617 g_signal_connect (vadj, "value_changed",
618 G_CALLBACK (pattern_vadj_changed), darea);
619 g_object_set_data (G_OBJECT (vadj), "old-value", ¤t_y);
621 g_signal_connect (darea, "realize",
622 G_CALLBACK (pattern_realize),
625 eventbox = gtk_event_box_new ();
626 gtk_table_attach (GTK_TABLE (table), eventbox,
628 GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND,
631 gtk_container_add (GTK_CONTAINER (eventbox), darea);
633 scrollbar = gtk_hscrollbar_new (hadj);
634 gtk_table_attach (GTK_TABLE (table), scrollbar,
636 GTK_FILL | GTK_EXPAND, GTK_FILL,
639 scrollbar = gtk_vscrollbar_new (vadj);
640 gtk_table_attach (GTK_TABLE (table), scrollbar,
642 GTK_FILL, GTK_EXPAND | GTK_FILL,
647 if (!gtk_widget_get_visible (window))
648 gtk_widget_show_all (window);
650 gtk_widget_hide (window);
658 button_window (GtkWidget *widget,
661 if (!gtk_widget_get_visible (button))
662 gtk_widget_show (button);
664 gtk_widget_hide (button);
668 create_buttons (GtkWidget *widget)
670 static GtkWidget *window = NULL;
674 GtkWidget *button[10];
675 GtkWidget *separator;
679 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
680 gtk_window_set_screen (GTK_WINDOW (window),
681 gtk_widget_get_screen (widget));
683 g_signal_connect (window, "destroy",
684 G_CALLBACK (gtk_widget_destroyed),
687 gtk_window_set_title (GTK_WINDOW (window), "GtkButton");
688 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
690 box1 = gtk_vbox_new (FALSE, 0);
691 gtk_container_add (GTK_CONTAINER (window), box1);
693 table = gtk_table_new (3, 3, FALSE);
694 gtk_table_set_row_spacings (GTK_TABLE (table), 5);
695 gtk_table_set_col_spacings (GTK_TABLE (table), 5);
696 gtk_container_set_border_width (GTK_CONTAINER (table), 10);
697 gtk_box_pack_start (GTK_BOX (box1), table, TRUE, TRUE, 0);
699 button[0] = gtk_button_new_with_label ("button1");
700 button[1] = gtk_button_new_with_mnemonic ("_button2");
701 button[2] = gtk_button_new_with_mnemonic ("_button3");
702 button[3] = gtk_button_new_from_stock (GTK_STOCK_OK);
703 button[4] = gtk_button_new_with_label ("button5");
704 button[5] = gtk_button_new_with_label ("button6");
705 button[6] = gtk_button_new_with_label ("button7");
706 button[7] = gtk_button_new_from_stock (GTK_STOCK_CLOSE);
707 button[8] = gtk_button_new_with_label ("button9");
709 g_signal_connect (button[0], "clicked",
710 G_CALLBACK (button_window),
713 gtk_table_attach (GTK_TABLE (table), button[0], 0, 1, 0, 1,
714 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
716 g_signal_connect (button[1], "clicked",
717 G_CALLBACK (button_window),
720 gtk_table_attach (GTK_TABLE (table), button[1], 1, 2, 1, 2,
721 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
723 g_signal_connect (button[2], "clicked",
724 G_CALLBACK (button_window),
726 gtk_table_attach (GTK_TABLE (table), button[2], 2, 3, 2, 3,
727 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
729 g_signal_connect (button[3], "clicked",
730 G_CALLBACK (button_window),
732 gtk_table_attach (GTK_TABLE (table), button[3], 0, 1, 2, 3,
733 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
735 g_signal_connect (button[4], "clicked",
736 G_CALLBACK (button_window),
738 gtk_table_attach (GTK_TABLE (table), button[4], 2, 3, 0, 1,
739 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
741 g_signal_connect (button[5], "clicked",
742 G_CALLBACK (button_window),
744 gtk_table_attach (GTK_TABLE (table), button[5], 1, 2, 2, 3,
745 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
747 g_signal_connect (button[6], "clicked",
748 G_CALLBACK (button_window),
750 gtk_table_attach (GTK_TABLE (table), button[6], 1, 2, 0, 1,
751 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
753 g_signal_connect (button[7], "clicked",
754 G_CALLBACK (button_window),
756 gtk_table_attach (GTK_TABLE (table), button[7], 2, 3, 1, 2,
757 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
759 g_signal_connect (button[8], "clicked",
760 G_CALLBACK (button_window),
762 gtk_table_attach (GTK_TABLE (table), button[8], 0, 1, 1, 2,
763 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
765 separator = gtk_hseparator_new ();
766 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
768 box2 = gtk_vbox_new (FALSE, 10);
769 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
770 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
772 button[9] = gtk_button_new_with_label ("close");
773 g_signal_connect_swapped (button[9], "clicked",
774 G_CALLBACK (gtk_widget_destroy),
776 gtk_box_pack_start (GTK_BOX (box2), button[9], TRUE, TRUE, 0);
777 gtk_widget_set_can_default (button[9], TRUE);
778 gtk_widget_grab_default (button[9]);
781 if (!gtk_widget_get_visible (window))
782 gtk_widget_show_all (window);
784 gtk_widget_destroy (window);
792 create_toggle_buttons (GtkWidget *widget)
794 static GtkWidget *window = NULL;
798 GtkWidget *separator;
802 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
803 gtk_window_set_screen (GTK_WINDOW (window),
804 gtk_widget_get_screen (widget));
806 g_signal_connect (window, "destroy",
807 G_CALLBACK (gtk_widget_destroyed),
810 gtk_window_set_title (GTK_WINDOW (window), "GtkToggleButton");
811 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
813 box1 = gtk_vbox_new (FALSE, 0);
814 gtk_container_add (GTK_CONTAINER (window), box1);
816 box2 = gtk_vbox_new (FALSE, 10);
817 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
818 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
820 button = gtk_toggle_button_new_with_label ("button1");
821 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
823 button = gtk_toggle_button_new_with_label ("button2");
824 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
826 button = gtk_toggle_button_new_with_label ("button3");
827 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
829 button = gtk_toggle_button_new_with_label ("inconsistent");
830 gtk_toggle_button_set_inconsistent (GTK_TOGGLE_BUTTON (button), TRUE);
831 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
833 separator = gtk_hseparator_new ();
834 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
836 box2 = gtk_vbox_new (FALSE, 10);
837 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
838 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
840 button = gtk_button_new_with_label ("close");
841 g_signal_connect_swapped (button, "clicked",
842 G_CALLBACK (gtk_widget_destroy),
844 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
845 gtk_widget_set_can_default (button, TRUE);
846 gtk_widget_grab_default (button);
849 if (!gtk_widget_get_visible (window))
850 gtk_widget_show_all (window);
852 gtk_widget_destroy (window);
856 create_widget_grid (GType widget_type)
859 GtkWidget *group_widget = NULL;
862 table = gtk_table_new (FALSE, 3, 3);
864 for (i = 0; i < 5; i++)
866 for (j = 0; j < 5; j++)
871 if (i == 0 && j == 0)
877 tmp = g_strdup_printf ("%d", j);
878 widget = gtk_label_new (tmp);
883 tmp = g_strdup_printf ("%c", 'A' + i - 1);
884 widget = gtk_label_new (tmp);
889 widget = g_object_new (widget_type, NULL);
891 if (g_type_is_a (widget_type, GTK_TYPE_RADIO_BUTTON))
894 group_widget = widget;
896 g_object_set (widget, "group", group_widget, NULL);
901 gtk_table_attach (GTK_TABLE (table), widget,
916 create_check_buttons (GtkWidget *widget)
918 static GtkWidget *window = NULL;
922 GtkWidget *separator;
927 window = gtk_dialog_new_with_buttons ("Check Buttons",
933 gtk_window_set_screen (GTK_WINDOW (window),
934 gtk_widget_get_screen (widget));
936 g_signal_connect (window, "destroy",
937 G_CALLBACK (gtk_widget_destroyed),
939 g_signal_connect (window, "response",
940 G_CALLBACK (gtk_widget_destroy),
943 box1 = gtk_dialog_get_content_area (GTK_DIALOG (window));
945 box2 = gtk_vbox_new (FALSE, 10);
946 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
947 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
949 button = gtk_check_button_new_with_mnemonic ("_button1");
950 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
952 button = gtk_check_button_new_with_label ("button2");
953 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
955 button = gtk_check_button_new_with_label ("button3");
956 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
958 button = gtk_check_button_new_with_label ("inconsistent");
959 gtk_toggle_button_set_inconsistent (GTK_TOGGLE_BUTTON (button), TRUE);
960 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
962 separator = gtk_hseparator_new ();
963 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
965 table = create_widget_grid (GTK_TYPE_CHECK_BUTTON);
966 gtk_container_set_border_width (GTK_CONTAINER (table), 10);
967 gtk_box_pack_start (GTK_BOX (box1), table, TRUE, TRUE, 0);
970 if (!gtk_widget_get_visible (window))
971 gtk_widget_show_all (window);
973 gtk_widget_destroy (window);
981 create_radio_buttons (GtkWidget *widget)
983 static GtkWidget *window = NULL;
987 GtkWidget *separator;
992 window = gtk_dialog_new_with_buttons ("Radio Buttons",
998 gtk_window_set_screen (GTK_WINDOW (window),
999 gtk_widget_get_screen (widget));
1001 g_signal_connect (window, "destroy",
1002 G_CALLBACK (gtk_widget_destroyed),
1004 g_signal_connect (window, "response",
1005 G_CALLBACK (gtk_widget_destroy),
1008 box1 = gtk_dialog_get_content_area (GTK_DIALOG (window));
1010 box2 = gtk_vbox_new (FALSE, 10);
1011 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
1012 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
1014 button = gtk_radio_button_new_with_label (NULL, "button1");
1015 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
1017 button = gtk_radio_button_new_with_label (
1018 gtk_radio_button_get_group (GTK_RADIO_BUTTON (button)),
1020 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE);
1021 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
1023 button = gtk_radio_button_new_with_label (
1024 gtk_radio_button_get_group (GTK_RADIO_BUTTON (button)),
1026 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
1028 button = gtk_radio_button_new_with_label (
1029 gtk_radio_button_get_group (GTK_RADIO_BUTTON (button)),
1031 gtk_toggle_button_set_inconsistent (GTK_TOGGLE_BUTTON (button), TRUE);
1032 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
1034 separator = gtk_hseparator_new ();
1035 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
1037 box2 = gtk_vbox_new (FALSE, 10);
1038 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
1039 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
1041 button = gtk_radio_button_new_with_label (NULL, "button4");
1042 gtk_toggle_button_set_mode (GTK_TOGGLE_BUTTON (button), FALSE);
1043 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
1045 button = gtk_radio_button_new_with_label (
1046 gtk_radio_button_get_group (GTK_RADIO_BUTTON (button)),
1048 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE);
1049 gtk_toggle_button_set_mode (GTK_TOGGLE_BUTTON (button), FALSE);
1050 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
1052 button = gtk_radio_button_new_with_label (
1053 gtk_radio_button_get_group (GTK_RADIO_BUTTON (button)),
1055 gtk_toggle_button_set_mode (GTK_TOGGLE_BUTTON (button), FALSE);
1056 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
1058 separator = gtk_hseparator_new ();
1059 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
1061 table = create_widget_grid (GTK_TYPE_RADIO_BUTTON);
1062 gtk_container_set_border_width (GTK_CONTAINER (table), 10);
1063 gtk_box_pack_start (GTK_BOX (box1), table, TRUE, TRUE, 0);
1066 if (!gtk_widget_get_visible (window))
1067 gtk_widget_show_all (window);
1069 gtk_widget_destroy (window);
1077 create_bbox (gint horizontal,
1088 frame = gtk_frame_new (title);
1091 bbox = gtk_hbutton_box_new ();
1093 bbox = gtk_vbutton_box_new ();
1095 gtk_container_set_border_width (GTK_CONTAINER (bbox), 5);
1096 gtk_container_add (GTK_CONTAINER (frame), bbox);
1098 gtk_button_box_set_layout (GTK_BUTTON_BOX (bbox), layout);
1099 gtk_box_set_spacing (GTK_BOX (bbox), spacing);
1101 button = gtk_button_new_with_label ("OK");
1102 gtk_container_add (GTK_CONTAINER (bbox), button);
1104 button = gtk_button_new_with_label ("Cancel");
1105 gtk_container_add (GTK_CONTAINER (bbox), button);
1107 button = gtk_button_new_with_label ("Help");
1108 gtk_container_add (GTK_CONTAINER (bbox), button);
1114 create_button_box (GtkWidget *widget)
1116 static GtkWidget* window = NULL;
1117 GtkWidget *main_vbox;
1120 GtkWidget *frame_horz;
1121 GtkWidget *frame_vert;
1125 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
1126 gtk_window_set_screen (GTK_WINDOW (window), gtk_widget_get_screen (widget));
1127 gtk_window_set_title (GTK_WINDOW (window), "Button Boxes");
1129 g_signal_connect (window, "destroy",
1130 G_CALLBACK (gtk_widget_destroyed),
1133 gtk_container_set_border_width (GTK_CONTAINER (window), 10);
1135 main_vbox = gtk_vbox_new (FALSE, 0);
1136 gtk_container_add (GTK_CONTAINER (window), main_vbox);
1138 frame_horz = gtk_frame_new ("Horizontal Button Boxes");
1139 gtk_box_pack_start (GTK_BOX (main_vbox), frame_horz, TRUE, TRUE, 10);
1141 vbox = gtk_vbox_new (FALSE, 0);
1142 gtk_container_set_border_width (GTK_CONTAINER (vbox), 10);
1143 gtk_container_add (GTK_CONTAINER (frame_horz), vbox);
1145 gtk_box_pack_start (GTK_BOX (vbox),
1146 create_bbox (TRUE, "Spread", 40, 85, 20, GTK_BUTTONBOX_SPREAD),
1149 gtk_box_pack_start (GTK_BOX (vbox),
1150 create_bbox (TRUE, "Edge", 40, 85, 20, GTK_BUTTONBOX_EDGE),
1153 gtk_box_pack_start (GTK_BOX (vbox),
1154 create_bbox (TRUE, "Start", 40, 85, 20, GTK_BUTTONBOX_START),
1157 gtk_box_pack_start (GTK_BOX (vbox),
1158 create_bbox (TRUE, "End", 40, 85, 20, GTK_BUTTONBOX_END),
1161 gtk_box_pack_start (GTK_BOX (vbox),
1162 create_bbox (TRUE, "Center", 40, 85, 20, GTK_BUTTONBOX_CENTER),
1165 frame_vert = gtk_frame_new ("Vertical Button Boxes");
1166 gtk_box_pack_start (GTK_BOX (main_vbox), frame_vert, TRUE, TRUE, 10);
1168 hbox = gtk_hbox_new (FALSE, 0);
1169 gtk_container_set_border_width (GTK_CONTAINER (hbox), 10);
1170 gtk_container_add (GTK_CONTAINER (frame_vert), hbox);
1172 gtk_box_pack_start (GTK_BOX (hbox),
1173 create_bbox (FALSE, "Spread", 30, 85, 20, GTK_BUTTONBOX_SPREAD),
1176 gtk_box_pack_start (GTK_BOX (hbox),
1177 create_bbox (FALSE, "Edge", 30, 85, 20, GTK_BUTTONBOX_EDGE),
1180 gtk_box_pack_start (GTK_BOX (hbox),
1181 create_bbox (FALSE, "Start", 30, 85, 20, GTK_BUTTONBOX_START),
1184 gtk_box_pack_start (GTK_BOX (hbox),
1185 create_bbox (FALSE, "End", 30, 85, 20, GTK_BUTTONBOX_END),
1188 gtk_box_pack_start (GTK_BOX (hbox),
1189 create_bbox (FALSE, "Center", 30, 85, 20, GTK_BUTTONBOX_CENTER),
1193 if (!gtk_widget_get_visible (window))
1194 gtk_widget_show_all (window);
1196 gtk_widget_destroy (window);
1204 new_pixbuf (char *filename,
1206 GdkColor *background)
1211 if (strcmp (filename, "test.xpm") == 0)
1214 pixbuf = gdk_pixbuf_new_from_file (filename, NULL);
1217 pixbuf = gdk_pixbuf_new_from_xpm_data ((const char **) openfile);
1219 widget = gtk_image_new_from_pixbuf (pixbuf);
1221 g_object_unref (pixbuf);
1228 set_toolbar_small_stock (GtkWidget *widget,
1231 gtk_toolbar_set_icon_size (GTK_TOOLBAR (data), GTK_ICON_SIZE_SMALL_TOOLBAR);
1235 set_toolbar_large_stock (GtkWidget *widget,
1238 gtk_toolbar_set_icon_size (GTK_TOOLBAR (data), GTK_ICON_SIZE_LARGE_TOOLBAR);
1242 set_toolbar_horizontal (GtkWidget *widget,
1245 gtk_orientable_set_orientation (GTK_ORIENTABLE (data), GTK_ORIENTATION_HORIZONTAL);
1249 set_toolbar_vertical (GtkWidget *widget,
1252 gtk_orientable_set_orientation (GTK_ORIENTABLE (data), GTK_ORIENTATION_VERTICAL);
1256 set_toolbar_icons (GtkWidget *widget,
1259 gtk_toolbar_set_style (GTK_TOOLBAR (data), GTK_TOOLBAR_ICONS);
1263 set_toolbar_text (GtkWidget *widget,
1266 gtk_toolbar_set_style (GTK_TOOLBAR (data), GTK_TOOLBAR_TEXT);
1270 set_toolbar_both (GtkWidget *widget,
1273 gtk_toolbar_set_style (GTK_TOOLBAR (data), GTK_TOOLBAR_BOTH);
1277 set_toolbar_both_horiz (GtkWidget *widget,
1280 gtk_toolbar_set_style (GTK_TOOLBAR (data), GTK_TOOLBAR_BOTH_HORIZ);
1284 set_toolbar_enable (GtkWidget *widget,
1287 GtkSettings *settings = gtk_widget_get_settings (widget);
1288 g_object_set (settings, "gtk-enable-tooltips", TRUE, NULL);
1292 set_toolbar_disable (GtkWidget *widget,
1295 GtkSettings *settings = gtk_widget_get_settings (widget);
1296 g_object_set (settings, "gtk-enable-tooltips", FALSE, NULL);
1299 static GtkActionEntry create_toolbar_items[] = {
1300 { NULL, GTK_STOCK_NEW, NULL, NULL, "Stock icon: New",
1301 G_CALLBACK (set_toolbar_small_stock) },
1302 { NULL, GTK_STOCK_OPEN, NULL, NULL, "Stock icon: Open",
1303 G_CALLBACK (set_toolbar_large_stock) },
1304 { NULL, NULL, "Horizontal", NULL, "Horizontal toolbar layout",
1305 G_CALLBACK (set_toolbar_horizontal) },
1306 { NULL, NULL, "Vertical", NULL, "Vertical toolbar layout",
1307 G_CALLBACK (set_toolbar_vertical) },
1309 { NULL, NULL, "Icons", NULL, "Only show toolbar icons",
1310 G_CALLBACK (set_toolbar_icons) },
1311 { NULL, NULL, "Text", NULL, "Only show toolbar text",
1312 G_CALLBACK (set_toolbar_text) },
1313 { NULL, NULL, "Both", NULL, "Show toolbar icons and text",
1314 G_CALLBACK (set_toolbar_both) },
1315 { NULL, NULL, "Both (horizontal)", NULL, "Show toolbar icons and text in a horizontal fashion",
1316 G_CALLBACK (set_toolbar_both_horiz) },
1318 { "entry", NULL, NULL, "This is an unusable GtkEntry ;)",
1322 { NULL, NULL, "Enable", NULL, "Enable tooltips",
1323 G_CALLBACK (set_toolbar_enable) },
1324 { NULL, NULL, "Disable", NULL, "Disable tooltips",
1325 G_CALLBACK (set_toolbar_disable) },
1327 { NULL, NULL, "Frobate", NULL, "Frobate tooltip",
1329 { NULL, NULL, "Baz", NULL, "Baz tooltip",
1332 { NULL, NULL, "Blah", NULL, "Blash tooltip",
1334 { NULL, NULL, "Bar", NULL, "Bar tooltip",
1339 create_toolbar (GtkWidget *widget)
1341 static GtkWidget *window = NULL;
1348 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
1349 gtk_window_set_screen (GTK_WINDOW (window),
1350 gtk_widget_get_screen (widget));
1352 gtk_window_set_title (GTK_WINDOW (window), "Toolbar test");
1354 g_signal_connect (window, "destroy",
1355 G_CALLBACK (gtk_widget_destroyed),
1358 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
1359 gtk_widget_realize (window);
1361 toolbar = gtk_toolbar_new ();
1362 for (i = 0; i < G_N_ELEMENTS (create_toolbar_items); i++)
1364 GtkToolItem *toolitem;
1366 if (create_toolbar_items[i].tooltip == NULL)
1367 toolitem = gtk_separator_tool_item_new ();
1368 else if (g_strcmp0 (create_toolbar_items[i].name, "entry") == 0)
1372 toolitem = gtk_tool_item_new ();
1373 entry = gtk_entry_new ();
1374 gtk_container_add (GTK_CONTAINER (toolitem), entry);
1376 else if (create_toolbar_items[i].stock_id)
1377 toolitem = gtk_tool_button_new_from_stock (create_toolbar_items[i].stock_id);
1382 icon = new_pixbuf ("test.xpm", gtk_widget_get_window (window),
1383 >k_widget_get_style (window)->bg[GTK_STATE_NORMAL]);
1384 toolitem = gtk_tool_button_new (icon, create_toolbar_items[i].label);
1386 if (create_toolbar_items[i].callback)
1387 g_signal_connect (toolitem, "clicked",
1388 create_toolbar_items[i].callback, toolbar);
1389 gtk_tool_item_set_tooltip_text (toolitem, create_toolbar_items[i].tooltip);
1390 gtk_toolbar_insert (GTK_TOOLBAR (toolbar), toolitem, -1);
1393 gtk_container_add (GTK_CONTAINER (window), toolbar);
1395 gtk_widget_set_size_request (toolbar, 200, -1);
1398 if (!gtk_widget_get_visible (window))
1399 gtk_widget_show_all (window);
1401 gtk_widget_destroy (window);
1404 static GtkActionEntry make_toolbar_items[] = {
1405 { NULL, NULL, "Horizontal", NULL, "Horizontal toolbar layout",
1406 G_CALLBACK (set_toolbar_horizontal) },
1407 { NULL, NULL, "Vertical", NULL, "Vertical toolbar layout",
1408 G_CALLBACK (set_toolbar_vertical) },
1410 { NULL, NULL, "Icons", NULL, "Only show toolbar icons",
1411 G_CALLBACK (set_toolbar_icons) },
1412 { NULL, NULL, "Text", NULL, "Only show toolbar text",
1413 G_CALLBACK (set_toolbar_text) },
1414 { NULL, NULL, "Both", NULL, "Show toolbar icons and text",
1415 G_CALLBACK (set_toolbar_both) },
1417 { NULL, NULL, "Woot", NULL, "Woot woot woot",
1419 { NULL, NULL, "Blah", NULL, "Blah blah blah",
1422 { NULL, NULL, "Enable", NULL, "Enable tooltips",
1423 G_CALLBACK (set_toolbar_enable) },
1424 { NULL, NULL, "Disable", NULL, "Disable tooltips",
1425 G_CALLBACK (set_toolbar_disable) },
1427 { NULL, NULL, "Hoo", NULL, "Hoo tooltip",
1429 { NULL, NULL, "Woo", NULL, "Woo tooltip",
1434 make_toolbar (GtkWidget *window)
1439 if (!gtk_widget_get_realized (window))
1440 gtk_widget_realize (window);
1442 toolbar = gtk_toolbar_new ();
1443 for (i = 0; i < G_N_ELEMENTS (make_toolbar_items); i++)
1446 GtkToolItem *toolitem;
1448 if (make_toolbar_items[i].label == NULL)
1450 toolitem = gtk_separator_tool_item_new ();
1453 icon = new_pixbuf ("test.xpm", gtk_widget_get_window (window),
1454 >k_widget_get_style (window)->bg[GTK_STATE_NORMAL]);
1455 toolitem = gtk_tool_button_new (icon, make_toolbar_items[i].label);
1456 gtk_tool_item_set_tooltip_text (toolitem, make_toolbar_items[i].tooltip);
1457 if (make_toolbar_items[i].callback != NULL)
1458 g_signal_connect (toolitem, "clicked", make_toolbar_items[i].callback, toolbar);
1459 gtk_toolbar_insert (GTK_TOOLBAR (toolbar), toolitem, -1);
1469 static guint statusbar_counter = 1;
1472 statusbar_push (GtkWidget *button,
1473 GtkStatusbar *statusbar)
1477 sprintf (text, "something %d", statusbar_counter++);
1479 gtk_statusbar_push (statusbar, 1, text);
1483 statusbar_push_long (GtkWidget *button,
1484 GtkStatusbar *statusbar)
1488 sprintf (text, "Just because a system has menu choices written with English words, phrases or sentences, that is no guarantee, that it is comprehensible. Individual words may not be familiar to some users (for example, \"repaginate\"), and two menu items may appear to satisfy the users's needs, whereas only one does (for example, \"put away\" or \"eject\").");
1490 gtk_statusbar_push (statusbar, 1, text);
1494 statusbar_pop (GtkWidget *button,
1495 GtkStatusbar *statusbar)
1497 gtk_statusbar_pop (statusbar, 1);
1501 statusbar_steal (GtkWidget *button,
1502 GtkStatusbar *statusbar)
1504 gtk_statusbar_remove (statusbar, 1, 4);
1508 statusbar_popped (GtkStatusbar *statusbar,
1513 statusbar_counter = 1;
1517 statusbar_contexts (GtkStatusbar *statusbar)
1521 string = "any context";
1522 g_print ("GtkStatusBar: context=\"%s\", context_id=%d\n",
1524 gtk_statusbar_get_context_id (statusbar, string));
1526 string = "idle messages";
1527 g_print ("GtkStatusBar: context=\"%s\", context_id=%d\n",
1529 gtk_statusbar_get_context_id (statusbar, string));
1531 string = "some text";
1532 g_print ("GtkStatusBar: context=\"%s\", context_id=%d\n",
1534 gtk_statusbar_get_context_id (statusbar, string));
1536 string = "hit the mouse";
1537 g_print ("GtkStatusBar: context=\"%s\", context_id=%d\n",
1539 gtk_statusbar_get_context_id (statusbar, string));
1541 string = "hit the mouse2";
1542 g_print ("GtkStatusBar: context=\"%s\", context_id=%d\n",
1544 gtk_statusbar_get_context_id (statusbar, string));
1548 create_statusbar (GtkWidget *widget)
1550 static GtkWidget *window = NULL;
1554 GtkWidget *separator;
1555 GtkWidget *statusbar;
1559 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
1560 gtk_window_set_screen (GTK_WINDOW (window),
1561 gtk_widget_get_screen (widget));
1563 g_signal_connect (window, "destroy",
1564 G_CALLBACK (gtk_widget_destroyed),
1567 gtk_window_set_title (GTK_WINDOW (window), "statusbar");
1568 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
1570 box1 = gtk_vbox_new (FALSE, 0);
1571 gtk_container_add (GTK_CONTAINER (window), box1);
1573 box2 = gtk_vbox_new (FALSE, 10);
1574 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
1575 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
1577 statusbar = gtk_statusbar_new ();
1578 gtk_box_pack_end (GTK_BOX (box1), statusbar, TRUE, TRUE, 0);
1579 g_signal_connect (statusbar,
1581 G_CALLBACK (statusbar_popped),
1584 button = g_object_new (gtk_button_get_type (),
1585 "label", "push something",
1589 g_object_connect (button,
1590 "signal::clicked", statusbar_push, statusbar,
1593 button = g_object_connect (g_object_new (gtk_button_get_type (),
1598 "signal_after::clicked", statusbar_pop, statusbar,
1601 button = g_object_connect (g_object_new (gtk_button_get_type (),
1602 "label", "steal #4",
1606 "signal_after::clicked", statusbar_steal, statusbar,
1609 button = g_object_connect (g_object_new (gtk_button_get_type (),
1610 "label", "test contexts",
1614 "swapped_signal_after::clicked", statusbar_contexts, statusbar,
1617 button = g_object_connect (g_object_new (gtk_button_get_type (),
1618 "label", "push something long",
1622 "signal_after::clicked", statusbar_push_long, statusbar,
1625 separator = gtk_hseparator_new ();
1626 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
1628 box2 = gtk_vbox_new (FALSE, 10);
1629 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
1630 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
1632 button = gtk_button_new_with_label ("close");
1633 g_signal_connect_swapped (button, "clicked",
1634 G_CALLBACK (gtk_widget_destroy),
1636 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
1637 gtk_widget_set_can_default (button, TRUE);
1638 gtk_widget_grab_default (button);
1641 if (!gtk_widget_get_visible (window))
1642 gtk_widget_show_all (window);
1644 gtk_widget_destroy (window);
1652 handle_box_child_signal (GtkHandleBox *hb,
1654 const gchar *action)
1656 printf ("%s: child <%s> %sed\n",
1657 g_type_name (G_OBJECT_TYPE (hb)),
1658 g_type_name (G_OBJECT_TYPE (child)),
1663 create_handle_box (GtkWidget *widget)
1665 static GtkWidget* window = NULL;
1666 GtkWidget *handle_box;
1667 GtkWidget *handle_box2;
1672 GtkWidget *separator;
1676 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
1678 gtk_window_set_screen (GTK_WINDOW (window),
1679 gtk_widget_get_screen (widget));
1680 gtk_window_set_modal (GTK_WINDOW (window), FALSE);
1681 gtk_window_set_title (GTK_WINDOW (window),
1683 gtk_window_set_resizable (GTK_WINDOW (window), TRUE);
1685 g_signal_connect (window, "destroy",
1686 G_CALLBACK (gtk_widget_destroyed),
1689 gtk_container_set_border_width (GTK_CONTAINER (window), 20);
1691 vbox = gtk_vbox_new (FALSE, 0);
1692 gtk_container_add (GTK_CONTAINER (window), vbox);
1693 gtk_widget_show (vbox);
1695 label = gtk_label_new ("Above");
1696 gtk_container_add (GTK_CONTAINER (vbox), label);
1697 gtk_widget_show (label);
1699 separator = gtk_hseparator_new ();
1700 gtk_container_add (GTK_CONTAINER (vbox), separator);
1701 gtk_widget_show (separator);
1703 hbox = gtk_hbox_new (FALSE, 10);
1704 gtk_container_add (GTK_CONTAINER (vbox), hbox);
1705 gtk_widget_show (hbox);
1707 separator = gtk_hseparator_new ();
1708 gtk_container_add (GTK_CONTAINER (vbox), separator);
1709 gtk_widget_show (separator);
1711 label = gtk_label_new ("Below");
1712 gtk_container_add (GTK_CONTAINER (vbox), label);
1713 gtk_widget_show (label);
1715 handle_box = gtk_handle_box_new ();
1716 gtk_box_pack_start (GTK_BOX (hbox), handle_box, FALSE, FALSE, 0);
1717 g_signal_connect (handle_box,
1719 G_CALLBACK (handle_box_child_signal),
1721 g_signal_connect (handle_box,
1723 G_CALLBACK (handle_box_child_signal),
1725 gtk_widget_show (handle_box);
1727 toolbar = make_toolbar (window);
1729 gtk_container_add (GTK_CONTAINER (handle_box), toolbar);
1730 gtk_widget_show (toolbar);
1732 handle_box = gtk_handle_box_new ();
1733 gtk_box_pack_start (GTK_BOX (hbox), handle_box, FALSE, FALSE, 0);
1734 g_signal_connect (handle_box,
1736 G_CALLBACK (handle_box_child_signal),
1738 g_signal_connect (handle_box,
1740 G_CALLBACK (handle_box_child_signal),
1742 gtk_widget_show (handle_box);
1744 handle_box2 = gtk_handle_box_new ();
1745 gtk_container_add (GTK_CONTAINER (handle_box), handle_box2);
1746 g_signal_connect (handle_box2,
1748 G_CALLBACK (handle_box_child_signal),
1750 g_signal_connect (handle_box2,
1752 G_CALLBACK (handle_box_child_signal),
1754 gtk_widget_show (handle_box2);
1756 hbox = g_object_new (GTK_TYPE_HBOX, "visible", 1, "parent", handle_box2, NULL);
1757 label = gtk_label_new ("Fooo!");
1758 gtk_container_add (GTK_CONTAINER (hbox), label);
1759 gtk_widget_show (label);
1760 g_object_new (GTK_TYPE_ARROW, "visible", 1, "parent", hbox, NULL);
1763 if (!gtk_widget_get_visible (window))
1764 gtk_widget_show (window);
1766 gtk_widget_destroy (window);
1773 sensitivity_toggled (GtkWidget *toggle,
1776 gtk_widget_set_sensitive (widget, GTK_TOGGLE_BUTTON (toggle)->active);
1780 create_sensitivity_control (GtkWidget *widget)
1784 button = gtk_toggle_button_new_with_label ("Sensitive");
1786 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button),
1787 gtk_widget_is_sensitive (widget));
1789 g_signal_connect (button,
1791 G_CALLBACK (sensitivity_toggled),
1794 gtk_widget_show_all (button);
1800 set_selectable_recursive (GtkWidget *widget,
1803 if (GTK_IS_CONTAINER (widget))
1808 children = gtk_container_get_children (GTK_CONTAINER (widget));
1812 set_selectable_recursive (tmp->data, setting);
1816 g_list_free (children);
1818 else if (GTK_IS_LABEL (widget))
1820 gtk_label_set_selectable (GTK_LABEL (widget), setting);
1825 selectable_toggled (GtkWidget *toggle,
1828 set_selectable_recursive (widget,
1829 GTK_TOGGLE_BUTTON (toggle)->active);
1833 create_selectable_control (GtkWidget *widget)
1837 button = gtk_toggle_button_new_with_label ("Selectable");
1839 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button),
1842 g_signal_connect (button,
1844 G_CALLBACK (selectable_toggled),
1847 gtk_widget_show_all (button);
1853 dialog_response (GtkWidget *dialog, gint response_id, GtkLabel *label)
1857 gtk_widget_destroy (dialog);
1859 text = "Some <a href=\"http://en.wikipedia.org/wiki/Text\" title=\"plain text\">text</a> may be marked up\n"
1860 "as hyperlinks, which can be clicked\n"
1861 "or activated via <a href=\"keynav\">keynav</a>.\n"
1862 "The links remain the same.";
1863 gtk_label_set_markup (label, text);
1867 activate_link (GtkWidget *label, const gchar *uri, gpointer data)
1869 if (g_strcmp0 (uri, "keynav") == 0)
1873 dialog = gtk_message_dialog_new_with_markup (GTK_WINDOW (gtk_widget_get_toplevel (label)),
1874 GTK_DIALOG_DESTROY_WITH_PARENT,
1877 "The term <i>keynav</i> is a shorthand for "
1878 "keyboard navigation and refers to the process of using a program "
1879 "(exclusively) via keyboard input.");
1881 gtk_window_present (GTK_WINDOW (dialog));
1883 g_signal_connect (dialog, "response", G_CALLBACK (dialog_response), label);
1891 void create_labels (GtkWidget *widget)
1893 static GtkWidget *window = NULL;
1902 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
1904 gtk_window_set_screen (GTK_WINDOW (window),
1905 gtk_widget_get_screen (widget));
1907 g_signal_connect (window, "destroy",
1908 G_CALLBACK (gtk_widget_destroyed),
1911 gtk_window_set_title (GTK_WINDOW (window), "Label");
1913 vbox = gtk_vbox_new (FALSE, 5);
1915 hbox = gtk_hbox_new (FALSE, 5);
1916 gtk_container_add (GTK_CONTAINER (window), vbox);
1918 gtk_box_pack_end (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
1920 button = create_sensitivity_control (hbox);
1922 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
1924 button = create_selectable_control (hbox);
1926 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
1928 vbox = gtk_vbox_new (FALSE, 5);
1930 gtk_box_pack_start (GTK_BOX (hbox), vbox, FALSE, FALSE, 0);
1931 gtk_container_set_border_width (GTK_CONTAINER (window), 5);
1933 frame = gtk_frame_new ("Normal Label");
1934 label = gtk_label_new ("This is a Normal label");
1935 gtk_label_set_ellipsize (GTK_LABEL (label), PANGO_ELLIPSIZE_START);
1936 gtk_container_add (GTK_CONTAINER (frame), label);
1937 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
1939 frame = gtk_frame_new ("Multi-line Label");
1940 label = gtk_label_new ("This is a Multi-line label.\nSecond line\nThird line");
1941 gtk_label_set_ellipsize (GTK_LABEL (label), PANGO_ELLIPSIZE_END);
1942 gtk_container_add (GTK_CONTAINER (frame), label);
1943 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
1945 frame = gtk_frame_new ("Left Justified Label");
1946 label = gtk_label_new ("This is a Left-Justified\nMulti-line label.\nThird line");
1947 gtk_label_set_ellipsize (GTK_LABEL (label), PANGO_ELLIPSIZE_MIDDLE);
1948 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
1949 gtk_container_add (GTK_CONTAINER (frame), label);
1950 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
1952 frame = gtk_frame_new ("Right Justified Label");
1953 gtk_label_set_ellipsize (GTK_LABEL (label), PANGO_ELLIPSIZE_START);
1954 label = gtk_label_new ("This is a Right-Justified\nMulti-line label.\nFourth line, (j/k)");
1955 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_RIGHT);
1956 gtk_container_add (GTK_CONTAINER (frame), label);
1957 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
1959 frame = gtk_frame_new ("Internationalized Label");
1960 label = gtk_label_new (NULL);
1961 gtk_label_set_markup (GTK_LABEL (label),
1962 "French (Fran\303\247ais) Bonjour, Salut\n"
1963 "Korean (\355\225\234\352\270\200) \354\225\210\353\205\225\355\225\230\354\204\270\354\232\224, \354\225\210\353\205\225\355\225\230\354\213\255\353\213\210\352\271\214\n"
1964 "Russian (\320\240\321\203\321\201\321\201\320\272\320\270\320\271) \320\227\320\264\321\200\320\260\320\262\321\201\321\202\320\262\321\203\320\271\321\202\320\265!\n"
1965 "Chinese (Simplified) <span lang=\"zh-cn\">\345\205\203\346\260\224 \345\274\200\345\217\221</span>\n"
1966 "Chinese (Traditional) <span lang=\"zh-tw\">\345\205\203\346\260\243 \351\226\213\347\231\274</span>\n"
1967 "Japanese <span lang=\"ja\">\345\205\203\346\260\227 \351\226\213\347\231\272</span>");
1968 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
1969 gtk_container_add (GTK_CONTAINER (frame), label);
1970 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
1972 frame = gtk_frame_new ("Bidirection Label");
1973 label = gtk_label_new ("\342\200\217Arabic \330\247\331\204\330\263\331\204\330\247\331\205 \330\271\331\204\331\212\331\203\331\205\n"
1974 "\342\200\217Hebrew \327\251\327\234\327\225\327\235");
1975 gtk_container_add (GTK_CONTAINER (frame), label);
1976 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
1978 frame = gtk_frame_new ("Links in a label");
1979 label = gtk_label_new ("Some <a href=\"http://en.wikipedia.org/wiki/Text\" title=\"plain text\">text</a> may be marked up\n"
1980 "as hyperlinks, which can be clicked\n"
1981 "or activated via <a href=\"keynav\">keynav</a>");
1982 gtk_label_set_use_markup (GTK_LABEL (label), TRUE);
1983 gtk_container_add (GTK_CONTAINER (frame), label);
1984 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
1985 g_signal_connect (label, "activate-link", G_CALLBACK (activate_link), NULL);
1987 vbox = gtk_vbox_new (FALSE, 5);
1988 gtk_box_pack_start (GTK_BOX (hbox), vbox, FALSE, FALSE, 0);
1989 frame = gtk_frame_new ("Line wrapped label");
1990 label = gtk_label_new ("This is an example of a line-wrapped label. It should not be taking "\
1991 "up the entire "/* big space to test spacing */\
1992 "width allocated to it, but automatically wraps the words to fit. "\
1993 "The time has come, for all good men, to come to the aid of their party. "\
1994 "The sixth sheik's six sheep's sick.\n"\
1995 " It supports multiple paragraphs correctly, and correctly adds "\
1996 "many extra spaces. ");
1998 gtk_label_set_line_wrap (GTK_LABEL (label), TRUE);
1999 gtk_container_add (GTK_CONTAINER (frame), label);
2000 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
2002 frame = gtk_frame_new ("Filled, wrapped label");
2003 label = gtk_label_new ("This is an example of a line-wrapped, filled label. It should be taking "\
2004 "up the entire width allocated to it. Here is a seneance to prove "\
2005 "my point. Here is another sentence. "\
2006 "Here comes the sun, do de do de do.\n"\
2007 " This is a new paragraph.\n"\
2008 " This is another newer, longer, better paragraph. It is coming to an end, "\
2010 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_FILL);
2011 gtk_label_set_line_wrap (GTK_LABEL (label), TRUE);
2012 gtk_container_add (GTK_CONTAINER (frame), label);
2013 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
2015 frame = gtk_frame_new ("Underlined label");
2016 label = gtk_label_new ("This label is underlined!\n"
2017 "This one is underlined (\343\201\223\343\202\223\343\201\253\343\201\241\343\201\257) in quite a funky fashion");
2018 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
2019 gtk_label_set_pattern (GTK_LABEL (label), "_________________________ _ _________ _ _____ _ __ __ ___ ____ _____");
2020 gtk_container_add (GTK_CONTAINER (frame), label);
2021 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
2023 frame = gtk_frame_new ("Markup label");
2024 label = gtk_label_new (NULL);
2026 /* There's also a gtk_label_set_markup() without accel if you
2027 * don't have an accelerator key
2029 gtk_label_set_markup_with_mnemonic (GTK_LABEL (label),
2030 "This <span foreground=\"blue\" background=\"orange\">label</span> has "
2031 "<b>markup</b> _such as "
2032 "<big><i>Big Italics</i></big>\n"
2033 "<tt>Monospace font</tt>\n"
2034 "<u>Underline!</u>\n"
2036 "<span foreground=\"green\" background=\"red\">Ugly colors</span>\n"
2037 "and nothing on this line,\n"
2040 "or even on this one\n"
2041 "la <big>la <big>la <big>la <big>la</big></big></big></big>\n"
2042 "but this _word is <span foreground=\"purple\"><big>purple</big></span>\n"
2043 "<span underline=\"double\">We like <sup>superscript</sup> and <sub>subscript</sub> too</span>");
2045 g_assert (gtk_label_get_mnemonic_keyval (GTK_LABEL (label)) == GDK_KEY_s);
2047 gtk_container_add (GTK_CONTAINER (frame), label);
2048 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
2051 if (!gtk_widget_get_visible (window))
2052 gtk_widget_show_all (window);
2054 gtk_widget_destroy (window);
2058 on_angle_scale_changed (GtkRange *range,
2061 gtk_label_set_angle (GTK_LABEL (label), gtk_range_get_value (range));
2065 create_rotated_label (GtkWidget *widget)
2067 static GtkWidget *window = NULL;
2068 GtkWidget *content_area;
2072 GtkWidget *scale_label;
2073 GtkWidget *scale_hbox;
2077 window = gtk_dialog_new_with_buttons ("Rotated Label",
2078 GTK_WINDOW (gtk_widget_get_toplevel (widget)), 0,
2079 GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE,
2082 gtk_window_set_resizable (GTK_WINDOW (window), TRUE);
2084 gtk_window_set_screen (GTK_WINDOW (window),
2085 gtk_widget_get_screen (widget));
2087 g_signal_connect (window, "response",
2088 G_CALLBACK (gtk_widget_destroy), NULL);
2089 g_signal_connect (window, "destroy",
2090 G_CALLBACK (gtk_widget_destroyed), &window);
2092 content_area = gtk_dialog_get_content_area (GTK_DIALOG (window));
2094 vbox = gtk_vbox_new (FALSE, 5);
2095 gtk_box_pack_start (GTK_BOX (content_area), vbox, TRUE, TRUE, 0);
2096 gtk_container_set_border_width (GTK_CONTAINER (vbox), 10);
2098 label = gtk_label_new (NULL);
2099 gtk_label_set_markup (GTK_LABEL (label), "Hello World\n<i>Rotate</i> <span underline='single' foreground='blue'>me</span>");
2100 gtk_box_pack_start (GTK_BOX (vbox), label, TRUE, TRUE, 0);
2102 scale_hbox = gtk_hbox_new (FALSE, 0);
2103 gtk_box_pack_start (GTK_BOX (vbox), scale_hbox, FALSE, FALSE, 0);
2105 scale_label = gtk_label_new (NULL);
2106 gtk_label_set_markup (GTK_LABEL (scale_label), "<i>Angle: </i>");
2107 gtk_box_pack_start (GTK_BOX (scale_hbox), scale_label, FALSE, FALSE, 0);
2109 hscale = gtk_hscale_new_with_range (0, 360, 5);
2110 g_signal_connect (hscale, "value-changed",
2111 G_CALLBACK (on_angle_scale_changed), label);
2113 gtk_range_set_value (GTK_RANGE (hscale), 45);
2114 gtk_widget_set_size_request (hscale, 200, -1);
2115 gtk_box_pack_start (GTK_BOX (scale_hbox), hscale, TRUE, TRUE, 0);
2118 if (!gtk_widget_get_visible (window))
2119 gtk_widget_show_all (window);
2121 gtk_widget_destroy (window);
2124 #define DEFAULT_TEXT_RADIUS 200
2127 on_rotated_text_unrealize (GtkWidget *widget)
2129 g_object_set_data (G_OBJECT (widget), "text-gc", NULL);
2133 on_rotated_text_draw (GtkWidget *widget,
2135 GdkPixbuf *tile_pixbuf)
2137 static const gchar *words[] = { "The", "grand", "old", "Duke", "of", "York",
2138 "had", "10,000", "men" };
2143 PangoLayout *layout;
2144 PangoContext *context;
2145 PangoFontDescription *desc;
2149 gdk_cairo_set_source_pixbuf (cr, tile_pixbuf, 0, 0);
2150 cairo_pattern_set_extend (cairo_get_source (cr), CAIRO_EXTEND_REPEAT);
2153 cairo_set_source_rgb (cr, 0, 0, 0);
2155 width = gtk_widget_get_allocated_width (widget);
2156 height = gtk_widget_get_allocated_height (widget);
2157 radius = MIN (width, height) / 2.;
2159 cairo_translate (cr,
2160 radius + (width - 2 * radius) / 2,
2161 radius + (height - 2 * radius) / 2);
2162 cairo_scale (cr, radius / DEFAULT_TEXT_RADIUS, radius / DEFAULT_TEXT_RADIUS);
2164 context = gtk_widget_get_pango_context (widget);
2165 layout = pango_layout_new (context);
2166 desc = pango_font_description_from_string ("Sans Bold 30");
2167 pango_layout_set_font_description (layout, desc);
2168 pango_font_description_free (desc);
2170 n_words = G_N_ELEMENTS (words);
2171 for (i = 0; i < n_words; i++)
2177 cairo_rotate (cr, 2 * G_PI * i / n_words);
2178 pango_cairo_update_layout (cr, layout);
2180 pango_layout_set_text (layout, words[i], -1);
2181 pango_layout_get_size (layout, &width, &height);
2183 cairo_move_to (cr, - width / 2 / PANGO_SCALE, - DEFAULT_TEXT_RADIUS);
2184 pango_cairo_show_layout (cr, layout);
2189 g_object_unref (layout);
2195 create_rotated_text (GtkWidget *widget)
2197 static GtkWidget *window = NULL;
2201 const GdkColor white = { 0, 0xffff, 0xffff, 0xffff };
2202 GtkRequisition requisition;
2203 GtkWidget *content_area;
2204 GtkWidget *drawing_area;
2205 GdkPixbuf *tile_pixbuf;
2207 window = gtk_dialog_new_with_buttons ("Rotated Text",
2208 GTK_WINDOW (gtk_widget_get_toplevel (widget)), 0,
2209 GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE,
2212 gtk_window_set_resizable (GTK_WINDOW (window), TRUE);
2214 gtk_window_set_screen (GTK_WINDOW (window),
2215 gtk_widget_get_screen (widget));
2217 g_signal_connect (window, "response",
2218 G_CALLBACK (gtk_widget_destroy), NULL);
2219 g_signal_connect (window, "destroy",
2220 G_CALLBACK (gtk_widget_destroyed), &window);
2222 content_area = gtk_dialog_get_content_area (GTK_DIALOG (window));
2224 drawing_area = gtk_drawing_area_new ();
2225 gtk_box_pack_start (GTK_BOX (content_area), drawing_area, TRUE, TRUE, 0);
2226 gtk_widget_modify_bg (drawing_area, GTK_STATE_NORMAL, &white);
2228 tile_pixbuf = gdk_pixbuf_new_from_file ("marble.xpm", NULL);
2230 g_signal_connect (drawing_area, "draw",
2231 G_CALLBACK (on_rotated_text_draw), tile_pixbuf);
2232 g_signal_connect (drawing_area, "unrealize",
2233 G_CALLBACK (on_rotated_text_unrealize), NULL);
2235 gtk_widget_show_all (gtk_bin_get_child (GTK_BIN (window)));
2237 gtk_widget_set_size_request (drawing_area, DEFAULT_TEXT_RADIUS * 2, DEFAULT_TEXT_RADIUS * 2);
2238 gtk_widget_get_preferred_size ( (window),
2239 &requisition, NULL);
2240 gtk_widget_set_size_request (drawing_area, -1, -1);
2241 gtk_window_resize (GTK_WINDOW (window), requisition.width, requisition.height);
2244 if (!gtk_widget_get_visible (window))
2245 gtk_widget_show (window);
2247 gtk_widget_destroy (window);
2255 reparent_label (GtkWidget *widget,
2256 GtkWidget *new_parent)
2260 label = g_object_get_data (G_OBJECT (widget), "user_data");
2262 gtk_widget_reparent (label, new_parent);
2266 set_parent_signal (GtkWidget *child,
2267 GtkWidget *old_parent,
2272 parent = gtk_widget_get_parent (child);
2273 g_message ("set_parent for \"%s\": new parent: \"%s\", old parent: \"%s\", data: %d\n",
2274 g_type_name (G_OBJECT_TYPE (child)),
2275 parent ? g_type_name (G_OBJECT_TYPE (parent)) : "NULL",
2276 old_parent ? g_type_name (G_OBJECT_TYPE (old_parent)) : "NULL",
2277 GPOINTER_TO_INT (func_data));
2281 create_reparent (GtkWidget *widget)
2283 static GtkWidget *window = NULL;
2290 GtkWidget *separator;
2291 GtkWidget *event_box;
2295 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
2297 gtk_window_set_screen (GTK_WINDOW (window),
2298 gtk_widget_get_screen (widget));
2300 g_signal_connect (window, "destroy",
2301 G_CALLBACK (gtk_widget_destroyed),
2304 gtk_window_set_title (GTK_WINDOW (window), "reparent");
2305 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
2307 box1 = gtk_vbox_new (FALSE, 0);
2308 gtk_container_add (GTK_CONTAINER (window), box1);
2310 box2 = gtk_hbox_new (FALSE, 5);
2311 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
2312 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
2314 label = gtk_label_new ("Hello World");
2316 frame = gtk_frame_new ("Frame 1");
2317 gtk_box_pack_start (GTK_BOX (box2), frame, TRUE, TRUE, 0);
2319 box3 = gtk_vbox_new (FALSE, 5);
2320 gtk_container_set_border_width (GTK_CONTAINER (box3), 5);
2321 gtk_container_add (GTK_CONTAINER (frame), box3);
2323 button = gtk_button_new_with_label ("switch");
2324 g_object_set_data (G_OBJECT (button), "user_data", label);
2325 gtk_box_pack_start (GTK_BOX (box3), button, FALSE, TRUE, 0);
2327 event_box = gtk_event_box_new ();
2328 gtk_box_pack_start (GTK_BOX (box3), event_box, FALSE, TRUE, 0);
2329 gtk_container_add (GTK_CONTAINER (event_box), label);
2331 g_signal_connect (button, "clicked",
2332 G_CALLBACK (reparent_label),
2335 g_signal_connect (label, "parent_set",
2336 G_CALLBACK (set_parent_signal),
2337 GINT_TO_POINTER (42));
2339 frame = gtk_frame_new ("Frame 2");
2340 gtk_box_pack_start (GTK_BOX (box2), frame, TRUE, TRUE, 0);
2342 box3 = gtk_vbox_new (FALSE, 5);
2343 gtk_container_set_border_width (GTK_CONTAINER (box3), 5);
2344 gtk_container_add (GTK_CONTAINER (frame), box3);
2346 button = gtk_button_new_with_label ("switch");
2347 g_object_set_data (G_OBJECT (button), "user_data", label);
2348 gtk_box_pack_start (GTK_BOX (box3), button, FALSE, TRUE, 0);
2350 event_box = gtk_event_box_new ();
2351 gtk_box_pack_start (GTK_BOX (box3), event_box, FALSE, TRUE, 0);
2353 g_signal_connect (button, "clicked",
2354 G_CALLBACK (reparent_label),
2357 separator = gtk_hseparator_new ();
2358 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
2360 box2 = gtk_vbox_new (FALSE, 10);
2361 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
2362 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
2364 button = gtk_button_new_with_label ("close");
2365 g_signal_connect_swapped (button, "clicked",
2366 G_CALLBACK (gtk_widget_destroy), window);
2367 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
2368 gtk_widget_set_can_default (button, TRUE);
2369 gtk_widget_grab_default (button);
2372 if (!gtk_widget_get_visible (window))
2373 gtk_widget_show_all (window);
2375 gtk_widget_destroy (window);
2382 grippy_button_press (GtkWidget *area, GdkEventButton *event, GdkWindowEdge edge)
2384 if (event->type == GDK_BUTTON_PRESS)
2386 if (event->button == 1)
2387 gtk_window_begin_resize_drag (GTK_WINDOW (gtk_widget_get_toplevel (area)), edge,
2388 event->button, event->x_root, event->y_root,
2390 else if (event->button == 2)
2391 gtk_window_begin_move_drag (GTK_WINDOW (gtk_widget_get_toplevel (area)),
2392 event->button, event->x_root, event->y_root,
2399 grippy_draw (GtkWidget *area, cairo_t *cr, GdkWindowEdge edge)
2401 gtk_paint_resize_grip (gtk_widget_get_style (area),
2403 gtk_widget_get_state (area),
2408 gtk_widget_get_allocated_width (area),
2409 gtk_widget_get_allocated_height (area));
2415 create_resize_grips (GtkWidget *widget)
2417 static GtkWidget *window = NULL;
2419 GtkWidget *hbox, *vbox;
2422 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
2424 gtk_window_set_screen (GTK_WINDOW (window),
2425 gtk_widget_get_screen (widget));
2427 gtk_window_set_title (GTK_WINDOW (window), "resize grips");
2429 g_signal_connect (window, "destroy",
2430 G_CALLBACK (gtk_widget_destroyed),
2433 vbox = gtk_vbox_new (FALSE, 0);
2434 gtk_container_add (GTK_CONTAINER (window), vbox);
2436 hbox = gtk_hbox_new (FALSE, 0);
2437 gtk_box_pack_start (GTK_BOX (vbox), hbox, TRUE, TRUE, 0);
2440 area = gtk_drawing_area_new ();
2441 gtk_widget_add_events (area, GDK_BUTTON_PRESS_MASK);
2442 gtk_box_pack_start (GTK_BOX (hbox), area, TRUE, TRUE, 0);
2443 g_signal_connect (area, "draw", G_CALLBACK (grippy_draw),
2444 GINT_TO_POINTER (GDK_WINDOW_EDGE_NORTH_WEST));
2445 g_signal_connect (area, "button_press_event", G_CALLBACK (grippy_button_press),
2446 GINT_TO_POINTER (GDK_WINDOW_EDGE_NORTH_WEST));
2449 area = gtk_drawing_area_new ();
2450 gtk_widget_add_events (area, GDK_BUTTON_PRESS_MASK);
2451 gtk_box_pack_start (GTK_BOX (hbox), area, TRUE, TRUE, 0);
2452 g_signal_connect (area, "draw", G_CALLBACK (grippy_draw),
2453 GINT_TO_POINTER (GDK_WINDOW_EDGE_NORTH));
2454 g_signal_connect (area, "button_press_event", G_CALLBACK (grippy_button_press),
2455 GINT_TO_POINTER (GDK_WINDOW_EDGE_NORTH));
2458 area = gtk_drawing_area_new ();
2459 gtk_widget_add_events (area, GDK_BUTTON_PRESS_MASK);
2460 gtk_box_pack_start (GTK_BOX (hbox), area, TRUE, TRUE, 0);
2461 g_signal_connect (area, "draw", G_CALLBACK (grippy_draw),
2462 GINT_TO_POINTER (GDK_WINDOW_EDGE_NORTH_EAST));
2463 g_signal_connect (area, "button_press_event", G_CALLBACK (grippy_button_press),
2464 GINT_TO_POINTER (GDK_WINDOW_EDGE_NORTH_EAST));
2466 hbox = gtk_hbox_new (FALSE, 0);
2467 gtk_box_pack_start (GTK_BOX (vbox), hbox, TRUE, TRUE, 0);
2470 area = gtk_drawing_area_new ();
2471 gtk_widget_add_events (area, GDK_BUTTON_PRESS_MASK);
2472 gtk_box_pack_start (GTK_BOX (hbox), area, TRUE, TRUE, 0);
2473 g_signal_connect (area, "draw", G_CALLBACK (grippy_draw),
2474 GINT_TO_POINTER (GDK_WINDOW_EDGE_WEST));
2475 g_signal_connect (area, "button_press_event", G_CALLBACK (grippy_button_press),
2476 GINT_TO_POINTER (GDK_WINDOW_EDGE_WEST));
2479 area = gtk_drawing_area_new ();
2480 gtk_box_pack_start (GTK_BOX (hbox), area, TRUE, TRUE, 0);
2483 area = gtk_drawing_area_new ();
2484 gtk_widget_add_events (area, GDK_BUTTON_PRESS_MASK);
2485 gtk_box_pack_start (GTK_BOX (hbox), area, TRUE, TRUE, 0);
2486 g_signal_connect (area, "draw", G_CALLBACK (grippy_draw),
2487 GINT_TO_POINTER (GDK_WINDOW_EDGE_EAST));
2488 g_signal_connect (area, "button_press_event", G_CALLBACK (grippy_button_press),
2489 GINT_TO_POINTER (GDK_WINDOW_EDGE_EAST));
2492 hbox = gtk_hbox_new (FALSE, 0);
2493 gtk_box_pack_start (GTK_BOX (vbox), hbox, TRUE, TRUE, 0);
2496 area = gtk_drawing_area_new ();
2497 gtk_widget_add_events (area, GDK_BUTTON_PRESS_MASK);
2498 gtk_box_pack_start (GTK_BOX (hbox), area, TRUE, TRUE, 0);
2499 g_signal_connect (area, "draw", G_CALLBACK (grippy_draw),
2500 GINT_TO_POINTER (GDK_WINDOW_EDGE_SOUTH_WEST));
2501 g_signal_connect (area, "button_press_event", G_CALLBACK (grippy_button_press),
2502 GINT_TO_POINTER (GDK_WINDOW_EDGE_SOUTH_WEST));
2504 area = gtk_drawing_area_new ();
2505 gtk_widget_add_events (area, GDK_BUTTON_PRESS_MASK);
2506 gtk_box_pack_start (GTK_BOX (hbox), area, TRUE, TRUE, 0);
2507 g_signal_connect (area, "draw", G_CALLBACK (grippy_draw),
2508 GINT_TO_POINTER (GDK_WINDOW_EDGE_SOUTH));
2509 g_signal_connect (area, "button_press_event", G_CALLBACK (grippy_button_press),
2510 GINT_TO_POINTER (GDK_WINDOW_EDGE_SOUTH));
2513 area = gtk_drawing_area_new ();
2514 gtk_widget_add_events (area, GDK_BUTTON_PRESS_MASK);
2515 gtk_box_pack_start (GTK_BOX (hbox), area, TRUE, TRUE, 0);
2516 g_signal_connect (area, "draw", G_CALLBACK (grippy_draw),
2517 GINT_TO_POINTER (GDK_WINDOW_EDGE_SOUTH_EAST));
2518 g_signal_connect (area, "button_press_event", G_CALLBACK (grippy_button_press),
2519 GINT_TO_POINTER (GDK_WINDOW_EDGE_SOUTH_EAST));
2522 if (!gtk_widget_get_visible (window))
2523 gtk_widget_show_all (window);
2525 gtk_widget_destroy (window);
2531 gint upositionx = 0;
2532 gint upositiony = 0;
2535 uposition_configure (GtkWidget *window)
2541 lx = g_object_get_data (G_OBJECT (window), "x");
2542 ly = g_object_get_data (G_OBJECT (window), "y");
2544 gdk_window_get_root_origin (gtk_widget_get_window (window),
2545 &upositionx, &upositiony);
2546 sprintf (buffer, "%d", upositionx);
2547 gtk_label_set_text (lx, buffer);
2548 sprintf (buffer, "%d", upositiony);
2549 gtk_label_set_text (ly, buffer);
2555 uposition_stop_configure (GtkToggleButton *toggle,
2559 g_signal_handlers_block_by_func (window, G_CALLBACK (uposition_configure), NULL);
2561 g_signal_handlers_unblock_by_func (window, G_CALLBACK (uposition_configure), NULL);
2565 create_saved_position (GtkWidget *widget)
2567 static GtkWidget *window = NULL;
2572 GtkWidget *main_vbox;
2580 window = g_object_connect (g_object_new (GTK_TYPE_WINDOW,
2581 "type", GTK_WINDOW_TOPLEVEL,
2582 "title", "Saved Position",
2584 "signal::configure_event", uposition_configure, NULL,
2587 gtk_window_move (GTK_WINDOW (window), upositionx, upositiony);
2589 gtk_window_set_screen (GTK_WINDOW (window),
2590 gtk_widget_get_screen (widget));
2593 g_signal_connect (window, "destroy",
2594 G_CALLBACK (gtk_widget_destroyed),
2597 main_vbox = gtk_vbox_new (FALSE, 5);
2598 gtk_container_set_border_width (GTK_CONTAINER (main_vbox), 0);
2599 gtk_container_add (GTK_CONTAINER (window), main_vbox);
2602 g_object_new (gtk_vbox_get_type (),
2603 "GtkBox::homogeneous", FALSE,
2604 "GtkBox::spacing", 5,
2605 "GtkContainer::border_width", 10,
2606 "GtkWidget::parent", main_vbox,
2607 "GtkWidget::visible", TRUE,
2608 "child", g_object_connect (g_object_new (GTK_TYPE_TOGGLE_BUTTON,
2609 "label", "Stop Events",
2613 "signal::clicked", uposition_stop_configure, window,
2617 hbox = gtk_hbox_new (FALSE, 0);
2618 gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
2619 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0);
2621 label = gtk_label_new ("X Origin : ");
2622 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
2623 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
2625 x_label = gtk_label_new ("");
2626 gtk_box_pack_start (GTK_BOX (hbox), x_label, TRUE, TRUE, 0);
2627 g_object_set_data (G_OBJECT (window), "x", x_label);
2629 hbox = gtk_hbox_new (FALSE, 0);
2630 gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
2631 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0);
2633 label = gtk_label_new ("Y Origin : ");
2634 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
2635 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
2637 y_label = gtk_label_new ("");
2638 gtk_box_pack_start (GTK_BOX (hbox), y_label, TRUE, TRUE, 0);
2639 g_object_set_data (G_OBJECT (window), "y", y_label);
2642 g_object_new (gtk_hseparator_get_type (),
2643 "GtkWidget::visible", TRUE,
2645 gtk_box_pack_start (GTK_BOX (main_vbox), any, FALSE, TRUE, 0);
2647 hbox = gtk_hbox_new (FALSE, 0);
2648 gtk_container_set_border_width (GTK_CONTAINER (hbox), 10);
2649 gtk_box_pack_start (GTK_BOX (main_vbox), hbox, FALSE, TRUE, 0);
2651 button = gtk_button_new_with_label ("Close");
2652 g_signal_connect_swapped (button, "clicked",
2653 G_CALLBACK (gtk_widget_destroy),
2655 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
2656 gtk_widget_set_can_default (button, TRUE);
2657 gtk_widget_grab_default (button);
2659 gtk_widget_show_all (window);
2662 gtk_widget_destroy (window);
2670 create_pixbuf (GtkWidget *widget)
2672 static GtkWidget *window = NULL;
2678 GtkWidget *separator;
2679 GtkWidget *pixbufwid;
2680 GdkWindow *gdk_window;
2684 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
2686 gtk_window_set_screen (GTK_WINDOW (window),
2687 gtk_widget_get_screen (widget));
2689 g_signal_connect (window, "destroy",
2690 G_CALLBACK (gtk_widget_destroyed),
2693 gtk_window_set_title (GTK_WINDOW (window), "GtkPixmap");
2694 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
2695 gtk_widget_realize(window);
2697 box1 = gtk_vbox_new (FALSE, 0);
2698 gtk_container_add (GTK_CONTAINER (window), box1);
2700 box2 = gtk_vbox_new (FALSE, 10);
2701 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
2702 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
2704 button = gtk_button_new ();
2705 gtk_box_pack_start (GTK_BOX (box2), button, FALSE, FALSE, 0);
2707 gdk_window = gtk_widget_get_window (window);
2709 pixbufwid = new_pixbuf ("test.xpm", gdk_window, NULL);
2711 label = gtk_label_new ("Pixbuf\ntest");
2712 box3 = gtk_hbox_new (FALSE, 0);
2713 gtk_container_set_border_width (GTK_CONTAINER (box3), 2);
2714 gtk_container_add (GTK_CONTAINER (box3), pixbufwid);
2715 gtk_container_add (GTK_CONTAINER (box3), label);
2716 gtk_container_add (GTK_CONTAINER (button), box3);
2718 button = gtk_button_new ();
2719 gtk_box_pack_start (GTK_BOX (box2), button, FALSE, FALSE, 0);
2721 pixbufwid = new_pixbuf ("test.xpm", gdk_window, NULL);
2723 label = gtk_label_new ("Pixbuf\ntest");
2724 box3 = gtk_hbox_new (FALSE, 0);
2725 gtk_container_set_border_width (GTK_CONTAINER (box3), 2);
2726 gtk_container_add (GTK_CONTAINER (box3), pixbufwid);
2727 gtk_container_add (GTK_CONTAINER (box3), label);
2728 gtk_container_add (GTK_CONTAINER (button), box3);
2730 gtk_widget_set_sensitive (button, FALSE);
2732 separator = gtk_hseparator_new ();
2733 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
2735 box2 = gtk_vbox_new (FALSE, 10);
2736 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
2737 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
2739 button = gtk_button_new_with_label ("close");
2740 g_signal_connect_swapped (button, "clicked",
2741 G_CALLBACK (gtk_widget_destroy),
2743 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
2744 gtk_widget_set_can_default (button, TRUE);
2745 gtk_widget_grab_default (button);
2748 if (!gtk_widget_get_visible (window))
2749 gtk_widget_show_all (window);
2751 gtk_widget_destroy (window);
2755 create_tooltips (GtkWidget *widget)
2757 static GtkWidget *window = NULL;
2764 GtkWidget *separator;
2769 g_object_new (gtk_window_get_type (),
2770 "GtkWindow::type", GTK_WINDOW_TOPLEVEL,
2771 "GtkContainer::border_width", 0,
2772 "GtkWindow::title", "Tooltips",
2773 "GtkWindow::resizable", FALSE,
2776 gtk_window_set_screen (GTK_WINDOW (window),
2777 gtk_widget_get_screen (widget));
2779 box1 = gtk_vbox_new (FALSE, 0);
2780 gtk_container_add (GTK_CONTAINER (window), box1);
2782 box2 = gtk_vbox_new (FALSE, 10);
2783 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
2784 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
2786 button = gtk_toggle_button_new_with_label ("button1");
2787 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
2789 gtk_widget_set_tooltip_text (button, "This is button 1");
2791 button = gtk_toggle_button_new_with_label ("button2");
2792 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
2794 gtk_widget_set_tooltip_text (button,
2795 "This is button 2. This is also a really long tooltip which probably "
2796 "won't fit on a single line and will therefore need to be wrapped. "
2797 "Hopefully the wrapping will work correctly.");
2799 toggle = gtk_toggle_button_new_with_label ("Override TipsQuery Label");
2800 gtk_box_pack_start (GTK_BOX (box2), toggle, TRUE, TRUE, 0);
2802 gtk_widget_set_tooltip_text (toggle, "Toggle TipsQuery view.");
2805 g_object_new (gtk_vbox_get_type (),
2806 "homogeneous", FALSE,
2813 g_object_new (gtk_button_get_type (),
2818 gtk_box_set_child_packing (GTK_BOX (box3), button, FALSE, FALSE, 0, GTK_PACK_START);
2819 gtk_widget_set_tooltip_text (button, "Start the Tooltips Inspector");
2821 frame = g_object_new (gtk_frame_get_type (),
2822 "label", "ToolTips Inspector",
2823 "label_xalign", (double) 0.5,
2829 gtk_box_set_child_packing (GTK_BOX (box2), frame, TRUE, TRUE, 10, GTK_PACK_START);
2831 separator = gtk_hseparator_new ();
2832 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
2834 box2 = gtk_vbox_new (FALSE, 10);
2835 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
2836 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
2838 button = gtk_button_new_with_label ("close");
2839 g_signal_connect_swapped (button, "clicked",
2840 G_CALLBACK (gtk_widget_destroy),
2842 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
2843 gtk_widget_set_can_default (button, TRUE);
2844 gtk_widget_grab_default (button);
2846 gtk_widget_set_tooltip_text (button, "Push this button to close window");
2849 if (!gtk_widget_get_visible (window))
2850 gtk_widget_show_all (window);
2852 gtk_widget_destroy (window);
2860 pack_image (GtkWidget *box,
2864 gtk_box_pack_start (GTK_BOX (box),
2865 gtk_label_new (text),
2868 gtk_box_pack_start (GTK_BOX (box),
2874 create_image (GtkWidget *widget)
2876 static GtkWidget *window = NULL;
2883 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
2885 gtk_window_set_screen (GTK_WINDOW (window),
2886 gtk_widget_get_screen (widget));
2888 /* this is bogus for testing drawing when allocation < request,
2889 * don't copy into real code
2891 gtk_window_set_resizable (GTK_WINDOW (window), TRUE);
2893 g_signal_connect (window, "destroy",
2894 G_CALLBACK (gtk_widget_destroyed),
2897 vbox = gtk_vbox_new (FALSE, 5);
2899 gtk_container_add (GTK_CONTAINER (window), vbox);
2901 pack_image (vbox, "Stock Warning Dialog",
2902 gtk_image_new_from_stock (GTK_STOCK_DIALOG_WARNING,
2903 GTK_ICON_SIZE_DIALOG));
2905 pixbuf = gdk_pixbuf_new_from_xpm_data ((const char **) openfile);
2907 pack_image (vbox, "Pixbuf",
2908 gtk_image_new_from_pixbuf (pixbuf));
2910 g_object_unref (pixbuf);
2913 if (!gtk_widget_get_visible (window))
2914 gtk_widget_show_all (window);
2916 gtk_widget_destroy (window);
2924 create_menu (GdkScreen *screen, gint depth, gint length, gboolean tearoff)
2927 GtkWidget *menuitem;
2936 menu = gtk_menu_new ();
2937 gtk_menu_set_screen (GTK_MENU (menu), screen);
2943 menuitem = gtk_tearoff_menu_item_new ();
2944 gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem);
2945 gtk_widget_show (menuitem);
2948 image = gtk_image_new_from_stock (GTK_STOCK_OPEN,
2949 GTK_ICON_SIZE_MENU);
2950 gtk_widget_show (image);
2951 menuitem = gtk_image_menu_item_new_with_label ("Image item");
2952 gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menuitem), image);
2953 gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem);
2954 gtk_widget_show (menuitem);
2956 for (i = 0, j = 1; i < length; i++, j++)
2958 sprintf (buf, "item %2d - %d", depth, j);
2960 menuitem = gtk_radio_menu_item_new_with_label (group, buf);
2961 group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (menuitem));
2963 gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem);
2964 gtk_widget_show (menuitem);
2966 gtk_widget_set_sensitive (menuitem, FALSE);
2969 gtk_check_menu_item_set_inconsistent (GTK_CHECK_MENU_ITEM (menuitem),
2973 gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem),
2974 create_menu (screen, depth - 1, 5, TRUE));
2981 create_table_menu (GdkScreen *screen, gint cols, gint rows, gboolean tearoff)
2984 GtkWidget *menuitem;
2990 menu = gtk_menu_new ();
2991 gtk_menu_set_screen (GTK_MENU (menu), screen);
2996 menuitem = gtk_tearoff_menu_item_new ();
2997 gtk_menu_attach (GTK_MENU (menu), menuitem, 0, cols, j, j + 1);
2998 gtk_widget_show (menuitem);
3002 menuitem = gtk_menu_item_new_with_label ("items");
3003 gtk_menu_attach (GTK_MENU (menu), menuitem, 0, cols, j, j + 1);
3005 submenu = gtk_menu_new ();
3006 gtk_menu_set_screen (GTK_MENU (submenu), screen);
3007 gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem), submenu);
3008 gtk_widget_show (menuitem);
3011 /* now fill the items submenu */
3012 image = gtk_image_new_from_stock (GTK_STOCK_HELP,
3013 GTK_ICON_SIZE_MENU);
3014 gtk_widget_show (image);
3015 menuitem = gtk_image_menu_item_new_with_label ("Image");
3016 gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menuitem), image);
3017 gtk_menu_attach (GTK_MENU (submenu), menuitem, 0, 1, 0, 1);
3018 gtk_widget_show (menuitem);
3020 menuitem = gtk_menu_item_new_with_label ("x");
3021 gtk_menu_attach (GTK_MENU (submenu), menuitem, 1, 2, 0, 1);
3022 gtk_widget_show (menuitem);
3024 menuitem = gtk_menu_item_new_with_label ("x");
3025 gtk_menu_attach (GTK_MENU (submenu), menuitem, 0, 1, 1, 2);
3026 gtk_widget_show (menuitem);
3028 image = gtk_image_new_from_stock (GTK_STOCK_HELP,
3029 GTK_ICON_SIZE_MENU);
3030 gtk_widget_show (image);
3031 menuitem = gtk_image_menu_item_new_with_label ("Image");
3032 gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menuitem), image);
3033 gtk_menu_attach (GTK_MENU (submenu), menuitem, 1, 2, 1, 2);
3034 gtk_widget_show (menuitem);
3036 menuitem = gtk_radio_menu_item_new_with_label (NULL, "Radio");
3037 gtk_menu_attach (GTK_MENU (submenu), menuitem, 0, 1, 2, 3);
3038 gtk_widget_show (menuitem);
3040 menuitem = gtk_menu_item_new_with_label ("x");
3041 gtk_menu_attach (GTK_MENU (submenu), menuitem, 1, 2, 2, 3);
3042 gtk_widget_show (menuitem);
3044 menuitem = gtk_menu_item_new_with_label ("x");
3045 gtk_menu_attach (GTK_MENU (submenu), menuitem, 0, 1, 3, 4);
3046 gtk_widget_show (menuitem);
3048 menuitem = gtk_radio_menu_item_new_with_label (NULL, "Radio");
3049 gtk_menu_attach (GTK_MENU (submenu), menuitem, 1, 2, 3, 4);
3050 gtk_widget_show (menuitem);
3052 menuitem = gtk_check_menu_item_new_with_label ("Check");
3053 gtk_menu_attach (GTK_MENU (submenu), menuitem, 0, 1, 4, 5);
3054 gtk_widget_show (menuitem);
3056 menuitem = gtk_menu_item_new_with_label ("x");
3057 gtk_menu_attach (GTK_MENU (submenu), menuitem, 1, 2, 4, 5);
3058 gtk_widget_show (menuitem);
3060 menuitem = gtk_menu_item_new_with_label ("x");
3061 gtk_menu_attach (GTK_MENU (submenu), menuitem, 0, 1, 5, 6);
3062 gtk_widget_show (menuitem);
3064 menuitem = gtk_check_menu_item_new_with_label ("Check");
3065 gtk_menu_attach (GTK_MENU (submenu), menuitem, 1, 2, 5, 6);
3066 gtk_widget_show (menuitem);
3068 menuitem = gtk_menu_item_new_with_label ("1. Inserted normally (8)");
3069 gtk_widget_show (menuitem);
3070 gtk_menu_shell_insert (GTK_MENU_SHELL (submenu), menuitem, 8);
3072 menuitem = gtk_menu_item_new_with_label ("2. Inserted normally (2)");
3073 gtk_widget_show (menuitem);
3074 gtk_menu_shell_insert (GTK_MENU_SHELL (submenu), menuitem, 2);
3076 menuitem = gtk_menu_item_new_with_label ("3. Inserted normally (0)");
3077 gtk_widget_show (menuitem);
3078 gtk_menu_shell_insert (GTK_MENU_SHELL (submenu), menuitem, 0);
3080 menuitem = gtk_menu_item_new_with_label ("4. Inserted normally (-1)");
3081 gtk_widget_show (menuitem);
3082 gtk_menu_shell_insert (GTK_MENU_SHELL (submenu), menuitem, -1);
3084 /* end of items submenu */
3086 menuitem = gtk_menu_item_new_with_label ("spanning");
3087 gtk_menu_attach (GTK_MENU (menu), menuitem, 0, cols, j, j + 1);
3089 submenu = gtk_menu_new ();
3090 gtk_menu_set_screen (GTK_MENU (submenu), screen);
3091 gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem), submenu);
3092 gtk_widget_show (menuitem);
3095 /* now fill the spanning submenu */
3096 menuitem = gtk_menu_item_new_with_label ("a");
3097 gtk_menu_attach (GTK_MENU (submenu), menuitem, 0, 2, 0, 1);
3098 gtk_widget_show (menuitem);
3100 menuitem = gtk_menu_item_new_with_label ("b");
3101 gtk_menu_attach (GTK_MENU (submenu), menuitem, 2, 3, 0, 2);
3102 gtk_widget_show (menuitem);
3104 menuitem = gtk_menu_item_new_with_label ("c");
3105 gtk_menu_attach (GTK_MENU (submenu), menuitem, 0, 1, 1, 3);
3106 gtk_widget_show (menuitem);
3108 menuitem = gtk_menu_item_new_with_label ("d");
3109 gtk_menu_attach (GTK_MENU (submenu), menuitem, 1, 2, 1, 2);
3110 gtk_widget_show (menuitem);
3112 menuitem = gtk_menu_item_new_with_label ("e");
3113 gtk_menu_attach (GTK_MENU (submenu), menuitem, 1, 3, 2, 3);
3114 gtk_widget_show (menuitem);
3115 /* end of spanning submenu */
3117 menuitem = gtk_menu_item_new_with_label ("left");
3118 gtk_menu_attach (GTK_MENU (menu), menuitem, 0, 1, j, j + 1);
3119 submenu = gtk_menu_new ();
3120 gtk_menu_set_screen (GTK_MENU (submenu), screen);
3121 gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem), submenu);
3122 gtk_widget_show (menuitem);
3124 menuitem = gtk_menu_item_new_with_label ("Empty");
3125 gtk_menu_attach (GTK_MENU (submenu), menuitem, 0, 1, 0, 1);
3126 submenu = gtk_menu_new ();
3127 gtk_menu_set_screen (GTK_MENU (submenu), screen);
3128 gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem), submenu);
3129 gtk_widget_show (menuitem);
3131 menuitem = gtk_menu_item_new_with_label ("right");
3132 gtk_menu_attach (GTK_MENU (menu), menuitem, 1, 2, j, j + 1);
3133 submenu = gtk_menu_new ();
3134 gtk_menu_set_screen (GTK_MENU (submenu), screen);
3135 gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem), submenu);
3136 gtk_widget_show (menuitem);
3138 menuitem = gtk_menu_item_new_with_label ("Empty");
3139 gtk_menu_attach (GTK_MENU (submenu), menuitem, 0, 1, 0, 1);
3140 gtk_widget_show (menuitem);
3144 for (; j < rows; j++)
3145 for (i = 0; i < cols; i++)
3147 sprintf (buf, "(%d %d)", i, j);
3148 menuitem = gtk_menu_item_new_with_label (buf);
3149 gtk_menu_attach (GTK_MENU (menu), menuitem, i, i + 1, j, j + 1);
3150 gtk_widget_show (menuitem);
3153 menuitem = gtk_menu_item_new_with_label ("1. Inserted normally (8)");
3154 gtk_menu_shell_insert (GTK_MENU_SHELL (menu), menuitem, 8);
3155 gtk_widget_show (menuitem);
3156 menuitem = gtk_menu_item_new_with_label ("2. Inserted normally (2)");
3157 gtk_menu_shell_insert (GTK_MENU_SHELL (menu), menuitem, 2);
3158 gtk_widget_show (menuitem);
3159 menuitem = gtk_menu_item_new_with_label ("3. Inserted normally (0)");
3160 gtk_menu_shell_insert (GTK_MENU_SHELL (menu), menuitem, 0);
3161 gtk_widget_show (menuitem);
3162 menuitem = gtk_menu_item_new_with_label ("4. Inserted normally (-1)");
3163 gtk_menu_shell_insert (GTK_MENU_SHELL (menu), menuitem, -1);
3164 gtk_widget_show (menuitem);
3170 create_menus (GtkWidget *widget)
3172 static GtkWidget *window = NULL;
3176 GtkWidget *optionmenu;
3177 GtkWidget *separator;
3183 GtkWidget *menuitem;
3184 GtkAccelGroup *accel_group;
3186 GdkScreen *screen = gtk_widget_get_screen (widget);
3188 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
3190 gtk_window_set_screen (GTK_WINDOW (window), screen);
3192 g_signal_connect (window, "destroy",
3193 G_CALLBACK (gtk_widget_destroyed),
3195 g_signal_connect (window, "delete-event",
3196 G_CALLBACK (gtk_true),
3199 accel_group = gtk_accel_group_new ();
3200 gtk_window_add_accel_group (GTK_WINDOW (window), accel_group);
3202 gtk_window_set_title (GTK_WINDOW (window), "menus");
3203 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
3206 box1 = gtk_vbox_new (FALSE, 0);
3207 gtk_container_add (GTK_CONTAINER (window), box1);
3208 gtk_widget_show (box1);
3210 menubar = gtk_menu_bar_new ();
3211 gtk_box_pack_start (GTK_BOX (box1), menubar, FALSE, TRUE, 0);
3212 gtk_widget_show (menubar);
3214 menu = create_menu (screen, 2, 50, TRUE);
3216 menuitem = gtk_menu_item_new_with_label ("test\nline2");
3217 gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem), menu);
3218 gtk_menu_shell_append (GTK_MENU_SHELL (menubar), menuitem);
3219 gtk_widget_show (menuitem);
3221 menu = create_table_menu (screen, 2, 50, TRUE);
3223 menuitem = gtk_menu_item_new_with_label ("table");
3224 gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem), menu);
3225 gtk_menu_shell_append (GTK_MENU_SHELL (menubar), menuitem);
3226 gtk_widget_show (menuitem);
3228 menuitem = gtk_menu_item_new_with_label ("foo");
3229 gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem), create_menu (screen, 3, 5, TRUE));
3230 gtk_menu_shell_append (GTK_MENU_SHELL (menubar), menuitem);
3231 gtk_widget_show (menuitem);
3233 image = gtk_image_new_from_stock (GTK_STOCK_HELP,
3234 GTK_ICON_SIZE_MENU);
3235 gtk_widget_show (image);
3236 menuitem = gtk_image_menu_item_new_with_label ("Help");
3237 gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menuitem), image);
3238 gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem), create_menu (screen, 4, 5, TRUE));
3239 gtk_menu_item_set_right_justified (GTK_MENU_ITEM (menuitem), TRUE);
3240 gtk_menu_shell_append (GTK_MENU_SHELL (menubar), menuitem);
3241 gtk_widget_show (menuitem);
3243 menubar = gtk_menu_bar_new ();
3244 gtk_box_pack_start (GTK_BOX (box1), menubar, FALSE, TRUE, 0);
3245 gtk_widget_show (menubar);
3247 menu = create_menu (screen, 2, 10, TRUE);
3249 menuitem = gtk_menu_item_new_with_label ("Second menu bar");
3250 gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem), menu);
3251 gtk_menu_shell_append (GTK_MENU_SHELL (menubar), menuitem);
3252 gtk_widget_show (menuitem);
3254 box2 = gtk_vbox_new (FALSE, 10);
3255 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
3256 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
3257 gtk_widget_show (box2);
3259 menu = create_menu (screen, 1, 5, FALSE);
3260 gtk_menu_set_accel_group (GTK_MENU (menu), accel_group);
3262 menuitem = gtk_image_menu_item_new_from_stock (GTK_STOCK_NEW, accel_group);
3263 gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem);
3264 gtk_widget_show (menuitem);
3266 menuitem = gtk_check_menu_item_new_with_label ("Accelerate Me");
3267 gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem);
3268 gtk_widget_show (menuitem);
3269 gtk_widget_add_accelerator (menuitem,
3275 menuitem = gtk_check_menu_item_new_with_label ("Accelerator Locked");
3276 gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem);
3277 gtk_widget_show (menuitem);
3278 gtk_widget_add_accelerator (menuitem,
3283 GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
3284 menuitem = gtk_check_menu_item_new_with_label ("Accelerators Frozen");
3285 gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem);
3286 gtk_widget_show (menuitem);
3287 gtk_widget_add_accelerator (menuitem,
3293 gtk_widget_add_accelerator (menuitem,
3300 optionmenu = gtk_combo_box_text_new ();
3301 gtk_combo_box_set_active (GTK_COMBO_BOX (optionmenu), 3);
3302 gtk_box_pack_start (GTK_BOX (box2), optionmenu, TRUE, TRUE, 0);
3303 gtk_widget_show (optionmenu);
3305 separator = gtk_hseparator_new ();
3306 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
3307 gtk_widget_show (separator);
3309 box2 = gtk_vbox_new (FALSE, 10);
3310 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
3311 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
3312 gtk_widget_show (box2);
3314 button = gtk_button_new_with_label ("close");
3315 g_signal_connect_swapped (button, "clicked",
3316 G_CALLBACK (gtk_widget_destroy),
3318 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
3319 gtk_widget_set_can_default (button, TRUE);
3320 gtk_widget_grab_default (button);
3321 gtk_widget_show (button);
3324 if (!gtk_widget_get_visible (window))
3325 gtk_widget_show (window);
3327 gtk_widget_destroy (window);
3330 /* GdkPixbuf RGBA C-Source image dump */
3332 static const guint8 apple[] =
3334 /* Pixbuf magic (0x47646b50) */
3336 /* length: header (24) + pixel_data (2304) */
3338 /* pixdata_type (0x1010002) */
3340 /* rowstride (96) */
3347 "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
3348 "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
3349 "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
3350 "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
3351 "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
3352 "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
3353 "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\26\24"
3354 "\17\11\0\0\0\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
3355 "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`m"
3356 "[pn{a\344hv_\345_k[`\0\0\0\0\0\0\0\0\0\0\0\0D>/\305\0\0\0_\0\0\0\0\0"
3357 "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
3358 "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`l[Blza\373s\202d\354w\206g\372p~c"
3359 "\374`l[y\0\0\0\0[S\77/\27\25\17\335\0\0\0\20\0\0\0\0\0\0\0\0\0\0\0\0"
3360 "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
3361 "\0\0\0\0\0\0`l\\\20iw_\356y\211h\373x\207g\364~\216i\364u\204e\366gt"
3362 "_\374^jX\241A;-_\0\0\0~\0\0\0\0SM4)SM21B9&\22\320\270\204\1\320\270\204"
3363 "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0eq"
3364 "]\212r\200c\366v\205f\371jx_\323_kY\232_kZH^jY\26]iW\211@G9\272:6%j\220"
3365 "\211]\320\221\211`\377\212\203Z\377~xP\377mkE\331]^;|/0\37\21\0\0\0\0"
3366 "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0ly`\40p~b\360lz`\353^kY\246["
3367 "eT<\216\200Z\203\227\211_\354\234\217c\377\232\217b\362\232\220c\337"
3368 "\243\233k\377\252\241p\377\250\236p\377\241\225h\377\231\214_\377\210"
3369 "\202U\377srI\377[]:\355KO0U\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0i"
3370 "v^\200`lY\211^jY\"\0\0\0\0\221\204\\\273\250\233r\377\302\267\224\377"
3371 "\311\300\237\377\272\256\204\377\271\256\177\377\271\257\200\377\267"
3372 "\260\177\377\260\251x\377\250\236l\377\242\225e\377\226\213]\377~zP\377"
3373 "ff@\377QT5\377LR2d\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0]iW(\0\0\0\0\0\0\0"
3374 "\0\213\203[v\253\240t\377\334\326\301\377\344\340\317\377\321\312\253"
3375 "\377\303\271\217\377\300\270\213\377\277\267\210\377\272\264\203\377"
3376 "\261\255z\377\250\242n\377\243\232h\377\232\220`\377\210\202V\377nnE"
3377 "\377SW6\377RX6\364Za<\34\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0b]@\20"
3378 "\234\222e\362\304\274\232\377\337\333\306\377\332\325\273\377\311\302"
3379 "\232\377\312\303\236\377\301\273\216\377\300\271\212\377\270\264\200"
3380 "\377\256\253v\377\246\243n\377\236\232h\377\230\220`\377\213\203V\377"
3381 "wvL\377X]:\377KR0\377NU5v\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\212"
3382 "\203Zl\242\234l\377\321\315\260\377\331\324\271\377\320\313\251\377\307"
3383 "\301\232\377\303\276\224\377\300\272\214\377\274\267\206\377\264\260"
3384 "|\377\253\251s\377\244\243n\377\232\230e\377\223\216^\377\207\200U\377"
3385 "ttJ\377[_<\377HO/\377GN0\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
3386 "\210\204Y\240\245\237o\377\316\310\253\377\310\303\237\377\304\300\230"
3387 "\377\303\277\225\377\277\272\216\377\274\270\210\377\266\263\200\377"
3388 "\256\254v\377\247\246p\377\237\236j\377\227\226d\377\215\212[\377\203"
3389 "\177T\377qsH\377X]8\377FN.\377DK-\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
3390 "\0\0\0\0\207\204X\257\244\240o\377\300\275\231\377\301\275\226\377\274"
3391 "\270\213\377\274\270\214\377\267\264\205\377\264\262\200\377\260\256"
3392 "z\377\251\251s\377\243\244n\377\231\232g\377\220\222`\377\210\211Y\377"
3393 "|}Q\377hlC\377PU3\377CK,\377DL/Y\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
3394 "\0\0\205\204X\220\232\230h\377\261\260\204\377\266\264\212\377\261\260"
3395 "\201\377\263\260\200\377\260\257}\377\256\256x\377\253\254t\377\244\246"
3396 "o\377\233\236i\377\221\224b\377\211\214\\\377\202\204V\377txM\377]b>"
3397 "\377HP0\377@H+\373CJ-\25\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0xxO>"
3398 "\215\215_\377\237\237r\377\247\247x\377\247\247t\377\252\252w\377\252"
3399 "\252u\377\252\253t\377\243\246o\377\235\240j\377\223\230c\377\213\217"
3400 "]\377\201\206V\377x}P\377gkD\377RY5\377BI,\377AI,\262\0\0\0\0\0\0\0\0"
3401 "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\202\205W\312\216\220`\377\230"
3402 "\232g\377\234\236i\377\236\241l\377\241\244n\377\240\244m\377\232\237"
3403 "i\377\223\230c\377\212\221]\377\200\210W\377v|P\377jnG\377Za>\377HP2"
3404 "\377=D)\377HQ1:\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
3405 "\0wzQ6\177\201U\371\206\211Z\377\216\222`\377\220\225a\377\220\225b\377"
3406 "\220\226a\377\213\221_\377\204\213Z\377{\203R\377ryN\377iqH\377^fA\377"
3407 "R[;\377BJ-\3778@'\317\0\0\0>\0\0\0\36\0\0\0\7\0\0\0\0\0\0\0\0\0\0\0\0"
3408 "\0\0\0\0\0\0\0\0\0\0\0\0ptJTw|Q\371z\177R\377}\202T\377|\203T\377z\200"
3409 "R\377v|O\377pwL\377jpF\377dlB\377`hB\377Yb@\377LT6\377<C*\377\11\12\6"
3410 "\376\0\0\0\347\0\0\0\262\0\0\0Y\0\0\0\32\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
3411 "\0\0\0\0\0\0\0\0\0\0\\`=UgnE\370hnG\377gmE\377djB\377]d>\377[c<\377Y"
3412 "b<\377Zc>\377V_>\377OW8\377BK/\377\16\20\12\377\0\0\0\377\0\0\0\377\0"
3413 "\0\0\374\0\0\0\320\0\0\0I\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
3414 "\0\1\0\0\0\40\22\24\15\260@D+\377W`;\377OV5\377.3\36\377.3\37\377IP0"
3415 "\377RZ7\377PZ8\3776=&\377\14\15\10\377\0\0\0\377\0\0\0\377\0\0\0\377"
3416 "\0\0\0\347\0\0\0\217\0\0\0""4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
3417 "\0\0\0\0\0\0\0\20\0\0\0P\0\0\0\252\7\10\5\346\7\7\5\375\0\0\0\377\0\0"
3418 "\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\374\0"
3419 "\0\0\336\0\0\0\254\0\0\0i\0\0\0""2\0\0\0\10\0\0\0\0\0\0\0\0\0\0\0\0\0"
3420 "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\11\0\0\0\40\0\0\0D\0\0\0m\0\0\0"
3421 "\226\0\0\0\234\0\0\0\234\0\0\0\244\0\0\0\246\0\0\0\232\0\0\0\202\0\0"
3422 "\0i\0\0\0T\0\0\0,\0\0\0\15\0\0\0\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
3423 "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\2\0\0\0\6\0\0\0"
3424 "\16\0\0\0\22\0\0\0\24\0\0\0\23\0\0\0\17\0\0\0\14\0\0\0\13\0\0\0\10\0"
3425 "\0\0\5\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"};
3429 accel_button_new (GtkAccelGroup *accel_group,
3434 GdkModifierType modifiers;
3438 gtk_accelerator_parse (accel, &keyval, &modifiers);
3441 button = gtk_button_new ();
3442 gtk_widget_add_accelerator (button, "activate", accel_group,
3443 keyval, modifiers, GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
3445 label = gtk_accel_label_new (text);
3446 gtk_accel_label_set_accel_widget (GTK_ACCEL_LABEL (label), button);
3447 gtk_widget_show (label);
3449 gtk_container_add (GTK_CONTAINER (button), label);
3455 create_key_lookup (GtkWidget *widget)
3457 static GtkWidget *window = NULL;
3458 gpointer window_ptr;
3462 GtkAccelGroup *accel_group = gtk_accel_group_new ();
3464 GtkWidget *content_area;
3466 window = gtk_dialog_new_with_buttons ("Key Lookup", NULL, 0,
3467 GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE,
3470 gtk_window_set_screen (GTK_WINDOW (window),
3471 gtk_widget_get_screen (widget));
3473 /* We have to expand it so the accel labels will draw their labels
3475 gtk_window_set_default_size (GTK_WINDOW (window), 300, -1);
3477 gtk_window_add_accel_group (GTK_WINDOW (window), accel_group);
3479 content_area = gtk_dialog_get_content_area (GTK_DIALOG (window));
3481 button = gtk_button_new_with_mnemonic ("Button 1 (_a)");
3482 gtk_box_pack_start (GTK_BOX (content_area), button, FALSE, FALSE, 0);
3483 button = gtk_button_new_with_mnemonic ("Button 2 (_A)");
3484 gtk_box_pack_start (GTK_BOX (content_area), button, FALSE, FALSE, 0);
3485 button = gtk_button_new_with_mnemonic ("Button 3 (_\321\204)");
3486 gtk_box_pack_start (GTK_BOX (content_area), button, FALSE, FALSE, 0);
3487 button = gtk_button_new_with_mnemonic ("Button 4 (_\320\244)");
3488 gtk_box_pack_start (GTK_BOX (content_area), button, FALSE, FALSE, 0);
3489 button = gtk_button_new_with_mnemonic ("Button 6 (_b)");
3490 gtk_box_pack_start (GTK_BOX (content_area), button, FALSE, FALSE, 0);
3491 button = accel_button_new (accel_group, "Button 7", "<Alt><Shift>b");
3492 gtk_box_pack_start (GTK_BOX (content_area), button, FALSE, FALSE, 0);
3493 button = accel_button_new (accel_group, "Button 8", "<Alt>d");
3494 gtk_box_pack_start (GTK_BOX (content_area), button, FALSE, FALSE, 0);
3495 button = accel_button_new (accel_group, "Button 9", "<Alt>Cyrillic_ve");
3496 gtk_box_pack_start (GTK_BOX (content_area), button, FALSE, FALSE, 0);
3497 button = gtk_button_new_with_mnemonic ("Button 10 (_1)");
3498 gtk_box_pack_start (GTK_BOX (content_area), button, FALSE, FALSE, 0);
3499 button = gtk_button_new_with_mnemonic ("Button 11 (_!)");
3500 gtk_box_pack_start (GTK_BOX (content_area), button, FALSE, FALSE, 0);
3501 button = accel_button_new (accel_group, "Button 12", "<Super>a");
3502 gtk_box_pack_start (GTK_BOX (content_area), button, FALSE, FALSE, 0);
3503 button = accel_button_new (accel_group, "Button 13", "<Hyper>a");
3504 gtk_box_pack_start (GTK_BOX (content_area), button, FALSE, FALSE, 0);
3505 button = accel_button_new (accel_group, "Button 14", "<Meta>a");
3506 gtk_box_pack_start (GTK_BOX (content_area), button, FALSE, FALSE, 0);
3507 button = accel_button_new (accel_group, "Button 15", "<Shift><Mod4>b");
3508 gtk_box_pack_start (GTK_BOX (content_area), button, FALSE, FALSE, 0);
3510 window_ptr = &window;
3511 g_object_add_weak_pointer (G_OBJECT (window), window_ptr);
3512 g_signal_connect (window, "response", G_CALLBACK (gtk_widget_destroy), NULL);
3514 gtk_widget_show_all (window);
3517 gtk_widget_destroy (window);
3526 cmw_destroy_cb(GtkWidget *widget)
3528 /* This is needed to get out of gtk_main */
3535 cmw_color (GtkWidget *widget, GtkWidget *parent)
3538 GtkWidget *colorsel;
3539 GtkWidget *ok_button, *cancel_button;
3541 csd = gtk_color_selection_dialog_new ("This is a modal color selection dialog");
3543 gtk_window_set_screen (GTK_WINDOW (csd), gtk_widget_get_screen (parent));
3545 colorsel = gtk_color_selection_dialog_get_color_selection (GTK_COLOR_SELECTION_DIALOG (csd));
3546 gtk_color_selection_set_has_palette (GTK_COLOR_SELECTION (colorsel),
3550 gtk_window_set_modal (GTK_WINDOW(csd),TRUE);
3552 /* And mark it as a transient dialog */
3553 gtk_window_set_transient_for (GTK_WINDOW (csd), GTK_WINDOW (parent));
3555 g_signal_connect (csd, "destroy",
3556 G_CALLBACK (cmw_destroy_cb), NULL);
3559 "ok-button", &ok_button,
3560 "cancel-button", &cancel_button,
3563 g_signal_connect_swapped (ok_button,
3564 "clicked", G_CALLBACK (gtk_widget_destroy), csd);
3565 g_signal_connect_swapped (cancel_button,
3566 "clicked", G_CALLBACK (gtk_widget_destroy), csd);
3568 /* wait until destroy calls gtk_main_quit */
3569 gtk_widget_show (csd);
3574 cmw_file (GtkWidget *widget, GtkWidget *parent)
3578 fs = gtk_file_chooser_dialog_new ("This is a modal file selection dialog",
3579 GTK_WINDOW (parent), GTK_FILE_CHOOSER_ACTION_OPEN,
3580 GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT,
3581 GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
3583 gtk_window_set_screen (GTK_WINDOW (fs), gtk_widget_get_screen (parent));
3584 gtk_window_set_modal (GTK_WINDOW (fs), TRUE);
3586 g_signal_connect (fs, "destroy",
3587 G_CALLBACK (cmw_destroy_cb), NULL);
3588 g_signal_connect_swapped (fs, "response",
3589 G_CALLBACK (gtk_widget_destroy), fs);
3591 /* wait until destroy calls gtk_main_quit */
3592 gtk_widget_show (fs);
3598 create_modal_window (GtkWidget *widget)
3600 GtkWidget *window = NULL;
3601 GtkWidget *box1,*box2;
3603 GtkWidget *btnColor,*btnFile,*btnClose;
3605 /* Create modal window (Here you can use any window descendent )*/
3606 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
3607 gtk_window_set_screen (GTK_WINDOW (window),
3608 gtk_widget_get_screen (widget));
3610 gtk_window_set_title (GTK_WINDOW(window),"This window is modal");
3612 /* Set window as modal */
3613 gtk_window_set_modal (GTK_WINDOW(window),TRUE);
3615 /* Create widgets */
3616 box1 = gtk_vbox_new (FALSE,5);
3617 frame1 = gtk_frame_new ("Standard dialogs in modal form");
3618 box2 = gtk_vbox_new (TRUE,5);
3619 btnColor = gtk_button_new_with_label ("Color");
3620 btnFile = gtk_button_new_with_label ("File Selection");
3621 btnClose = gtk_button_new_with_label ("Close");
3624 gtk_container_set_border_width (GTK_CONTAINER (box1), 3);
3625 gtk_container_set_border_width (GTK_CONTAINER (box2), 3);
3628 gtk_container_add (GTK_CONTAINER (window), box1);
3629 gtk_box_pack_start (GTK_BOX (box1), frame1, TRUE, TRUE, 4);
3630 gtk_container_add (GTK_CONTAINER (frame1), box2);
3631 gtk_box_pack_start (GTK_BOX (box2), btnColor, FALSE, FALSE, 4);
3632 gtk_box_pack_start (GTK_BOX (box2), btnFile, FALSE, FALSE, 4);
3633 gtk_box_pack_start (GTK_BOX (box1), gtk_hseparator_new (), FALSE, FALSE, 4);
3634 gtk_box_pack_start (GTK_BOX (box1), btnClose, FALSE, FALSE, 4);
3636 /* connect signals */
3637 g_signal_connect_swapped (btnClose, "clicked",
3638 G_CALLBACK (gtk_widget_destroy), window);
3640 g_signal_connect (window, "destroy",
3641 G_CALLBACK (cmw_destroy_cb), NULL);
3643 g_signal_connect (btnColor, "clicked",
3644 G_CALLBACK (cmw_color), window);
3645 g_signal_connect (btnFile, "clicked",
3646 G_CALLBACK (cmw_file), window);
3649 gtk_widget_show_all (window);
3651 /* wait until dialog get destroyed */
3660 make_message_dialog (GdkScreen *screen,
3662 GtkMessageType type,
3663 GtkButtonsType buttons,
3664 guint default_response)
3668 gtk_widget_destroy (*dialog);
3673 *dialog = gtk_message_dialog_new (NULL, 0, type, buttons,
3674 "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.)");
3676 gtk_window_set_screen (GTK_WINDOW (*dialog), screen);
3678 g_signal_connect_swapped (*dialog,
3680 G_CALLBACK (gtk_widget_destroy),
3683 g_signal_connect (*dialog,
3685 G_CALLBACK (gtk_widget_destroyed),
3688 gtk_dialog_set_default_response (GTK_DIALOG (*dialog), default_response);
3690 gtk_widget_show (*dialog);
3694 create_message_dialog (GtkWidget *widget)
3696 static GtkWidget *info = NULL;
3697 static GtkWidget *warning = NULL;
3698 static GtkWidget *error = NULL;
3699 static GtkWidget *question = NULL;
3700 GdkScreen *screen = gtk_widget_get_screen (widget);
3702 make_message_dialog (screen, &info, GTK_MESSAGE_INFO, GTK_BUTTONS_OK, GTK_RESPONSE_OK);
3703 make_message_dialog (screen, &warning, GTK_MESSAGE_WARNING, GTK_BUTTONS_CLOSE, GTK_RESPONSE_CLOSE);
3704 make_message_dialog (screen, &error, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK_CANCEL, GTK_RESPONSE_OK);
3705 make_message_dialog (screen, &question, GTK_MESSAGE_QUESTION, GTK_BUTTONS_YES_NO, GTK_RESPONSE_NO);
3712 static GtkWidget *sw_parent = NULL;
3713 static GtkWidget *sw_float_parent;
3714 static guint sw_destroyed_handler = 0;
3717 scrolled_windows_delete_cb (GtkWidget *widget, GdkEventAny *event, GtkWidget *scrollwin)
3719 gtk_widget_reparent (scrollwin, sw_parent);
3721 g_signal_handler_disconnect (sw_parent, sw_destroyed_handler);
3722 sw_float_parent = NULL;
3724 sw_destroyed_handler = 0;
3730 scrolled_windows_destroy_cb (GtkWidget *widget, GtkWidget *scrollwin)
3732 gtk_widget_destroy (sw_float_parent);
3734 sw_float_parent = NULL;
3736 sw_destroyed_handler = 0;
3740 scrolled_windows_remove (GtkWidget *widget, GtkWidget *scrollwin)
3744 gtk_widget_reparent (scrollwin, sw_parent);
3745 gtk_widget_destroy (sw_float_parent);
3747 g_signal_handler_disconnect (sw_parent, sw_destroyed_handler);
3748 sw_float_parent = NULL;
3750 sw_destroyed_handler = 0;
3754 sw_parent = gtk_widget_get_parent (scrollwin);
3755 sw_float_parent = gtk_window_new (GTK_WINDOW_TOPLEVEL);
3756 gtk_window_set_screen (GTK_WINDOW (sw_float_parent),
3757 gtk_widget_get_screen (widget));
3759 gtk_window_set_default_size (GTK_WINDOW (sw_float_parent), 200, 200);
3761 gtk_widget_reparent (scrollwin, sw_float_parent);
3762 gtk_widget_show (sw_float_parent);
3764 sw_destroyed_handler =
3765 g_signal_connect (sw_parent, "destroy",
3766 G_CALLBACK (scrolled_windows_destroy_cb), scrollwin);
3767 g_signal_connect (sw_float_parent, "delete_event",
3768 G_CALLBACK (scrolled_windows_delete_cb), scrollwin);
3773 create_scrolled_windows (GtkWidget *widget)
3775 static GtkWidget *window;
3776 GtkWidget *content_area, *action_area;
3777 GtkWidget *scrolled_window;
3785 window = gtk_dialog_new ();
3787 gtk_window_set_screen (GTK_WINDOW (window),
3788 gtk_widget_get_screen (widget));
3790 g_signal_connect (window, "destroy",
3791 G_CALLBACK (gtk_widget_destroyed),
3794 content_area = gtk_dialog_get_content_area (GTK_DIALOG (window));
3795 action_area = gtk_dialog_get_action_area (GTK_DIALOG (window));
3797 gtk_window_set_title (GTK_WINDOW (window), "dialog");
3798 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
3800 scrolled_window = gtk_scrolled_window_new (NULL, NULL);
3801 gtk_container_set_border_width (GTK_CONTAINER (scrolled_window), 10);
3802 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
3803 GTK_POLICY_AUTOMATIC,
3804 GTK_POLICY_AUTOMATIC);
3805 gtk_box_pack_start (GTK_BOX (content_area), scrolled_window, TRUE, TRUE, 0);
3806 gtk_widget_show (scrolled_window);
3808 table = gtk_table_new (20, 20, FALSE);
3809 gtk_table_set_row_spacings (GTK_TABLE (table), 10);
3810 gtk_table_set_col_spacings (GTK_TABLE (table), 10);
3811 gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scrolled_window), table);
3812 gtk_container_set_focus_hadjustment (GTK_CONTAINER (table),
3813 gtk_scrolled_window_get_hadjustment (GTK_SCROLLED_WINDOW (scrolled_window)));
3814 gtk_container_set_focus_vadjustment (GTK_CONTAINER (table),
3815 gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (scrolled_window)));
3816 gtk_widget_show (table);
3818 for (i = 0; i < 20; i++)
3819 for (j = 0; j < 20; j++)
3821 sprintf (buffer, "button (%d,%d)\n", i, j);
3822 button = gtk_toggle_button_new_with_label (buffer);
3823 gtk_table_attach_defaults (GTK_TABLE (table), button,
3825 gtk_widget_show (button);
3829 button = gtk_button_new_with_label ("Close");
3830 g_signal_connect_swapped (button, "clicked",
3831 G_CALLBACK (gtk_widget_destroy),
3833 gtk_widget_set_can_default (button, TRUE);
3834 gtk_box_pack_start (GTK_BOX (action_area), button, TRUE, TRUE, 0);
3835 gtk_widget_grab_default (button);
3836 gtk_widget_show (button);
3838 button = gtk_button_new_with_label ("Reparent Out");
3839 g_signal_connect (button, "clicked",
3840 G_CALLBACK (scrolled_windows_remove),
3842 gtk_widget_set_can_default (button, TRUE);
3843 gtk_box_pack_start (GTK_BOX (action_area), button, TRUE, TRUE, 0);
3844 gtk_widget_grab_default (button);
3845 gtk_widget_show (button);
3847 gtk_window_set_default_size (GTK_WINDOW (window), 300, 300);
3850 if (!gtk_widget_get_visible (window))
3851 gtk_widget_show (window);
3853 gtk_widget_destroy (window);
3861 entry_toggle_frame (GtkWidget *checkbutton,
3864 gtk_entry_set_has_frame (GTK_ENTRY(entry),
3865 GTK_TOGGLE_BUTTON(checkbutton)->active);
3869 entry_toggle_sensitive (GtkWidget *checkbutton,
3872 gtk_widget_set_sensitive (entry, GTK_TOGGLE_BUTTON(checkbutton)->active);
3876 entry_progress_timeout (gpointer data)
3878 if (GPOINTER_TO_INT (g_object_get_data (G_OBJECT (data), "progress-pulse")))
3880 gtk_entry_progress_pulse (GTK_ENTRY (data));
3886 fraction = gtk_entry_get_progress_fraction (GTK_ENTRY (data));
3889 if (fraction > 1.0001)
3892 gtk_entry_set_progress_fraction (GTK_ENTRY (data), fraction);
3899 entry_remove_timeout (gpointer data)
3901 g_source_remove (GPOINTER_TO_UINT (data));
3905 entry_toggle_progress (GtkWidget *checkbutton,
3908 if (GTK_TOGGLE_BUTTON (checkbutton)->active)
3910 guint timeout = gdk_threads_add_timeout (100,
3911 entry_progress_timeout,
3913 g_object_set_data_full (G_OBJECT (entry), "timeout-id",
3914 GUINT_TO_POINTER (timeout),
3915 entry_remove_timeout);
3919 g_object_set_data (G_OBJECT (entry), "timeout-id",
3920 GUINT_TO_POINTER (0));
3922 gtk_entry_set_progress_fraction (GTK_ENTRY (entry), 0.0);
3927 entry_toggle_pulse (GtkWidget *checkbutton,
3930 g_object_set_data (G_OBJECT (entry), "progress-pulse",
3931 GUINT_TO_POINTER ((guint) GTK_TOGGLE_BUTTON (checkbutton)->active));
3935 props_clicked (GtkWidget *button,
3938 GtkWidget *window = create_prop_editor (object, 0);
3940 gtk_window_set_title (GTK_WINDOW (window), "Object Properties");
3944 create_entry (GtkWidget *widget)
3946 static GtkWidget *window = NULL;
3950 GtkWidget *has_frame_check;
3951 GtkWidget *sensitive_check;
3952 GtkWidget *progress_check;
3954 GtkComboBoxText *cb;
3955 GtkWidget *cb_entry;
3957 GtkWidget *separator;
3961 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
3962 gtk_window_set_screen (GTK_WINDOW (window),
3963 gtk_widget_get_screen (widget));
3965 g_signal_connect (window, "destroy",
3966 G_CALLBACK (gtk_widget_destroyed),
3969 gtk_window_set_title (GTK_WINDOW (window), "entry");
3970 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
3973 box1 = gtk_vbox_new (FALSE, 0);
3974 gtk_container_add (GTK_CONTAINER (window), box1);
3977 box2 = gtk_vbox_new (FALSE, 10);
3978 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
3979 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
3981 hbox = gtk_hbox_new (FALSE, 5);
3982 gtk_box_pack_start (GTK_BOX (box2), hbox, TRUE, TRUE, 0);
3984 entry = gtk_entry_new ();
3985 gtk_entry_set_text (GTK_ENTRY (entry), "hello world \330\247\331\204\330\263\331\204\330\247\331\205 \330\271\331\204\331\212\331\203\331\205");
3986 gtk_editable_select_region (GTK_EDITABLE (entry), 0, 5);
3987 gtk_box_pack_start (GTK_BOX (hbox), entry, TRUE, TRUE, 0);
3989 button = gtk_button_new_with_mnemonic ("_Props");
3990 gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, FALSE, 0);
3991 g_signal_connect (button, "clicked",
3992 G_CALLBACK (props_clicked),
3995 cb = GTK_COMBO_BOX_TEXT (gtk_combo_box_text_new_with_entry ());
3997 gtk_combo_box_text_append_text (cb, "item0");
3998 gtk_combo_box_text_append_text (cb, "item0");
3999 gtk_combo_box_text_append_text (cb, "item1 item1");
4000 gtk_combo_box_text_append_text (cb, "item2 item2 item2");
4001 gtk_combo_box_text_append_text (cb, "item3 item3 item3 item3");
4002 gtk_combo_box_text_append_text (cb, "item4 item4 item4 item4 item4");
4003 gtk_combo_box_text_append_text (cb, "item5 item5 item5 item5 item5 item5");
4004 gtk_combo_box_text_append_text (cb, "item6 item6 item6 item6 item6");
4005 gtk_combo_box_text_append_text (cb, "item7 item7 item7 item7");
4006 gtk_combo_box_text_append_text (cb, "item8 item8 item8");
4007 gtk_combo_box_text_append_text (cb, "item9 item9");
4009 cb_entry = gtk_bin_get_child (GTK_BIN (cb));
4010 gtk_entry_set_text (GTK_ENTRY (cb_entry), "hello world \n\n\n foo");
4011 gtk_editable_select_region (GTK_EDITABLE (cb_entry), 0, -1);
4012 gtk_box_pack_start (GTK_BOX (box2), GTK_WIDGET (cb), TRUE, TRUE, 0);
4014 sensitive_check = gtk_check_button_new_with_label("Sensitive");
4015 gtk_box_pack_start (GTK_BOX (box2), sensitive_check, FALSE, TRUE, 0);
4016 g_signal_connect (sensitive_check, "toggled",
4017 G_CALLBACK (entry_toggle_sensitive), entry);
4018 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (sensitive_check), TRUE);
4020 has_frame_check = gtk_check_button_new_with_label("Has Frame");
4021 gtk_box_pack_start (GTK_BOX (box2), has_frame_check, FALSE, TRUE, 0);
4022 g_signal_connect (has_frame_check, "toggled",
4023 G_CALLBACK (entry_toggle_frame), entry);
4024 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (has_frame_check), TRUE);
4026 progress_check = gtk_check_button_new_with_label("Show Progress");
4027 gtk_box_pack_start (GTK_BOX (box2), progress_check, FALSE, TRUE, 0);
4028 g_signal_connect (progress_check, "toggled",
4029 G_CALLBACK (entry_toggle_progress), entry);
4031 progress_check = gtk_check_button_new_with_label("Pulse Progress");
4032 gtk_box_pack_start (GTK_BOX (box2), progress_check, FALSE, TRUE, 0);
4033 g_signal_connect (progress_check, "toggled",
4034 G_CALLBACK (entry_toggle_pulse), entry);
4036 separator = gtk_hseparator_new ();
4037 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
4039 box2 = gtk_vbox_new (FALSE, 10);
4040 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
4041 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
4043 button = gtk_button_new_with_label ("close");
4044 g_signal_connect_swapped (button, "clicked",
4045 G_CALLBACK (gtk_widget_destroy),
4047 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
4048 gtk_widget_set_can_default (button, TRUE);
4049 gtk_widget_grab_default (button);
4052 if (!gtk_widget_get_visible (window))
4053 gtk_widget_show_all (window);
4055 gtk_widget_destroy (window);
4059 create_expander (GtkWidget *widget)
4062 GtkWidget *expander;
4064 static GtkWidget *window = NULL;
4068 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
4069 gtk_window_set_screen (GTK_WINDOW (window),
4070 gtk_widget_get_screen (widget));
4072 g_signal_connect (window, "destroy",
4073 G_CALLBACK (gtk_widget_destroyed),
4076 gtk_window_set_title (GTK_WINDOW (window), "expander");
4077 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
4079 box1 = gtk_vbox_new (FALSE, 0);
4080 gtk_container_add (GTK_CONTAINER (window), box1);
4082 expander = gtk_expander_new ("The Hidden");
4084 gtk_box_pack_start (GTK_BOX (box1), expander, TRUE, TRUE, 0);
4086 hidden = gtk_label_new ("Revealed!");
4088 gtk_container_add (GTK_CONTAINER (expander), hidden);
4091 if (!gtk_widget_get_visible (window))
4092 gtk_widget_show_all (window);
4094 gtk_widget_destroy (window);
4102 event_box_label_pressed (GtkWidget *widget,
4103 GdkEventButton *event,
4106 g_print ("clicked on event box\n");
4110 event_box_button_clicked (GtkWidget *widget,
4114 g_print ("pushed button\n");
4118 event_box_toggle_visible_window (GtkWidget *checkbutton,
4119 GtkEventBox *event_box)
4121 gtk_event_box_set_visible_window (event_box,
4122 GTK_TOGGLE_BUTTON(checkbutton)->active);
4126 event_box_toggle_above_child (GtkWidget *checkbutton,
4127 GtkEventBox *event_box)
4129 gtk_event_box_set_above_child (event_box,
4130 GTK_TOGGLE_BUTTON(checkbutton)->active);
4134 create_event_box (GtkWidget *widget)
4136 static GtkWidget *window = NULL;
4142 GtkWidget *separator;
4143 GtkWidget *event_box;
4145 GtkWidget *visible_window_check;
4146 GtkWidget *above_child_check;
4155 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
4156 gtk_window_set_screen (GTK_WINDOW (window),
4157 gtk_widget_get_screen (widget));
4159 g_signal_connect (window, "destroy",
4160 G_CALLBACK (gtk_widget_destroyed),
4163 gtk_window_set_title (GTK_WINDOW (window), "event box");
4164 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
4166 box1 = gtk_vbox_new (FALSE, 0);
4167 gtk_container_add (GTK_CONTAINER (window), box1);
4168 gtk_widget_modify_bg (window, GTK_STATE_NORMAL, &color);
4170 hbox = gtk_hbox_new (FALSE, 0);
4171 gtk_box_pack_start (GTK_BOX (box1), hbox, TRUE, FALSE, 0);
4173 event_box = gtk_event_box_new ();
4174 gtk_box_pack_start (GTK_BOX (hbox), event_box, TRUE, FALSE, 0);
4176 vbox = gtk_vbox_new (FALSE, 0);
4177 gtk_container_add (GTK_CONTAINER (event_box), vbox);
4178 g_signal_connect (event_box, "button_press_event",
4179 G_CALLBACK (event_box_label_pressed),
4182 label = gtk_label_new ("Click on this label");
4183 gtk_box_pack_start (GTK_BOX (vbox), label, TRUE, FALSE, 0);
4185 button = gtk_button_new_with_label ("button in eventbox");
4186 gtk_box_pack_start (GTK_BOX (vbox), button, TRUE, FALSE, 0);
4187 g_signal_connect (button, "clicked",
4188 G_CALLBACK (event_box_button_clicked),
4192 visible_window_check = gtk_check_button_new_with_label("Visible Window");
4193 gtk_box_pack_start (GTK_BOX (box1), visible_window_check, FALSE, TRUE, 0);
4194 g_signal_connect (visible_window_check, "toggled",
4195 G_CALLBACK (event_box_toggle_visible_window), event_box);
4196 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (visible_window_check), FALSE);
4198 above_child_check = gtk_check_button_new_with_label("Above Child");
4199 gtk_box_pack_start (GTK_BOX (box1), above_child_check, FALSE, TRUE, 0);
4200 g_signal_connect (above_child_check, "toggled",
4201 G_CALLBACK (event_box_toggle_above_child), event_box);
4202 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (above_child_check), FALSE);
4204 separator = gtk_hseparator_new ();
4205 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
4207 box2 = gtk_vbox_new (FALSE, 10);
4208 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
4209 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
4211 button = gtk_button_new_with_label ("close");
4212 g_signal_connect_swapped (button, "clicked",
4213 G_CALLBACK (gtk_widget_destroy),
4215 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
4216 gtk_widget_set_can_default (button, TRUE);
4217 gtk_widget_grab_default (button);
4220 if (!gtk_widget_get_visible (window))
4221 gtk_widget_show_all (window);
4223 gtk_widget_destroy (window);
4231 #define SIZE_GROUP_INITIAL_SIZE 50
4234 size_group_hsize_changed (GtkSpinButton *spin_button,
4237 gtk_widget_set_size_request (gtk_bin_get_child (GTK_BIN (button)),
4238 gtk_spin_button_get_value_as_int (spin_button),
4243 size_group_vsize_changed (GtkSpinButton *spin_button,
4246 gtk_widget_set_size_request (gtk_bin_get_child (GTK_BIN (button)),
4248 gtk_spin_button_get_value_as_int (spin_button));
4252 create_size_group_window (GdkScreen *screen,
4253 GtkSizeGroup *master_size_group)
4255 GtkWidget *content_area;
4258 GtkWidget *main_button;
4260 GtkWidget *spin_button;
4262 GtkSizeGroup *hgroup1;
4263 GtkSizeGroup *hgroup2;
4264 GtkSizeGroup *vgroup1;
4265 GtkSizeGroup *vgroup2;
4267 window = gtk_dialog_new_with_buttons ("GtkSizeGroup",
4273 gtk_window_set_screen (GTK_WINDOW (window), screen);
4275 gtk_window_set_resizable (GTK_WINDOW (window), TRUE);
4277 g_signal_connect (window, "response",
4278 G_CALLBACK (gtk_widget_destroy),
4281 content_area = gtk_dialog_get_content_area (GTK_DIALOG (window));
4283 table = gtk_table_new (2, 2, FALSE);
4284 gtk_box_pack_start (GTK_BOX (content_area), table, TRUE, TRUE, 0);
4286 gtk_table_set_row_spacings (GTK_TABLE (table), 5);
4287 gtk_table_set_col_spacings (GTK_TABLE (table), 5);
4288 gtk_container_set_border_width (GTK_CONTAINER (table), 5);
4289 gtk_widget_set_size_request (table, 250, 250);
4291 hgroup1 = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
4292 hgroup2 = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
4293 vgroup1 = gtk_size_group_new (GTK_SIZE_GROUP_VERTICAL);
4294 vgroup2 = gtk_size_group_new (GTK_SIZE_GROUP_VERTICAL);
4296 main_button = gtk_button_new_with_label ("X");
4298 gtk_table_attach (GTK_TABLE (table), main_button,
4300 GTK_EXPAND, GTK_EXPAND,
4302 gtk_size_group_add_widget (master_size_group, main_button);
4303 gtk_size_group_add_widget (hgroup1, main_button);
4304 gtk_size_group_add_widget (vgroup1, main_button);
4305 gtk_widget_set_size_request (gtk_bin_get_child (GTK_BIN (main_button)),
4306 SIZE_GROUP_INITIAL_SIZE,
4307 SIZE_GROUP_INITIAL_SIZE);
4309 button = gtk_button_new ();
4310 gtk_table_attach (GTK_TABLE (table), button,
4312 GTK_EXPAND, GTK_EXPAND,
4314 gtk_size_group_add_widget (vgroup1, button);
4315 gtk_size_group_add_widget (vgroup2, button);
4317 button = gtk_button_new ();
4318 gtk_table_attach (GTK_TABLE (table), button,
4320 GTK_EXPAND, GTK_EXPAND,
4322 gtk_size_group_add_widget (hgroup1, button);
4323 gtk_size_group_add_widget (hgroup2, button);
4325 button = gtk_button_new ();
4326 gtk_table_attach (GTK_TABLE (table), button,
4328 GTK_EXPAND, GTK_EXPAND,
4330 gtk_size_group_add_widget (hgroup2, button);
4331 gtk_size_group_add_widget (vgroup2, button);
4333 g_object_unref (hgroup1);
4334 g_object_unref (hgroup2);
4335 g_object_unref (vgroup1);
4336 g_object_unref (vgroup2);
4338 hbox = gtk_hbox_new (FALSE, 5);
4339 gtk_box_pack_start (GTK_BOX (content_area), hbox, FALSE, FALSE, 0);
4341 spin_button = gtk_spin_button_new_with_range (1, 100, 1);
4342 gtk_spin_button_set_value (GTK_SPIN_BUTTON (spin_button), SIZE_GROUP_INITIAL_SIZE);
4343 gtk_box_pack_start (GTK_BOX (hbox), spin_button, TRUE, TRUE, 0);
4344 g_signal_connect (spin_button, "value_changed",
4345 G_CALLBACK (size_group_hsize_changed), main_button);
4347 spin_button = gtk_spin_button_new_with_range (1, 100, 1);
4348 gtk_spin_button_set_value (GTK_SPIN_BUTTON (spin_button), SIZE_GROUP_INITIAL_SIZE);
4349 gtk_box_pack_start (GTK_BOX (hbox), spin_button, TRUE, TRUE, 0);
4350 g_signal_connect (spin_button, "value_changed",
4351 G_CALLBACK (size_group_vsize_changed), main_button);
4357 create_size_groups (GtkWidget *widget)
4359 static GtkWidget *window1 = NULL;
4360 static GtkWidget *window2 = NULL;
4361 static GtkSizeGroup *master_size_group;
4363 if (!master_size_group)
4364 master_size_group = gtk_size_group_new (GTK_SIZE_GROUP_BOTH);
4368 window1 = create_size_group_window (gtk_widget_get_screen (widget),
4371 g_signal_connect (window1, "destroy",
4372 G_CALLBACK (gtk_widget_destroyed),
4378 window2 = create_size_group_window (gtk_widget_get_screen (widget),
4381 g_signal_connect (window2, "destroy",
4382 G_CALLBACK (gtk_widget_destroyed),
4386 if (gtk_widget_get_visible (window1) && gtk_widget_get_visible (window2))
4388 gtk_widget_destroy (window1);
4389 gtk_widget_destroy (window2);
4393 if (!gtk_widget_get_visible (window1))
4394 gtk_widget_show_all (window1);
4395 if (!gtk_widget_get_visible (window2))
4396 gtk_widget_show_all (window2);
4404 static GtkWidget *spinner1;
4407 toggle_snap (GtkWidget *widget, GtkSpinButton *spin)
4409 gtk_spin_button_set_snap_to_ticks (spin, GTK_TOGGLE_BUTTON (widget)->active);
4413 toggle_numeric (GtkWidget *widget, GtkSpinButton *spin)
4415 gtk_spin_button_set_numeric (spin, GTK_TOGGLE_BUTTON (widget)->active);
4419 change_digits (GtkWidget *widget, GtkSpinButton *spin)
4421 gtk_spin_button_set_digits (GTK_SPIN_BUTTON (spinner1),
4422 gtk_spin_button_get_value_as_int (spin));
4426 get_value (GtkWidget *widget, gpointer data)
4430 GtkSpinButton *spin;
4432 spin = GTK_SPIN_BUTTON (spinner1);
4433 label = GTK_LABEL (g_object_get_data (G_OBJECT (widget), "user_data"));
4434 if (GPOINTER_TO_INT (data) == 1)
4435 sprintf (buf, "%d", gtk_spin_button_get_value_as_int (spin));
4437 sprintf (buf, "%0.*f",
4438 gtk_spin_button_get_digits (spin),
4439 gtk_spin_button_get_value (spin));
4441 gtk_label_set_text (label, buf);
4445 get_spin_value (GtkWidget *widget, gpointer data)
4449 GtkSpinButton *spin;
4451 spin = GTK_SPIN_BUTTON (widget);
4452 label = GTK_LABEL (data);
4454 buffer = g_strdup_printf ("%0.*f",
4455 gtk_spin_button_get_digits (spin),
4456 gtk_spin_button_get_value (spin));
4457 gtk_label_set_text (label, buffer);
4463 spin_button_time_output_func (GtkSpinButton *spin_button)
4465 GtkAdjustment *adjustment;
4466 static gchar buf[6];
4470 adjustment = gtk_spin_button_get_adjustment (spin_button);
4471 hours = gtk_adjustment_get_value (adjustment) / 60.0;
4472 minutes = (fabs(floor (hours) - hours) < 1e-5) ? 0.0 : 30;
4473 sprintf (buf, "%02.0f:%02.0f", floor (hours), minutes);
4474 if (strcmp (buf, gtk_entry_get_text (GTK_ENTRY (spin_button))))
4475 gtk_entry_set_text (GTK_ENTRY (spin_button), buf);
4480 spin_button_month_input_func (GtkSpinButton *spin_button,
4484 static gchar *month[12] = { "January", "February", "March", "April",
4485 "May", "June", "July", "August",
4486 "September", "October", "November", "December" };
4488 gboolean found = FALSE;
4490 for (i = 1; i <= 12; i++)
4492 tmp1 = g_ascii_strup (month[i - 1], -1);
4493 tmp2 = g_ascii_strup (gtk_entry_get_text (GTK_ENTRY (spin_button)), -1);
4494 if (strstr (tmp1, tmp2) == tmp1)
4504 return GTK_INPUT_ERROR;
4506 *new_val = (gdouble) i;
4511 spin_button_month_output_func (GtkSpinButton *spin_button)
4513 GtkAdjustment *adjustment;
4516 static gchar *month[12] = { "January", "February", "March", "April",
4517 "May", "June", "July", "August", "September",
4518 "October", "November", "December" };
4520 adjustment = gtk_spin_button_get_adjustment (spin_button);
4521 value = gtk_adjustment_get_value (adjustment);
4522 for (i = 1; i <= 12; i++)
4523 if (fabs (value - (double)i) < 1e-5)
4525 if (strcmp (month[i-1], gtk_entry_get_text (GTK_ENTRY (spin_button))))
4526 gtk_entry_set_text (GTK_ENTRY (spin_button), month[i-1]);
4532 spin_button_hex_input_func (GtkSpinButton *spin_button,
4539 buf = gtk_entry_get_text (GTK_ENTRY (spin_button));
4540 res = strtol(buf, &err, 16);
4543 return GTK_INPUT_ERROR;
4549 spin_button_hex_output_func (GtkSpinButton *spin_button)
4551 GtkAdjustment *adjustment;
4552 static gchar buf[7];
4555 adjustment = gtk_spin_button_get_adjustment (spin_button);
4556 val = (gint) gtk_adjustment_get_value (adjustment);
4557 if (fabs (val) < 1e-5)
4558 sprintf (buf, "0x00");
4560 sprintf (buf, "0x%.2X", val);
4561 if (strcmp (buf, gtk_entry_get_text (GTK_ENTRY (spin_button))))
4562 gtk_entry_set_text (GTK_ENTRY (spin_button), buf);
4567 create_spins (GtkWidget *widget)
4569 static GtkWidget *window = NULL;
4572 GtkWidget *main_vbox;
4575 GtkWidget *spinner2;
4579 GtkWidget *val_label;
4584 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
4585 gtk_window_set_screen (GTK_WINDOW (window),
4586 gtk_widget_get_screen (widget));
4588 g_signal_connect (window, "destroy",
4589 G_CALLBACK (gtk_widget_destroyed),
4592 gtk_window_set_title (GTK_WINDOW (window), "GtkSpinButton");
4594 main_vbox = gtk_vbox_new (FALSE, 5);
4595 gtk_container_set_border_width (GTK_CONTAINER (main_vbox), 10);
4596 gtk_container_add (GTK_CONTAINER (window), main_vbox);
4598 frame = gtk_frame_new ("Not accelerated");
4599 gtk_box_pack_start (GTK_BOX (main_vbox), frame, TRUE, TRUE, 0);
4601 vbox = gtk_vbox_new (FALSE, 0);
4602 gtk_container_set_border_width (GTK_CONTAINER (vbox), 5);
4603 gtk_container_add (GTK_CONTAINER (frame), vbox);
4605 /* Time, month, hex spinners */
4607 hbox = gtk_hbox_new (FALSE, 0);
4608 gtk_box_pack_start (GTK_BOX (vbox), hbox, TRUE, TRUE, 5);
4610 vbox2 = gtk_vbox_new (FALSE, 0);
4611 gtk_box_pack_start (GTK_BOX (hbox), vbox2, TRUE, TRUE, 5);
4613 label = gtk_label_new ("Time :");
4614 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
4615 gtk_box_pack_start (GTK_BOX (vbox2), label, FALSE, TRUE, 0);
4617 adj = gtk_adjustment_new (0, 0, 1410, 30, 60, 0);
4618 spinner = gtk_spin_button_new (adj, 0, 0);
4619 gtk_editable_set_editable (GTK_EDITABLE (spinner), FALSE);
4620 g_signal_connect (spinner,
4622 G_CALLBACK (spin_button_time_output_func),
4624 gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (spinner), TRUE);
4625 gtk_entry_set_width_chars (GTK_ENTRY (spinner), 5);
4626 gtk_box_pack_start (GTK_BOX (vbox2), spinner, FALSE, TRUE, 0);
4628 vbox2 = gtk_vbox_new (FALSE, 0);
4629 gtk_box_pack_start (GTK_BOX (hbox), vbox2, TRUE, TRUE, 5);
4631 label = gtk_label_new ("Month :");
4632 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
4633 gtk_box_pack_start (GTK_BOX (vbox2), label, FALSE, TRUE, 0);
4635 adj = gtk_adjustment_new (1.0, 1.0, 12.0, 1.0,
4637 spinner = gtk_spin_button_new (adj, 0, 0);
4638 gtk_spin_button_set_update_policy (GTK_SPIN_BUTTON (spinner),
4639 GTK_UPDATE_IF_VALID);
4640 g_signal_connect (spinner,
4642 G_CALLBACK (spin_button_month_input_func),
4644 g_signal_connect (spinner,
4646 G_CALLBACK (spin_button_month_output_func),
4648 gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (spinner), TRUE);
4649 gtk_entry_set_width_chars (GTK_ENTRY (spinner), 9);
4650 gtk_box_pack_start (GTK_BOX (vbox2), spinner, FALSE, TRUE, 0);
4652 vbox2 = gtk_vbox_new (FALSE, 0);
4653 gtk_box_pack_start (GTK_BOX (hbox), vbox2, TRUE, TRUE, 5);
4655 label = gtk_label_new ("Hex :");
4656 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
4657 gtk_box_pack_start (GTK_BOX (vbox2), label, FALSE, TRUE, 0);
4659 adj = gtk_adjustment_new (0, 0, 255, 1, 16, 0);
4660 spinner = gtk_spin_button_new (adj, 0, 0);
4661 gtk_editable_set_editable (GTK_EDITABLE (spinner), TRUE);
4662 g_signal_connect (spinner,
4664 G_CALLBACK (spin_button_hex_input_func),
4666 g_signal_connect (spinner,
4668 G_CALLBACK (spin_button_hex_output_func),
4670 gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (spinner), TRUE);
4671 gtk_entry_set_width_chars (GTK_ENTRY (spinner), 4);
4672 gtk_box_pack_start (GTK_BOX (vbox2), spinner, FALSE, TRUE, 0);
4674 frame = gtk_frame_new ("Accelerated");
4675 gtk_box_pack_start (GTK_BOX (main_vbox), frame, TRUE, TRUE, 0);
4677 vbox = gtk_vbox_new (FALSE, 0);
4678 gtk_container_set_border_width (GTK_CONTAINER (vbox), 5);
4679 gtk_container_add (GTK_CONTAINER (frame), vbox);
4681 hbox = gtk_hbox_new (FALSE, 0);
4682 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 5);
4684 vbox2 = gtk_vbox_new (FALSE, 0);
4685 gtk_box_pack_start (GTK_BOX (hbox), vbox2, FALSE, FALSE, 5);
4687 label = gtk_label_new ("Value :");
4688 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
4689 gtk_box_pack_start (GTK_BOX (vbox2), label, FALSE, TRUE, 0);
4691 adj = gtk_adjustment_new (0.0, -10000.0, 10000.0,
4693 spinner1 = gtk_spin_button_new (adj, 1.0, 2);
4694 gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (spinner1), TRUE);
4695 gtk_box_pack_start (GTK_BOX (vbox2), spinner1, FALSE, TRUE, 0);
4697 vbox2 = gtk_vbox_new (FALSE, 0);
4698 gtk_box_pack_start (GTK_BOX (hbox), vbox2, FALSE, FALSE, 5);
4700 label = gtk_label_new ("Digits :");
4701 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
4702 gtk_box_pack_start (GTK_BOX (vbox2), label, FALSE, TRUE, 0);
4704 adj = gtk_adjustment_new (2, 1, 15, 1, 1, 0);
4705 spinner2 = gtk_spin_button_new (adj, 0.0, 0);
4706 g_signal_connect (adj, "value_changed",
4707 G_CALLBACK (change_digits),
4709 gtk_box_pack_start (GTK_BOX (vbox2), spinner2, FALSE, TRUE, 0);
4711 hbox = gtk_hbox_new (FALSE, 0);
4712 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 5);
4714 button = gtk_check_button_new_with_label ("Snap to 0.5-ticks");
4715 g_signal_connect (button, "clicked",
4716 G_CALLBACK (toggle_snap),
4718 gtk_box_pack_start (GTK_BOX (vbox), button, TRUE, TRUE, 0);
4719 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE);
4721 button = gtk_check_button_new_with_label ("Numeric only input mode");
4722 g_signal_connect (button, "clicked",
4723 G_CALLBACK (toggle_numeric),
4725 gtk_box_pack_start (GTK_BOX (vbox), button, TRUE, TRUE, 0);
4726 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE);
4728 val_label = gtk_label_new ("");
4730 hbox = gtk_hbox_new (FALSE, 0);
4731 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 5);
4733 button = gtk_button_new_with_label ("Value as Int");
4734 g_object_set_data (G_OBJECT (button), "user_data", val_label);
4735 g_signal_connect (button, "clicked",
4736 G_CALLBACK (get_value),
4737 GINT_TO_POINTER (1));
4738 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
4740 button = gtk_button_new_with_label ("Value as Float");
4741 g_object_set_data (G_OBJECT (button), "user_data", val_label);
4742 g_signal_connect (button, "clicked",
4743 G_CALLBACK (get_value),
4744 GINT_TO_POINTER (2));
4745 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
4747 gtk_box_pack_start (GTK_BOX (vbox), val_label, TRUE, TRUE, 0);
4748 gtk_label_set_text (GTK_LABEL (val_label), "0");
4750 frame = gtk_frame_new ("Using Convenience Constructor");
4751 gtk_box_pack_start (GTK_BOX (main_vbox), frame, TRUE, TRUE, 0);
4753 hbox = gtk_hbox_new (FALSE, 0);
4754 gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
4755 gtk_container_add (GTK_CONTAINER (frame), hbox);
4757 val_label = gtk_label_new ("0.0");
4759 spinner = gtk_spin_button_new_with_range (0.0, 10.0, 0.009);
4760 gtk_spin_button_set_value (GTK_SPIN_BUTTON (spinner), 0.0);
4761 g_signal_connect (spinner, "value_changed",
4762 G_CALLBACK (get_spin_value), val_label);
4763 gtk_box_pack_start (GTK_BOX (hbox), spinner, TRUE, TRUE, 5);
4764 gtk_box_pack_start (GTK_BOX (hbox), val_label, TRUE, TRUE, 5);
4766 hbox = gtk_hbox_new (FALSE, 0);
4767 gtk_box_pack_start (GTK_BOX (main_vbox), hbox, FALSE, TRUE, 0);
4769 button = gtk_button_new_with_label ("Close");
4770 g_signal_connect_swapped (button, "clicked",
4771 G_CALLBACK (gtk_widget_destroy),
4773 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
4776 if (!gtk_widget_get_visible (window))
4777 gtk_widget_show_all (window);
4779 gtk_widget_destroy (window);
4788 cursor_draw (GtkWidget *widget,
4794 width = gtk_widget_get_allocated_width (widget);
4795 height = gtk_widget_get_allocated_height (widget);
4797 cairo_set_source_rgb (cr, 1, 1, 1);
4798 cairo_rectangle (cr, 0, 0, width, height / 2);
4801 cairo_set_source_rgb (cr, 0, 0, 0);
4802 cairo_rectangle (cr, 0, height / 2, width, height / 2);
4805 gdk_cairo_set_source_color (cr, >k_widget_get_style (widget)->bg[GTK_STATE_NORMAL]);
4806 cairo_rectangle (cr, width / 3, height / 3, width / 3, height / 3);
4813 set_cursor (GtkWidget *spinner,
4822 c = CLAMP (gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (spinner)), 0, 152);
4825 label = g_object_get_data (G_OBJECT (spinner), "user_data");
4827 class = g_type_class_ref (GDK_TYPE_CURSOR_TYPE);
4828 vals = class->values;
4830 while (vals && vals->value != c)
4833 gtk_label_set_text (GTK_LABEL (label), vals->value_nick);
4835 gtk_label_set_text (GTK_LABEL (label), "<unknown>");
4837 g_type_class_unref (class);
4839 cursor = gdk_cursor_new_for_display (gtk_widget_get_display (widget), c);
4840 gdk_window_set_cursor (gtk_widget_get_window (widget),
4842 gdk_cursor_unref (cursor);
4846 cursor_event (GtkWidget *widget,
4848 GtkSpinButton *spinner)
4850 if ((event->type == GDK_BUTTON_PRESS) &&
4851 ((event->button.button == 1) ||
4852 (event->button.button == 3)))
4854 gtk_spin_button_spin (spinner, event->button.button == 1 ?
4855 GTK_SPIN_STEP_FORWARD : GTK_SPIN_STEP_BACKWARD, 0);
4862 #ifdef GDK_WINDOWING_X11
4863 #include "x11/gdkx.h"
4866 change_cursor_theme (GtkWidget *widget,
4873 children = gtk_container_get_children (GTK_CONTAINER (data));
4875 theme = gtk_entry_get_text (GTK_ENTRY (children->next->data));
4876 size = (gint) gtk_spin_button_get_value (GTK_SPIN_BUTTON (children->next->next->data));
4878 g_list_free (children);
4880 gdk_x11_display_set_cursor_theme (gtk_widget_get_display (widget),
4887 create_cursors (GtkWidget *widget)
4889 static GtkWidget *window = NULL;
4892 GtkWidget *main_vbox;
4905 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
4906 gtk_window_set_screen (GTK_WINDOW (window),
4907 gtk_widget_get_screen (widget));
4909 g_signal_connect (window, "destroy",
4910 G_CALLBACK (gtk_widget_destroyed),
4913 gtk_window_set_title (GTK_WINDOW (window), "Cursors");
4915 main_vbox = gtk_vbox_new (FALSE, 5);
4916 gtk_container_set_border_width (GTK_CONTAINER (main_vbox), 0);
4917 gtk_container_add (GTK_CONTAINER (window), main_vbox);
4920 g_object_new (gtk_vbox_get_type (),
4921 "GtkBox::homogeneous", FALSE,
4922 "GtkBox::spacing", 5,
4923 "GtkContainer::border_width", 10,
4924 "GtkWidget::parent", main_vbox,
4925 "GtkWidget::visible", TRUE,
4928 #ifdef GDK_WINDOWING_X11
4929 hbox = gtk_hbox_new (FALSE, 0);
4930 gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
4931 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0);
4933 label = gtk_label_new ("Cursor Theme : ");
4934 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
4935 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
4937 entry = gtk_entry_new ();
4938 gtk_entry_set_text (GTK_ENTRY (entry), "default");
4939 gtk_box_pack_start (GTK_BOX (hbox), entry, FALSE, TRUE, 0);
4941 size = gtk_spin_button_new_with_range (1.0, 64.0, 1.0);
4942 gtk_spin_button_set_value (GTK_SPIN_BUTTON (size), 24.0);
4943 gtk_box_pack_start (GTK_BOX (hbox), size, TRUE, TRUE, 0);
4945 g_signal_connect (entry, "changed",
4946 G_CALLBACK (change_cursor_theme), hbox);
4947 g_signal_connect (size, "changed",
4948 G_CALLBACK (change_cursor_theme), hbox);
4951 hbox = gtk_hbox_new (FALSE, 0);
4952 gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
4953 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0);
4955 label = gtk_label_new ("Cursor Value : ");
4956 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
4957 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
4959 adj = gtk_adjustment_new (0,
4963 spinner = gtk_spin_button_new (adj, 0, 0);
4964 gtk_box_pack_start (GTK_BOX (hbox), spinner, TRUE, TRUE, 0);
4967 g_object_new (gtk_frame_get_type (),
4968 "GtkFrame::label_xalign", 0.5,
4969 "GtkFrame::label", "Cursor Area",
4970 "GtkContainer::border_width", 10,
4971 "GtkWidget::parent", vbox,
4972 "GtkWidget::visible", TRUE,
4975 darea = gtk_drawing_area_new ();
4976 gtk_widget_set_size_request (darea, 80, 80);
4977 gtk_container_add (GTK_CONTAINER (frame), darea);
4978 g_signal_connect (darea,
4980 G_CALLBACK (cursor_draw),
4982 gtk_widget_set_events (darea, GDK_EXPOSURE_MASK | GDK_BUTTON_PRESS_MASK);
4983 g_signal_connect (darea,
4984 "button_press_event",
4985 G_CALLBACK (cursor_event),
4987 gtk_widget_show (darea);
4989 g_signal_connect (spinner, "changed",
4990 G_CALLBACK (set_cursor),
4993 label = g_object_new (GTK_TYPE_LABEL,
4998 gtk_container_child_set (GTK_CONTAINER (vbox), label,
5001 g_object_set_data (G_OBJECT (spinner), "user_data", label);
5004 g_object_new (gtk_hseparator_get_type (),
5005 "GtkWidget::visible", TRUE,
5007 gtk_box_pack_start (GTK_BOX (main_vbox), any, FALSE, TRUE, 0);
5009 hbox = gtk_hbox_new (FALSE, 0);
5010 gtk_container_set_border_width (GTK_CONTAINER (hbox), 10);
5011 gtk_box_pack_start (GTK_BOX (main_vbox), hbox, FALSE, TRUE, 0);
5013 button = gtk_button_new_with_label ("Close");
5014 g_signal_connect_swapped (button, "clicked",
5015 G_CALLBACK (gtk_widget_destroy),
5017 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
5019 gtk_widget_show_all (window);
5021 set_cursor (spinner, darea);
5024 gtk_widget_destroy (window);
5032 color_selection_ok (GtkWidget *w,
5033 GtkColorSelectionDialog *cs)
5035 GtkWidget *colorsel;
5038 colorsel = gtk_color_selection_dialog_get_color_selection (cs);
5040 gtk_color_selection_get_current_color (GTK_COLOR_SELECTION (colorsel), &color);
5041 gtk_color_selection_set_current_color (GTK_COLOR_SELECTION (colorsel), &color);
5045 color_selection_changed (GtkWidget *w,
5046 GtkColorSelectionDialog *cs)
5048 GtkWidget *colorsel;
5051 colorsel = gtk_color_selection_dialog_get_color_selection (cs);
5052 gtk_color_selection_get_current_color (GTK_COLOR_SELECTION (colorsel), &color);
5053 gtk_color_selection_set_current_color (GTK_COLOR_SELECTION (colorsel), &color);
5058 opacity_toggled_cb (GtkWidget *w,
5059 GtkColorSelectionDialog *cs)
5061 GtkColorSelection *colorsel;
5063 colorsel = GTK_COLOR_SELECTION (cs->colorsel);
5064 gtk_color_selection_set_has_opacity_control (colorsel,
5065 gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (w)));
5069 palette_toggled_cb (GtkWidget *w,
5070 GtkColorSelectionDialog *cs)
5072 GtkColorSelection *colorsel;
5074 colorsel = GTK_COLOR_SELECTION (cs->colorsel);
5075 gtk_color_selection_set_has_palette (colorsel,
5076 gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (w)));
5081 create_color_selection (GtkWidget *widget)
5083 static GtkWidget *window = NULL;
5092 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
5093 gtk_window_set_screen (GTK_WINDOW (window),
5094 gtk_widget_get_screen (widget));
5096 g_signal_connect (window, "destroy",
5097 G_CALLBACK (gtk_widget_destroyed),
5100 gtk_window_set_title (GTK_WINDOW (window), "GtkColorButton");
5101 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
5103 hbox = gtk_hbox_new (FALSE, 8);
5104 gtk_container_set_border_width (GTK_CONTAINER (hbox), 8);
5105 gtk_container_add (GTK_CONTAINER (window), hbox);
5107 label = gtk_label_new ("Pick a color");
5108 gtk_container_add (GTK_CONTAINER (hbox), label);
5110 picker = gtk_color_button_new ();
5111 gtk_color_button_set_use_alpha (GTK_COLOR_BUTTON (picker), TRUE);
5112 gtk_container_add (GTK_CONTAINER (hbox), picker);
5114 button = gtk_button_new_with_mnemonic ("_Props");
5115 gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, FALSE, 0);
5116 g_signal_connect (button, "clicked",
5117 G_CALLBACK (props_clicked),
5121 if (!gtk_widget_get_visible (window))
5122 gtk_widget_show_all (window);
5124 gtk_widget_destroy (window);
5128 flipping_toggled_cb (GtkWidget *widget, gpointer data)
5130 int state = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget));
5131 int new_direction = state ? GTK_TEXT_DIR_RTL : GTK_TEXT_DIR_LTR;
5133 gtk_widget_set_default_direction (new_direction);
5137 orientable_toggle_orientation (GtkOrientable *orientable)
5139 GtkOrientation orientation;
5141 orientation = gtk_orientable_get_orientation (orientable);
5142 gtk_orientable_set_orientation (orientable,
5143 orientation == GTK_ORIENTATION_HORIZONTAL ?
5144 GTK_ORIENTATION_VERTICAL :
5145 GTK_ORIENTATION_HORIZONTAL);
5147 if (GTK_IS_CONTAINER (orientable))
5152 children = gtk_container_get_children (GTK_CONTAINER (orientable));
5154 for (child = children; child; child = child->next)
5156 if (GTK_IS_ORIENTABLE (child->data))
5157 orientable_toggle_orientation (child->data);
5160 g_list_free (children);
5165 flipping_orientation_toggled_cb (GtkWidget *widget, gpointer data)
5167 GtkWidget *content_area;
5168 GtkWidget *toplevel;
5170 toplevel = gtk_widget_get_toplevel (widget);
5171 content_area = gtk_dialog_get_content_area (GTK_DIALOG (toplevel));
5172 orientable_toggle_orientation (GTK_ORIENTABLE (content_area));
5176 set_direction_recurse (GtkWidget *widget,
5179 GtkTextDirection *dir = data;
5181 gtk_widget_set_direction (widget, *dir);
5182 if (GTK_IS_CONTAINER (widget))
5183 gtk_container_foreach (GTK_CONTAINER (widget),
5184 set_direction_recurse,
5189 create_forward_back (const char *title,
5190 GtkTextDirection text_dir)
5192 GtkWidget *frame = gtk_frame_new (title);
5193 GtkWidget *bbox = gtk_hbutton_box_new ();
5194 GtkWidget *back_button = gtk_button_new_from_stock (GTK_STOCK_GO_BACK);
5195 GtkWidget *forward_button = gtk_button_new_from_stock (GTK_STOCK_GO_FORWARD);
5197 gtk_container_set_border_width (GTK_CONTAINER (bbox), 5);
5199 gtk_container_add (GTK_CONTAINER (frame), bbox);
5200 gtk_container_add (GTK_CONTAINER (bbox), back_button);
5201 gtk_container_add (GTK_CONTAINER (bbox), forward_button);
5203 set_direction_recurse (frame, &text_dir);
5209 create_flipping (GtkWidget *widget)
5211 static GtkWidget *window = NULL;
5212 GtkWidget *check_button, *button;
5213 GtkWidget *action_area, *content_area;
5217 window = gtk_dialog_new ();
5219 gtk_window_set_screen (GTK_WINDOW (window),
5220 gtk_widget_get_screen (widget));
5222 g_signal_connect (window, "destroy",
5223 G_CALLBACK (gtk_widget_destroyed),
5226 content_area = gtk_dialog_get_content_area (GTK_DIALOG (window));
5227 action_area = gtk_dialog_get_action_area (GTK_DIALOG (window));
5229 gtk_window_set_title (GTK_WINDOW (window), "Bidirectional Flipping");
5231 check_button = gtk_check_button_new_with_label ("Right-to-left global direction");
5232 gtk_container_set_border_width (GTK_CONTAINER (check_button), 10);
5233 gtk_box_pack_start (GTK_BOX (content_area), check_button, TRUE, TRUE, 0);
5235 if (gtk_widget_get_default_direction () == GTK_TEXT_DIR_RTL)
5236 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check_button), TRUE);
5238 g_signal_connect (check_button, "toggled",
5239 G_CALLBACK (flipping_toggled_cb), NULL);
5241 check_button = gtk_check_button_new_with_label ("Toggle orientation of all boxes");
5242 gtk_container_set_border_width (GTK_CONTAINER (check_button), 10);
5243 gtk_box_pack_start (GTK_BOX (content_area), check_button, TRUE, TRUE, 0);
5245 g_signal_connect (check_button, "toggled",
5246 G_CALLBACK (flipping_orientation_toggled_cb), NULL);
5248 gtk_box_pack_start (GTK_BOX (content_area),
5249 create_forward_back ("Default", GTK_TEXT_DIR_NONE),
5252 gtk_box_pack_start (GTK_BOX (content_area),
5253 create_forward_back ("Left-to-Right", GTK_TEXT_DIR_LTR),
5256 gtk_box_pack_start (GTK_BOX (content_area),
5257 create_forward_back ("Right-to-Left", GTK_TEXT_DIR_RTL),
5260 button = gtk_button_new_with_label ("Close");
5261 g_signal_connect_swapped (button, "clicked",
5262 G_CALLBACK (gtk_widget_destroy), window);
5263 gtk_box_pack_start (GTK_BOX (action_area), button, TRUE, TRUE, 0);
5266 if (!gtk_widget_get_visible (window))
5267 gtk_widget_show_all (window);
5269 gtk_widget_destroy (window);
5277 make_focus_table (GList **list)
5282 table = gtk_table_new (5, 5, FALSE);
5295 widget = gtk_entry_new ();
5297 widget = gtk_button_new_with_label ("Foo");
5299 *list = g_list_prepend (*list, widget);
5301 gtk_table_attach (GTK_TABLE (table),
5305 GTK_EXPAND | GTK_FILL,
5306 GTK_EXPAND | GTK_FILL,
5315 *list = g_list_reverse (*list);
5321 create_focus (GtkWidget *widget)
5323 static GtkWidget *window = NULL;
5327 GtkWidget *content_area;
5332 window = gtk_dialog_new_with_buttons ("Keyboard focus navigation",
5338 gtk_window_set_screen (GTK_WINDOW (window),
5339 gtk_widget_get_screen (widget));
5341 g_signal_connect (window, "destroy",
5342 G_CALLBACK (gtk_widget_destroyed),
5345 g_signal_connect (window, "response",
5346 G_CALLBACK (gtk_widget_destroy),
5349 content_area = gtk_dialog_get_content_area (GTK_DIALOG (window));
5351 gtk_window_set_title (GTK_WINDOW (window), "Keyboard Focus Navigation");
5353 frame = gtk_frame_new ("Weird tab focus chain");
5355 gtk_box_pack_start (GTK_BOX (content_area), frame, TRUE, TRUE, 0);
5357 table = make_focus_table (&list);
5359 gtk_container_add (GTK_CONTAINER (frame), table);
5361 gtk_container_set_focus_chain (GTK_CONTAINER (table),
5366 frame = gtk_frame_new ("Default tab focus chain");
5368 gtk_box_pack_start (GTK_BOX (content_area), frame, TRUE, TRUE, 0);
5371 table = make_focus_table (&list);
5375 gtk_container_add (GTK_CONTAINER (frame), table);
5378 if (!gtk_widget_get_visible (window))
5379 gtk_widget_show_all (window);
5381 gtk_widget_destroy (window);
5389 font_selection_ok (GtkWidget *w,
5390 GtkFontSelectionDialog *fs)
5392 gchar *s = gtk_font_selection_dialog_get_font_name (fs);
5394 g_print ("%s\n", s);
5396 gtk_widget_destroy (GTK_WIDGET (fs));
5400 create_font_selection (GtkWidget *widget)
5402 static GtkWidget *window = NULL;
5410 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
5411 gtk_window_set_screen (GTK_WINDOW (window),
5412 gtk_widget_get_screen (widget));
5414 g_signal_connect (window, "destroy",
5415 G_CALLBACK (gtk_widget_destroyed),
5418 gtk_window_set_title (GTK_WINDOW (window), "GtkFontButton");
5419 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
5421 hbox = gtk_hbox_new (FALSE, 8);
5422 gtk_container_set_border_width (GTK_CONTAINER (hbox), 8);
5423 gtk_container_add (GTK_CONTAINER (window), hbox);
5425 label = gtk_label_new ("Pick a font");
5426 gtk_container_add (GTK_CONTAINER (hbox), label);
5428 picker = gtk_font_button_new ();
5429 gtk_font_button_set_use_font (GTK_FONT_BUTTON (picker), TRUE);
5430 gtk_container_add (GTK_CONTAINER (hbox), picker);
5433 if (!gtk_widget_get_visible (window))
5434 gtk_widget_show_all (window);
5436 gtk_widget_destroy (window);
5443 static GtkWidget *dialog_window = NULL;
5446 label_toggle (GtkWidget *widget,
5451 *label = gtk_label_new ("Dialog Test");
5452 g_signal_connect (*label,
5454 G_CALLBACK (gtk_widget_destroyed),
5456 gtk_misc_set_padding (GTK_MISC (*label), 10, 10);
5457 gtk_box_pack_start (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (dialog_window))),
5458 *label, TRUE, TRUE, 0);
5459 gtk_widget_show (*label);
5462 gtk_widget_destroy (*label);
5466 create_dialog (GtkWidget *widget)
5468 static GtkWidget *label;
5469 GtkWidget *action_area;
5474 /* This is a terrible example; it's much simpler to create
5475 * dialogs than this. Don't use testgtk for example code,
5479 dialog_window = gtk_dialog_new ();
5480 gtk_window_set_screen (GTK_WINDOW (dialog_window),
5481 gtk_widget_get_screen (widget));
5483 g_signal_connect (dialog_window, "destroy",
5484 G_CALLBACK (gtk_widget_destroyed),
5487 action_area = gtk_dialog_get_action_area (GTK_DIALOG (dialog_window));
5489 gtk_window_set_title (GTK_WINDOW (dialog_window), "GtkDialog");
5490 gtk_container_set_border_width (GTK_CONTAINER (dialog_window), 0);
5492 button = gtk_button_new_with_label ("OK");
5493 gtk_widget_set_can_default (button, TRUE);
5494 gtk_box_pack_start (GTK_BOX (action_area), button, TRUE, TRUE, 0);
5495 gtk_widget_grab_default (button);
5496 gtk_widget_show (button);
5498 button = gtk_button_new_with_label ("Toggle");
5499 g_signal_connect (button, "clicked",
5500 G_CALLBACK (label_toggle),
5502 gtk_widget_set_can_default (button, TRUE);
5503 gtk_box_pack_start (GTK_BOX (action_area), button, TRUE, TRUE, 0);
5504 gtk_widget_show (button);
5509 if (!gtk_widget_get_visible (dialog_window))
5510 gtk_widget_show (dialog_window);
5512 gtk_widget_destroy (dialog_window);
5515 /* Display & Screen test
5522 GtkWidget *radio_dpy;
5523 GtkWidget *toplevel;
5524 GtkWidget *dialog_window;
5525 } ScreenDisplaySelection;
5528 screen_display_check (GtkWidget *widget, ScreenDisplaySelection *data)
5530 const gchar *display_name;
5531 GdkDisplay *display = gtk_widget_get_display (widget);
5533 GdkScreen *new_screen = NULL;
5534 GdkScreen *current_screen = gtk_widget_get_screen (widget);
5536 if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (data->radio_dpy)))
5538 display_name = gtk_entry_get_text (GTK_ENTRY (data->entry));
5539 display = gdk_display_open (display_name);
5543 dialog = gtk_message_dialog_new (GTK_WINDOW (gtk_widget_get_toplevel (widget)),
5544 GTK_DIALOG_DESTROY_WITH_PARENT,
5547 "The display :\n%s\ncannot be opened",
5549 gtk_window_set_screen (GTK_WINDOW (dialog), current_screen);
5550 gtk_widget_show (dialog);
5551 g_signal_connect (dialog, "response",
5552 G_CALLBACK (gtk_widget_destroy),
5557 GtkTreeModel *model = gtk_combo_box_get_model (GTK_COMBO_BOX (data->combo));
5560 gboolean found = FALSE;
5561 while (gtk_tree_model_iter_nth_child (model, &iter, NULL, i++))
5564 gtk_tree_model_get (model, &iter, 0, &name, -1);
5565 found = !g_ascii_strcasecmp (display_name, name);
5572 gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (data->combo), display_name);
5573 new_screen = gdk_display_get_default_screen (display);
5578 gint number_of_screens = gdk_display_get_n_screens (display);
5579 gint screen_num = gdk_screen_get_number (current_screen);
5580 if ((screen_num +1) < number_of_screens)
5581 new_screen = gdk_display_get_screen (display, screen_num + 1);
5583 new_screen = gdk_display_get_screen (display, 0);
5588 gtk_window_set_screen (GTK_WINDOW (data->toplevel), new_screen);
5589 gtk_widget_destroy (data->dialog_window);
5594 screen_display_destroy_diag (GtkWidget *widget, GtkWidget *data)
5596 gtk_widget_destroy (data);
5600 create_display_screen (GtkWidget *widget)
5602 GtkWidget *table, *frame, *window, *combo_dpy, *vbox;
5603 GtkWidget *radio_dpy, *radio_scr, *applyb, *cancelb;
5605 ScreenDisplaySelection *scr_dpy_data;
5606 GdkScreen *screen = gtk_widget_get_screen (widget);
5607 GdkDisplay *display = gdk_screen_get_display (screen);
5609 window = g_object_new (gtk_window_get_type (),
5612 "type", GTK_WINDOW_TOPLEVEL,
5614 "Screen or Display selection",
5615 "border_width", 10, NULL);
5616 g_signal_connect (window, "destroy",
5617 G_CALLBACK (gtk_widget_destroy), NULL);
5619 vbox = gtk_vbox_new (FALSE, 3);
5620 gtk_container_add (GTK_CONTAINER (window), vbox);
5622 frame = gtk_frame_new ("Select screen or display");
5623 gtk_container_add (GTK_CONTAINER (vbox), frame);
5625 table = gtk_table_new (2, 2, TRUE);
5626 gtk_table_set_row_spacings (GTK_TABLE (table), 3);
5627 gtk_table_set_col_spacings (GTK_TABLE (table), 3);
5629 gtk_container_add (GTK_CONTAINER (frame), table);
5631 radio_dpy = gtk_radio_button_new_with_label (NULL, "move to another X display");
5632 if (gdk_display_get_n_screens(display) > 1)
5633 radio_scr = gtk_radio_button_new_with_label
5634 (gtk_radio_button_get_group (GTK_RADIO_BUTTON (radio_dpy)), "move to next screen");
5637 radio_scr = gtk_radio_button_new_with_label
5638 (gtk_radio_button_get_group (GTK_RADIO_BUTTON (radio_dpy)),
5639 "only one screen on the current display");
5640 gtk_widget_set_sensitive (radio_scr, FALSE);
5642 combo_dpy = gtk_combo_box_text_new_with_entry ();
5643 gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (combo_dpy), "diabolo:0.0");
5644 gtk_entry_set_text (GTK_ENTRY (gtk_bin_get_child (GTK_BIN (combo_dpy))),
5645 "<hostname>:<X Server Num>.<Screen Num>");
5647 gtk_table_attach_defaults (GTK_TABLE (table), radio_dpy, 0, 1, 0, 1);
5648 gtk_table_attach_defaults (GTK_TABLE (table), radio_scr, 0, 1, 1, 2);
5649 gtk_table_attach_defaults (GTK_TABLE (table), combo_dpy, 1, 2, 0, 1);
5651 bbox = gtk_hbutton_box_new ();
5652 applyb = gtk_button_new_from_stock (GTK_STOCK_APPLY);
5653 cancelb = gtk_button_new_from_stock (GTK_STOCK_CANCEL);
5655 gtk_container_add (GTK_CONTAINER (vbox), bbox);
5657 gtk_container_add (GTK_CONTAINER (bbox), applyb);
5658 gtk_container_add (GTK_CONTAINER (bbox), cancelb);
5660 scr_dpy_data = g_new0 (ScreenDisplaySelection, 1);
5662 scr_dpy_data->entry = gtk_bin_get_child (GTK_BIN (combo_dpy));
5663 scr_dpy_data->radio_dpy = radio_dpy;
5664 scr_dpy_data->toplevel = gtk_widget_get_toplevel (widget);
5665 scr_dpy_data->dialog_window = window;
5667 g_signal_connect (cancelb, "clicked",
5668 G_CALLBACK (screen_display_destroy_diag), window);
5669 g_signal_connect (applyb, "clicked",
5670 G_CALLBACK (screen_display_check), scr_dpy_data);
5671 gtk_widget_show_all (window);
5676 static gboolean event_watcher_enter_id = 0;
5677 static gboolean event_watcher_leave_id = 0;
5680 event_watcher (GSignalInvocationHint *ihint,
5681 guint n_param_values,
5682 const GValue *param_values,
5685 g_print ("Watch: \"%s\" emitted for %s\n",
5686 g_signal_name (ihint->signal_id),
5687 G_OBJECT_TYPE_NAME (g_value_get_object (param_values + 0)));
5693 event_watcher_down (void)
5695 if (event_watcher_enter_id)
5699 signal_id = g_signal_lookup ("enter_notify_event", GTK_TYPE_WIDGET);
5700 g_signal_remove_emission_hook (signal_id, event_watcher_enter_id);
5701 event_watcher_enter_id = 0;
5702 signal_id = g_signal_lookup ("leave_notify_event", GTK_TYPE_WIDGET);
5703 g_signal_remove_emission_hook (signal_id, event_watcher_leave_id);
5704 event_watcher_leave_id = 0;
5709 event_watcher_toggle (void)
5711 if (event_watcher_enter_id)
5712 event_watcher_down ();
5717 signal_id = g_signal_lookup ("enter_notify_event", GTK_TYPE_WIDGET);
5718 event_watcher_enter_id = g_signal_add_emission_hook (signal_id, 0, event_watcher, NULL, NULL);
5719 signal_id = g_signal_lookup ("leave_notify_event", GTK_TYPE_WIDGET);
5720 event_watcher_leave_id = g_signal_add_emission_hook (signal_id, 0, event_watcher, NULL, NULL);
5725 create_event_watcher (GtkWidget *widget)
5727 GtkWidget *action_area, *content_area;
5732 dialog_window = gtk_dialog_new ();
5733 gtk_window_set_screen (GTK_WINDOW (dialog_window),
5734 gtk_widget_get_screen (widget));
5736 g_signal_connect (dialog_window, "destroy",
5737 G_CALLBACK (gtk_widget_destroyed),
5739 g_signal_connect (dialog_window, "destroy",
5740 G_CALLBACK (event_watcher_down),
5743 content_area = gtk_dialog_get_content_area (GTK_DIALOG (dialog_window));
5744 action_area = gtk_dialog_get_action_area (GTK_DIALOG (dialog_window));
5746 gtk_window_set_title (GTK_WINDOW (dialog_window), "Event Watcher");
5747 gtk_container_set_border_width (GTK_CONTAINER (dialog_window), 0);
5748 gtk_widget_set_size_request (dialog_window, 200, 110);
5750 button = gtk_toggle_button_new_with_label ("Activate Watch");
5751 g_signal_connect (button, "clicked",
5752 G_CALLBACK (event_watcher_toggle),
5754 gtk_container_set_border_width (GTK_CONTAINER (button), 10);
5755 gtk_box_pack_start (GTK_BOX (content_area), button, TRUE, TRUE, 0);
5756 gtk_widget_show (button);
5758 button = gtk_button_new_with_label ("Close");
5759 g_signal_connect_swapped (button, "clicked",
5760 G_CALLBACK (gtk_widget_destroy),
5762 gtk_widget_set_can_default (button, TRUE);
5763 gtk_box_pack_start (GTK_BOX (action_area), button, TRUE, TRUE, 0);
5764 gtk_widget_grab_default (button);
5765 gtk_widget_show (button);
5768 if (!gtk_widget_get_visible (dialog_window))
5769 gtk_widget_show (dialog_window);
5771 gtk_widget_destroy (dialog_window);
5779 reformat_value (GtkScale *scale,
5782 return g_strdup_printf ("-->%0.*g<--",
5783 gtk_scale_get_digits (scale), value);
5787 create_range_controls (GtkWidget *widget)
5789 static GtkWidget *window = NULL;
5793 GtkWidget *scrollbar;
5795 GtkWidget *separator;
5796 GtkAdjustment *adjustment;
5801 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
5803 gtk_window_set_screen (GTK_WINDOW (window),
5804 gtk_widget_get_screen (widget));
5806 g_signal_connect (window, "destroy",
5807 G_CALLBACK (gtk_widget_destroyed),
5810 gtk_window_set_title (GTK_WINDOW (window), "range controls");
5811 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
5814 box1 = gtk_vbox_new (FALSE, 0);
5815 gtk_container_add (GTK_CONTAINER (window), box1);
5816 gtk_widget_show (box1);
5819 box2 = gtk_vbox_new (FALSE, 10);
5820 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
5821 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
5822 gtk_widget_show (box2);
5825 adjustment = gtk_adjustment_new (0.0, 0.0, 101.0, 0.1, 1.0, 1.0);
5827 scale = gtk_hscale_new (GTK_ADJUSTMENT (adjustment));
5828 gtk_widget_set_size_request (GTK_WIDGET (scale), 150, -1);
5829 gtk_range_set_update_policy (GTK_RANGE (scale), GTK_UPDATE_DELAYED);
5830 gtk_scale_set_digits (GTK_SCALE (scale), 1);
5831 gtk_scale_set_draw_value (GTK_SCALE (scale), TRUE);
5832 gtk_box_pack_start (GTK_BOX (box2), scale, TRUE, TRUE, 0);
5833 gtk_widget_show (scale);
5835 scrollbar = gtk_hscrollbar_new (GTK_ADJUSTMENT (adjustment));
5836 gtk_range_set_update_policy (GTK_RANGE (scrollbar),
5837 GTK_UPDATE_CONTINUOUS);
5838 gtk_box_pack_start (GTK_BOX (box2), scrollbar, TRUE, TRUE, 0);
5839 gtk_widget_show (scrollbar);
5841 scale = gtk_hscale_new (GTK_ADJUSTMENT (adjustment));
5842 gtk_scale_set_draw_value (GTK_SCALE (scale), TRUE);
5843 g_signal_connect (scale,
5845 G_CALLBACK (reformat_value),
5847 gtk_box_pack_start (GTK_BOX (box2), scale, TRUE, TRUE, 0);
5848 gtk_widget_show (scale);
5850 hbox = gtk_hbox_new (FALSE, 0);
5852 scale = gtk_vscale_new (GTK_ADJUSTMENT (adjustment));
5853 gtk_widget_set_size_request (scale, -1, 200);
5854 gtk_scale_set_digits (GTK_SCALE (scale), 2);
5855 gtk_scale_set_draw_value (GTK_SCALE (scale), TRUE);
5856 gtk_box_pack_start (GTK_BOX (hbox), scale, TRUE, TRUE, 0);
5857 gtk_widget_show (scale);
5859 scale = gtk_vscale_new (GTK_ADJUSTMENT (adjustment));
5860 gtk_widget_set_size_request (scale, -1, 200);
5861 gtk_scale_set_digits (GTK_SCALE (scale), 2);
5862 gtk_scale_set_draw_value (GTK_SCALE (scale), TRUE);
5863 gtk_range_set_inverted (GTK_RANGE (scale), TRUE);
5864 gtk_box_pack_start (GTK_BOX (hbox), scale, TRUE, TRUE, 0);
5865 gtk_widget_show (scale);
5867 scale = gtk_vscale_new (GTK_ADJUSTMENT (adjustment));
5868 gtk_scale_set_draw_value (GTK_SCALE (scale), TRUE);
5869 g_signal_connect (scale,
5871 G_CALLBACK (reformat_value),
5873 gtk_box_pack_start (GTK_BOX (hbox), scale, TRUE, TRUE, 0);
5874 gtk_widget_show (scale);
5877 gtk_box_pack_start (GTK_BOX (box2), hbox, TRUE, TRUE, 0);
5878 gtk_widget_show (hbox);
5880 separator = gtk_hseparator_new ();
5881 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
5882 gtk_widget_show (separator);
5885 box2 = gtk_vbox_new (FALSE, 10);
5886 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
5887 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
5888 gtk_widget_show (box2);
5891 button = gtk_button_new_with_label ("close");
5892 g_signal_connect_swapped (button, "clicked",
5893 G_CALLBACK (gtk_widget_destroy),
5895 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
5896 gtk_widget_set_can_default (button, TRUE);
5897 gtk_widget_grab_default (button);
5898 gtk_widget_show (button);
5901 if (!gtk_widget_get_visible (window))
5902 gtk_widget_show (window);
5904 gtk_widget_destroy (window);
5912 create_rulers (GtkWidget *widget)
5914 static GtkWidget *window = NULL;
5920 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
5922 gtk_window_set_screen (GTK_WINDOW (window),
5923 gtk_widget_get_screen (widget));
5925 gtk_window_set_resizable (GTK_WINDOW (window), TRUE);
5927 g_signal_connect (window, "destroy",
5928 G_CALLBACK (gtk_widget_destroyed),
5931 gtk_window_set_title (GTK_WINDOW (window), "rulers");
5932 gtk_widget_set_size_request (window, 300, 300);
5933 gtk_widget_set_events (window,
5934 GDK_POINTER_MOTION_MASK
5935 | GDK_POINTER_MOTION_HINT_MASK);
5936 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
5938 table = gtk_table_new (2, 2, FALSE);
5939 gtk_container_add (GTK_CONTAINER (window), table);
5940 gtk_widget_show (table);
5942 ruler = gtk_hruler_new ();
5943 gtk_ruler_set_metric (GTK_RULER (ruler), GTK_CENTIMETERS);
5944 gtk_ruler_set_range (GTK_RULER (ruler), 100, 0, 0, 20);
5946 g_signal_connect_swapped (window,
5947 "motion_notify_event",
5948 G_CALLBACK (GTK_WIDGET_GET_CLASS (ruler)->motion_notify_event),
5951 gtk_table_attach (GTK_TABLE (table), ruler, 1, 2, 0, 1,
5952 GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 0);
5953 gtk_widget_show (ruler);
5956 ruler = gtk_vruler_new ();
5957 gtk_ruler_set_range (GTK_RULER (ruler), 5, 15, 0, 20);
5959 g_signal_connect_swapped (window,
5960 "motion_notify_event",
5961 G_CALLBACK (GTK_WIDGET_GET_CLASS (ruler)->motion_notify_event),
5964 gtk_table_attach (GTK_TABLE (table), ruler, 0, 1, 1, 2,
5965 GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
5966 gtk_widget_show (ruler);
5969 if (!gtk_widget_get_visible (window))
5970 gtk_widget_show (window);
5972 gtk_widget_destroy (window);
5979 { { 0, 0x0000, 0x0000, 0x0000 }, "black" },
5980 { { 0, 0xFFFF, 0xFFFF, 0xFFFF }, "white" },
5981 { { 0, 0xFFFF, 0x0000, 0x0000 }, "red" },
5982 { { 0, 0x0000, 0xFFFF, 0x0000 }, "green" },
5983 { { 0, 0x0000, 0x0000, 0xFFFF }, "blue" },
5984 { { 0, 0x0000, 0xFFFF, 0xFFFF }, "cyan" },
5985 { { 0, 0xFFFF, 0x0000, 0xFFFF }, "magenta" },
5986 { { 0, 0xFFFF, 0xFFFF, 0x0000 }, "yellow" }
5989 int ntext_colors = sizeof(text_colors) / sizeof(text_colors[0]);
5995 static const char * book_open_xpm[] = {
6018 static const char * book_closed_xpm[] = {
6043 GdkPixbuf *book_open;
6044 GdkPixbuf *book_closed;
6045 GtkWidget *sample_notebook;
6048 set_page_image (GtkNotebook *notebook, gint page_num, GdkPixbuf *pixbuf)
6050 GtkWidget *page_widget;
6053 page_widget = gtk_notebook_get_nth_page (notebook, page_num);
6055 pixwid = g_object_get_data (G_OBJECT (page_widget), "tab_pixmap");
6056 gtk_image_set_from_pixbuf (GTK_IMAGE (pixwid), pixbuf);
6058 pixwid = g_object_get_data (G_OBJECT (page_widget), "menu_pixmap");
6059 gtk_image_set_from_pixbuf (GTK_IMAGE (pixwid), pixbuf);
6063 page_switch (GtkWidget *widget, gpointer *page, gint page_num)
6065 GtkNotebook *notebook = GTK_NOTEBOOK (widget);
6066 gint old_page_num = gtk_notebook_get_current_page (notebook);
6068 if (page_num == old_page_num)
6071 set_page_image (notebook, page_num, book_open);
6073 if (old_page_num != -1)
6074 set_page_image (notebook, old_page_num, book_closed);
6078 tab_fill (GtkToggleButton *button, GtkWidget *child)
6080 gtk_container_child_set (GTK_CONTAINER (sample_notebook), child,
6081 "tab-fill", gtk_toggle_button_get_active (button),
6086 tab_expand (GtkToggleButton *button, GtkWidget *child)
6088 gtk_container_child_set (GTK_CONTAINER (sample_notebook), child,
6089 "tab-expand", gtk_toggle_button_get_active (button),
6094 create_pages (GtkNotebook *notebook, gint start, gint end)
6096 GtkWidget *child = NULL;
6101 GtkWidget *label_box;
6102 GtkWidget *menu_box;
6106 char accel_buffer[32];
6108 for (i = start; i <= end; i++)
6110 sprintf (buffer, "Page %d", i);
6111 sprintf (accel_buffer, "Page _%d", i);
6113 child = gtk_frame_new (buffer);
6114 gtk_container_set_border_width (GTK_CONTAINER (child), 10);
6116 vbox = gtk_vbox_new (TRUE,0);
6117 gtk_container_set_border_width (GTK_CONTAINER (vbox), 10);
6118 gtk_container_add (GTK_CONTAINER (child), vbox);
6120 hbox = gtk_hbox_new (TRUE,0);
6121 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 5);
6123 button = gtk_check_button_new_with_label ("Fill Tab");
6124 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
6125 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE);
6126 g_signal_connect (button, "toggled",
6127 G_CALLBACK (tab_fill), child);
6129 button = gtk_check_button_new_with_label ("Expand Tab");
6130 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
6131 g_signal_connect (button, "toggled",
6132 G_CALLBACK (tab_expand), child);
6134 button = gtk_button_new_with_label ("Hide Page");
6135 gtk_box_pack_end (GTK_BOX (vbox), button, FALSE, FALSE, 5);
6136 g_signal_connect_swapped (button, "clicked",
6137 G_CALLBACK (gtk_widget_hide),
6140 gtk_widget_show_all (child);
6142 label_box = gtk_hbox_new (FALSE, 0);
6143 pixwid = gtk_image_new_from_pixbuf (book_closed);
6144 g_object_set_data (G_OBJECT (child), "tab_pixmap", pixwid);
6146 gtk_box_pack_start (GTK_BOX (label_box), pixwid, FALSE, TRUE, 0);
6147 gtk_misc_set_padding (GTK_MISC (pixwid), 3, 1);
6148 label = gtk_label_new_with_mnemonic (accel_buffer);
6149 gtk_box_pack_start (GTK_BOX (label_box), label, FALSE, TRUE, 0);
6150 gtk_widget_show_all (label_box);
6153 menu_box = gtk_hbox_new (FALSE, 0);
6154 pixwid = gtk_image_new_from_pixbuf (book_closed);
6155 g_object_set_data (G_OBJECT (child), "menu_pixmap", pixwid);
6157 gtk_box_pack_start (GTK_BOX (menu_box), pixwid, FALSE, TRUE, 0);
6158 gtk_misc_set_padding (GTK_MISC (pixwid), 3, 1);
6159 label = gtk_label_new (buffer);
6160 gtk_box_pack_start (GTK_BOX (menu_box), label, FALSE, TRUE, 0);
6161 gtk_widget_show_all (menu_box);
6163 gtk_notebook_append_page_menu (notebook, child, label_box, menu_box);
6168 rotate_notebook (GtkButton *button,
6169 GtkNotebook *notebook)
6171 gtk_notebook_set_tab_pos (notebook, (gtk_notebook_get_tab_pos (notebook) + 1) % 4);
6175 show_all_pages (GtkButton *button,
6176 GtkNotebook *notebook)
6178 gtk_container_foreach (GTK_CONTAINER (notebook),
6179 (GtkCallback) gtk_widget_show, NULL);
6183 notebook_type_changed (GtkWidget *optionmenu,
6186 GtkNotebook *notebook;
6196 notebook = GTK_NOTEBOOK (data);
6198 c = gtk_combo_box_get_active (GTK_COMBO_BOX (optionmenu));
6203 /* standard notebook */
6204 gtk_notebook_set_show_tabs (notebook, TRUE);
6205 gtk_notebook_set_show_border (notebook, TRUE);
6206 gtk_notebook_set_scrollable (notebook, FALSE);
6210 /* notabs notebook */
6211 gtk_notebook_set_show_tabs (notebook, FALSE);
6212 gtk_notebook_set_show_border (notebook, TRUE);
6217 gtk_notebook_set_show_tabs (notebook, FALSE);
6218 gtk_notebook_set_show_border (notebook, FALSE);
6223 gtk_notebook_set_show_tabs (notebook, TRUE);
6224 gtk_notebook_set_show_border (notebook, TRUE);
6225 gtk_notebook_set_scrollable (notebook, TRUE);
6226 if (gtk_notebook_get_n_pages (notebook) == 5)
6227 create_pages (notebook, 6, 15);
6233 if (gtk_notebook_get_n_pages (notebook) == 15)
6234 for (i = 0; i < 10; i++)
6235 gtk_notebook_remove_page (notebook, 5);
6239 notebook_popup (GtkToggleButton *button,
6240 GtkNotebook *notebook)
6243 gtk_notebook_popup_enable (notebook);
6245 gtk_notebook_popup_disable (notebook);
6249 create_notebook (GtkWidget *widget)
6251 static GtkWidget *window = NULL;
6255 GtkWidget *separator;
6259 static gchar *items[] =
6269 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
6270 gtk_window_set_screen (GTK_WINDOW (window),
6271 gtk_widget_get_screen (widget));
6273 g_signal_connect (window, "destroy",
6274 G_CALLBACK (gtk_widget_destroyed),
6277 gtk_window_set_title (GTK_WINDOW (window), "notebook");
6278 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
6280 box1 = gtk_vbox_new (FALSE, 0);
6281 gtk_container_add (GTK_CONTAINER (window), box1);
6283 sample_notebook = gtk_notebook_new ();
6284 g_signal_connect (sample_notebook, "switch_page",
6285 G_CALLBACK (page_switch), NULL);
6286 gtk_notebook_set_tab_pos (GTK_NOTEBOOK (sample_notebook), GTK_POS_TOP);
6287 gtk_box_pack_start (GTK_BOX (box1), sample_notebook, TRUE, TRUE, 0);
6288 gtk_container_set_border_width (GTK_CONTAINER (sample_notebook), 10);
6290 gtk_widget_realize (sample_notebook);
6293 book_open = gdk_pixbuf_new_from_xpm_data (book_open_xpm);
6296 book_closed = gdk_pixbuf_new_from_xpm_data (book_closed_xpm);
6298 create_pages (GTK_NOTEBOOK (sample_notebook), 1, 5);
6300 separator = gtk_hseparator_new ();
6301 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 10);
6303 box2 = gtk_hbox_new (FALSE, 5);
6304 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
6305 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
6307 button = gtk_check_button_new_with_label ("popup menu");
6308 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, FALSE, 0);
6309 g_signal_connect (button, "clicked",
6310 G_CALLBACK (notebook_popup),
6313 box2 = gtk_hbox_new (FALSE, 5);
6314 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
6315 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
6317 label = gtk_label_new ("Notebook Style :");
6318 gtk_box_pack_start (GTK_BOX (box2), label, FALSE, TRUE, 0);
6320 omenu = build_option_menu (items, G_N_ELEMENTS (items), 0,
6321 notebook_type_changed,
6323 gtk_box_pack_start (GTK_BOX (box2), omenu, FALSE, TRUE, 0);
6325 button = gtk_button_new_with_label ("Show all Pages");
6326 gtk_box_pack_start (GTK_BOX (box2), button, FALSE, TRUE, 0);
6327 g_signal_connect (button, "clicked",
6328 G_CALLBACK (show_all_pages), sample_notebook);
6330 box2 = gtk_hbox_new (TRUE, 10);
6331 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
6332 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
6334 button = gtk_button_new_with_label ("prev");
6335 g_signal_connect_swapped (button, "clicked",
6336 G_CALLBACK (gtk_notebook_prev_page),
6338 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
6340 button = gtk_button_new_with_label ("next");
6341 g_signal_connect_swapped (button, "clicked",
6342 G_CALLBACK (gtk_notebook_next_page),
6344 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
6346 button = gtk_button_new_with_label ("rotate");
6347 g_signal_connect (button, "clicked",
6348 G_CALLBACK (rotate_notebook), sample_notebook);
6349 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
6351 separator = gtk_hseparator_new ();
6352 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 5);
6354 button = gtk_button_new_with_label ("close");
6355 gtk_container_set_border_width (GTK_CONTAINER (button), 5);
6356 g_signal_connect_swapped (button, "clicked",
6357 G_CALLBACK (gtk_widget_destroy),
6359 gtk_box_pack_start (GTK_BOX (box1), button, FALSE, FALSE, 0);
6360 gtk_widget_set_can_default (button, TRUE);
6361 gtk_widget_grab_default (button);
6364 if (!gtk_widget_get_visible (window))
6365 gtk_widget_show_all (window);
6367 gtk_widget_destroy (window);
6375 toggle_resize (GtkWidget *widget, GtkWidget *child)
6377 GtkContainer *container = GTK_CONTAINER (gtk_widget_get_parent (child));
6378 GValue value = { 0, };
6379 g_value_init (&value, G_TYPE_BOOLEAN);
6380 gtk_container_child_get_property (container, child, "resize", &value);
6381 g_value_set_boolean (&value, !g_value_get_boolean (&value));
6382 gtk_container_child_set_property (container, child, "resize", &value);
6386 toggle_shrink (GtkWidget *widget, GtkWidget *child)
6388 GtkContainer *container = GTK_CONTAINER (gtk_widget_get_parent (child));
6389 GValue value = { 0, };
6390 g_value_init (&value, G_TYPE_BOOLEAN);
6391 gtk_container_child_get_property (container, child, "shrink", &value);
6392 g_value_set_boolean (&value, !g_value_get_boolean (&value));
6393 gtk_container_child_set_property (container, child, "shrink", &value);
6397 paned_props_clicked (GtkWidget *button,
6400 GtkWidget *window = create_prop_editor (paned, GTK_TYPE_PANED);
6402 gtk_window_set_title (GTK_WINDOW (window), "Paned Properties");
6406 create_pane_options (GtkPaned *paned,
6407 const gchar *frame_label,
6408 const gchar *label1,
6409 const gchar *label2)
6411 GtkWidget *child1, *child2;
6416 GtkWidget *check_button;
6418 child1 = gtk_paned_get_child1 (paned);
6419 child2 = gtk_paned_get_child2 (paned);
6421 frame = gtk_frame_new (frame_label);
6422 gtk_container_set_border_width (GTK_CONTAINER (frame), 4);
6424 table = gtk_table_new (4, 2, 4);
6425 gtk_container_add (GTK_CONTAINER (frame), table);
6427 label = gtk_label_new (label1);
6428 gtk_table_attach_defaults (GTK_TABLE (table), label,
6431 check_button = gtk_check_button_new_with_label ("Resize");
6432 gtk_table_attach_defaults (GTK_TABLE (table), check_button,
6434 g_signal_connect (check_button, "toggled",
6435 G_CALLBACK (toggle_resize),
6438 check_button = gtk_check_button_new_with_label ("Shrink");
6439 gtk_table_attach_defaults (GTK_TABLE (table), check_button,
6441 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check_button),
6443 g_signal_connect (check_button, "toggled",
6444 G_CALLBACK (toggle_shrink),
6447 label = gtk_label_new (label2);
6448 gtk_table_attach_defaults (GTK_TABLE (table), label,
6451 check_button = gtk_check_button_new_with_label ("Resize");
6452 gtk_table_attach_defaults (GTK_TABLE (table), check_button,
6454 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check_button),
6456 g_signal_connect (check_button, "toggled",
6457 G_CALLBACK (toggle_resize),
6460 check_button = gtk_check_button_new_with_label ("Shrink");
6461 gtk_table_attach_defaults (GTK_TABLE (table), check_button,
6463 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check_button),
6465 g_signal_connect (check_button, "toggled",
6466 G_CALLBACK (toggle_shrink),
6469 button = gtk_button_new_with_mnemonic ("_Properties");
6470 gtk_table_attach_defaults (GTK_TABLE (table), button,
6472 g_signal_connect (button, "clicked",
6473 G_CALLBACK (paned_props_clicked),
6480 create_panes (GtkWidget *widget)
6482 static GtkWidget *window = NULL;
6491 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
6493 gtk_window_set_screen (GTK_WINDOW (window),
6494 gtk_widget_get_screen (widget));
6496 g_signal_connect (window, "destroy",
6497 G_CALLBACK (gtk_widget_destroyed),
6500 gtk_window_set_title (GTK_WINDOW (window), "Panes");
6501 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
6503 vbox = gtk_vbox_new (FALSE, 0);
6504 gtk_container_add (GTK_CONTAINER (window), vbox);
6506 vpaned = gtk_vpaned_new ();
6507 gtk_box_pack_start (GTK_BOX (vbox), vpaned, TRUE, TRUE, 0);
6508 gtk_container_set_border_width (GTK_CONTAINER(vpaned), 5);
6510 hpaned = gtk_hpaned_new ();
6511 gtk_paned_add1 (GTK_PANED (vpaned), hpaned);
6513 frame = gtk_frame_new (NULL);
6514 gtk_frame_set_shadow_type (GTK_FRAME(frame), GTK_SHADOW_IN);
6515 gtk_widget_set_size_request (frame, 60, 60);
6516 gtk_paned_add1 (GTK_PANED (hpaned), frame);
6518 button = gtk_button_new_with_label ("Hi there");
6519 gtk_container_add (GTK_CONTAINER(frame), button);
6521 frame = gtk_frame_new (NULL);
6522 gtk_frame_set_shadow_type (GTK_FRAME(frame), GTK_SHADOW_IN);
6523 gtk_widget_set_size_request (frame, 80, 60);
6524 gtk_paned_add2 (GTK_PANED (hpaned), frame);
6526 frame = gtk_frame_new (NULL);
6527 gtk_frame_set_shadow_type (GTK_FRAME(frame), GTK_SHADOW_IN);
6528 gtk_widget_set_size_request (frame, 60, 80);
6529 gtk_paned_add2 (GTK_PANED (vpaned), frame);
6531 /* Now create toggle buttons to control sizing */
6533 gtk_box_pack_start (GTK_BOX (vbox),
6534 create_pane_options (GTK_PANED (hpaned),
6540 gtk_box_pack_start (GTK_BOX (vbox),
6541 create_pane_options (GTK_PANED (vpaned),
6547 gtk_widget_show_all (vbox);
6550 if (!gtk_widget_get_visible (window))
6551 gtk_widget_show (window);
6553 gtk_widget_destroy (window);
6557 * Paned keyboard navigation
6561 paned_keyboard_window1 (GtkWidget *widget)
6584 window1 = gtk_window_new (GTK_WINDOW_TOPLEVEL);
6585 gtk_window_set_title (GTK_WINDOW (window1), "Basic paned navigation");
6586 gtk_window_set_screen (GTK_WINDOW (window1),
6587 gtk_widget_get_screen (widget));
6589 hpaned1 = gtk_hpaned_new ();
6590 gtk_container_add (GTK_CONTAINER (window1), hpaned1);
6592 frame1 = gtk_frame_new (NULL);
6593 gtk_paned_pack1 (GTK_PANED (hpaned1), frame1, FALSE, TRUE);
6594 gtk_frame_set_shadow_type (GTK_FRAME (frame1), GTK_SHADOW_IN);
6596 vbox1 = gtk_vbox_new (FALSE, 0);
6597 gtk_container_add (GTK_CONTAINER (frame1), vbox1);
6599 button7 = gtk_button_new_with_label ("button7");
6600 gtk_box_pack_start (GTK_BOX (vbox1), button7, FALSE, FALSE, 0);
6602 button8 = gtk_button_new_with_label ("button8");
6603 gtk_box_pack_start (GTK_BOX (vbox1), button8, FALSE, FALSE, 0);
6605 button9 = gtk_button_new_with_label ("button9");
6606 gtk_box_pack_start (GTK_BOX (vbox1), button9, FALSE, FALSE, 0);
6608 vpaned1 = gtk_vpaned_new ();
6609 gtk_paned_pack2 (GTK_PANED (hpaned1), vpaned1, TRUE, TRUE);
6611 frame2 = gtk_frame_new (NULL);
6612 gtk_paned_pack1 (GTK_PANED (vpaned1), frame2, FALSE, TRUE);
6613 gtk_frame_set_shadow_type (GTK_FRAME (frame2), GTK_SHADOW_IN);
6615 frame5 = gtk_frame_new (NULL);
6616 gtk_container_add (GTK_CONTAINER (frame2), frame5);
6618 hbox1 = gtk_hbox_new (FALSE, 0);
6619 gtk_container_add (GTK_CONTAINER (frame5), hbox1);
6621 button5 = gtk_button_new_with_label ("button5");
6622 gtk_box_pack_start (GTK_BOX (hbox1), button5, FALSE, FALSE, 0);
6624 button6 = gtk_button_new_with_label ("button6");
6625 gtk_box_pack_start (GTK_BOX (hbox1), button6, FALSE, FALSE, 0);
6627 frame3 = gtk_frame_new (NULL);
6628 gtk_paned_pack2 (GTK_PANED (vpaned1), frame3, TRUE, TRUE);
6629 gtk_frame_set_shadow_type (GTK_FRAME (frame3), GTK_SHADOW_IN);
6631 frame4 = gtk_frame_new ("Buttons");
6632 gtk_container_add (GTK_CONTAINER (frame3), frame4);
6633 gtk_container_set_border_width (GTK_CONTAINER (frame4), 15);
6635 table1 = gtk_table_new (2, 2, FALSE);
6636 gtk_container_add (GTK_CONTAINER (frame4), table1);
6637 gtk_container_set_border_width (GTK_CONTAINER (table1), 11);
6639 button1 = gtk_button_new_with_label ("button1");
6640 gtk_table_attach (GTK_TABLE (table1), button1, 0, 1, 0, 1,
6641 (GtkAttachOptions) (GTK_FILL),
6642 (GtkAttachOptions) (0), 0, 0);
6644 button2 = gtk_button_new_with_label ("button2");
6645 gtk_table_attach (GTK_TABLE (table1), button2, 1, 2, 0, 1,
6646 (GtkAttachOptions) (GTK_FILL),
6647 (GtkAttachOptions) (0), 0, 0);
6649 button3 = gtk_button_new_with_label ("button3");
6650 gtk_table_attach (GTK_TABLE (table1), button3, 0, 1, 1, 2,
6651 (GtkAttachOptions) (GTK_FILL),
6652 (GtkAttachOptions) (0), 0, 0);
6654 button4 = gtk_button_new_with_label ("button4");
6655 gtk_table_attach (GTK_TABLE (table1), button4, 1, 2, 1, 2,
6656 (GtkAttachOptions) (GTK_FILL),
6657 (GtkAttachOptions) (0), 0, 0);
6663 paned_keyboard_window2 (GtkWidget *widget)
6668 GtkWidget *button13;
6672 GtkWidget *button12;
6674 GtkWidget *button11;
6675 GtkWidget *button10;
6677 window2 = gtk_window_new (GTK_WINDOW_TOPLEVEL);
6678 gtk_window_set_title (GTK_WINDOW (window2), "\"button 10\" is not inside the horisontal pane");
6680 gtk_window_set_screen (GTK_WINDOW (window2),
6681 gtk_widget_get_screen (widget));
6683 hpaned2 = gtk_hpaned_new ();
6684 gtk_container_add (GTK_CONTAINER (window2), hpaned2);
6686 frame6 = gtk_frame_new (NULL);
6687 gtk_paned_pack1 (GTK_PANED (hpaned2), frame6, FALSE, TRUE);
6688 gtk_frame_set_shadow_type (GTK_FRAME (frame6), GTK_SHADOW_IN);
6690 button13 = gtk_button_new_with_label ("button13");
6691 gtk_container_add (GTK_CONTAINER (frame6), button13);
6693 hbox2 = gtk_hbox_new (FALSE, 0);
6694 gtk_paned_pack2 (GTK_PANED (hpaned2), hbox2, TRUE, TRUE);
6696 vpaned2 = gtk_vpaned_new ();
6697 gtk_box_pack_start (GTK_BOX (hbox2), vpaned2, TRUE, TRUE, 0);
6699 frame7 = gtk_frame_new (NULL);
6700 gtk_paned_pack1 (GTK_PANED (vpaned2), frame7, FALSE, TRUE);
6701 gtk_frame_set_shadow_type (GTK_FRAME (frame7), GTK_SHADOW_IN);
6703 button12 = gtk_button_new_with_label ("button12");
6704 gtk_container_add (GTK_CONTAINER (frame7), button12);
6706 frame8 = gtk_frame_new (NULL);
6707 gtk_paned_pack2 (GTK_PANED (vpaned2), frame8, TRUE, TRUE);
6708 gtk_frame_set_shadow_type (GTK_FRAME (frame8), GTK_SHADOW_IN);
6710 button11 = gtk_button_new_with_label ("button11");
6711 gtk_container_add (GTK_CONTAINER (frame8), button11);
6713 button10 = gtk_button_new_with_label ("button10");
6714 gtk_box_pack_start (GTK_BOX (hbox2), button10, FALSE, FALSE, 0);
6720 paned_keyboard_window3 (GtkWidget *widget)
6727 GtkWidget *button14;
6730 GtkWidget *button15;
6733 GtkWidget *button16;
6735 GtkWidget *button17;
6737 window3 = gtk_window_new (GTK_WINDOW_TOPLEVEL);
6738 g_object_set_data (G_OBJECT (window3), "window3", window3);
6739 gtk_window_set_title (GTK_WINDOW (window3), "Nested panes");
6741 gtk_window_set_screen (GTK_WINDOW (window3),
6742 gtk_widget_get_screen (widget));
6745 vbox2 = gtk_vbox_new (FALSE, 0);
6746 gtk_container_add (GTK_CONTAINER (window3), vbox2);
6748 label1 = gtk_label_new ("Three panes nested inside each other");
6749 gtk_box_pack_start (GTK_BOX (vbox2), label1, FALSE, FALSE, 0);
6751 hpaned3 = gtk_hpaned_new ();
6752 gtk_box_pack_start (GTK_BOX (vbox2), hpaned3, TRUE, TRUE, 0);
6754 frame9 = gtk_frame_new (NULL);
6755 gtk_paned_pack1 (GTK_PANED (hpaned3), frame9, FALSE, TRUE);
6756 gtk_frame_set_shadow_type (GTK_FRAME (frame9), GTK_SHADOW_IN);
6758 button14 = gtk_button_new_with_label ("button14");
6759 gtk_container_add (GTK_CONTAINER (frame9), button14);
6761 hpaned4 = gtk_hpaned_new ();
6762 gtk_paned_pack2 (GTK_PANED (hpaned3), hpaned4, TRUE, TRUE);
6764 frame10 = gtk_frame_new (NULL);
6765 gtk_paned_pack1 (GTK_PANED (hpaned4), frame10, FALSE, TRUE);
6766 gtk_frame_set_shadow_type (GTK_FRAME (frame10), GTK_SHADOW_IN);
6768 button15 = gtk_button_new_with_label ("button15");
6769 gtk_container_add (GTK_CONTAINER (frame10), button15);
6771 hpaned5 = gtk_hpaned_new ();
6772 gtk_paned_pack2 (GTK_PANED (hpaned4), hpaned5, TRUE, TRUE);
6774 frame11 = gtk_frame_new (NULL);
6775 gtk_paned_pack1 (GTK_PANED (hpaned5), frame11, FALSE, TRUE);
6776 gtk_frame_set_shadow_type (GTK_FRAME (frame11), GTK_SHADOW_IN);
6778 button16 = gtk_button_new_with_label ("button16");
6779 gtk_container_add (GTK_CONTAINER (frame11), button16);
6781 frame12 = gtk_frame_new (NULL);
6782 gtk_paned_pack2 (GTK_PANED (hpaned5), frame12, TRUE, TRUE);
6783 gtk_frame_set_shadow_type (GTK_FRAME (frame12), GTK_SHADOW_IN);
6785 button17 = gtk_button_new_with_label ("button17");
6786 gtk_container_add (GTK_CONTAINER (frame12), button17);
6792 paned_keyboard_window4 (GtkWidget *widget)
6799 GtkWidget *button19;
6800 GtkWidget *button18;
6803 GtkWidget *button21;
6804 GtkWidget *button20;
6806 GtkWidget *button23;
6807 GtkWidget *button22;
6809 GtkWidget *button25;
6810 GtkWidget *button24;
6812 window4 = gtk_window_new (GTK_WINDOW_TOPLEVEL);
6813 g_object_set_data (G_OBJECT (window4), "window4", window4);
6814 gtk_window_set_title (GTK_WINDOW (window4), "window4");
6816 gtk_window_set_screen (GTK_WINDOW (window4),
6817 gtk_widget_get_screen (widget));
6819 vbox3 = gtk_vbox_new (FALSE, 0);
6820 gtk_container_add (GTK_CONTAINER (window4), vbox3);
6822 label2 = gtk_label_new ("Widget tree:\n\nhpaned \n - vpaned\n - hbox\n - vpaned\n - vpaned\n - vpaned\n");
6823 gtk_box_pack_start (GTK_BOX (vbox3), label2, FALSE, FALSE, 0);
6824 gtk_label_set_justify (GTK_LABEL (label2), GTK_JUSTIFY_LEFT);
6826 hpaned6 = gtk_hpaned_new ();
6827 gtk_box_pack_start (GTK_BOX (vbox3), hpaned6, TRUE, TRUE, 0);
6829 vpaned3 = gtk_vpaned_new ();
6830 gtk_paned_pack1 (GTK_PANED (hpaned6), vpaned3, FALSE, TRUE);
6832 button19 = gtk_button_new_with_label ("button19");
6833 gtk_paned_pack1 (GTK_PANED (vpaned3), button19, FALSE, TRUE);
6835 button18 = gtk_button_new_with_label ("button18");
6836 gtk_paned_pack2 (GTK_PANED (vpaned3), button18, TRUE, TRUE);
6838 hbox3 = gtk_hbox_new (FALSE, 0);
6839 gtk_paned_pack2 (GTK_PANED (hpaned6), hbox3, TRUE, TRUE);
6841 vpaned4 = gtk_vpaned_new ();
6842 gtk_box_pack_start (GTK_BOX (hbox3), vpaned4, TRUE, TRUE, 0);
6844 button21 = gtk_button_new_with_label ("button21");
6845 gtk_paned_pack1 (GTK_PANED (vpaned4), button21, FALSE, TRUE);
6847 button20 = gtk_button_new_with_label ("button20");
6848 gtk_paned_pack2 (GTK_PANED (vpaned4), button20, TRUE, TRUE);
6850 vpaned5 = gtk_vpaned_new ();
6851 gtk_box_pack_start (GTK_BOX (hbox3), vpaned5, TRUE, TRUE, 0);
6853 button23 = gtk_button_new_with_label ("button23");
6854 gtk_paned_pack1 (GTK_PANED (vpaned5), button23, FALSE, TRUE);
6856 button22 = gtk_button_new_with_label ("button22");
6857 gtk_paned_pack2 (GTK_PANED (vpaned5), button22, TRUE, TRUE);
6859 vpaned6 = gtk_vpaned_new ();
6860 gtk_box_pack_start (GTK_BOX (hbox3), vpaned6, TRUE, TRUE, 0);
6862 button25 = gtk_button_new_with_label ("button25");
6863 gtk_paned_pack1 (GTK_PANED (vpaned6), button25, FALSE, TRUE);
6865 button24 = gtk_button_new_with_label ("button24");
6866 gtk_paned_pack2 (GTK_PANED (vpaned6), button24, TRUE, TRUE);
6872 create_paned_keyboard_navigation (GtkWidget *widget)
6874 static GtkWidget *window1 = NULL;
6875 static GtkWidget *window2 = NULL;
6876 static GtkWidget *window3 = NULL;
6877 static GtkWidget *window4 = NULL;
6880 (gtk_widget_get_screen (window1) != gtk_widget_get_screen (widget)))
6882 gtk_widget_destroy (window1);
6883 gtk_widget_destroy (window2);
6884 gtk_widget_destroy (window3);
6885 gtk_widget_destroy (window4);
6890 window1 = paned_keyboard_window1 (widget);
6891 g_signal_connect (window1, "destroy",
6892 G_CALLBACK (gtk_widget_destroyed),
6898 window2 = paned_keyboard_window2 (widget);
6899 g_signal_connect (window2, "destroy",
6900 G_CALLBACK (gtk_widget_destroyed),
6906 window3 = paned_keyboard_window3 (widget);
6907 g_signal_connect (window3, "destroy",
6908 G_CALLBACK (gtk_widget_destroyed),
6914 window4 = paned_keyboard_window4 (widget);
6915 g_signal_connect (window4, "destroy",
6916 G_CALLBACK (gtk_widget_destroyed),
6920 if (gtk_widget_get_visible (window1))
6921 gtk_widget_destroy (GTK_WIDGET (window1));
6923 gtk_widget_show_all (GTK_WIDGET (window1));
6925 if (gtk_widget_get_visible (window2))
6926 gtk_widget_destroy (GTK_WIDGET (window2));
6928 gtk_widget_show_all (GTK_WIDGET (window2));
6930 if (gtk_widget_get_visible (window3))
6931 gtk_widget_destroy (GTK_WIDGET (window3));
6933 gtk_widget_show_all (GTK_WIDGET (window3));
6935 if (gtk_widget_get_visible (window4))
6936 gtk_widget_destroy (GTK_WIDGET (window4));
6938 gtk_widget_show_all (GTK_WIDGET (window4));
6946 typedef struct _cursoroffset {gint x,y;} CursorOffset;
6949 shape_pressed (GtkWidget *widget, GdkEventButton *event)
6953 /* ignore double and triple click */
6954 if (event->type != GDK_BUTTON_PRESS)
6957 p = g_object_get_data (G_OBJECT (widget), "cursor_offset");
6958 p->x = (int) event->x;
6959 p->y = (int) event->y;
6961 gtk_grab_add (widget);
6962 gdk_pointer_grab (gtk_widget_get_window (widget), TRUE,
6963 GDK_BUTTON_RELEASE_MASK |
6964 GDK_BUTTON_MOTION_MASK |
6965 GDK_POINTER_MOTION_HINT_MASK,
6970 shape_released (GtkWidget *widget)
6972 gtk_grab_remove (widget);
6973 gdk_display_pointer_ungrab (gtk_widget_get_display (widget),
6978 shape_motion (GtkWidget *widget,
6979 GdkEventMotion *event)
6983 GdkModifierType mask;
6985 p = g_object_get_data (G_OBJECT (widget), "cursor_offset");
6988 * Can't use event->x / event->y here
6989 * because I need absolute coordinates.
6991 gdk_window_get_pointer (NULL, &xp, &yp, &mask);
6992 gtk_window_move (GTK_WINDOW (widget), xp - p->x, yp - p->y);
6996 shape_create_icon (GdkScreen *screen,
7007 CursorOffset* icon_pos;
7008 cairo_surface_t *mask;
7009 cairo_region_t *mask_region;
7014 * GDK_WINDOW_TOPLEVEL works also, giving you a title border
7016 window = gtk_window_new (window_type);
7017 gtk_window_set_screen (GTK_WINDOW (window), screen);
7019 fixed = gtk_fixed_new ();
7020 gtk_widget_set_size_request (fixed, 100, 100);
7021 gtk_container_add (GTK_CONTAINER (window), fixed);
7022 gtk_widget_show (fixed);
7024 gtk_widget_set_events (window,
7025 gtk_widget_get_events (window) |
7026 GDK_BUTTON_MOTION_MASK |
7027 GDK_POINTER_MOTION_HINT_MASK |
7028 GDK_BUTTON_PRESS_MASK);
7030 gtk_widget_realize (window);
7032 pixbuf = gdk_pixbuf_new_from_file (xpm_file, NULL);
7033 g_assert (pixbuf); /* FIXME: error handling */
7035 mask = cairo_image_surface_create (CAIRO_FORMAT_A1,
7036 gdk_pixbuf_get_width (pixbuf),
7037 gdk_pixbuf_get_height (pixbuf));
7038 cr = cairo_create (mask);
7039 gdk_cairo_set_source_pixbuf (cr, pixbuf, 0, 0);
7043 mask_region = gdk_cairo_region_create_from_surface (mask);
7045 cairo_region_translate (mask_region, px, py);
7047 image = gtk_image_new_from_pixbuf (pixbuf);
7048 gtk_fixed_put (GTK_FIXED (fixed), image, px,py);
7049 gtk_widget_show (image);
7051 gtk_widget_shape_combine_region (window, mask_region);
7053 cairo_region_destroy (mask_region);
7054 cairo_surface_destroy (mask);
7055 g_object_unref (pixbuf);
7057 g_signal_connect (window, "button_press_event",
7058 G_CALLBACK (shape_pressed), NULL);
7059 g_signal_connect (window, "button_release_event",
7060 G_CALLBACK (shape_released), NULL);
7061 g_signal_connect (window, "motion_notify_event",
7062 G_CALLBACK (shape_motion), NULL);
7064 icon_pos = g_new (CursorOffset, 1);
7065 g_object_set_data (G_OBJECT (window), "cursor_offset", icon_pos);
7067 gtk_window_move (GTK_WINDOW (window), x, y);
7068 gtk_widget_show (window);
7074 create_shapes (GtkWidget *widget)
7076 /* Variables used by the Drag/Drop and Shape Window demos */
7077 static GtkWidget *modeller = NULL;
7078 static GtkWidget *sheets = NULL;
7079 static GtkWidget *rings = NULL;
7080 static GtkWidget *with_region = NULL;
7081 GdkScreen *screen = gtk_widget_get_screen (widget);
7083 if (!(file_exists ("Modeller.xpm") &&
7084 file_exists ("FilesQueue.xpm") &&
7085 file_exists ("3DRings.xpm")))
7091 modeller = shape_create_icon (screen, "Modeller.xpm",
7092 440, 140, 0,0, GTK_WINDOW_POPUP);
7094 g_signal_connect (modeller, "destroy",
7095 G_CALLBACK (gtk_widget_destroyed),
7099 gtk_widget_destroy (modeller);
7103 sheets = shape_create_icon (screen, "FilesQueue.xpm",
7104 580, 170, 0,0, GTK_WINDOW_POPUP);
7106 g_signal_connect (sheets, "destroy",
7107 G_CALLBACK (gtk_widget_destroyed),
7112 gtk_widget_destroy (sheets);
7116 rings = shape_create_icon (screen, "3DRings.xpm",
7117 460, 270, 25,25, GTK_WINDOW_TOPLEVEL);
7119 g_signal_connect (rings, "destroy",
7120 G_CALLBACK (gtk_widget_destroyed),
7124 gtk_widget_destroy (rings);
7128 cairo_region_t *region;
7131 with_region = shape_create_icon (screen, "3DRings.xpm",
7132 460, 270, 25,25, GTK_WINDOW_TOPLEVEL);
7134 gtk_window_set_decorated (GTK_WINDOW (with_region), FALSE);
7136 g_signal_connect (with_region, "destroy",
7137 G_CALLBACK (gtk_widget_destroyed),
7140 /* reset shape from mask to a region */
7143 region = cairo_region_create ();
7155 cairo_region_union_rectangle (region, &rect);
7163 gdk_window_shape_combine_region (gtk_widget_get_window (with_region),
7168 gtk_widget_destroy (with_region);
7176 create_wmhints (GtkWidget *widget)
7178 static GtkWidget *window = NULL;
7180 GtkWidget *separator;
7184 GdkWindow *gdk_window;
7190 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
7192 gtk_window_set_screen (GTK_WINDOW (window),
7193 gtk_widget_get_screen (widget));
7195 g_signal_connect (window, "destroy",
7196 G_CALLBACK (gtk_widget_destroyed),
7199 gtk_window_set_title (GTK_WINDOW (window), "WM Hints");
7200 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
7202 gtk_widget_realize (window);
7204 gdk_window = gtk_widget_get_window (window);
7206 pixbuf = gdk_pixbuf_new_from_xpm_data ((const char **) openfile);
7207 list = g_list_prepend (NULL, pixbuf);
7209 gdk_window_set_icon_list (gdk_window, list);
7212 g_object_unref (pixbuf);
7214 gdk_window_set_icon_name (gdk_window, "WMHints Test Icon");
7216 gdk_window_set_decorations (gdk_window, GDK_DECOR_ALL | GDK_DECOR_MENU);
7217 gdk_window_set_functions (gdk_window, GDK_FUNC_ALL | GDK_FUNC_RESIZE);
7219 box1 = gtk_vbox_new (FALSE, 0);
7220 gtk_container_add (GTK_CONTAINER (window), box1);
7221 gtk_widget_show (box1);
7223 label = gtk_label_new ("Try iconizing me!");
7224 gtk_widget_set_size_request (label, 150, 50);
7225 gtk_box_pack_start (GTK_BOX (box1), label, TRUE, TRUE, 0);
7226 gtk_widget_show (label);
7229 separator = gtk_hseparator_new ();
7230 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
7231 gtk_widget_show (separator);
7234 box2 = gtk_vbox_new (FALSE, 10);
7235 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
7236 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
7237 gtk_widget_show (box2);
7240 button = gtk_button_new_with_label ("close");
7242 g_signal_connect_swapped (button, "clicked",
7243 G_CALLBACK (gtk_widget_destroy),
7246 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
7247 gtk_widget_set_can_default (button, TRUE);
7248 gtk_widget_grab_default (button);
7249 gtk_widget_show (button);
7252 if (!gtk_widget_get_visible (window))
7253 gtk_widget_show (window);
7255 gtk_widget_destroy (window);
7260 * Window state tracking
7264 window_state_callback (GtkWidget *widget,
7265 GdkEventWindowState *event,
7268 GtkWidget *label = data;
7271 msg = g_strconcat (gtk_window_get_title (GTK_WINDOW (widget)), ": ",
7272 (event->new_window_state & GDK_WINDOW_STATE_WITHDRAWN) ?
7273 "withdrawn" : "not withdrawn", ", ",
7274 (event->new_window_state & GDK_WINDOW_STATE_ICONIFIED) ?
7275 "iconified" : "not iconified", ", ",
7276 (event->new_window_state & GDK_WINDOW_STATE_STICKY) ?
7277 "sticky" : "not sticky", ", ",
7278 (event->new_window_state & GDK_WINDOW_STATE_MAXIMIZED) ?
7279 "maximized" : "not maximized", ", ",
7280 (event->new_window_state & GDK_WINDOW_STATE_FULLSCREEN) ?
7281 "fullscreen" : "not fullscreen",
7282 (event->new_window_state & GDK_WINDOW_STATE_ABOVE) ?
7283 "above" : "not above", ", ",
7284 (event->new_window_state & GDK_WINDOW_STATE_BELOW) ?
7285 "below" : "not below", ", ",
7288 gtk_label_set_text (GTK_LABEL (label), msg);
7296 tracking_label (GtkWidget *window)
7302 hbox = gtk_hbox_new (FALSE, 5);
7304 g_signal_connect_object (hbox,
7306 G_CALLBACK (gtk_widget_destroy),
7310 label = gtk_label_new ("<no window state events received>");
7311 gtk_label_set_line_wrap (GTK_LABEL (label), TRUE);
7312 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
7314 g_signal_connect (window,
7315 "window_state_event",
7316 G_CALLBACK (window_state_callback),
7319 button = gtk_button_new_with_label ("Deiconify");
7320 g_signal_connect_object (button,
7322 G_CALLBACK (gtk_window_deiconify),
7325 gtk_box_pack_end (GTK_BOX (hbox), button, FALSE, FALSE, 0);
7327 button = gtk_button_new_with_label ("Iconify");
7328 g_signal_connect_object (button,
7330 G_CALLBACK (gtk_window_iconify),
7333 gtk_box_pack_end (GTK_BOX (hbox), button, FALSE, FALSE, 0);
7335 button = gtk_button_new_with_label ("Fullscreen");
7336 g_signal_connect_object (button,
7338 G_CALLBACK (gtk_window_fullscreen),
7341 gtk_box_pack_end (GTK_BOX (hbox), button, FALSE, FALSE, 0);
7343 button = gtk_button_new_with_label ("Unfullscreen");
7344 g_signal_connect_object (button,
7346 G_CALLBACK (gtk_window_unfullscreen),
7349 gtk_box_pack_end (GTK_BOX (hbox), button, FALSE, FALSE, 0);
7351 button = gtk_button_new_with_label ("Present");
7352 g_signal_connect_object (button,
7354 G_CALLBACK (gtk_window_present),
7357 gtk_box_pack_end (GTK_BOX (hbox), button, FALSE, FALSE, 0);
7359 button = gtk_button_new_with_label ("Show");
7360 g_signal_connect_object (button,
7362 G_CALLBACK (gtk_widget_show),
7365 gtk_box_pack_end (GTK_BOX (hbox), button, FALSE, FALSE, 0);
7367 gtk_widget_show_all (hbox);
7373 keep_window_above (GtkToggleButton *togglebutton, gpointer data)
7375 GtkWidget *button = g_object_get_data (G_OBJECT (togglebutton), "radio");
7377 gtk_window_set_keep_above (GTK_WINDOW (data),
7378 gtk_toggle_button_get_active (togglebutton));
7380 if (gtk_toggle_button_get_active (togglebutton))
7381 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), FALSE);
7385 keep_window_below (GtkToggleButton *togglebutton, gpointer data)
7387 GtkWidget *button = g_object_get_data (G_OBJECT (togglebutton), "radio");
7389 gtk_window_set_keep_below (GTK_WINDOW (data),
7390 gtk_toggle_button_get_active (togglebutton));
7392 if (gtk_toggle_button_get_active (togglebutton))
7393 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), FALSE);
7398 get_state_controls (GtkWidget *window)
7402 GtkWidget *button_above;
7403 GtkWidget *button_below;
7405 vbox = gtk_vbox_new (FALSE, 0);
7407 button = gtk_button_new_with_label ("Stick");
7408 g_signal_connect_object (button,
7410 G_CALLBACK (gtk_window_stick),
7413 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
7415 button = gtk_button_new_with_label ("Unstick");
7416 g_signal_connect_object (button,
7418 G_CALLBACK (gtk_window_unstick),
7421 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
7423 button = gtk_button_new_with_label ("Maximize");
7424 g_signal_connect_object (button,
7426 G_CALLBACK (gtk_window_maximize),
7429 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
7431 button = gtk_button_new_with_label ("Unmaximize");
7432 g_signal_connect_object (button,
7434 G_CALLBACK (gtk_window_unmaximize),
7437 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
7439 button = gtk_button_new_with_label ("Iconify");
7440 g_signal_connect_object (button,
7442 G_CALLBACK (gtk_window_iconify),
7445 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
7447 button = gtk_button_new_with_label ("Fullscreen");
7448 g_signal_connect_object (button,
7450 G_CALLBACK (gtk_window_fullscreen),
7453 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
7455 button = gtk_button_new_with_label ("Unfullscreen");
7456 g_signal_connect_object (button,
7458 G_CALLBACK (gtk_window_unfullscreen),
7461 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
7463 button_above = gtk_toggle_button_new_with_label ("Keep above");
7464 g_signal_connect (button_above,
7466 G_CALLBACK (keep_window_above),
7468 gtk_box_pack_start (GTK_BOX (vbox), button_above, FALSE, FALSE, 0);
7470 button_below = gtk_toggle_button_new_with_label ("Keep below");
7471 g_signal_connect (button_below,
7473 G_CALLBACK (keep_window_below),
7475 gtk_box_pack_start (GTK_BOX (vbox), button_below, FALSE, FALSE, 0);
7477 g_object_set_data (G_OBJECT (button_above), "radio", button_below);
7478 g_object_set_data (G_OBJECT (button_below), "radio", button_above);
7480 button = gtk_button_new_with_label ("Hide (withdraw)");
7481 g_signal_connect_object (button,
7483 G_CALLBACK (gtk_widget_hide),
7486 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
7488 gtk_widget_show_all (vbox);
7494 create_window_states (GtkWidget *widget)
7496 static GtkWidget *window = NULL;
7499 GtkWidget *iconified;
7501 GtkWidget *controls;
7505 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
7506 gtk_window_set_screen (GTK_WINDOW (window),
7507 gtk_widget_get_screen (widget));
7509 g_signal_connect (window, "destroy",
7510 G_CALLBACK (gtk_widget_destroyed),
7513 gtk_window_set_title (GTK_WINDOW (window), "Window states");
7515 box1 = gtk_vbox_new (FALSE, 0);
7516 gtk_container_add (GTK_CONTAINER (window), box1);
7518 iconified = gtk_window_new (GTK_WINDOW_TOPLEVEL);
7520 gtk_window_set_screen (GTK_WINDOW (iconified),
7521 gtk_widget_get_screen (widget));
7523 g_signal_connect_object (iconified, "destroy",
7524 G_CALLBACK (gtk_widget_destroy),
7527 gtk_window_iconify (GTK_WINDOW (iconified));
7528 gtk_window_set_title (GTK_WINDOW (iconified), "Iconified initially");
7529 controls = get_state_controls (iconified);
7530 gtk_container_add (GTK_CONTAINER (iconified), controls);
7532 normal = gtk_window_new (GTK_WINDOW_TOPLEVEL);
7534 gtk_window_set_screen (GTK_WINDOW (normal),
7535 gtk_widget_get_screen (widget));
7537 g_signal_connect_object (normal, "destroy",
7538 G_CALLBACK (gtk_widget_destroy),
7542 gtk_window_set_title (GTK_WINDOW (normal), "Deiconified initially");
7543 controls = get_state_controls (normal);
7544 gtk_container_add (GTK_CONTAINER (normal), controls);
7546 label = tracking_label (iconified);
7547 gtk_container_add (GTK_CONTAINER (box1), label);
7549 label = tracking_label (normal);
7550 gtk_container_add (GTK_CONTAINER (box1), label);
7552 gtk_widget_show_all (iconified);
7553 gtk_widget_show_all (normal);
7554 gtk_widget_show_all (box1);
7557 if (!gtk_widget_get_visible (window))
7558 gtk_widget_show (window);
7560 gtk_widget_destroy (window);
7568 configure_event_callback (GtkWidget *widget,
7569 GdkEventConfigure *event,
7572 GtkWidget *label = data;
7576 gtk_window_get_position (GTK_WINDOW (widget), &x, &y);
7578 msg = g_strdup_printf ("event: %d,%d %d x %d\n"
7580 event->x, event->y, event->width, event->height,
7583 gtk_label_set_text (GTK_LABEL (label), msg);
7591 get_ints (GtkWidget *window,
7598 spin1 = g_object_get_data (G_OBJECT (window), "spin1");
7599 spin2 = g_object_get_data (G_OBJECT (window), "spin2");
7601 *a = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (spin1));
7602 *b = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (spin2));
7606 set_size_callback (GtkWidget *widget,
7611 get_ints (data, &w, &h);
7613 gtk_window_resize (GTK_WINDOW (g_object_get_data (data, "target")), w, h);
7617 unset_default_size_callback (GtkWidget *widget,
7620 gtk_window_set_default_size (g_object_get_data (data, "target"),
7625 set_default_size_callback (GtkWidget *widget,
7630 get_ints (data, &w, &h);
7632 gtk_window_set_default_size (g_object_get_data (data, "target"),
7637 unset_size_request_callback (GtkWidget *widget,
7640 gtk_widget_set_size_request (g_object_get_data (data, "target"),
7645 set_size_request_callback (GtkWidget *widget,
7650 get_ints (data, &w, &h);
7652 gtk_widget_set_size_request (g_object_get_data (data, "target"),
7657 set_location_callback (GtkWidget *widget,
7662 get_ints (data, &x, &y);
7664 gtk_window_move (g_object_get_data (data, "target"), x, y);
7668 move_to_position_callback (GtkWidget *widget,
7674 window = g_object_get_data (data, "target");
7676 gtk_window_get_position (window, &x, &y);
7678 gtk_window_move (window, x, y);
7682 set_geometry_callback (GtkWidget *entry,
7688 target = GTK_WINDOW (g_object_get_data (G_OBJECT (data), "target"));
7690 text = gtk_editable_get_chars (GTK_EDITABLE (entry), 0, -1);
7692 if (!gtk_window_parse_geometry (target, text))
7693 g_print ("Bad geometry string '%s'\n", text);
7699 resizable_callback (GtkWidget *widget,
7702 g_object_set (g_object_get_data (data, "target"),
7703 "resizable", GTK_TOGGLE_BUTTON (widget)->active,
7708 gravity_selected (GtkWidget *widget,
7711 gtk_window_set_gravity (GTK_WINDOW (g_object_get_data (data, "target")),
7712 gtk_combo_box_get_active (GTK_COMBO_BOX (widget)) + GDK_GRAVITY_NORTH_WEST);
7716 pos_selected (GtkWidget *widget,
7719 gtk_window_set_position (GTK_WINDOW (g_object_get_data (data, "target")),
7720 gtk_combo_box_get_active (GTK_COMBO_BOX (widget)) + GTK_WIN_POS_NONE);
7724 move_gravity_window_to_current_position (GtkWidget *widget,
7730 window = GTK_WINDOW (data);
7732 gtk_window_get_position (window, &x, &y);
7734 gtk_window_move (window, x, y);
7738 get_screen_corner (GtkWindow *window,
7743 GdkScreen * screen = gtk_window_get_screen (window);
7745 gtk_window_get_size (GTK_WINDOW (window), &w, &h);
7747 switch (gtk_window_get_gravity (window))
7749 case GDK_GRAVITY_SOUTH_EAST:
7750 *x = gdk_screen_get_width (screen) - w;
7751 *y = gdk_screen_get_height (screen) - h;
7754 case GDK_GRAVITY_NORTH_EAST:
7755 *x = gdk_screen_get_width (screen) - w;
7759 case GDK_GRAVITY_SOUTH_WEST:
7761 *y = gdk_screen_get_height (screen) - h;
7764 case GDK_GRAVITY_NORTH_WEST:
7769 case GDK_GRAVITY_SOUTH:
7770 *x = (gdk_screen_get_width (screen) - w) / 2;
7771 *y = gdk_screen_get_height (screen) - h;
7774 case GDK_GRAVITY_NORTH:
7775 *x = (gdk_screen_get_width (screen) - w) / 2;
7779 case GDK_GRAVITY_WEST:
7781 *y = (gdk_screen_get_height (screen) - h) / 2;
7784 case GDK_GRAVITY_EAST:
7785 *x = gdk_screen_get_width (screen) - w;
7786 *y = (gdk_screen_get_height (screen) - h) / 2;
7789 case GDK_GRAVITY_CENTER:
7790 *x = (gdk_screen_get_width (screen) - w) / 2;
7791 *y = (gdk_screen_get_height (screen) - h) / 2;
7794 case GDK_GRAVITY_STATIC:
7795 /* pick some random numbers */
7801 g_assert_not_reached ();
7807 move_gravity_window_to_starting_position (GtkWidget *widget,
7813 window = GTK_WINDOW (data);
7815 get_screen_corner (window,
7818 gtk_window_move (window, x, y);
7822 make_gravity_window (GtkWidget *destroy_with,
7831 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
7833 gtk_window_set_screen (GTK_WINDOW (window),
7834 gtk_widget_get_screen (destroy_with));
7836 vbox = gtk_vbox_new (FALSE, 0);
7837 gtk_widget_show (vbox);
7839 gtk_container_add (GTK_CONTAINER (window), vbox);
7840 gtk_window_set_title (GTK_WINDOW (window), title);
7841 gtk_window_set_gravity (GTK_WINDOW (window), gravity);
7843 g_signal_connect_object (destroy_with,
7845 G_CALLBACK (gtk_widget_destroy),
7850 button = gtk_button_new_with_mnemonic ("_Move to current position");
7852 g_signal_connect (button, "clicked",
7853 G_CALLBACK (move_gravity_window_to_current_position),
7856 gtk_container_add (GTK_CONTAINER (vbox), button);
7857 gtk_widget_show (button);
7859 button = gtk_button_new_with_mnemonic ("Move to _starting position");
7861 g_signal_connect (button, "clicked",
7862 G_CALLBACK (move_gravity_window_to_starting_position),
7865 gtk_container_add (GTK_CONTAINER (vbox), button);
7866 gtk_widget_show (button);
7868 /* Pretend this is the result of --geometry.
7869 * DO NOT COPY THIS CODE unless you are setting --geometry results,
7870 * and in that case you probably should just use gtk_window_parse_geometry().
7871 * AGAIN, DO NOT SET GDK_HINT_USER_POS! It violates the ICCCM unless
7872 * you are parsing --geometry or equivalent.
7874 gtk_window_set_geometry_hints (GTK_WINDOW (window),
7878 gtk_window_set_default_size (GTK_WINDOW (window),
7881 get_screen_corner (GTK_WINDOW (window), &x, &y);
7883 gtk_window_move (GTK_WINDOW (window),
7890 do_gravity_test (GtkWidget *widget,
7893 GtkWidget *destroy_with = data;
7896 /* We put a window at each gravity point on the screen. */
7897 window = make_gravity_window (destroy_with, GDK_GRAVITY_NORTH_WEST,
7899 gtk_widget_show (window);
7901 window = make_gravity_window (destroy_with, GDK_GRAVITY_SOUTH_EAST,
7903 gtk_widget_show (window);
7905 window = make_gravity_window (destroy_with, GDK_GRAVITY_NORTH_EAST,
7907 gtk_widget_show (window);
7909 window = make_gravity_window (destroy_with, GDK_GRAVITY_SOUTH_WEST,
7911 gtk_widget_show (window);
7913 window = make_gravity_window (destroy_with, GDK_GRAVITY_SOUTH,
7915 gtk_widget_show (window);
7917 window = make_gravity_window (destroy_with, GDK_GRAVITY_NORTH,
7919 gtk_widget_show (window);
7922 window = make_gravity_window (destroy_with, GDK_GRAVITY_WEST,
7924 gtk_widget_show (window);
7927 window = make_gravity_window (destroy_with, GDK_GRAVITY_EAST,
7929 gtk_widget_show (window);
7931 window = make_gravity_window (destroy_with, GDK_GRAVITY_CENTER,
7933 gtk_widget_show (window);
7935 window = make_gravity_window (destroy_with, GDK_GRAVITY_STATIC,
7937 gtk_widget_show (window);
7941 window_controls (GtkWidget *window)
7943 GtkWidget *control_window;
7953 control_window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
7955 gtk_window_set_screen (GTK_WINDOW (control_window),
7956 gtk_widget_get_screen (window));
7958 gtk_window_set_title (GTK_WINDOW (control_window), "Size controls");
7960 g_object_set_data (G_OBJECT (control_window),
7964 g_signal_connect_object (control_window,
7966 G_CALLBACK (gtk_widget_destroy),
7970 vbox = gtk_vbox_new (FALSE, 5);
7972 gtk_container_add (GTK_CONTAINER (control_window), vbox);
7974 label = gtk_label_new ("<no configure events>");
7975 gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
7977 g_signal_connect (window,
7979 G_CALLBACK (configure_event_callback),
7982 adj = gtk_adjustment_new (10.0, -2000.0, 2000.0, 1.0, 5.0, 0.0);
7983 spin = gtk_spin_button_new (adj, 0, 0);
7985 gtk_box_pack_start (GTK_BOX (vbox), spin, FALSE, FALSE, 0);
7987 g_object_set_data (G_OBJECT (control_window), "spin1", spin);
7989 adj = gtk_adjustment_new (10.0, -2000.0, 2000.0, 1.0, 5.0, 0.0);
7990 spin = gtk_spin_button_new (adj, 0, 0);
7992 gtk_box_pack_start (GTK_BOX (vbox), spin, FALSE, FALSE, 0);
7994 g_object_set_data (G_OBJECT (control_window), "spin2", spin);
7996 entry = gtk_entry_new ();
7997 gtk_box_pack_start (GTK_BOX (vbox), entry, FALSE, FALSE, 0);
7999 g_signal_connect (entry, "changed",
8000 G_CALLBACK (set_geometry_callback),
8003 button = gtk_button_new_with_label ("Show gravity test windows");
8004 g_signal_connect_swapped (button,
8006 G_CALLBACK (do_gravity_test),
8008 gtk_box_pack_end (GTK_BOX (vbox), button, FALSE, FALSE, 0);
8010 button = gtk_button_new_with_label ("Reshow with initial size");
8011 g_signal_connect_object (button,
8013 G_CALLBACK (gtk_window_reshow_with_initial_size),
8016 gtk_box_pack_end (GTK_BOX (vbox), button, FALSE, FALSE, 0);
8018 button = gtk_button_new_with_label ("Queue resize");
8019 g_signal_connect_object (button,
8021 G_CALLBACK (gtk_widget_queue_resize),
8024 gtk_box_pack_end (GTK_BOX (vbox), button, FALSE, FALSE, 0);
8026 button = gtk_button_new_with_label ("Resize");
8027 g_signal_connect (button,
8029 G_CALLBACK (set_size_callback),
8031 gtk_box_pack_end (GTK_BOX (vbox), button, FALSE, FALSE, 0);
8033 button = gtk_button_new_with_label ("Set default size");
8034 g_signal_connect (button,
8036 G_CALLBACK (set_default_size_callback),
8038 gtk_box_pack_end (GTK_BOX (vbox), button, FALSE, FALSE, 0);
8040 button = gtk_button_new_with_label ("Unset default size");
8041 g_signal_connect (button,
8043 G_CALLBACK (unset_default_size_callback),
8045 gtk_box_pack_end (GTK_BOX (vbox), button, FALSE, FALSE, 0);
8047 button = gtk_button_new_with_label ("Set size request");
8048 g_signal_connect (button,
8050 G_CALLBACK (set_size_request_callback),
8052 gtk_box_pack_end (GTK_BOX (vbox), button, FALSE, FALSE, 0);
8054 button = gtk_button_new_with_label ("Unset size request");
8055 g_signal_connect (button,
8057 G_CALLBACK (unset_size_request_callback),
8059 gtk_box_pack_end (GTK_BOX (vbox), button, FALSE, FALSE, 0);
8061 button = gtk_button_new_with_label ("Move");
8062 g_signal_connect (button,
8064 G_CALLBACK (set_location_callback),
8066 gtk_box_pack_end (GTK_BOX (vbox), button, FALSE, FALSE, 0);
8068 button = gtk_button_new_with_label ("Move to current position");
8069 g_signal_connect (button,
8071 G_CALLBACK (move_to_position_callback),
8073 gtk_box_pack_end (GTK_BOX (vbox), button, FALSE, FALSE, 0);
8075 button = gtk_check_button_new_with_label ("Allow resize");
8076 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE);
8077 g_signal_connect (button,
8079 G_CALLBACK (resizable_callback),
8081 gtk_box_pack_end (GTK_BOX (vbox), button, FALSE, FALSE, 0);
8083 button = gtk_button_new_with_mnemonic ("_Show");
8084 g_signal_connect_object (button,
8086 G_CALLBACK (gtk_widget_show),
8089 gtk_box_pack_end (GTK_BOX (vbox), button, FALSE, FALSE, 0);
8091 button = gtk_button_new_with_mnemonic ("_Hide");
8092 g_signal_connect_object (button,
8094 G_CALLBACK (gtk_widget_hide),
8097 gtk_box_pack_end (GTK_BOX (vbox), button, FALSE, FALSE, 0);
8099 om = gtk_combo_box_text_new ();
8103 static gchar *names[] = {
8104 "GDK_GRAVITY_NORTH_WEST",
8105 "GDK_GRAVITY_NORTH",
8106 "GDK_GRAVITY_NORTH_EAST",
8108 "GDK_GRAVITY_CENTER",
8110 "GDK_GRAVITY_SOUTH_WEST",
8111 "GDK_GRAVITY_SOUTH",
8112 "GDK_GRAVITY_SOUTH_EAST",
8113 "GDK_GRAVITY_STATIC",
8117 g_assert (names[i]);
8118 gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (om), names[i]);
8123 g_signal_connect (om,
8125 G_CALLBACK (gravity_selected),
8128 gtk_box_pack_end (GTK_BOX (vbox), om, FALSE, FALSE, 0);
8131 om = gtk_combo_box_text_new ();
8135 static gchar *names[] = {
8137 "GTK_WIN_POS_CENTER",
8138 "GTK_WIN_POS_MOUSE",
8139 "GTK_WIN_POS_CENTER_ALWAYS",
8140 "GTK_WIN_POS_CENTER_ON_PARENT",
8144 g_assert (names[i]);
8145 gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (om), names[i]);
8150 g_signal_connect (om,
8152 G_CALLBACK (pos_selected),
8155 gtk_box_pack_end (GTK_BOX (vbox), om, FALSE, FALSE, 0);
8157 gtk_widget_show_all (vbox);
8159 return control_window;
8163 create_window_sizing (GtkWidget *widget)
8165 static GtkWidget *window = NULL;
8166 static GtkWidget *target_window = NULL;
8172 target_window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
8173 gtk_window_set_screen (GTK_WINDOW (target_window),
8174 gtk_widget_get_screen (widget));
8175 label = gtk_label_new (NULL);
8176 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");
8177 gtk_container_add (GTK_CONTAINER (target_window), label);
8178 gtk_widget_show (label);
8180 g_signal_connect (target_window, "destroy",
8181 G_CALLBACK (gtk_widget_destroyed),
8184 window = window_controls (target_window);
8186 g_signal_connect (window, "destroy",
8187 G_CALLBACK (gtk_widget_destroyed),
8190 gtk_window_set_title (GTK_WINDOW (target_window), "Window to size");
8193 /* don't show target window by default, we want to allow testing
8194 * of behavior on first show.
8197 if (!gtk_widget_get_visible (window))
8198 gtk_widget_show (window);
8200 gtk_widget_destroy (window);
8207 typedef struct _ProgressData {
8210 GtkWidget *block_spin;
8211 GtkWidget *x_align_spin;
8212 GtkWidget *y_align_spin;
8213 GtkWidget *step_spin;
8214 GtkWidget *act_blocks_spin;
8225 progress_timeout (gpointer data)
8227 ProgressData *pdata = data;
8231 if (pdata->activity)
8233 gtk_progress_bar_pulse (GTK_PROGRESS_BAR (pdata->pbar));
8235 text = g_strdup_printf ("%s", "???");
8239 new_val = gtk_progress_bar_get_fraction (GTK_PROGRESS_BAR (pdata->pbar)) + 0.01;
8242 gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (pdata->pbar), new_val);
8244 text = g_strdup_printf ("%.0f%%", 100 * new_val);
8247 gtk_label_set_text (GTK_LABEL (pdata->label), text);
8254 destroy_progress (GtkWidget *widget,
8255 ProgressData **pdata)
8257 g_source_remove ((*pdata)->timer);
8258 (*pdata)->timer = 0;
8259 (*pdata)->window = NULL;
8265 progressbar_toggle_orientation (GtkWidget *widget, gpointer data)
8267 ProgressData *pdata;
8270 pdata = (ProgressData *) data;
8272 if (!gtk_widget_get_mapped (widget))
8275 i = gtk_combo_box_get_active (GTK_COMBO_BOX (widget));
8277 if (i == 0 || i == 1)
8278 gtk_orientable_set_orientation (GTK_ORIENTABLE (pdata->pbar), GTK_ORIENTATION_HORIZONTAL);
8280 gtk_orientable_set_orientation (GTK_ORIENTABLE (pdata->pbar), GTK_ORIENTATION_VERTICAL);
8282 if (i == 1 || i == 2)
8283 gtk_progress_bar_set_inverted (GTK_PROGRESS_BAR (pdata->pbar), TRUE);
8285 gtk_progress_bar_set_inverted (GTK_PROGRESS_BAR (pdata->pbar), FALSE);
8289 toggle_show_text (GtkWidget *widget, ProgressData *pdata)
8293 active = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget));
8294 gtk_progress_bar_set_show_text (GTK_PROGRESS_BAR (pdata->pbar), active);
8298 progressbar_toggle_ellipsize (GtkWidget *widget,
8301 ProgressData *pdata = data;
8302 if (gtk_widget_is_drawable (widget))
8304 gint i = gtk_combo_box_get_active (GTK_COMBO_BOX (widget));
8305 gtk_progress_bar_set_ellipsize (GTK_PROGRESS_BAR (pdata->pbar), i);
8310 toggle_activity_mode (GtkWidget *widget, ProgressData *pdata)
8312 pdata->activity = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget));
8316 entry_changed (GtkWidget *widget, ProgressData *pdata)
8318 gtk_progress_bar_set_text (GTK_PROGRESS_BAR (pdata->pbar),
8319 gtk_entry_get_text (GTK_ENTRY (pdata->entry)));
8323 create_progress_bar (GtkWidget *widget)
8325 GtkWidget *action_area, *content_area;
8335 static ProgressData *pdata = NULL;
8337 static gchar *items1[] =
8345 static char *ellipsize_items[] = {
8346 "None", // PANGO_ELLIPSIZE_NONE,
8347 "Start", // PANGO_ELLIPSIZE_START,
8348 "Middle", // PANGO_ELLIPSIZE_MIDDLE,
8349 "End", // PANGO_ELLIPSIZE_END
8353 pdata = g_new0 (ProgressData, 1);
8357 pdata->window = gtk_dialog_new ();
8359 gtk_window_set_screen (GTK_WINDOW (pdata->window),
8360 gtk_widget_get_screen (widget));
8362 gtk_window_set_resizable (GTK_WINDOW (pdata->window), TRUE);
8364 g_signal_connect (pdata->window, "destroy",
8365 G_CALLBACK (destroy_progress),
8369 content_area = gtk_dialog_get_content_area (GTK_DIALOG (pdata->window));
8370 action_area = gtk_dialog_get_action_area (GTK_DIALOG (pdata->window));
8372 gtk_window_set_title (GTK_WINDOW (pdata->window), "GtkProgressBar");
8373 gtk_container_set_border_width (GTK_CONTAINER (pdata->window), 0);
8375 vbox = gtk_vbox_new (FALSE, 5);
8376 gtk_container_set_border_width (GTK_CONTAINER (vbox), 10);
8377 gtk_box_pack_start (GTK_BOX (content_area), vbox, FALSE, TRUE, 0);
8379 frame = gtk_frame_new ("Progress");
8380 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, TRUE, 0);
8382 vbox2 = gtk_vbox_new (FALSE, 5);
8383 gtk_container_add (GTK_CONTAINER (frame), vbox2);
8385 align = gtk_alignment_new (0.5, 0.5, 0, 0);
8386 gtk_box_pack_start (GTK_BOX (vbox2), align, FALSE, FALSE, 5);
8388 pdata->pbar = gtk_progress_bar_new ();
8389 gtk_progress_bar_set_ellipsize (GTK_PROGRESS_BAR (pdata->pbar),
8390 PANGO_ELLIPSIZE_MIDDLE);
8392 gtk_container_add (GTK_CONTAINER (align), pdata->pbar);
8393 pdata->timer = g_timeout_add (100, (GSourceFunc)progress_timeout, pdata);
8395 align = gtk_alignment_new (0.5, 0.5, 0, 0);
8396 gtk_box_pack_start (GTK_BOX (vbox2), align, FALSE, FALSE, 5);
8398 hbox = gtk_hbox_new (FALSE, 5);
8399 gtk_container_add (GTK_CONTAINER (align), hbox);
8400 label = gtk_label_new ("Label updated by user :");
8401 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
8402 pdata->label = gtk_label_new ("");
8403 gtk_box_pack_start (GTK_BOX (hbox), pdata->label, FALSE, TRUE, 0);
8405 frame = gtk_frame_new ("Options");
8406 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, TRUE, 0);
8408 vbox2 = gtk_vbox_new (FALSE, 5);
8409 gtk_container_add (GTK_CONTAINER (frame), vbox2);
8411 tab = gtk_table_new (7, 2, FALSE);
8412 gtk_box_pack_start (GTK_BOX (vbox2), tab, FALSE, TRUE, 0);
8414 label = gtk_label_new ("Orientation :");
8415 gtk_table_attach (GTK_TABLE (tab), label, 0, 1, 0, 1,
8416 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
8418 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
8420 pdata->omenu1 = build_option_menu (items1, 4, 0,
8421 progressbar_toggle_orientation,
8423 hbox = gtk_hbox_new (FALSE, 0);
8424 gtk_table_attach (GTK_TABLE (tab), hbox, 1, 2, 0, 1,
8425 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
8427 gtk_box_pack_start (GTK_BOX (hbox), pdata->omenu1, TRUE, TRUE, 0);
8429 check = gtk_check_button_new_with_label ("Show text");
8430 g_signal_connect (check, "clicked",
8431 G_CALLBACK (toggle_show_text),
8433 gtk_table_attach (GTK_TABLE (tab), check, 0, 1, 1, 2,
8434 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
8437 hbox = gtk_hbox_new (FALSE, 0);
8438 gtk_table_attach (GTK_TABLE (tab), hbox, 1, 2, 1, 2,
8439 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
8442 label = gtk_label_new ("Text: ");
8443 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
8445 pdata->entry = gtk_entry_new ();
8446 g_signal_connect (pdata->entry, "changed",
8447 G_CALLBACK (entry_changed),
8449 gtk_box_pack_start (GTK_BOX (hbox), pdata->entry, TRUE, TRUE, 0);
8450 gtk_widget_set_size_request (pdata->entry, 100, -1);
8452 label = gtk_label_new ("Ellipsize text :");
8453 gtk_table_attach (GTK_TABLE (tab), label, 0, 1, 10, 11,
8454 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
8456 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
8457 pdata->elmenu = build_option_menu (ellipsize_items,
8458 sizeof (ellipsize_items) / sizeof (ellipsize_items[0]),
8459 2, // PANGO_ELLIPSIZE_MIDDLE
8460 progressbar_toggle_ellipsize,
8462 hbox = gtk_hbox_new (FALSE, 0);
8463 gtk_table_attach (GTK_TABLE (tab), hbox, 1, 2, 10, 11,
8464 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
8466 gtk_box_pack_start (GTK_BOX (hbox), pdata->elmenu, TRUE, TRUE, 0);
8468 check = gtk_check_button_new_with_label ("Activity mode");
8469 g_signal_connect (check, "clicked",
8470 G_CALLBACK (toggle_activity_mode), pdata);
8471 gtk_table_attach (GTK_TABLE (tab), check, 0, 1, 15, 16,
8472 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
8475 button = gtk_button_new_with_label ("close");
8476 g_signal_connect_swapped (button, "clicked",
8477 G_CALLBACK (gtk_widget_destroy),
8479 gtk_widget_set_can_default (button, TRUE);
8480 gtk_box_pack_start (GTK_BOX (action_area), button, TRUE, TRUE, 0);
8481 gtk_widget_grab_default (button);
8484 if (!gtk_widget_get_visible (pdata->window))
8485 gtk_widget_show_all (pdata->window);
8487 gtk_widget_destroy (pdata->window);
8499 GtkWidget *res_widget;
8503 find_widget (GtkWidget *widget, FindWidgetData *data)
8505 GtkAllocation new_allocation;
8509 gtk_widget_get_allocation (widget, &new_allocation);
8511 if (data->found || !gtk_widget_get_mapped (widget))
8514 /* Note that in the following code, we only count the
8515 * position as being inside a WINDOW widget if it is inside
8516 * widget->window; points that are outside of widget->window
8517 * but within the allocation are not counted. This is consistent
8518 * with the way we highlight drag targets.
8520 if (gtk_widget_get_has_window (widget))
8522 new_allocation.x = 0;
8523 new_allocation.y = 0;
8526 if (gtk_widget_get_parent (widget) && !data->first)
8528 GdkWindow *window = gtk_widget_get_window (widget);
8529 while (window != gtk_widget_get_window (gtk_widget_get_parent (widget)))
8531 gint tx, ty, twidth, theight;
8533 twidth = gdk_window_get_width (window);
8534 theight = gdk_window_get_height (window);
8536 if (new_allocation.x < 0)
8538 new_allocation.width += new_allocation.x;
8539 new_allocation.x = 0;
8541 if (new_allocation.y < 0)
8543 new_allocation.height += new_allocation.y;
8544 new_allocation.y = 0;
8546 if (new_allocation.x + new_allocation.width > twidth)
8547 new_allocation.width = twidth - new_allocation.x;
8548 if (new_allocation.y + new_allocation.height > theight)
8549 new_allocation.height = theight - new_allocation.y;
8551 gdk_window_get_position (window, &tx, &ty);
8552 new_allocation.x += tx;
8554 new_allocation.y += ty;
8557 window = gdk_window_get_parent (window);
8561 if ((data->x >= new_allocation.x) && (data->y >= new_allocation.y) &&
8562 (data->x < new_allocation.x + new_allocation.width) &&
8563 (data->y < new_allocation.y + new_allocation.height))
8565 /* First, check if the drag is in a valid drop site in
8566 * one of our children
8568 if (GTK_IS_CONTAINER (widget))
8570 FindWidgetData new_data = *data;
8572 new_data.x -= x_offset;
8573 new_data.y -= y_offset;
8574 new_data.found = FALSE;
8575 new_data.first = FALSE;
8577 gtk_container_forall (GTK_CONTAINER (widget),
8578 (GtkCallback)find_widget,
8581 data->found = new_data.found;
8583 data->res_widget = new_data.res_widget;
8586 /* If not, and this widget is registered as a drop site, check to
8587 * emit "drag_motion" to check if we are actually in
8593 data->res_widget = widget;
8599 find_widget_at_pointer (GdkDisplay *display)
8601 GtkWidget *widget = NULL;
8602 GdkWindow *pointer_window;
8604 FindWidgetData data;
8606 pointer_window = gdk_display_get_window_at_pointer (display, NULL, NULL);
8610 gpointer widget_ptr;
8612 gdk_window_get_user_data (pointer_window, &widget_ptr);
8613 widget = widget_ptr;
8618 gdk_window_get_pointer (gtk_widget_get_window (widget),
8626 find_widget (widget, &data);
8628 return data.res_widget;
8634 struct PropertiesData {
8642 destroy_properties (GtkWidget *widget,
8643 struct PropertiesData *data)
8647 *data->window = NULL;
8648 data->window = NULL;
8653 gdk_cursor_unref (data->cursor);
8654 data->cursor = NULL;
8659 g_signal_handler_disconnect (widget, data->handler);
8667 property_query_event (GtkWidget *widget,
8669 struct PropertiesData *data)
8671 GtkWidget *res_widget = NULL;
8673 if (!data->in_query)
8676 if (event->type == GDK_BUTTON_RELEASE)
8678 gtk_grab_remove (widget);
8679 gdk_display_pointer_ungrab (gtk_widget_get_display (widget),
8682 res_widget = find_widget_at_pointer (gtk_widget_get_display (widget));
8685 g_object_set_data (G_OBJECT (res_widget), "prop-editor-screen",
8686 gtk_widget_get_screen (widget));
8687 create_prop_editor (G_OBJECT (res_widget), 0);
8690 data->in_query = FALSE;
8697 query_properties (GtkButton *button,
8698 struct PropertiesData *data)
8700 GtkWidget *widget = GTK_WIDGET (button);
8703 g_signal_connect (button, "event",
8704 G_CALLBACK (property_query_event), data);
8708 data->cursor = gdk_cursor_new_for_display (gtk_widget_get_display (widget),
8711 failure = gdk_pointer_grab (gtk_widget_get_window (widget),
8713 GDK_BUTTON_RELEASE_MASK,
8718 gtk_grab_add (widget);
8720 data->in_query = TRUE;
8724 create_properties (GtkWidget *widget)
8726 static GtkWidget *window = NULL;
8730 struct PropertiesData *data;
8732 data = g_new (struct PropertiesData, 1);
8733 data->window = &window;
8734 data->in_query = FALSE;
8735 data->cursor = NULL;
8740 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
8742 gtk_window_set_screen (GTK_WINDOW (window),
8743 gtk_widget_get_screen (widget));
8745 data->handler = g_signal_connect (window, "destroy",
8746 G_CALLBACK (destroy_properties),
8749 gtk_window_set_title (GTK_WINDOW (window), "test properties");
8750 gtk_container_set_border_width (GTK_CONTAINER (window), 10);
8752 vbox = gtk_vbox_new (FALSE, 1);
8753 gtk_container_add (GTK_CONTAINER (window), vbox);
8755 label = gtk_label_new ("This is just a dumb test to test properties.\nIf you need a generic module, get GLE.");
8756 gtk_box_pack_start (GTK_BOX (vbox), label, TRUE, TRUE, 0);
8758 button = gtk_button_new_with_label ("Query properties");
8759 gtk_box_pack_start (GTK_BOX (vbox), button, TRUE, TRUE, 0);
8760 g_signal_connect (button, "clicked",
8761 G_CALLBACK (query_properties),
8765 if (!gtk_widget_get_visible (window))
8766 gtk_widget_show_all (window);
8768 gtk_widget_destroy (window);
8772 struct SnapshotData {
8773 GtkWidget *toplevel_button;
8777 gboolean is_toplevel;
8782 destroy_snapshot_data (GtkWidget *widget,
8783 struct SnapshotData *data)
8786 *data->window = NULL;
8790 gdk_cursor_unref (data->cursor);
8791 data->cursor = NULL;
8796 g_signal_handler_disconnect (widget, data->handler);
8804 snapshot_widget_event (GtkWidget *widget,
8806 struct SnapshotData *data)
8808 GtkWidget *res_widget = NULL;
8810 if (!data->in_query)
8813 if (event->type == GDK_BUTTON_RELEASE)
8815 gtk_grab_remove (widget);
8816 gdk_display_pointer_ungrab (gtk_widget_get_display (widget),
8819 res_widget = find_widget_at_pointer (gtk_widget_get_display (widget));
8820 if (data->is_toplevel && res_widget)
8821 res_widget = gtk_widget_get_toplevel (res_widget);
8824 cairo_surface_t *surface;
8825 GtkWidget *window, *image;
8830 width = gtk_widget_get_allocated_width (res_widget);
8831 height = gtk_widget_get_allocated_height (res_widget);
8833 surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, width, height);
8835 cr = cairo_create (surface);
8836 gtk_widget_draw (res_widget, cr);
8839 pixbuf = gdk_pixbuf_get_from_surface (surface,
8842 cairo_surface_destroy (surface);
8844 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
8845 image = gtk_image_new_from_pixbuf (pixbuf);
8846 g_object_unref (pixbuf);
8848 gtk_container_add (GTK_CONTAINER (window), image);
8849 gtk_widget_show_all (window);
8852 data->in_query = FALSE;
8859 snapshot_widget (GtkButton *button,
8860 struct SnapshotData *data)
8862 GtkWidget *widget = GTK_WIDGET (button);
8865 g_signal_connect (button, "event",
8866 G_CALLBACK (snapshot_widget_event), data);
8868 data->is_toplevel = widget == data->toplevel_button;
8871 data->cursor = gdk_cursor_new_for_display (gtk_widget_get_display (widget),
8874 failure = gdk_pointer_grab (gtk_widget_get_window (widget),
8876 GDK_BUTTON_RELEASE_MASK,
8881 gtk_grab_add (widget);
8883 data->in_query = TRUE;
8887 create_snapshot (GtkWidget *widget)
8889 static GtkWidget *window = NULL;
8892 struct SnapshotData *data;
8894 data = g_new (struct SnapshotData, 1);
8895 data->window = &window;
8896 data->in_query = FALSE;
8897 data->cursor = NULL;
8902 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
8904 gtk_window_set_screen (GTK_WINDOW (window),
8905 gtk_widget_get_screen (widget));
8907 data->handler = g_signal_connect (window, "destroy",
8908 G_CALLBACK (destroy_snapshot_data),
8911 gtk_window_set_title (GTK_WINDOW (window), "test snapshot");
8912 gtk_container_set_border_width (GTK_CONTAINER (window), 10);
8914 vbox = gtk_vbox_new (FALSE, 1);
8915 gtk_container_add (GTK_CONTAINER (window), vbox);
8917 button = gtk_button_new_with_label ("Snapshot widget");
8918 gtk_box_pack_start (GTK_BOX (vbox), button, TRUE, TRUE, 0);
8919 g_signal_connect (button, "clicked",
8920 G_CALLBACK (snapshot_widget),
8923 button = gtk_button_new_with_label ("Snapshot toplevel");
8924 data->toplevel_button = button;
8925 gtk_box_pack_start (GTK_BOX (vbox), button, TRUE, TRUE, 0);
8926 g_signal_connect (button, "clicked",
8927 G_CALLBACK (snapshot_widget),
8931 if (!gtk_widget_get_visible (window))
8932 gtk_widget_show_all (window);
8934 gtk_widget_destroy (window);
8943 selection_test_received (GtkWidget *tree_view,
8944 GtkSelectionData *data)
8946 GtkTreeModel *model;
8947 GtkListStore *store;
8951 if (data->length < 0)
8953 g_print ("Selection retrieval failed\n");
8956 if (data->type != GDK_SELECTION_TYPE_ATOM)
8958 g_print ("Selection \"TARGETS\" was not returned as atoms!\n");
8962 /* Clear out any current list items */
8964 model = gtk_tree_view_get_model (GTK_TREE_VIEW (tree_view));
8965 store = GTK_LIST_STORE (model);
8966 gtk_list_store_clear (store);
8968 /* Add new items to list */
8970 atoms = (GdkAtom *)data->data;
8972 l = data->length / sizeof (GdkAtom);
8973 for (i = 0; i < l; i++)
8978 name = gdk_atom_name (atoms[i]);
8981 gtk_list_store_insert_with_values (store, &iter, i, 0, name, -1);
8985 gtk_list_store_insert_with_values (store, &iter, i, 0, "(bad atom)", -1);
8992 selection_test_get_targets (GtkWidget *widget, GtkWidget *tree_view)
8994 static GdkAtom targets_atom = GDK_NONE;
8996 if (targets_atom == GDK_NONE)
8997 targets_atom = gdk_atom_intern ("TARGETS", FALSE);
8999 gtk_selection_convert (tree_view, GDK_SELECTION_PRIMARY, targets_atom,
9004 create_selection_test (GtkWidget *widget)
9006 static GtkWidget *window = NULL;
9007 GtkWidget *action_area, *content_area;
9010 GtkWidget *scrolled_win;
9011 GtkListStore* store;
9012 GtkWidget *tree_view;
9013 GtkTreeViewColumn *column;
9014 GtkCellRenderer *renderer;
9019 window = gtk_dialog_new ();
9021 gtk_window_set_screen (GTK_WINDOW (window),
9022 gtk_widget_get_screen (widget));
9024 g_signal_connect (window, "destroy",
9025 G_CALLBACK (gtk_widget_destroyed),
9028 content_area = gtk_dialog_get_content_area (GTK_DIALOG (window));
9029 action_area = gtk_dialog_get_action_area (GTK_DIALOG (window));
9031 gtk_window_set_title (GTK_WINDOW (window), "Selection Test");
9032 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
9034 /* Create the list */
9036 vbox = gtk_vbox_new (FALSE, 5);
9037 gtk_container_set_border_width (GTK_CONTAINER (vbox), 10);
9038 gtk_box_pack_start (GTK_BOX (content_area), vbox, TRUE, TRUE, 0);
9040 label = gtk_label_new ("Gets available targets for current selection");
9041 gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
9043 scrolled_win = gtk_scrolled_window_new (NULL, NULL);
9044 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win),
9045 GTK_POLICY_AUTOMATIC,
9046 GTK_POLICY_AUTOMATIC);
9047 gtk_box_pack_start (GTK_BOX (vbox), scrolled_win, TRUE, TRUE, 0);
9048 gtk_widget_set_size_request (scrolled_win, 100, 200);
9050 store = gtk_list_store_new (1, G_TYPE_STRING);
9051 tree_view = gtk_tree_view_new_with_model (GTK_TREE_MODEL (store));
9052 gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scrolled_win), tree_view);
9054 renderer = gtk_cell_renderer_text_new ();
9055 column = gtk_tree_view_column_new_with_attributes ("Target", renderer,
9057 gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view), column);
9059 g_signal_connect (tree_view, "selection_received",
9060 G_CALLBACK (selection_test_received), NULL);
9062 /* .. And create some buttons */
9063 button = gtk_button_new_with_label ("Get Targets");
9064 gtk_box_pack_start (GTK_BOX (action_area), button, TRUE, TRUE, 0);
9066 g_signal_connect (button, "clicked",
9067 G_CALLBACK (selection_test_get_targets), tree_view);
9069 button = gtk_button_new_with_label ("Quit");
9070 gtk_box_pack_start (GTK_BOX (action_area), button, TRUE, TRUE, 0);
9072 g_signal_connect_swapped (button, "clicked",
9073 G_CALLBACK (gtk_widget_destroy),
9077 if (!gtk_widget_get_visible (window))
9078 gtk_widget_show_all (window);
9080 gtk_widget_destroy (window);
9087 static int scroll_test_pos = 0.0;
9090 scroll_test_draw (GtkWidget *widget,
9095 gint imin, imax, jmin, jmax;
9098 gdk_cairo_get_clip_rectangle (cr, &clip);
9100 imin = (clip.x) / 10;
9101 imax = (clip.x + clip.width + 9) / 10;
9103 jmin = ((int)adj->value + clip.y) / 10;
9104 jmax = ((int)adj->value + clip.y + clip.height + 9) / 10;
9106 for (i=imin; i<imax; i++)
9107 for (j=jmin; j<jmax; j++)
9109 cairo_rectangle (cr, 10*i, 10*j - (int)adj->value, 1+i%10, 1+j%10);
9117 scroll_test_scroll (GtkWidget *widget, GdkEventScroll *event,
9120 gdouble new_value = adj->value + ((event->direction == GDK_SCROLL_UP) ?
9121 -adj->page_increment / 2:
9122 adj->page_increment / 2);
9123 new_value = CLAMP (new_value, adj->lower, adj->upper - adj->page_size);
9124 gtk_adjustment_set_value (adj, new_value);
9130 scroll_test_configure (GtkWidget *widget, GdkEventConfigure *event,
9133 GtkAllocation allocation;
9135 gtk_widget_get_allocation (widget, &allocation);
9136 adj->page_increment = 0.9 * allocation.height;
9137 adj->page_size = allocation.height;
9139 g_signal_emit_by_name (adj, "changed");
9143 scroll_test_adjustment_changed (GtkAdjustment *adj, GtkWidget *widget)
9148 dy = scroll_test_pos - (int)adj->value;
9149 scroll_test_pos = adj->value;
9151 if (!gtk_widget_is_drawable (widget))
9154 window = gtk_widget_get_window (widget);
9155 gdk_window_scroll (window, 0, dy);
9156 gdk_window_process_updates (window, FALSE);
9161 create_scroll_test (GtkWidget *widget)
9163 static GtkWidget *window = NULL;
9164 GtkWidget *action_area, *content_area;
9166 GtkWidget *drawing_area;
9167 GtkWidget *scrollbar;
9170 GdkGeometry geometry;
9171 GdkWindowHints geometry_mask;
9175 window = gtk_dialog_new ();
9177 gtk_window_set_screen (GTK_WINDOW (window),
9178 gtk_widget_get_screen (widget));
9180 g_signal_connect (window, "destroy",
9181 G_CALLBACK (gtk_widget_destroyed),
9184 content_area = gtk_dialog_get_content_area (GTK_DIALOG (window));
9185 action_area = gtk_dialog_get_action_area (GTK_DIALOG (window));
9187 gtk_window_set_title (GTK_WINDOW (window), "Scroll Test");
9188 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
9190 hbox = gtk_hbox_new (FALSE, 0);
9191 gtk_box_pack_start (GTK_BOX (content_area), hbox, TRUE, TRUE, 0);
9192 gtk_widget_show (hbox);
9194 drawing_area = gtk_drawing_area_new ();
9195 gtk_widget_set_size_request (drawing_area, 200, 200);
9196 gtk_box_pack_start (GTK_BOX (hbox), drawing_area, TRUE, TRUE, 0);
9197 gtk_widget_show (drawing_area);
9199 gtk_widget_set_events (drawing_area, GDK_EXPOSURE_MASK | GDK_SCROLL_MASK);
9201 adj = gtk_adjustment_new (0.0, 0.0, 1000.0, 1.0, 180.0, 200.0);
9202 scroll_test_pos = 0.0;
9204 scrollbar = gtk_vscrollbar_new (adj);
9205 gtk_box_pack_start (GTK_BOX (hbox), scrollbar, FALSE, FALSE, 0);
9206 gtk_widget_show (scrollbar);
9208 g_signal_connect (drawing_area, "draw",
9209 G_CALLBACK (scroll_test_draw), adj);
9210 g_signal_connect (drawing_area, "configure_event",
9211 G_CALLBACK (scroll_test_configure), adj);
9212 g_signal_connect (drawing_area, "scroll_event",
9213 G_CALLBACK (scroll_test_scroll), adj);
9215 g_signal_connect (adj, "value_changed",
9216 G_CALLBACK (scroll_test_adjustment_changed),
9219 /* .. And create some buttons */
9221 button = gtk_button_new_with_label ("Quit");
9222 gtk_box_pack_start (GTK_BOX (action_area), button, TRUE, TRUE, 0);
9224 g_signal_connect_swapped (button, "clicked",
9225 G_CALLBACK (gtk_widget_destroy),
9227 gtk_widget_show (button);
9229 /* Set up gridded geometry */
9231 geometry_mask = GDK_HINT_MIN_SIZE |
9232 GDK_HINT_BASE_SIZE |
9233 GDK_HINT_RESIZE_INC;
9235 geometry.min_width = 20;
9236 geometry.min_height = 20;
9237 geometry.base_width = 0;
9238 geometry.base_height = 0;
9239 geometry.width_inc = 10;
9240 geometry.height_inc = 10;
9242 gtk_window_set_geometry_hints (GTK_WINDOW (window),
9243 drawing_area, &geometry, geometry_mask);
9246 if (!gtk_widget_get_visible (window))
9247 gtk_widget_show (window);
9249 gtk_widget_destroy (window);
9256 static int timer = 0;
9259 timeout_test (GtkWidget *label)
9261 static int count = 0;
9262 static char buffer[32];
9264 sprintf (buffer, "count: %d", ++count);
9265 gtk_label_set_text (GTK_LABEL (label), buffer);
9271 start_timeout_test (GtkWidget *widget,
9276 timer = g_timeout_add (100, (GSourceFunc)timeout_test, label);
9281 stop_timeout_test (GtkWidget *widget,
9286 g_source_remove (timer);
9292 destroy_timeout_test (GtkWidget *widget,
9295 stop_timeout_test (NULL, NULL);
9301 create_timeout_test (GtkWidget *widget)
9303 static GtkWidget *window = NULL;
9304 GtkWidget *action_area, *content_area;
9310 window = gtk_dialog_new ();
9312 gtk_window_set_screen (GTK_WINDOW (window),
9313 gtk_widget_get_screen (widget));
9315 g_signal_connect (window, "destroy",
9316 G_CALLBACK (destroy_timeout_test),
9319 content_area = gtk_dialog_get_content_area (GTK_DIALOG (window));
9320 action_area = gtk_dialog_get_content_area (GTK_DIALOG (window));
9322 gtk_window_set_title (GTK_WINDOW (window), "Timeout Test");
9323 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
9325 label = gtk_label_new ("count: 0");
9326 gtk_misc_set_padding (GTK_MISC (label), 10, 10);
9327 gtk_box_pack_start (GTK_BOX (content_area), label, TRUE, TRUE, 0);
9328 gtk_widget_show (label);
9330 button = gtk_button_new_with_label ("close");
9331 g_signal_connect_swapped (button, "clicked",
9332 G_CALLBACK (gtk_widget_destroy),
9334 gtk_widget_set_can_default (button, TRUE);
9335 gtk_box_pack_start (GTK_BOX (action_area), button, TRUE, TRUE, 0);
9336 gtk_widget_grab_default (button);
9337 gtk_widget_show (button);
9339 button = gtk_button_new_with_label ("start");
9340 g_signal_connect (button, "clicked",
9341 G_CALLBACK(start_timeout_test),
9343 gtk_widget_set_can_default (button, TRUE);
9344 gtk_box_pack_start (GTK_BOX (action_area), button, TRUE, TRUE, 0);
9345 gtk_widget_show (button);
9347 button = gtk_button_new_with_label ("stop");
9348 g_signal_connect (button, "clicked",
9349 G_CALLBACK (stop_timeout_test),
9351 gtk_widget_set_can_default (button, TRUE);
9352 gtk_box_pack_start (GTK_BOX (action_area), button, TRUE, TRUE, 0);
9353 gtk_widget_show (button);
9356 if (!gtk_widget_get_visible (window))
9357 gtk_widget_show (window);
9359 gtk_widget_destroy (window);
9366 static int idle_id = 0;
9369 idle_test (GtkWidget *label)
9371 static int count = 0;
9372 static char buffer[32];
9374 sprintf (buffer, "count: %d", ++count);
9375 gtk_label_set_text (GTK_LABEL (label), buffer);
9381 start_idle_test (GtkWidget *widget,
9386 idle_id = g_idle_add ((GSourceFunc) idle_test, label);
9391 stop_idle_test (GtkWidget *widget,
9396 g_source_remove (idle_id);
9402 destroy_idle_test (GtkWidget *widget,
9405 stop_idle_test (NULL, NULL);
9411 toggle_idle_container (GObject *button,
9412 GtkContainer *container)
9414 gtk_container_set_resize_mode (container, GPOINTER_TO_INT (g_object_get_data (button, "user_data")));
9418 create_idle_test (GtkWidget *widget)
9420 static GtkWidget *window = NULL;
9423 GtkWidget *container;
9427 GtkWidget *action_area, *content_area;
9432 window = gtk_dialog_new ();
9434 gtk_window_set_screen (GTK_WINDOW (window),
9435 gtk_widget_get_screen (widget));
9437 g_signal_connect (window, "destroy",
9438 G_CALLBACK (destroy_idle_test),
9441 content_area = gtk_dialog_get_content_area (GTK_DIALOG (window));
9442 action_area = gtk_dialog_get_action_area (GTK_DIALOG (window));
9444 gtk_window_set_title (GTK_WINDOW (window), "Idle Test");
9445 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
9447 label = gtk_label_new ("count: 0");
9448 gtk_misc_set_padding (GTK_MISC (label), 10, 10);
9449 gtk_widget_show (label);
9452 g_object_new (GTK_TYPE_HBOX,
9454 /* "GtkContainer::child", g_object_new (GTK_TYPE_HBOX,
9455 * "GtkWidget::visible", TRUE,
9460 gtk_box_pack_start (GTK_BOX (content_area), container, TRUE, TRUE, 0);
9463 g_object_new (GTK_TYPE_FRAME,
9465 "label", "Label Container",
9467 "parent", content_area,
9470 g_object_new (GTK_TYPE_VBOX,
9475 g_object_connect (g_object_new (GTK_TYPE_RADIO_BUTTON,
9476 "label", "Resize-Parent",
9477 "user_data", (void*)GTK_RESIZE_PARENT,
9481 "signal::clicked", toggle_idle_container, container,
9483 button = g_object_new (GTK_TYPE_RADIO_BUTTON,
9484 "label", "Resize-Queue",
9485 "user_data", (void*)GTK_RESIZE_QUEUE,
9490 g_object_connect (button,
9491 "signal::clicked", toggle_idle_container, container,
9493 button2 = g_object_new (GTK_TYPE_RADIO_BUTTON,
9494 "label", "Resize-Immediate",
9495 "user_data", (void*)GTK_RESIZE_IMMEDIATE,
9497 g_object_connect (button2,
9498 "signal::clicked", toggle_idle_container, container,
9500 g_object_set (button2,
9506 button = gtk_button_new_with_label ("close");
9507 g_signal_connect_swapped (button, "clicked",
9508 G_CALLBACK (gtk_widget_destroy),
9510 gtk_widget_set_can_default (button, TRUE);
9511 gtk_box_pack_start (GTK_BOX (action_area), button, TRUE, TRUE, 0);
9512 gtk_widget_grab_default (button);
9513 gtk_widget_show (button);
9515 button = gtk_button_new_with_label ("start");
9516 g_signal_connect (button, "clicked",
9517 G_CALLBACK (start_idle_test),
9519 gtk_widget_set_can_default (button, TRUE);
9520 gtk_box_pack_start (GTK_BOX (action_area), button, TRUE, TRUE, 0);
9521 gtk_widget_show (button);
9523 button = gtk_button_new_with_label ("stop");
9524 g_signal_connect (button, "clicked",
9525 G_CALLBACK (stop_idle_test),
9527 gtk_widget_set_can_default (button, TRUE);
9528 gtk_box_pack_start (GTK_BOX (action_area), button, TRUE, TRUE, 0);
9529 gtk_widget_show (button);
9532 if (!gtk_widget_get_visible (window))
9533 gtk_widget_show (window);
9535 gtk_widget_destroy (window);
9543 reload_all_rc_files (void)
9545 static GdkAtom atom_rcfiles = GDK_NONE;
9547 GdkEvent *send_event = gdk_event_new (GDK_CLIENT_EVENT);
9551 atom_rcfiles = gdk_atom_intern("_GTK_READ_RCFILES", FALSE);
9553 for(i = 0; i < 5; i++)
9554 send_event->client.data.l[i] = 0;
9555 send_event->client.data_format = 32;
9556 send_event->client.message_type = atom_rcfiles;
9557 gdk_event_send_clientmessage_toall (send_event);
9559 gdk_event_free (send_event);
9563 create_rc_file (GtkWidget *widget)
9565 static GtkWidget *window = NULL;
9566 GtkWidget *action_area, *content_area;
9574 window = gtk_dialog_new ();
9576 gtk_window_set_screen (GTK_WINDOW (window),
9577 gtk_widget_get_screen (widget));
9579 g_signal_connect (window, "destroy",
9580 G_CALLBACK (gtk_widget_destroyed),
9583 content_area = gtk_dialog_get_content_area (GTK_DIALOG (window));
9584 action_area = gtk_dialog_get_action_area (GTK_DIALOG (window));
9586 frame = gtk_aspect_frame_new ("Testing RC file prioritization", 0.5, 0.5, 0.0, TRUE);
9587 gtk_box_pack_start (GTK_BOX (content_area), frame, FALSE, FALSE, 0);
9589 vbox = gtk_vbox_new (FALSE, 0);
9590 gtk_container_add (GTK_CONTAINER (frame), vbox);
9592 label = gtk_label_new ("This label should be red");
9593 gtk_widget_set_name (label, "testgtk-red-label");
9594 gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
9596 label = gtk_label_new ("This label should be green");
9597 gtk_widget_set_name (label, "testgtk-green-label");
9598 gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
9600 label = gtk_label_new ("This label should be blue");
9601 gtk_widget_set_name (label, "testgtk-blue-label");
9602 gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
9604 gtk_window_set_title (GTK_WINDOW (window), "Reload Rc file");
9605 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
9607 button = gtk_button_new_with_label ("Reload");
9608 g_signal_connect (button, "clicked",
9609 G_CALLBACK (gtk_rc_reparse_all), NULL);
9610 gtk_widget_set_can_default (button, TRUE);
9611 gtk_box_pack_start (GTK_BOX (action_area), button, TRUE, TRUE, 0);
9612 gtk_widget_grab_default (button);
9614 button = gtk_button_new_with_label ("Reload All");
9615 g_signal_connect (button, "clicked",
9616 G_CALLBACK (reload_all_rc_files), NULL);
9617 gtk_widget_set_can_default (button, TRUE);
9618 gtk_box_pack_start (GTK_BOX (action_area), button, TRUE, TRUE, 0);
9620 button = gtk_button_new_with_label ("Close");
9621 g_signal_connect_swapped (button, "clicked",
9622 G_CALLBACK (gtk_widget_destroy),
9624 gtk_widget_set_can_default (button, TRUE);
9625 gtk_box_pack_start (GTK_BOX (action_area), button, TRUE, TRUE, 0);
9628 if (!gtk_widget_get_visible (window))
9629 gtk_widget_show_all (window);
9631 gtk_widget_destroy (window);
9635 * Test of recursive mainloop
9639 mainloop_destroyed (GtkWidget *w, GtkWidget **window)
9646 create_mainloop (GtkWidget *widget)
9648 static GtkWidget *window = NULL;
9649 GtkWidget *action_area, *content_area;
9655 window = gtk_dialog_new ();
9657 gtk_window_set_screen (GTK_WINDOW (window),
9658 gtk_widget_get_screen (widget));
9660 gtk_window_set_title (GTK_WINDOW (window), "Test Main Loop");
9662 g_signal_connect (window, "destroy",
9663 G_CALLBACK (mainloop_destroyed),
9666 content_area = gtk_dialog_get_content_area (GTK_DIALOG (window));
9667 action_area = gtk_dialog_get_action_area (GTK_DIALOG (window));
9669 label = gtk_label_new ("In recursive main loop...");
9670 gtk_misc_set_padding (GTK_MISC(label), 20, 20);
9672 gtk_box_pack_start (GTK_BOX (content_area), label, TRUE, TRUE, 0);
9673 gtk_widget_show (label);
9675 button = gtk_button_new_with_label ("Leave");
9676 gtk_box_pack_start (GTK_BOX (action_area), button, FALSE, TRUE, 0);
9678 g_signal_connect_swapped (button, "clicked",
9679 G_CALLBACK (gtk_widget_destroy),
9682 gtk_widget_set_can_default (button, TRUE);
9683 gtk_widget_grab_default (button);
9685 gtk_widget_show (button);
9688 if (!gtk_widget_get_visible (window))
9690 gtk_widget_show (window);
9692 g_print ("create_mainloop: start\n");
9694 g_print ("create_mainloop: done\n");
9697 gtk_widget_destroy (window);
9701 layout_draw_handler (GtkWidget *widget, cairo_t *cr)
9704 GdkWindow *bin_window;
9707 gint imin, imax, jmin, jmax;
9709 layout = GTK_LAYOUT (widget);
9710 bin_window = gtk_layout_get_bin_window (layout);
9712 if (!gtk_cairo_should_draw_window (cr, bin_window))
9715 gdk_window_get_position (bin_window, &x, &y);
9716 cairo_translate (cr, x, y);
9718 gdk_cairo_get_clip_rectangle (cr, &clip);
9720 imin = (clip.x) / 10;
9721 imax = (clip.x + clip.width + 9) / 10;
9723 jmin = (clip.y) / 10;
9724 jmax = (clip.y + clip.height + 9) / 10;
9726 for (i=imin; i<imax; i++)
9727 for (j=jmin; j<jmax; j++)
9729 cairo_rectangle (cr,
9738 void create_layout (GtkWidget *widget)
9740 GtkAdjustment *hadjustment, *vadjustment;
9742 static GtkWidget *window = NULL;
9743 GtkWidget *layout_widget;
9744 GtkWidget *scrolledwindow;
9753 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
9754 gtk_window_set_screen (GTK_WINDOW (window),
9755 gtk_widget_get_screen (widget));
9757 g_signal_connect (window, "destroy",
9758 G_CALLBACK (gtk_widget_destroyed),
9761 gtk_window_set_title (GTK_WINDOW (window), "Layout");
9762 gtk_widget_set_size_request (window, 200, 200);
9764 scrolledwindow = gtk_scrolled_window_new (NULL, NULL);
9765 gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolledwindow),
9767 gtk_scrolled_window_set_placement (GTK_SCROLLED_WINDOW (scrolledwindow),
9768 GTK_CORNER_TOP_RIGHT);
9770 gtk_container_add (GTK_CONTAINER (window), scrolledwindow);
9772 layout_widget = gtk_layout_new (NULL, NULL);
9773 layout = GTK_LAYOUT (layout_widget);
9774 gtk_container_add (GTK_CONTAINER (scrolledwindow), layout_widget);
9776 /* We set step sizes here since GtkLayout does not set
9779 hadjustment = gtk_layout_get_hadjustment (layout);
9780 vadjustment = gtk_layout_get_vadjustment (layout);
9781 gtk_adjustment_set_step_increment (hadjustment, 10.0);
9782 gtk_adjustment_set_step_increment (vadjustment, 10.0);
9783 gtk_layout_set_hadjustment (layout, hadjustment);
9784 gtk_layout_set_vadjustment (layout, vadjustment);
9786 gtk_widget_set_events (layout_widget, GDK_EXPOSURE_MASK);
9787 g_signal_connect (layout, "draw",
9788 G_CALLBACK (layout_draw_handler), NULL);
9790 gtk_layout_set_size (layout, 1600, 128000);
9792 for (i=0 ; i < 16 ; i++)
9793 for (j=0 ; j < 16 ; j++)
9795 sprintf(buf, "Button %d, %d", i, j);
9797 button = gtk_button_new_with_label (buf);
9799 button = gtk_label_new (buf);
9801 gtk_layout_put (layout, button, j*100, i*100);
9804 for (i=16; i < 1280; i++)
9806 sprintf(buf, "Button %d, %d", i, 0);
9808 button = gtk_button_new_with_label (buf);
9810 button = gtk_label_new (buf);
9812 gtk_layout_put (layout, button, 0, i*100);
9816 if (!gtk_widget_get_visible (window))
9817 gtk_widget_show_all (window);
9819 gtk_widget_destroy (window);
9823 create_styles (GtkWidget *widget)
9825 static GtkWidget *window = NULL;
9826 GtkWidget *content_area, *action_area;
9831 static GdkColor red = { 0, 0xffff, 0, 0 };
9832 static GdkColor green = { 0, 0, 0xffff, 0 };
9833 static GdkColor blue = { 0, 0, 0, 0xffff };
9834 static GdkColor yellow = { 0, 0xffff, 0xffff, 0 };
9835 static GdkColor cyan = { 0, 0 , 0xffff, 0xffff };
9836 PangoFontDescription *font_desc;
9838 GtkRcStyle *rc_style;
9842 window = gtk_dialog_new ();
9843 gtk_window_set_screen (GTK_WINDOW (window),
9844 gtk_widget_get_screen (widget));
9846 g_signal_connect (window, "destroy",
9847 G_CALLBACK (gtk_widget_destroyed),
9850 content_area = gtk_dialog_get_content_area (GTK_DIALOG (window));
9851 action_area = gtk_dialog_get_action_area (GTK_DIALOG (window));
9853 button = gtk_button_new_with_label ("Close");
9854 g_signal_connect_swapped (button, "clicked",
9855 G_CALLBACK (gtk_widget_destroy),
9857 gtk_widget_set_can_default (button, TRUE);
9858 gtk_box_pack_start (GTK_BOX (action_area), button, TRUE, TRUE, 0);
9859 gtk_widget_show (button);
9861 vbox = gtk_vbox_new (FALSE, 5);
9862 gtk_container_set_border_width (GTK_CONTAINER (vbox), 10);
9863 gtk_box_pack_start (GTK_BOX (content_area), vbox, FALSE, FALSE, 0);
9865 label = gtk_label_new ("Font:");
9866 gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
9867 gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
9869 font_desc = pango_font_description_from_string ("Helvetica,Sans Oblique 18");
9871 button = gtk_button_new_with_label ("Some Text");
9872 gtk_widget_modify_font (gtk_bin_get_child (GTK_BIN (button)),
9874 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
9876 label = gtk_label_new ("Foreground:");
9877 gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
9878 gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
9880 button = gtk_button_new_with_label ("Some Text");
9881 gtk_widget_modify_fg (gtk_bin_get_child (GTK_BIN (button)),
9882 GTK_STATE_NORMAL, &red);
9883 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
9885 label = gtk_label_new ("Background:");
9886 gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
9887 gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
9889 button = gtk_button_new_with_label ("Some Text");
9890 gtk_widget_modify_bg (button, GTK_STATE_NORMAL, &green);
9891 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
9893 label = gtk_label_new ("Text:");
9894 gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
9895 gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
9897 entry = gtk_entry_new ();
9898 gtk_entry_set_text (GTK_ENTRY (entry), "Some Text");
9899 gtk_widget_modify_text (entry, GTK_STATE_NORMAL, &blue);
9900 gtk_box_pack_start (GTK_BOX (vbox), entry, FALSE, FALSE, 0);
9902 label = gtk_label_new ("Base:");
9903 gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
9904 gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
9906 entry = gtk_entry_new ();
9907 gtk_entry_set_text (GTK_ENTRY (entry), "Some Text");
9908 gtk_widget_modify_base (entry, GTK_STATE_NORMAL, &yellow);
9909 gtk_box_pack_start (GTK_BOX (vbox), entry, FALSE, FALSE, 0);
9911 label = gtk_label_new ("Cursor:");
9912 gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
9913 gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
9915 entry = gtk_entry_new ();
9916 gtk_entry_set_text (GTK_ENTRY (entry), "Some Text");
9917 gtk_widget_modify_cursor (entry, &red, &red);
9918 gtk_box_pack_start (GTK_BOX (vbox), entry, FALSE, FALSE, 0);
9920 label = gtk_label_new ("Multiple:");
9921 gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
9922 gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
9924 button = gtk_button_new_with_label ("Some Text");
9926 rc_style = gtk_rc_style_new ();
9928 rc_style->font_desc = pango_font_description_copy (font_desc);
9929 rc_style->color_flags[GTK_STATE_NORMAL] = GTK_RC_FG | GTK_RC_BG;
9930 rc_style->color_flags[GTK_STATE_PRELIGHT] = GTK_RC_FG | GTK_RC_BG;
9931 rc_style->color_flags[GTK_STATE_ACTIVE] = GTK_RC_FG | GTK_RC_BG;
9932 rc_style->fg[GTK_STATE_NORMAL] = yellow;
9933 rc_style->bg[GTK_STATE_NORMAL] = blue;
9934 rc_style->fg[GTK_STATE_PRELIGHT] = blue;
9935 rc_style->bg[GTK_STATE_PRELIGHT] = yellow;
9936 rc_style->fg[GTK_STATE_ACTIVE] = red;
9937 rc_style->bg[GTK_STATE_ACTIVE] = cyan;
9938 rc_style->xthickness = 5;
9939 rc_style->ythickness = 5;
9941 gtk_widget_modify_style (button, rc_style);
9942 gtk_widget_modify_style (gtk_bin_get_child (GTK_BIN (button)), rc_style);
9944 g_object_unref (rc_style);
9946 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
9949 if (!gtk_widget_get_visible (window))
9950 gtk_widget_show_all (window);
9952 gtk_widget_destroy (window);
9956 * Main Window and Exit
9960 do_exit (GtkWidget *widget, GtkWidget *window)
9962 gtk_widget_destroy (window);
9968 void (*func) (GtkWidget *widget);
9969 gboolean do_not_benchmark;
9972 { "alpha window", create_alpha_window },
9973 { "big windows", create_big_windows },
9974 { "button box", create_button_box },
9975 { "buttons", create_buttons },
9976 { "check buttons", create_check_buttons },
9977 { "color selection", create_color_selection },
9978 { "composited window", create_composited_window },
9979 { "cursors", create_cursors },
9980 { "dialog", create_dialog },
9981 { "display & screen", create_display_screen, TRUE },
9982 { "entry", create_entry },
9983 { "event box", create_event_box },
9984 { "event watcher", create_event_watcher },
9985 { "expander", create_expander },
9986 { "flipping", create_flipping },
9987 { "focus", create_focus },
9988 { "font selection", create_font_selection },
9989 { "handle box", create_handle_box },
9990 { "image", create_image },
9991 { "key lookup", create_key_lookup },
9992 { "labels", create_labels },
9993 { "layout", create_layout },
9994 { "menus", create_menus },
9995 { "message dialog", create_message_dialog },
9996 { "modal window", create_modal_window, TRUE },
9997 { "notebook", create_notebook },
9998 { "panes", create_panes },
9999 { "paned keyboard", create_paned_keyboard_navigation },
10000 { "pixbuf", create_pixbuf },
10001 { "progress bar", create_progress_bar },
10002 { "properties", create_properties },
10003 { "radio buttons", create_radio_buttons },
10004 { "range controls", create_range_controls },
10005 { "rc file", create_rc_file },
10006 { "reparent", create_reparent },
10007 { "resize grips", create_resize_grips },
10008 { "rotated label", create_rotated_label },
10009 { "rotated text", create_rotated_text },
10010 { "rulers", create_rulers },
10011 { "saved position", create_saved_position },
10012 { "scrolled windows", create_scrolled_windows },
10013 { "shapes", create_shapes },
10014 { "size groups", create_size_groups },
10015 { "snapshot", create_snapshot },
10016 { "spinbutton", create_spins },
10017 { "statusbar", create_statusbar },
10018 { "styles", create_styles },
10019 { "test idle", create_idle_test },
10020 { "test mainloop", create_mainloop, TRUE },
10021 { "test scrolling", create_scroll_test },
10022 { "test selection", create_selection_test },
10023 { "test timeout", create_timeout_test },
10024 { "toggle buttons", create_toggle_buttons },
10025 { "toolbar", create_toolbar },
10026 { "tooltips", create_tooltips },
10027 { "WM hints", create_wmhints },
10028 { "window sizing", create_window_sizing },
10029 { "window states", create_window_states }
10031 int nbuttons = sizeof (buttons) / sizeof (buttons[0]);
10034 create_main_window (void)
10039 GtkWidget *scrolled_window;
10043 GtkWidget *separator;
10044 GdkGeometry geometry;
10047 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
10048 gtk_widget_set_name (window, "main window");
10049 gtk_window_move (GTK_WINDOW (window), 50, 20);
10050 gtk_window_set_default_size (GTK_WINDOW (window), -1, 400);
10052 geometry.min_width = -1;
10053 geometry.min_height = -1;
10054 geometry.max_width = -1;
10055 geometry.max_height = G_MAXSHORT;
10056 gtk_window_set_geometry_hints (GTK_WINDOW (window), NULL,
10058 GDK_HINT_MIN_SIZE | GDK_HINT_MAX_SIZE);
10060 g_signal_connect (window, "destroy",
10061 G_CALLBACK (gtk_main_quit),
10063 g_signal_connect (window, "delete-event",
10064 G_CALLBACK (gtk_false),
10067 box1 = gtk_vbox_new (FALSE, 0);
10068 gtk_container_add (GTK_CONTAINER (window), box1);
10070 if (gtk_micro_version > 0)
10073 gtk_get_major_version (),
10074 gtk_get_minor_version (),
10075 gtk_get_micro_version ());
10079 gtk_get_major_version (),
10080 gtk_get_minor_version ());
10082 label = gtk_label_new (buffer);
10083 gtk_box_pack_start (GTK_BOX (box1), label, FALSE, FALSE, 0);
10084 gtk_widget_set_name (label, "testgtk-version-label");
10086 scrolled_window = gtk_scrolled_window_new (NULL, NULL);
10087 gtk_container_set_border_width (GTK_CONTAINER (scrolled_window), 10);
10088 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
10090 GTK_POLICY_AUTOMATIC);
10091 gtk_box_pack_start (GTK_BOX (box1), scrolled_window, TRUE, TRUE, 0);
10093 box2 = gtk_vbox_new (FALSE, 0);
10094 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
10095 gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scrolled_window), box2);
10096 gtk_container_set_focus_vadjustment (GTK_CONTAINER (box2),
10097 gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (scrolled_window)));
10098 gtk_widget_show (box2);
10100 for (i = 0; i < nbuttons; i++)
10102 button = gtk_button_new_with_label (buttons[i].label);
10103 if (buttons[i].func)
10104 g_signal_connect (button,
10106 G_CALLBACK(buttons[i].func),
10109 gtk_widget_set_sensitive (button, FALSE);
10110 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
10113 separator = gtk_hseparator_new ();
10114 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
10116 box2 = gtk_vbox_new (FALSE, 10);
10117 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
10118 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
10120 button = gtk_button_new_with_mnemonic ("_Close");
10121 g_signal_connect (button, "clicked",
10122 G_CALLBACK (do_exit),
10124 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
10125 gtk_widget_set_can_default (button, TRUE);
10126 gtk_widget_grab_default (button);
10128 gtk_widget_show_all (window);
10134 if (g_file_test ("../gdk-pixbuf/libpixbufloader-pnm.la",
10135 G_FILE_TEST_EXISTS))
10137 g_setenv ("GDK_PIXBUF_MODULE_FILE", "../gdk-pixbuf/loaders.cache", TRUE);
10138 g_setenv ("GTK_IM_MODULE_FILE", "../modules/input/immodules.cache", TRUE);
10143 pad (const char *str, int to)
10145 static char buf[256];
10146 int len = strlen (str);
10149 for (i = 0; i < to; i++)
10154 memcpy (buf, str, len);
10160 bench_iteration (GtkWidget *widget, void (* fn) (GtkWidget *widget))
10162 fn (widget); /* on */
10163 while (g_main_context_iteration (NULL, FALSE));
10164 fn (widget); /* off */
10165 while (g_main_context_iteration (NULL, FALSE));
10169 do_real_bench (GtkWidget *widget, void (* fn) (GtkWidget *widget), char *name, int num)
10175 static gboolean printed_headers = FALSE;
10177 if (!printed_headers) {
10178 g_print ("Test Iters First Other\n");
10179 g_print ("-------------------- ----- ---------- ----------\n");
10180 printed_headers = TRUE;
10183 g_get_current_time (&tv0);
10184 bench_iteration (widget, fn);
10185 g_get_current_time (&tv1);
10187 dt_first = ((double)tv1.tv_sec - tv0.tv_sec) * 1000.0
10188 + (tv1.tv_usec - tv0.tv_usec) / 1000.0;
10190 g_get_current_time (&tv0);
10191 for (n = 0; n < num - 1; n++)
10192 bench_iteration (widget, fn);
10193 g_get_current_time (&tv1);
10194 dt = ((double)tv1.tv_sec - tv0.tv_sec) * 1000.0
10195 + (tv1.tv_usec - tv0.tv_usec) / 1000.0;
10197 g_print ("%s %5d ", pad (name, 20), num);
10199 g_print ("%10.1f %10.1f\n", dt_first, dt/(num-1));
10201 g_print ("%10.1f\n", dt_first);
10205 do_bench (char* what, int num)
10209 void (* fn) (GtkWidget *widget);
10211 widget = gtk_window_new (GTK_WINDOW_TOPLEVEL);
10213 if (g_ascii_strcasecmp (what, "ALL") == 0)
10215 for (i = 0; i < nbuttons; i++)
10217 if (!buttons[i].do_not_benchmark)
10218 do_real_bench (widget, buttons[i].func, buttons[i].label, num);
10225 for (i = 0; i < nbuttons; i++)
10227 if (strcmp (buttons[i].label, what) == 0)
10229 fn = buttons[i].func;
10235 g_print ("Can't bench: \"%s\" not found.\n", what);
10237 do_real_bench (widget, fn, buttons[i].label, num);
10244 fprintf (stderr, "Usage: testgtk [--bench ALL|<bench>[:<count>]]\n");
10249 main (int argc, char *argv[])
10251 GtkBindingSet *binding_set;
10253 gboolean done_benchmarks = FALSE;
10255 srand (time (NULL));
10259 /* Check to see if we are being run from the correct
10262 if (file_exists ("testgtkrc"))
10263 gtk_rc_add_default_file ("testgtkrc");
10264 else if (file_exists ("tests/testgtkrc"))
10265 gtk_rc_add_default_file ("tests/testgtkrc");
10267 g_warning ("Couldn't find file \"testgtkrc\".");
10269 g_set_application_name ("GTK+ Test Program");
10271 gtk_init (&argc, &argv);
10273 gtk_accelerator_set_default_mod_mask (GDK_SHIFT_MASK |
10282 for (i = 1; i < argc; i++)
10284 if (strncmp (argv[i], "--bench", strlen("--bench")) == 0)
10291 nextarg = strchr (argv[i], '=');
10302 count = strchr (nextarg, ':');
10305 what = g_strndup (nextarg, count - nextarg);
10307 num = atoi (count);
10312 what = g_strdup (nextarg);
10314 do_bench (what, num ? num : 1);
10315 done_benchmarks = TRUE;
10320 if (done_benchmarks)
10325 binding_set = gtk_binding_set_by_class (g_type_class_ref (GTK_TYPE_WIDGET));
10326 gtk_binding_entry_add_signal (binding_set,
10327 '9', GDK_CONTROL_MASK | GDK_RELEASE_MASK,
10330 G_TYPE_STRING, "GtkWidgetClass <ctrl><release>9 test");
10332 /* We use gtk_rc_parse_string() here so we can make sure it works across theme
10336 gtk_rc_parse_string ("style \"testgtk-version-label\" { "
10337 " fg[NORMAL] = \"#ff0000\"\n"
10338 " font = \"Sans 18\"\n"
10340 "widget \"*.testgtk-version-label\" style \"testgtk-version-label\"");
10342 create_main_window ();
10348 while (g_main_context_pending (NULL))
10349 g_main_context_iteration (NULL, FALSE);
10352 while (g_main_context_pending (NULL))
10353 g_main_context_iteration (NULL, FALSE);