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;
3955 GtkWidget *cb_entry;
3957 GtkWidget *separator;
3958 GtkListStore *store;
3962 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
3963 gtk_window_set_screen (GTK_WINDOW (window),
3964 gtk_widget_get_screen (widget));
3966 g_signal_connect (window, "destroy",
3967 G_CALLBACK (gtk_widget_destroyed),
3970 gtk_window_set_title (GTK_WINDOW (window), "entry");
3971 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
3974 box1 = gtk_vbox_new (FALSE, 0);
3975 gtk_container_add (GTK_CONTAINER (window), box1);
3978 box2 = gtk_vbox_new (FALSE, 10);
3979 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
3980 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
3982 hbox = gtk_hbox_new (FALSE, 5);
3983 gtk_box_pack_start (GTK_BOX (box2), hbox, TRUE, TRUE, 0);
3985 entry = gtk_entry_new ();
3986 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");
3987 gtk_editable_select_region (GTK_EDITABLE (entry), 0, 5);
3988 gtk_box_pack_start (GTK_BOX (hbox), entry, TRUE, TRUE, 0);
3990 button = gtk_button_new_with_mnemonic ("_Props");
3991 gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, FALSE, 0);
3992 g_signal_connect (button, "clicked",
3993 G_CALLBACK (props_clicked),
3996 store = gtk_list_store_new (1, G_TYPE_STRING);
3997 cb = g_object_new (GTK_TYPE_COMBO_BOX,
4000 "entry-text-column", 0,
4002 g_object_unref (store);
4004 gtk_combo_box_append_text (cb, "item0");
4005 gtk_combo_box_append_text (cb, "item0");
4006 gtk_combo_box_append_text (cb, "item1 item1");
4007 gtk_combo_box_append_text (cb, "item2 item2 item2");
4008 gtk_combo_box_append_text (cb, "item3 item3 item3 item3");
4009 gtk_combo_box_append_text (cb, "item4 item4 item4 item4 item4");
4010 gtk_combo_box_append_text (cb, "item5 item5 item5 item5 item5 item5");
4011 gtk_combo_box_append_text (cb, "item6 item6 item6 item6 item6");
4012 gtk_combo_box_append_text (cb, "item7 item7 item7 item7");
4013 gtk_combo_box_append_text (cb, "item8 item8 item8");
4014 gtk_combo_box_append_text (cb, "item9 item9");
4016 cb_entry = gtk_bin_get_child (GTK_BIN (cb));
4017 gtk_entry_set_text (GTK_ENTRY (cb_entry), "hello world \n\n\n foo");
4018 gtk_editable_select_region (GTK_EDITABLE (cb_entry), 0, -1);
4019 gtk_box_pack_start (GTK_BOX (box2), GTK_WIDGET (cb), TRUE, TRUE, 0);
4021 sensitive_check = gtk_check_button_new_with_label("Sensitive");
4022 gtk_box_pack_start (GTK_BOX (box2), sensitive_check, FALSE, TRUE, 0);
4023 g_signal_connect (sensitive_check, "toggled",
4024 G_CALLBACK (entry_toggle_sensitive), entry);
4025 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (sensitive_check), TRUE);
4027 has_frame_check = gtk_check_button_new_with_label("Has Frame");
4028 gtk_box_pack_start (GTK_BOX (box2), has_frame_check, FALSE, TRUE, 0);
4029 g_signal_connect (has_frame_check, "toggled",
4030 G_CALLBACK (entry_toggle_frame), entry);
4031 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (has_frame_check), TRUE);
4033 progress_check = gtk_check_button_new_with_label("Show Progress");
4034 gtk_box_pack_start (GTK_BOX (box2), progress_check, FALSE, TRUE, 0);
4035 g_signal_connect (progress_check, "toggled",
4036 G_CALLBACK (entry_toggle_progress), entry);
4038 progress_check = gtk_check_button_new_with_label("Pulse Progress");
4039 gtk_box_pack_start (GTK_BOX (box2), progress_check, FALSE, TRUE, 0);
4040 g_signal_connect (progress_check, "toggled",
4041 G_CALLBACK (entry_toggle_pulse), entry);
4043 separator = gtk_hseparator_new ();
4044 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
4046 box2 = gtk_vbox_new (FALSE, 10);
4047 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
4048 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
4050 button = gtk_button_new_with_label ("close");
4051 g_signal_connect_swapped (button, "clicked",
4052 G_CALLBACK (gtk_widget_destroy),
4054 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
4055 gtk_widget_set_can_default (button, TRUE);
4056 gtk_widget_grab_default (button);
4059 if (!gtk_widget_get_visible (window))
4060 gtk_widget_show_all (window);
4062 gtk_widget_destroy (window);
4066 create_expander (GtkWidget *widget)
4069 GtkWidget *expander;
4071 static GtkWidget *window = NULL;
4075 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
4076 gtk_window_set_screen (GTK_WINDOW (window),
4077 gtk_widget_get_screen (widget));
4079 g_signal_connect (window, "destroy",
4080 G_CALLBACK (gtk_widget_destroyed),
4083 gtk_window_set_title (GTK_WINDOW (window), "expander");
4084 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
4086 box1 = gtk_vbox_new (FALSE, 0);
4087 gtk_container_add (GTK_CONTAINER (window), box1);
4089 expander = gtk_expander_new ("The Hidden");
4091 gtk_box_pack_start (GTK_BOX (box1), expander, TRUE, TRUE, 0);
4093 hidden = gtk_label_new ("Revealed!");
4095 gtk_container_add (GTK_CONTAINER (expander), hidden);
4098 if (!gtk_widget_get_visible (window))
4099 gtk_widget_show_all (window);
4101 gtk_widget_destroy (window);
4109 event_box_label_pressed (GtkWidget *widget,
4110 GdkEventButton *event,
4113 g_print ("clicked on event box\n");
4117 event_box_button_clicked (GtkWidget *widget,
4121 g_print ("pushed button\n");
4125 event_box_toggle_visible_window (GtkWidget *checkbutton,
4126 GtkEventBox *event_box)
4128 gtk_event_box_set_visible_window (event_box,
4129 GTK_TOGGLE_BUTTON(checkbutton)->active);
4133 event_box_toggle_above_child (GtkWidget *checkbutton,
4134 GtkEventBox *event_box)
4136 gtk_event_box_set_above_child (event_box,
4137 GTK_TOGGLE_BUTTON(checkbutton)->active);
4141 create_event_box (GtkWidget *widget)
4143 static GtkWidget *window = NULL;
4149 GtkWidget *separator;
4150 GtkWidget *event_box;
4152 GtkWidget *visible_window_check;
4153 GtkWidget *above_child_check;
4162 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
4163 gtk_window_set_screen (GTK_WINDOW (window),
4164 gtk_widget_get_screen (widget));
4166 g_signal_connect (window, "destroy",
4167 G_CALLBACK (gtk_widget_destroyed),
4170 gtk_window_set_title (GTK_WINDOW (window), "event box");
4171 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
4173 box1 = gtk_vbox_new (FALSE, 0);
4174 gtk_container_add (GTK_CONTAINER (window), box1);
4175 gtk_widget_modify_bg (window, GTK_STATE_NORMAL, &color);
4177 hbox = gtk_hbox_new (FALSE, 0);
4178 gtk_box_pack_start (GTK_BOX (box1), hbox, TRUE, FALSE, 0);
4180 event_box = gtk_event_box_new ();
4181 gtk_box_pack_start (GTK_BOX (hbox), event_box, TRUE, FALSE, 0);
4183 vbox = gtk_vbox_new (FALSE, 0);
4184 gtk_container_add (GTK_CONTAINER (event_box), vbox);
4185 g_signal_connect (event_box, "button_press_event",
4186 G_CALLBACK (event_box_label_pressed),
4189 label = gtk_label_new ("Click on this label");
4190 gtk_box_pack_start (GTK_BOX (vbox), label, TRUE, FALSE, 0);
4192 button = gtk_button_new_with_label ("button in eventbox");
4193 gtk_box_pack_start (GTK_BOX (vbox), button, TRUE, FALSE, 0);
4194 g_signal_connect (button, "clicked",
4195 G_CALLBACK (event_box_button_clicked),
4199 visible_window_check = gtk_check_button_new_with_label("Visible Window");
4200 gtk_box_pack_start (GTK_BOX (box1), visible_window_check, FALSE, TRUE, 0);
4201 g_signal_connect (visible_window_check, "toggled",
4202 G_CALLBACK (event_box_toggle_visible_window), event_box);
4203 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (visible_window_check), FALSE);
4205 above_child_check = gtk_check_button_new_with_label("Above Child");
4206 gtk_box_pack_start (GTK_BOX (box1), above_child_check, FALSE, TRUE, 0);
4207 g_signal_connect (above_child_check, "toggled",
4208 G_CALLBACK (event_box_toggle_above_child), event_box);
4209 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (above_child_check), FALSE);
4211 separator = gtk_hseparator_new ();
4212 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
4214 box2 = gtk_vbox_new (FALSE, 10);
4215 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
4216 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
4218 button = gtk_button_new_with_label ("close");
4219 g_signal_connect_swapped (button, "clicked",
4220 G_CALLBACK (gtk_widget_destroy),
4222 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
4223 gtk_widget_set_can_default (button, TRUE);
4224 gtk_widget_grab_default (button);
4227 if (!gtk_widget_get_visible (window))
4228 gtk_widget_show_all (window);
4230 gtk_widget_destroy (window);
4238 #define SIZE_GROUP_INITIAL_SIZE 50
4241 size_group_hsize_changed (GtkSpinButton *spin_button,
4244 gtk_widget_set_size_request (gtk_bin_get_child (GTK_BIN (button)),
4245 gtk_spin_button_get_value_as_int (spin_button),
4250 size_group_vsize_changed (GtkSpinButton *spin_button,
4253 gtk_widget_set_size_request (gtk_bin_get_child (GTK_BIN (button)),
4255 gtk_spin_button_get_value_as_int (spin_button));
4259 create_size_group_window (GdkScreen *screen,
4260 GtkSizeGroup *master_size_group)
4262 GtkWidget *content_area;
4265 GtkWidget *main_button;
4267 GtkWidget *spin_button;
4269 GtkSizeGroup *hgroup1;
4270 GtkSizeGroup *hgroup2;
4271 GtkSizeGroup *vgroup1;
4272 GtkSizeGroup *vgroup2;
4274 window = gtk_dialog_new_with_buttons ("GtkSizeGroup",
4280 gtk_window_set_screen (GTK_WINDOW (window), screen);
4282 gtk_window_set_resizable (GTK_WINDOW (window), TRUE);
4284 g_signal_connect (window, "response",
4285 G_CALLBACK (gtk_widget_destroy),
4288 content_area = gtk_dialog_get_content_area (GTK_DIALOG (window));
4290 table = gtk_table_new (2, 2, FALSE);
4291 gtk_box_pack_start (GTK_BOX (content_area), table, TRUE, TRUE, 0);
4293 gtk_table_set_row_spacings (GTK_TABLE (table), 5);
4294 gtk_table_set_col_spacings (GTK_TABLE (table), 5);
4295 gtk_container_set_border_width (GTK_CONTAINER (table), 5);
4296 gtk_widget_set_size_request (table, 250, 250);
4298 hgroup1 = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
4299 hgroup2 = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
4300 vgroup1 = gtk_size_group_new (GTK_SIZE_GROUP_VERTICAL);
4301 vgroup2 = gtk_size_group_new (GTK_SIZE_GROUP_VERTICAL);
4303 main_button = gtk_button_new_with_label ("X");
4305 gtk_table_attach (GTK_TABLE (table), main_button,
4307 GTK_EXPAND, GTK_EXPAND,
4309 gtk_size_group_add_widget (master_size_group, main_button);
4310 gtk_size_group_add_widget (hgroup1, main_button);
4311 gtk_size_group_add_widget (vgroup1, main_button);
4312 gtk_widget_set_size_request (gtk_bin_get_child (GTK_BIN (main_button)),
4313 SIZE_GROUP_INITIAL_SIZE,
4314 SIZE_GROUP_INITIAL_SIZE);
4316 button = gtk_button_new ();
4317 gtk_table_attach (GTK_TABLE (table), button,
4319 GTK_EXPAND, GTK_EXPAND,
4321 gtk_size_group_add_widget (vgroup1, button);
4322 gtk_size_group_add_widget (vgroup2, button);
4324 button = gtk_button_new ();
4325 gtk_table_attach (GTK_TABLE (table), button,
4327 GTK_EXPAND, GTK_EXPAND,
4329 gtk_size_group_add_widget (hgroup1, button);
4330 gtk_size_group_add_widget (hgroup2, button);
4332 button = gtk_button_new ();
4333 gtk_table_attach (GTK_TABLE (table), button,
4335 GTK_EXPAND, GTK_EXPAND,
4337 gtk_size_group_add_widget (hgroup2, button);
4338 gtk_size_group_add_widget (vgroup2, button);
4340 g_object_unref (hgroup1);
4341 g_object_unref (hgroup2);
4342 g_object_unref (vgroup1);
4343 g_object_unref (vgroup2);
4345 hbox = gtk_hbox_new (FALSE, 5);
4346 gtk_box_pack_start (GTK_BOX (content_area), hbox, FALSE, FALSE, 0);
4348 spin_button = gtk_spin_button_new_with_range (1, 100, 1);
4349 gtk_spin_button_set_value (GTK_SPIN_BUTTON (spin_button), SIZE_GROUP_INITIAL_SIZE);
4350 gtk_box_pack_start (GTK_BOX (hbox), spin_button, TRUE, TRUE, 0);
4351 g_signal_connect (spin_button, "value_changed",
4352 G_CALLBACK (size_group_hsize_changed), main_button);
4354 spin_button = gtk_spin_button_new_with_range (1, 100, 1);
4355 gtk_spin_button_set_value (GTK_SPIN_BUTTON (spin_button), SIZE_GROUP_INITIAL_SIZE);
4356 gtk_box_pack_start (GTK_BOX (hbox), spin_button, TRUE, TRUE, 0);
4357 g_signal_connect (spin_button, "value_changed",
4358 G_CALLBACK (size_group_vsize_changed), main_button);
4364 create_size_groups (GtkWidget *widget)
4366 static GtkWidget *window1 = NULL;
4367 static GtkWidget *window2 = NULL;
4368 static GtkSizeGroup *master_size_group;
4370 if (!master_size_group)
4371 master_size_group = gtk_size_group_new (GTK_SIZE_GROUP_BOTH);
4375 window1 = create_size_group_window (gtk_widget_get_screen (widget),
4378 g_signal_connect (window1, "destroy",
4379 G_CALLBACK (gtk_widget_destroyed),
4385 window2 = create_size_group_window (gtk_widget_get_screen (widget),
4388 g_signal_connect (window2, "destroy",
4389 G_CALLBACK (gtk_widget_destroyed),
4393 if (gtk_widget_get_visible (window1) && gtk_widget_get_visible (window2))
4395 gtk_widget_destroy (window1);
4396 gtk_widget_destroy (window2);
4400 if (!gtk_widget_get_visible (window1))
4401 gtk_widget_show_all (window1);
4402 if (!gtk_widget_get_visible (window2))
4403 gtk_widget_show_all (window2);
4411 static GtkWidget *spinner1;
4414 toggle_snap (GtkWidget *widget, GtkSpinButton *spin)
4416 gtk_spin_button_set_snap_to_ticks (spin, GTK_TOGGLE_BUTTON (widget)->active);
4420 toggle_numeric (GtkWidget *widget, GtkSpinButton *spin)
4422 gtk_spin_button_set_numeric (spin, GTK_TOGGLE_BUTTON (widget)->active);
4426 change_digits (GtkWidget *widget, GtkSpinButton *spin)
4428 gtk_spin_button_set_digits (GTK_SPIN_BUTTON (spinner1),
4429 gtk_spin_button_get_value_as_int (spin));
4433 get_value (GtkWidget *widget, gpointer data)
4437 GtkSpinButton *spin;
4439 spin = GTK_SPIN_BUTTON (spinner1);
4440 label = GTK_LABEL (g_object_get_data (G_OBJECT (widget), "user_data"));
4441 if (GPOINTER_TO_INT (data) == 1)
4442 sprintf (buf, "%d", gtk_spin_button_get_value_as_int (spin));
4444 sprintf (buf, "%0.*f",
4445 gtk_spin_button_get_digits (spin),
4446 gtk_spin_button_get_value (spin));
4448 gtk_label_set_text (label, buf);
4452 get_spin_value (GtkWidget *widget, gpointer data)
4456 GtkSpinButton *spin;
4458 spin = GTK_SPIN_BUTTON (widget);
4459 label = GTK_LABEL (data);
4461 buffer = g_strdup_printf ("%0.*f",
4462 gtk_spin_button_get_digits (spin),
4463 gtk_spin_button_get_value (spin));
4464 gtk_label_set_text (label, buffer);
4470 spin_button_time_output_func (GtkSpinButton *spin_button)
4472 GtkAdjustment *adjustment;
4473 static gchar buf[6];
4477 adjustment = gtk_spin_button_get_adjustment (spin_button);
4478 hours = gtk_adjustment_get_value (adjustment) / 60.0;
4479 minutes = (fabs(floor (hours) - hours) < 1e-5) ? 0.0 : 30;
4480 sprintf (buf, "%02.0f:%02.0f", floor (hours), minutes);
4481 if (strcmp (buf, gtk_entry_get_text (GTK_ENTRY (spin_button))))
4482 gtk_entry_set_text (GTK_ENTRY (spin_button), buf);
4487 spin_button_month_input_func (GtkSpinButton *spin_button,
4491 static gchar *month[12] = { "January", "February", "March", "April",
4492 "May", "June", "July", "August",
4493 "September", "October", "November", "December" };
4495 gboolean found = FALSE;
4497 for (i = 1; i <= 12; i++)
4499 tmp1 = g_ascii_strup (month[i - 1], -1);
4500 tmp2 = g_ascii_strup (gtk_entry_get_text (GTK_ENTRY (spin_button)), -1);
4501 if (strstr (tmp1, tmp2) == tmp1)
4511 return GTK_INPUT_ERROR;
4513 *new_val = (gdouble) i;
4518 spin_button_month_output_func (GtkSpinButton *spin_button)
4520 GtkAdjustment *adjustment;
4523 static gchar *month[12] = { "January", "February", "March", "April",
4524 "May", "June", "July", "August", "September",
4525 "October", "November", "December" };
4527 adjustment = gtk_spin_button_get_adjustment (spin_button);
4528 value = gtk_adjustment_get_value (adjustment);
4529 for (i = 1; i <= 12; i++)
4530 if (fabs (value - (double)i) < 1e-5)
4532 if (strcmp (month[i-1], gtk_entry_get_text (GTK_ENTRY (spin_button))))
4533 gtk_entry_set_text (GTK_ENTRY (spin_button), month[i-1]);
4539 spin_button_hex_input_func (GtkSpinButton *spin_button,
4546 buf = gtk_entry_get_text (GTK_ENTRY (spin_button));
4547 res = strtol(buf, &err, 16);
4550 return GTK_INPUT_ERROR;
4556 spin_button_hex_output_func (GtkSpinButton *spin_button)
4558 GtkAdjustment *adjustment;
4559 static gchar buf[7];
4562 adjustment = gtk_spin_button_get_adjustment (spin_button);
4563 val = (gint) gtk_adjustment_get_value (adjustment);
4564 if (fabs (val) < 1e-5)
4565 sprintf (buf, "0x00");
4567 sprintf (buf, "0x%.2X", val);
4568 if (strcmp (buf, gtk_entry_get_text (GTK_ENTRY (spin_button))))
4569 gtk_entry_set_text (GTK_ENTRY (spin_button), buf);
4574 create_spins (GtkWidget *widget)
4576 static GtkWidget *window = NULL;
4579 GtkWidget *main_vbox;
4582 GtkWidget *spinner2;
4586 GtkWidget *val_label;
4591 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
4592 gtk_window_set_screen (GTK_WINDOW (window),
4593 gtk_widget_get_screen (widget));
4595 g_signal_connect (window, "destroy",
4596 G_CALLBACK (gtk_widget_destroyed),
4599 gtk_window_set_title (GTK_WINDOW (window), "GtkSpinButton");
4601 main_vbox = gtk_vbox_new (FALSE, 5);
4602 gtk_container_set_border_width (GTK_CONTAINER (main_vbox), 10);
4603 gtk_container_add (GTK_CONTAINER (window), main_vbox);
4605 frame = gtk_frame_new ("Not accelerated");
4606 gtk_box_pack_start (GTK_BOX (main_vbox), frame, TRUE, TRUE, 0);
4608 vbox = gtk_vbox_new (FALSE, 0);
4609 gtk_container_set_border_width (GTK_CONTAINER (vbox), 5);
4610 gtk_container_add (GTK_CONTAINER (frame), vbox);
4612 /* Time, month, hex spinners */
4614 hbox = gtk_hbox_new (FALSE, 0);
4615 gtk_box_pack_start (GTK_BOX (vbox), hbox, TRUE, TRUE, 5);
4617 vbox2 = gtk_vbox_new (FALSE, 0);
4618 gtk_box_pack_start (GTK_BOX (hbox), vbox2, TRUE, TRUE, 5);
4620 label = gtk_label_new ("Time :");
4621 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
4622 gtk_box_pack_start (GTK_BOX (vbox2), label, FALSE, TRUE, 0);
4624 adj = gtk_adjustment_new (0, 0, 1410, 30, 60, 0);
4625 spinner = gtk_spin_button_new (adj, 0, 0);
4626 gtk_editable_set_editable (GTK_EDITABLE (spinner), FALSE);
4627 g_signal_connect (spinner,
4629 G_CALLBACK (spin_button_time_output_func),
4631 gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (spinner), TRUE);
4632 gtk_entry_set_width_chars (GTK_ENTRY (spinner), 5);
4633 gtk_box_pack_start (GTK_BOX (vbox2), spinner, FALSE, TRUE, 0);
4635 vbox2 = gtk_vbox_new (FALSE, 0);
4636 gtk_box_pack_start (GTK_BOX (hbox), vbox2, TRUE, TRUE, 5);
4638 label = gtk_label_new ("Month :");
4639 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
4640 gtk_box_pack_start (GTK_BOX (vbox2), label, FALSE, TRUE, 0);
4642 adj = gtk_adjustment_new (1.0, 1.0, 12.0, 1.0,
4644 spinner = gtk_spin_button_new (adj, 0, 0);
4645 gtk_spin_button_set_update_policy (GTK_SPIN_BUTTON (spinner),
4646 GTK_UPDATE_IF_VALID);
4647 g_signal_connect (spinner,
4649 G_CALLBACK (spin_button_month_input_func),
4651 g_signal_connect (spinner,
4653 G_CALLBACK (spin_button_month_output_func),
4655 gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (spinner), TRUE);
4656 gtk_entry_set_width_chars (GTK_ENTRY (spinner), 9);
4657 gtk_box_pack_start (GTK_BOX (vbox2), spinner, FALSE, TRUE, 0);
4659 vbox2 = gtk_vbox_new (FALSE, 0);
4660 gtk_box_pack_start (GTK_BOX (hbox), vbox2, TRUE, TRUE, 5);
4662 label = gtk_label_new ("Hex :");
4663 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
4664 gtk_box_pack_start (GTK_BOX (vbox2), label, FALSE, TRUE, 0);
4666 adj = gtk_adjustment_new (0, 0, 255, 1, 16, 0);
4667 spinner = gtk_spin_button_new (adj, 0, 0);
4668 gtk_editable_set_editable (GTK_EDITABLE (spinner), TRUE);
4669 g_signal_connect (spinner,
4671 G_CALLBACK (spin_button_hex_input_func),
4673 g_signal_connect (spinner,
4675 G_CALLBACK (spin_button_hex_output_func),
4677 gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (spinner), TRUE);
4678 gtk_entry_set_width_chars (GTK_ENTRY (spinner), 4);
4679 gtk_box_pack_start (GTK_BOX (vbox2), spinner, FALSE, TRUE, 0);
4681 frame = gtk_frame_new ("Accelerated");
4682 gtk_box_pack_start (GTK_BOX (main_vbox), frame, TRUE, TRUE, 0);
4684 vbox = gtk_vbox_new (FALSE, 0);
4685 gtk_container_set_border_width (GTK_CONTAINER (vbox), 5);
4686 gtk_container_add (GTK_CONTAINER (frame), vbox);
4688 hbox = gtk_hbox_new (FALSE, 0);
4689 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 5);
4691 vbox2 = gtk_vbox_new (FALSE, 0);
4692 gtk_box_pack_start (GTK_BOX (hbox), vbox2, FALSE, FALSE, 5);
4694 label = gtk_label_new ("Value :");
4695 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
4696 gtk_box_pack_start (GTK_BOX (vbox2), label, FALSE, TRUE, 0);
4698 adj = gtk_adjustment_new (0.0, -10000.0, 10000.0,
4700 spinner1 = gtk_spin_button_new (adj, 1.0, 2);
4701 gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (spinner1), TRUE);
4702 gtk_box_pack_start (GTK_BOX (vbox2), spinner1, FALSE, TRUE, 0);
4704 vbox2 = gtk_vbox_new (FALSE, 0);
4705 gtk_box_pack_start (GTK_BOX (hbox), vbox2, FALSE, FALSE, 5);
4707 label = gtk_label_new ("Digits :");
4708 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
4709 gtk_box_pack_start (GTK_BOX (vbox2), label, FALSE, TRUE, 0);
4711 adj = gtk_adjustment_new (2, 1, 15, 1, 1, 0);
4712 spinner2 = gtk_spin_button_new (adj, 0.0, 0);
4713 g_signal_connect (adj, "value_changed",
4714 G_CALLBACK (change_digits),
4716 gtk_box_pack_start (GTK_BOX (vbox2), spinner2, FALSE, TRUE, 0);
4718 hbox = gtk_hbox_new (FALSE, 0);
4719 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 5);
4721 button = gtk_check_button_new_with_label ("Snap to 0.5-ticks");
4722 g_signal_connect (button, "clicked",
4723 G_CALLBACK (toggle_snap),
4725 gtk_box_pack_start (GTK_BOX (vbox), button, TRUE, TRUE, 0);
4726 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE);
4728 button = gtk_check_button_new_with_label ("Numeric only input mode");
4729 g_signal_connect (button, "clicked",
4730 G_CALLBACK (toggle_numeric),
4732 gtk_box_pack_start (GTK_BOX (vbox), button, TRUE, TRUE, 0);
4733 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE);
4735 val_label = gtk_label_new ("");
4737 hbox = gtk_hbox_new (FALSE, 0);
4738 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 5);
4740 button = gtk_button_new_with_label ("Value as Int");
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 (1));
4745 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
4747 button = gtk_button_new_with_label ("Value as Float");
4748 g_object_set_data (G_OBJECT (button), "user_data", val_label);
4749 g_signal_connect (button, "clicked",
4750 G_CALLBACK (get_value),
4751 GINT_TO_POINTER (2));
4752 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
4754 gtk_box_pack_start (GTK_BOX (vbox), val_label, TRUE, TRUE, 0);
4755 gtk_label_set_text (GTK_LABEL (val_label), "0");
4757 frame = gtk_frame_new ("Using Convenience Constructor");
4758 gtk_box_pack_start (GTK_BOX (main_vbox), frame, TRUE, TRUE, 0);
4760 hbox = gtk_hbox_new (FALSE, 0);
4761 gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
4762 gtk_container_add (GTK_CONTAINER (frame), hbox);
4764 val_label = gtk_label_new ("0.0");
4766 spinner = gtk_spin_button_new_with_range (0.0, 10.0, 0.009);
4767 gtk_spin_button_set_value (GTK_SPIN_BUTTON (spinner), 0.0);
4768 g_signal_connect (spinner, "value_changed",
4769 G_CALLBACK (get_spin_value), val_label);
4770 gtk_box_pack_start (GTK_BOX (hbox), spinner, TRUE, TRUE, 5);
4771 gtk_box_pack_start (GTK_BOX (hbox), val_label, TRUE, TRUE, 5);
4773 hbox = gtk_hbox_new (FALSE, 0);
4774 gtk_box_pack_start (GTK_BOX (main_vbox), hbox, FALSE, TRUE, 0);
4776 button = gtk_button_new_with_label ("Close");
4777 g_signal_connect_swapped (button, "clicked",
4778 G_CALLBACK (gtk_widget_destroy),
4780 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
4783 if (!gtk_widget_get_visible (window))
4784 gtk_widget_show_all (window);
4786 gtk_widget_destroy (window);
4795 cursor_draw (GtkWidget *widget,
4801 width = gtk_widget_get_allocated_width (widget);
4802 height = gtk_widget_get_allocated_height (widget);
4804 cairo_set_source_rgb (cr, 1, 1, 1);
4805 cairo_rectangle (cr, 0, 0, width, height / 2);
4808 cairo_set_source_rgb (cr, 0, 0, 0);
4809 cairo_rectangle (cr, 0, height / 2, width, height / 2);
4812 gdk_cairo_set_source_color (cr, >k_widget_get_style (widget)->bg[GTK_STATE_NORMAL]);
4813 cairo_rectangle (cr, width / 3, height / 3, width / 3, height / 3);
4820 set_cursor (GtkWidget *spinner,
4829 c = CLAMP (gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (spinner)), 0, 152);
4832 label = g_object_get_data (G_OBJECT (spinner), "user_data");
4834 class = g_type_class_ref (GDK_TYPE_CURSOR_TYPE);
4835 vals = class->values;
4837 while (vals && vals->value != c)
4840 gtk_label_set_text (GTK_LABEL (label), vals->value_nick);
4842 gtk_label_set_text (GTK_LABEL (label), "<unknown>");
4844 g_type_class_unref (class);
4846 cursor = gdk_cursor_new_for_display (gtk_widget_get_display (widget), c);
4847 gdk_window_set_cursor (gtk_widget_get_window (widget),
4849 gdk_cursor_unref (cursor);
4853 cursor_event (GtkWidget *widget,
4855 GtkSpinButton *spinner)
4857 if ((event->type == GDK_BUTTON_PRESS) &&
4858 ((event->button.button == 1) ||
4859 (event->button.button == 3)))
4861 gtk_spin_button_spin (spinner, event->button.button == 1 ?
4862 GTK_SPIN_STEP_FORWARD : GTK_SPIN_STEP_BACKWARD, 0);
4869 #ifdef GDK_WINDOWING_X11
4870 #include "x11/gdkx.h"
4873 change_cursor_theme (GtkWidget *widget,
4880 children = gtk_container_get_children (GTK_CONTAINER (data));
4882 theme = gtk_entry_get_text (GTK_ENTRY (children->next->data));
4883 size = (gint) gtk_spin_button_get_value (GTK_SPIN_BUTTON (children->next->next->data));
4885 g_list_free (children);
4887 gdk_x11_display_set_cursor_theme (gtk_widget_get_display (widget),
4894 create_cursors (GtkWidget *widget)
4896 static GtkWidget *window = NULL;
4899 GtkWidget *main_vbox;
4912 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
4913 gtk_window_set_screen (GTK_WINDOW (window),
4914 gtk_widget_get_screen (widget));
4916 g_signal_connect (window, "destroy",
4917 G_CALLBACK (gtk_widget_destroyed),
4920 gtk_window_set_title (GTK_WINDOW (window), "Cursors");
4922 main_vbox = gtk_vbox_new (FALSE, 5);
4923 gtk_container_set_border_width (GTK_CONTAINER (main_vbox), 0);
4924 gtk_container_add (GTK_CONTAINER (window), main_vbox);
4927 g_object_new (gtk_vbox_get_type (),
4928 "GtkBox::homogeneous", FALSE,
4929 "GtkBox::spacing", 5,
4930 "GtkContainer::border_width", 10,
4931 "GtkWidget::parent", main_vbox,
4932 "GtkWidget::visible", TRUE,
4935 #ifdef GDK_WINDOWING_X11
4936 hbox = gtk_hbox_new (FALSE, 0);
4937 gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
4938 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0);
4940 label = gtk_label_new ("Cursor Theme : ");
4941 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
4942 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
4944 entry = gtk_entry_new ();
4945 gtk_entry_set_text (GTK_ENTRY (entry), "default");
4946 gtk_box_pack_start (GTK_BOX (hbox), entry, FALSE, TRUE, 0);
4948 size = gtk_spin_button_new_with_range (1.0, 64.0, 1.0);
4949 gtk_spin_button_set_value (GTK_SPIN_BUTTON (size), 24.0);
4950 gtk_box_pack_start (GTK_BOX (hbox), size, TRUE, TRUE, 0);
4952 g_signal_connect (entry, "changed",
4953 G_CALLBACK (change_cursor_theme), hbox);
4954 g_signal_connect (size, "changed",
4955 G_CALLBACK (change_cursor_theme), hbox);
4958 hbox = gtk_hbox_new (FALSE, 0);
4959 gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
4960 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0);
4962 label = gtk_label_new ("Cursor Value : ");
4963 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
4964 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
4966 adj = gtk_adjustment_new (0,
4970 spinner = gtk_spin_button_new (adj, 0, 0);
4971 gtk_box_pack_start (GTK_BOX (hbox), spinner, TRUE, TRUE, 0);
4974 g_object_new (gtk_frame_get_type (),
4975 "GtkFrame::label_xalign", 0.5,
4976 "GtkFrame::label", "Cursor Area",
4977 "GtkContainer::border_width", 10,
4978 "GtkWidget::parent", vbox,
4979 "GtkWidget::visible", TRUE,
4982 darea = gtk_drawing_area_new ();
4983 gtk_widget_set_size_request (darea, 80, 80);
4984 gtk_container_add (GTK_CONTAINER (frame), darea);
4985 g_signal_connect (darea,
4987 G_CALLBACK (cursor_draw),
4989 gtk_widget_set_events (darea, GDK_EXPOSURE_MASK | GDK_BUTTON_PRESS_MASK);
4990 g_signal_connect (darea,
4991 "button_press_event",
4992 G_CALLBACK (cursor_event),
4994 gtk_widget_show (darea);
4996 g_signal_connect (spinner, "changed",
4997 G_CALLBACK (set_cursor),
5000 label = g_object_new (GTK_TYPE_LABEL,
5005 gtk_container_child_set (GTK_CONTAINER (vbox), label,
5008 g_object_set_data (G_OBJECT (spinner), "user_data", label);
5011 g_object_new (gtk_hseparator_get_type (),
5012 "GtkWidget::visible", TRUE,
5014 gtk_box_pack_start (GTK_BOX (main_vbox), any, FALSE, TRUE, 0);
5016 hbox = gtk_hbox_new (FALSE, 0);
5017 gtk_container_set_border_width (GTK_CONTAINER (hbox), 10);
5018 gtk_box_pack_start (GTK_BOX (main_vbox), hbox, FALSE, TRUE, 0);
5020 button = gtk_button_new_with_label ("Close");
5021 g_signal_connect_swapped (button, "clicked",
5022 G_CALLBACK (gtk_widget_destroy),
5024 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
5026 gtk_widget_show_all (window);
5028 set_cursor (spinner, darea);
5031 gtk_widget_destroy (window);
5039 color_selection_ok (GtkWidget *w,
5040 GtkColorSelectionDialog *cs)
5042 GtkWidget *colorsel;
5045 colorsel = gtk_color_selection_dialog_get_color_selection (cs);
5047 gtk_color_selection_get_current_color (GTK_COLOR_SELECTION (colorsel), &color);
5048 gtk_color_selection_set_current_color (GTK_COLOR_SELECTION (colorsel), &color);
5052 color_selection_changed (GtkWidget *w,
5053 GtkColorSelectionDialog *cs)
5055 GtkWidget *colorsel;
5058 colorsel = gtk_color_selection_dialog_get_color_selection (cs);
5059 gtk_color_selection_get_current_color (GTK_COLOR_SELECTION (colorsel), &color);
5060 gtk_color_selection_set_current_color (GTK_COLOR_SELECTION (colorsel), &color);
5065 opacity_toggled_cb (GtkWidget *w,
5066 GtkColorSelectionDialog *cs)
5068 GtkColorSelection *colorsel;
5070 colorsel = GTK_COLOR_SELECTION (cs->colorsel);
5071 gtk_color_selection_set_has_opacity_control (colorsel,
5072 gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (w)));
5076 palette_toggled_cb (GtkWidget *w,
5077 GtkColorSelectionDialog *cs)
5079 GtkColorSelection *colorsel;
5081 colorsel = GTK_COLOR_SELECTION (cs->colorsel);
5082 gtk_color_selection_set_has_palette (colorsel,
5083 gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (w)));
5088 create_color_selection (GtkWidget *widget)
5090 static GtkWidget *window = NULL;
5099 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
5100 gtk_window_set_screen (GTK_WINDOW (window),
5101 gtk_widget_get_screen (widget));
5103 g_signal_connect (window, "destroy",
5104 G_CALLBACK (gtk_widget_destroyed),
5107 gtk_window_set_title (GTK_WINDOW (window), "GtkColorButton");
5108 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
5110 hbox = gtk_hbox_new (FALSE, 8);
5111 gtk_container_set_border_width (GTK_CONTAINER (hbox), 8);
5112 gtk_container_add (GTK_CONTAINER (window), hbox);
5114 label = gtk_label_new ("Pick a color");
5115 gtk_container_add (GTK_CONTAINER (hbox), label);
5117 picker = gtk_color_button_new ();
5118 gtk_color_button_set_use_alpha (GTK_COLOR_BUTTON (picker), TRUE);
5119 gtk_container_add (GTK_CONTAINER (hbox), picker);
5121 button = gtk_button_new_with_mnemonic ("_Props");
5122 gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, FALSE, 0);
5123 g_signal_connect (button, "clicked",
5124 G_CALLBACK (props_clicked),
5128 if (!gtk_widget_get_visible (window))
5129 gtk_widget_show_all (window);
5131 gtk_widget_destroy (window);
5135 flipping_toggled_cb (GtkWidget *widget, gpointer data)
5137 int state = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget));
5138 int new_direction = state ? GTK_TEXT_DIR_RTL : GTK_TEXT_DIR_LTR;
5140 gtk_widget_set_default_direction (new_direction);
5144 orientable_toggle_orientation (GtkOrientable *orientable)
5146 GtkOrientation orientation;
5148 orientation = gtk_orientable_get_orientation (orientable);
5149 gtk_orientable_set_orientation (orientable,
5150 orientation == GTK_ORIENTATION_HORIZONTAL ?
5151 GTK_ORIENTATION_VERTICAL :
5152 GTK_ORIENTATION_HORIZONTAL);
5154 if (GTK_IS_CONTAINER (orientable))
5159 children = gtk_container_get_children (GTK_CONTAINER (orientable));
5161 for (child = children; child; child = child->next)
5163 if (GTK_IS_ORIENTABLE (child->data))
5164 orientable_toggle_orientation (child->data);
5167 g_list_free (children);
5172 flipping_orientation_toggled_cb (GtkWidget *widget, gpointer data)
5174 GtkWidget *content_area;
5175 GtkWidget *toplevel;
5177 toplevel = gtk_widget_get_toplevel (widget);
5178 content_area = gtk_dialog_get_content_area (GTK_DIALOG (toplevel));
5179 orientable_toggle_orientation (GTK_ORIENTABLE (content_area));
5183 set_direction_recurse (GtkWidget *widget,
5186 GtkTextDirection *dir = data;
5188 gtk_widget_set_direction (widget, *dir);
5189 if (GTK_IS_CONTAINER (widget))
5190 gtk_container_foreach (GTK_CONTAINER (widget),
5191 set_direction_recurse,
5196 create_forward_back (const char *title,
5197 GtkTextDirection text_dir)
5199 GtkWidget *frame = gtk_frame_new (title);
5200 GtkWidget *bbox = gtk_hbutton_box_new ();
5201 GtkWidget *back_button = gtk_button_new_from_stock (GTK_STOCK_GO_BACK);
5202 GtkWidget *forward_button = gtk_button_new_from_stock (GTK_STOCK_GO_FORWARD);
5204 gtk_container_set_border_width (GTK_CONTAINER (bbox), 5);
5206 gtk_container_add (GTK_CONTAINER (frame), bbox);
5207 gtk_container_add (GTK_CONTAINER (bbox), back_button);
5208 gtk_container_add (GTK_CONTAINER (bbox), forward_button);
5210 set_direction_recurse (frame, &text_dir);
5216 create_flipping (GtkWidget *widget)
5218 static GtkWidget *window = NULL;
5219 GtkWidget *check_button, *button;
5220 GtkWidget *action_area, *content_area;
5224 window = gtk_dialog_new ();
5226 gtk_window_set_screen (GTK_WINDOW (window),
5227 gtk_widget_get_screen (widget));
5229 g_signal_connect (window, "destroy",
5230 G_CALLBACK (gtk_widget_destroyed),
5233 content_area = gtk_dialog_get_content_area (GTK_DIALOG (window));
5234 action_area = gtk_dialog_get_action_area (GTK_DIALOG (window));
5236 gtk_window_set_title (GTK_WINDOW (window), "Bidirectional Flipping");
5238 check_button = gtk_check_button_new_with_label ("Right-to-left global direction");
5239 gtk_container_set_border_width (GTK_CONTAINER (check_button), 10);
5240 gtk_box_pack_start (GTK_BOX (content_area), check_button, TRUE, TRUE, 0);
5242 if (gtk_widget_get_default_direction () == GTK_TEXT_DIR_RTL)
5243 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check_button), TRUE);
5245 g_signal_connect (check_button, "toggled",
5246 G_CALLBACK (flipping_toggled_cb), NULL);
5248 check_button = gtk_check_button_new_with_label ("Toggle orientation of all boxes");
5249 gtk_container_set_border_width (GTK_CONTAINER (check_button), 10);
5250 gtk_box_pack_start (GTK_BOX (content_area), check_button, TRUE, TRUE, 0);
5252 g_signal_connect (check_button, "toggled",
5253 G_CALLBACK (flipping_orientation_toggled_cb), NULL);
5255 gtk_box_pack_start (GTK_BOX (content_area),
5256 create_forward_back ("Default", GTK_TEXT_DIR_NONE),
5259 gtk_box_pack_start (GTK_BOX (content_area),
5260 create_forward_back ("Left-to-Right", GTK_TEXT_DIR_LTR),
5263 gtk_box_pack_start (GTK_BOX (content_area),
5264 create_forward_back ("Right-to-Left", GTK_TEXT_DIR_RTL),
5267 button = gtk_button_new_with_label ("Close");
5268 g_signal_connect_swapped (button, "clicked",
5269 G_CALLBACK (gtk_widget_destroy), window);
5270 gtk_box_pack_start (GTK_BOX (action_area), button, TRUE, TRUE, 0);
5273 if (!gtk_widget_get_visible (window))
5274 gtk_widget_show_all (window);
5276 gtk_widget_destroy (window);
5284 make_focus_table (GList **list)
5289 table = gtk_table_new (5, 5, FALSE);
5302 widget = gtk_entry_new ();
5304 widget = gtk_button_new_with_label ("Foo");
5306 *list = g_list_prepend (*list, widget);
5308 gtk_table_attach (GTK_TABLE (table),
5312 GTK_EXPAND | GTK_FILL,
5313 GTK_EXPAND | GTK_FILL,
5322 *list = g_list_reverse (*list);
5328 create_focus (GtkWidget *widget)
5330 static GtkWidget *window = NULL;
5334 GtkWidget *content_area;
5339 window = gtk_dialog_new_with_buttons ("Keyboard focus navigation",
5345 gtk_window_set_screen (GTK_WINDOW (window),
5346 gtk_widget_get_screen (widget));
5348 g_signal_connect (window, "destroy",
5349 G_CALLBACK (gtk_widget_destroyed),
5352 g_signal_connect (window, "response",
5353 G_CALLBACK (gtk_widget_destroy),
5356 content_area = gtk_dialog_get_content_area (GTK_DIALOG (window));
5358 gtk_window_set_title (GTK_WINDOW (window), "Keyboard Focus Navigation");
5360 frame = gtk_frame_new ("Weird tab focus chain");
5362 gtk_box_pack_start (GTK_BOX (content_area), frame, TRUE, TRUE, 0);
5364 table = make_focus_table (&list);
5366 gtk_container_add (GTK_CONTAINER (frame), table);
5368 gtk_container_set_focus_chain (GTK_CONTAINER (table),
5373 frame = gtk_frame_new ("Default tab focus chain");
5375 gtk_box_pack_start (GTK_BOX (content_area), frame, TRUE, TRUE, 0);
5378 table = make_focus_table (&list);
5382 gtk_container_add (GTK_CONTAINER (frame), table);
5385 if (!gtk_widget_get_visible (window))
5386 gtk_widget_show_all (window);
5388 gtk_widget_destroy (window);
5396 font_selection_ok (GtkWidget *w,
5397 GtkFontSelectionDialog *fs)
5399 gchar *s = gtk_font_selection_dialog_get_font_name (fs);
5401 g_print ("%s\n", s);
5403 gtk_widget_destroy (GTK_WIDGET (fs));
5407 create_font_selection (GtkWidget *widget)
5409 static GtkWidget *window = NULL;
5417 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
5418 gtk_window_set_screen (GTK_WINDOW (window),
5419 gtk_widget_get_screen (widget));
5421 g_signal_connect (window, "destroy",
5422 G_CALLBACK (gtk_widget_destroyed),
5425 gtk_window_set_title (GTK_WINDOW (window), "GtkFontButton");
5426 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
5428 hbox = gtk_hbox_new (FALSE, 8);
5429 gtk_container_set_border_width (GTK_CONTAINER (hbox), 8);
5430 gtk_container_add (GTK_CONTAINER (window), hbox);
5432 label = gtk_label_new ("Pick a font");
5433 gtk_container_add (GTK_CONTAINER (hbox), label);
5435 picker = gtk_font_button_new ();
5436 gtk_font_button_set_use_font (GTK_FONT_BUTTON (picker), TRUE);
5437 gtk_container_add (GTK_CONTAINER (hbox), picker);
5440 if (!gtk_widget_get_visible (window))
5441 gtk_widget_show_all (window);
5443 gtk_widget_destroy (window);
5450 static GtkWidget *dialog_window = NULL;
5453 label_toggle (GtkWidget *widget,
5458 *label = gtk_label_new ("Dialog Test");
5459 g_signal_connect (*label,
5461 G_CALLBACK (gtk_widget_destroyed),
5463 gtk_misc_set_padding (GTK_MISC (*label), 10, 10);
5464 gtk_box_pack_start (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (dialog_window))),
5465 *label, TRUE, TRUE, 0);
5466 gtk_widget_show (*label);
5469 gtk_widget_destroy (*label);
5473 create_dialog (GtkWidget *widget)
5475 static GtkWidget *label;
5476 GtkWidget *action_area;
5481 /* This is a terrible example; it's much simpler to create
5482 * dialogs than this. Don't use testgtk for example code,
5486 dialog_window = gtk_dialog_new ();
5487 gtk_window_set_screen (GTK_WINDOW (dialog_window),
5488 gtk_widget_get_screen (widget));
5490 g_signal_connect (dialog_window, "destroy",
5491 G_CALLBACK (gtk_widget_destroyed),
5494 action_area = gtk_dialog_get_action_area (GTK_DIALOG (dialog_window));
5496 gtk_window_set_title (GTK_WINDOW (dialog_window), "GtkDialog");
5497 gtk_container_set_border_width (GTK_CONTAINER (dialog_window), 0);
5499 button = gtk_button_new_with_label ("OK");
5500 gtk_widget_set_can_default (button, TRUE);
5501 gtk_box_pack_start (GTK_BOX (action_area), button, TRUE, TRUE, 0);
5502 gtk_widget_grab_default (button);
5503 gtk_widget_show (button);
5505 button = gtk_button_new_with_label ("Toggle");
5506 g_signal_connect (button, "clicked",
5507 G_CALLBACK (label_toggle),
5509 gtk_widget_set_can_default (button, TRUE);
5510 gtk_box_pack_start (GTK_BOX (action_area), button, TRUE, TRUE, 0);
5511 gtk_widget_show (button);
5516 if (!gtk_widget_get_visible (dialog_window))
5517 gtk_widget_show (dialog_window);
5519 gtk_widget_destroy (dialog_window);
5522 /* Display & Screen test
5529 GtkWidget *radio_dpy;
5530 GtkWidget *toplevel;
5531 GtkWidget *dialog_window;
5532 } ScreenDisplaySelection;
5535 screen_display_check (GtkWidget *widget, ScreenDisplaySelection *data)
5537 const gchar *display_name;
5538 GdkDisplay *display = gtk_widget_get_display (widget);
5540 GdkScreen *new_screen = NULL;
5541 GdkScreen *current_screen = gtk_widget_get_screen (widget);
5543 if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (data->radio_dpy)))
5545 display_name = gtk_entry_get_text (GTK_ENTRY (data->entry));
5546 display = gdk_display_open (display_name);
5550 dialog = gtk_message_dialog_new (GTK_WINDOW (gtk_widget_get_toplevel (widget)),
5551 GTK_DIALOG_DESTROY_WITH_PARENT,
5554 "The display :\n%s\ncannot be opened",
5556 gtk_window_set_screen (GTK_WINDOW (dialog), current_screen);
5557 gtk_widget_show (dialog);
5558 g_signal_connect (dialog, "response",
5559 G_CALLBACK (gtk_widget_destroy),
5564 GtkTreeModel *model = gtk_combo_box_get_model (GTK_COMBO_BOX (data->combo));
5567 gboolean found = FALSE;
5568 while (gtk_tree_model_iter_nth_child (model, &iter, NULL, i++))
5571 gtk_tree_model_get (model, &iter, 0, &name, -1);
5572 found = !g_ascii_strcasecmp (display_name, name);
5579 gtk_combo_box_append_text (GTK_COMBO_BOX (data->combo), display_name);
5580 new_screen = gdk_display_get_default_screen (display);
5585 gint number_of_screens = gdk_display_get_n_screens (display);
5586 gint screen_num = gdk_screen_get_number (current_screen);
5587 if ((screen_num +1) < number_of_screens)
5588 new_screen = gdk_display_get_screen (display, screen_num + 1);
5590 new_screen = gdk_display_get_screen (display, 0);
5595 gtk_window_set_screen (GTK_WINDOW (data->toplevel), new_screen);
5596 gtk_widget_destroy (data->dialog_window);
5601 screen_display_destroy_diag (GtkWidget *widget, GtkWidget *data)
5603 gtk_widget_destroy (data);
5607 create_display_screen (GtkWidget *widget)
5609 GtkWidget *table, *frame, *window, *combo_dpy, *vbox;
5610 GtkWidget *radio_dpy, *radio_scr, *applyb, *cancelb;
5612 ScreenDisplaySelection *scr_dpy_data;
5613 GdkScreen *screen = gtk_widget_get_screen (widget);
5614 GdkDisplay *display = gdk_screen_get_display (screen);
5616 window = g_object_new (gtk_window_get_type (),
5619 "type", GTK_WINDOW_TOPLEVEL,
5621 "Screen or Display selection",
5622 "border_width", 10, NULL);
5623 g_signal_connect (window, "destroy",
5624 G_CALLBACK (gtk_widget_destroy), NULL);
5626 vbox = gtk_vbox_new (FALSE, 3);
5627 gtk_container_add (GTK_CONTAINER (window), vbox);
5629 frame = gtk_frame_new ("Select screen or display");
5630 gtk_container_add (GTK_CONTAINER (vbox), frame);
5632 table = gtk_table_new (2, 2, TRUE);
5633 gtk_table_set_row_spacings (GTK_TABLE (table), 3);
5634 gtk_table_set_col_spacings (GTK_TABLE (table), 3);
5636 gtk_container_add (GTK_CONTAINER (frame), table);
5638 radio_dpy = gtk_radio_button_new_with_label (NULL, "move to another X display");
5639 if (gdk_display_get_n_screens(display) > 1)
5640 radio_scr = gtk_radio_button_new_with_label
5641 (gtk_radio_button_get_group (GTK_RADIO_BUTTON (radio_dpy)), "move to next screen");
5644 radio_scr = gtk_radio_button_new_with_label
5645 (gtk_radio_button_get_group (GTK_RADIO_BUTTON (radio_dpy)),
5646 "only one screen on the current display");
5647 gtk_widget_set_sensitive (radio_scr, FALSE);
5649 combo_dpy = gtk_combo_box_text_new ();
5650 gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (combo_dpy), "diabolo:0.0");
5651 gtk_entry_set_text (GTK_ENTRY (gtk_bin_get_child (GTK_BIN (combo_dpy))),
5652 "<hostname>:<X Server Num>.<Screen Num>");
5654 gtk_table_attach_defaults (GTK_TABLE (table), radio_dpy, 0, 1, 0, 1);
5655 gtk_table_attach_defaults (GTK_TABLE (table), radio_scr, 0, 1, 1, 2);
5656 gtk_table_attach_defaults (GTK_TABLE (table), combo_dpy, 1, 2, 0, 1);
5658 bbox = gtk_hbutton_box_new ();
5659 applyb = gtk_button_new_from_stock (GTK_STOCK_APPLY);
5660 cancelb = gtk_button_new_from_stock (GTK_STOCK_CANCEL);
5662 gtk_container_add (GTK_CONTAINER (vbox), bbox);
5664 gtk_container_add (GTK_CONTAINER (bbox), applyb);
5665 gtk_container_add (GTK_CONTAINER (bbox), cancelb);
5667 scr_dpy_data = g_new0 (ScreenDisplaySelection, 1);
5669 scr_dpy_data->entry = gtk_bin_get_child (GTK_BIN (combo_dpy));
5670 scr_dpy_data->radio_dpy = radio_dpy;
5671 scr_dpy_data->toplevel = gtk_widget_get_toplevel (widget);
5672 scr_dpy_data->dialog_window = window;
5674 g_signal_connect (cancelb, "clicked",
5675 G_CALLBACK (screen_display_destroy_diag), window);
5676 g_signal_connect (applyb, "clicked",
5677 G_CALLBACK (screen_display_check), scr_dpy_data);
5678 gtk_widget_show_all (window);
5683 static gboolean event_watcher_enter_id = 0;
5684 static gboolean event_watcher_leave_id = 0;
5687 event_watcher (GSignalInvocationHint *ihint,
5688 guint n_param_values,
5689 const GValue *param_values,
5692 g_print ("Watch: \"%s\" emitted for %s\n",
5693 g_signal_name (ihint->signal_id),
5694 G_OBJECT_TYPE_NAME (g_value_get_object (param_values + 0)));
5700 event_watcher_down (void)
5702 if (event_watcher_enter_id)
5706 signal_id = g_signal_lookup ("enter_notify_event", GTK_TYPE_WIDGET);
5707 g_signal_remove_emission_hook (signal_id, event_watcher_enter_id);
5708 event_watcher_enter_id = 0;
5709 signal_id = g_signal_lookup ("leave_notify_event", GTK_TYPE_WIDGET);
5710 g_signal_remove_emission_hook (signal_id, event_watcher_leave_id);
5711 event_watcher_leave_id = 0;
5716 event_watcher_toggle (void)
5718 if (event_watcher_enter_id)
5719 event_watcher_down ();
5724 signal_id = g_signal_lookup ("enter_notify_event", GTK_TYPE_WIDGET);
5725 event_watcher_enter_id = g_signal_add_emission_hook (signal_id, 0, event_watcher, NULL, NULL);
5726 signal_id = g_signal_lookup ("leave_notify_event", GTK_TYPE_WIDGET);
5727 event_watcher_leave_id = g_signal_add_emission_hook (signal_id, 0, event_watcher, NULL, NULL);
5732 create_event_watcher (GtkWidget *widget)
5734 GtkWidget *action_area, *content_area;
5739 dialog_window = gtk_dialog_new ();
5740 gtk_window_set_screen (GTK_WINDOW (dialog_window),
5741 gtk_widget_get_screen (widget));
5743 g_signal_connect (dialog_window, "destroy",
5744 G_CALLBACK (gtk_widget_destroyed),
5746 g_signal_connect (dialog_window, "destroy",
5747 G_CALLBACK (event_watcher_down),
5750 content_area = gtk_dialog_get_content_area (GTK_DIALOG (dialog_window));
5751 action_area = gtk_dialog_get_action_area (GTK_DIALOG (dialog_window));
5753 gtk_window_set_title (GTK_WINDOW (dialog_window), "Event Watcher");
5754 gtk_container_set_border_width (GTK_CONTAINER (dialog_window), 0);
5755 gtk_widget_set_size_request (dialog_window, 200, 110);
5757 button = gtk_toggle_button_new_with_label ("Activate Watch");
5758 g_signal_connect (button, "clicked",
5759 G_CALLBACK (event_watcher_toggle),
5761 gtk_container_set_border_width (GTK_CONTAINER (button), 10);
5762 gtk_box_pack_start (GTK_BOX (content_area), button, TRUE, TRUE, 0);
5763 gtk_widget_show (button);
5765 button = gtk_button_new_with_label ("Close");
5766 g_signal_connect_swapped (button, "clicked",
5767 G_CALLBACK (gtk_widget_destroy),
5769 gtk_widget_set_can_default (button, TRUE);
5770 gtk_box_pack_start (GTK_BOX (action_area), button, TRUE, TRUE, 0);
5771 gtk_widget_grab_default (button);
5772 gtk_widget_show (button);
5775 if (!gtk_widget_get_visible (dialog_window))
5776 gtk_widget_show (dialog_window);
5778 gtk_widget_destroy (dialog_window);
5786 reformat_value (GtkScale *scale,
5789 return g_strdup_printf ("-->%0.*g<--",
5790 gtk_scale_get_digits (scale), value);
5794 create_range_controls (GtkWidget *widget)
5796 static GtkWidget *window = NULL;
5800 GtkWidget *scrollbar;
5802 GtkWidget *separator;
5803 GtkAdjustment *adjustment;
5808 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
5810 gtk_window_set_screen (GTK_WINDOW (window),
5811 gtk_widget_get_screen (widget));
5813 g_signal_connect (window, "destroy",
5814 G_CALLBACK (gtk_widget_destroyed),
5817 gtk_window_set_title (GTK_WINDOW (window), "range controls");
5818 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
5821 box1 = gtk_vbox_new (FALSE, 0);
5822 gtk_container_add (GTK_CONTAINER (window), box1);
5823 gtk_widget_show (box1);
5826 box2 = gtk_vbox_new (FALSE, 10);
5827 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
5828 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
5829 gtk_widget_show (box2);
5832 adjustment = gtk_adjustment_new (0.0, 0.0, 101.0, 0.1, 1.0, 1.0);
5834 scale = gtk_hscale_new (GTK_ADJUSTMENT (adjustment));
5835 gtk_widget_set_size_request (GTK_WIDGET (scale), 150, -1);
5836 gtk_range_set_update_policy (GTK_RANGE (scale), GTK_UPDATE_DELAYED);
5837 gtk_scale_set_digits (GTK_SCALE (scale), 1);
5838 gtk_scale_set_draw_value (GTK_SCALE (scale), TRUE);
5839 gtk_box_pack_start (GTK_BOX (box2), scale, TRUE, TRUE, 0);
5840 gtk_widget_show (scale);
5842 scrollbar = gtk_hscrollbar_new (GTK_ADJUSTMENT (adjustment));
5843 gtk_range_set_update_policy (GTK_RANGE (scrollbar),
5844 GTK_UPDATE_CONTINUOUS);
5845 gtk_box_pack_start (GTK_BOX (box2), scrollbar, TRUE, TRUE, 0);
5846 gtk_widget_show (scrollbar);
5848 scale = gtk_hscale_new (GTK_ADJUSTMENT (adjustment));
5849 gtk_scale_set_draw_value (GTK_SCALE (scale), TRUE);
5850 g_signal_connect (scale,
5852 G_CALLBACK (reformat_value),
5854 gtk_box_pack_start (GTK_BOX (box2), scale, TRUE, TRUE, 0);
5855 gtk_widget_show (scale);
5857 hbox = gtk_hbox_new (FALSE, 0);
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_box_pack_start (GTK_BOX (hbox), scale, TRUE, TRUE, 0);
5864 gtk_widget_show (scale);
5866 scale = gtk_vscale_new (GTK_ADJUSTMENT (adjustment));
5867 gtk_widget_set_size_request (scale, -1, 200);
5868 gtk_scale_set_digits (GTK_SCALE (scale), 2);
5869 gtk_scale_set_draw_value (GTK_SCALE (scale), TRUE);
5870 gtk_range_set_inverted (GTK_RANGE (scale), TRUE);
5871 gtk_box_pack_start (GTK_BOX (hbox), scale, TRUE, TRUE, 0);
5872 gtk_widget_show (scale);
5874 scale = gtk_vscale_new (GTK_ADJUSTMENT (adjustment));
5875 gtk_scale_set_draw_value (GTK_SCALE (scale), TRUE);
5876 g_signal_connect (scale,
5878 G_CALLBACK (reformat_value),
5880 gtk_box_pack_start (GTK_BOX (hbox), scale, TRUE, TRUE, 0);
5881 gtk_widget_show (scale);
5884 gtk_box_pack_start (GTK_BOX (box2), hbox, TRUE, TRUE, 0);
5885 gtk_widget_show (hbox);
5887 separator = gtk_hseparator_new ();
5888 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
5889 gtk_widget_show (separator);
5892 box2 = gtk_vbox_new (FALSE, 10);
5893 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
5894 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
5895 gtk_widget_show (box2);
5898 button = gtk_button_new_with_label ("close");
5899 g_signal_connect_swapped (button, "clicked",
5900 G_CALLBACK (gtk_widget_destroy),
5902 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
5903 gtk_widget_set_can_default (button, TRUE);
5904 gtk_widget_grab_default (button);
5905 gtk_widget_show (button);
5908 if (!gtk_widget_get_visible (window))
5909 gtk_widget_show (window);
5911 gtk_widget_destroy (window);
5919 create_rulers (GtkWidget *widget)
5921 static GtkWidget *window = NULL;
5927 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
5929 gtk_window_set_screen (GTK_WINDOW (window),
5930 gtk_widget_get_screen (widget));
5932 gtk_window_set_resizable (GTK_WINDOW (window), TRUE);
5934 g_signal_connect (window, "destroy",
5935 G_CALLBACK (gtk_widget_destroyed),
5938 gtk_window_set_title (GTK_WINDOW (window), "rulers");
5939 gtk_widget_set_size_request (window, 300, 300);
5940 gtk_widget_set_events (window,
5941 GDK_POINTER_MOTION_MASK
5942 | GDK_POINTER_MOTION_HINT_MASK);
5943 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
5945 table = gtk_table_new (2, 2, FALSE);
5946 gtk_container_add (GTK_CONTAINER (window), table);
5947 gtk_widget_show (table);
5949 ruler = gtk_hruler_new ();
5950 gtk_ruler_set_metric (GTK_RULER (ruler), GTK_CENTIMETERS);
5951 gtk_ruler_set_range (GTK_RULER (ruler), 100, 0, 0, 20);
5953 g_signal_connect_swapped (window,
5954 "motion_notify_event",
5955 G_CALLBACK (GTK_WIDGET_GET_CLASS (ruler)->motion_notify_event),
5958 gtk_table_attach (GTK_TABLE (table), ruler, 1, 2, 0, 1,
5959 GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 0);
5960 gtk_widget_show (ruler);
5963 ruler = gtk_vruler_new ();
5964 gtk_ruler_set_range (GTK_RULER (ruler), 5, 15, 0, 20);
5966 g_signal_connect_swapped (window,
5967 "motion_notify_event",
5968 G_CALLBACK (GTK_WIDGET_GET_CLASS (ruler)->motion_notify_event),
5971 gtk_table_attach (GTK_TABLE (table), ruler, 0, 1, 1, 2,
5972 GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
5973 gtk_widget_show (ruler);
5976 if (!gtk_widget_get_visible (window))
5977 gtk_widget_show (window);
5979 gtk_widget_destroy (window);
5986 { { 0, 0x0000, 0x0000, 0x0000 }, "black" },
5987 { { 0, 0xFFFF, 0xFFFF, 0xFFFF }, "white" },
5988 { { 0, 0xFFFF, 0x0000, 0x0000 }, "red" },
5989 { { 0, 0x0000, 0xFFFF, 0x0000 }, "green" },
5990 { { 0, 0x0000, 0x0000, 0xFFFF }, "blue" },
5991 { { 0, 0x0000, 0xFFFF, 0xFFFF }, "cyan" },
5992 { { 0, 0xFFFF, 0x0000, 0xFFFF }, "magenta" },
5993 { { 0, 0xFFFF, 0xFFFF, 0x0000 }, "yellow" }
5996 int ntext_colors = sizeof(text_colors) / sizeof(text_colors[0]);
6002 static const char * book_open_xpm[] = {
6025 static const char * book_closed_xpm[] = {
6050 GdkPixbuf *book_open;
6051 GdkPixbuf *book_closed;
6052 GtkWidget *sample_notebook;
6055 set_page_image (GtkNotebook *notebook, gint page_num, GdkPixbuf *pixbuf)
6057 GtkWidget *page_widget;
6060 page_widget = gtk_notebook_get_nth_page (notebook, page_num);
6062 pixwid = g_object_get_data (G_OBJECT (page_widget), "tab_pixmap");
6063 gtk_image_set_from_pixbuf (GTK_IMAGE (pixwid), pixbuf);
6065 pixwid = g_object_get_data (G_OBJECT (page_widget), "menu_pixmap");
6066 gtk_image_set_from_pixbuf (GTK_IMAGE (pixwid), pixbuf);
6070 page_switch (GtkWidget *widget, gpointer *page, gint page_num)
6072 GtkNotebook *notebook = GTK_NOTEBOOK (widget);
6073 gint old_page_num = gtk_notebook_get_current_page (notebook);
6075 if (page_num == old_page_num)
6078 set_page_image (notebook, page_num, book_open);
6080 if (old_page_num != -1)
6081 set_page_image (notebook, old_page_num, book_closed);
6085 tab_fill (GtkToggleButton *button, GtkWidget *child)
6087 gtk_container_child_set (GTK_CONTAINER (sample_notebook), child,
6088 "tab-fill", gtk_toggle_button_get_active (button),
6093 tab_expand (GtkToggleButton *button, GtkWidget *child)
6095 gtk_container_child_set (GTK_CONTAINER (sample_notebook), child,
6096 "tab-expand", gtk_toggle_button_get_active (button),
6101 create_pages (GtkNotebook *notebook, gint start, gint end)
6103 GtkWidget *child = NULL;
6108 GtkWidget *label_box;
6109 GtkWidget *menu_box;
6113 char accel_buffer[32];
6115 for (i = start; i <= end; i++)
6117 sprintf (buffer, "Page %d", i);
6118 sprintf (accel_buffer, "Page _%d", i);
6120 child = gtk_frame_new (buffer);
6121 gtk_container_set_border_width (GTK_CONTAINER (child), 10);
6123 vbox = gtk_vbox_new (TRUE,0);
6124 gtk_container_set_border_width (GTK_CONTAINER (vbox), 10);
6125 gtk_container_add (GTK_CONTAINER (child), vbox);
6127 hbox = gtk_hbox_new (TRUE,0);
6128 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 5);
6130 button = gtk_check_button_new_with_label ("Fill Tab");
6131 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
6132 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE);
6133 g_signal_connect (button, "toggled",
6134 G_CALLBACK (tab_fill), child);
6136 button = gtk_check_button_new_with_label ("Expand Tab");
6137 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
6138 g_signal_connect (button, "toggled",
6139 G_CALLBACK (tab_expand), child);
6141 button = gtk_button_new_with_label ("Hide Page");
6142 gtk_box_pack_end (GTK_BOX (vbox), button, FALSE, FALSE, 5);
6143 g_signal_connect_swapped (button, "clicked",
6144 G_CALLBACK (gtk_widget_hide),
6147 gtk_widget_show_all (child);
6149 label_box = gtk_hbox_new (FALSE, 0);
6150 pixwid = gtk_image_new_from_pixbuf (book_closed);
6151 g_object_set_data (G_OBJECT (child), "tab_pixmap", pixwid);
6153 gtk_box_pack_start (GTK_BOX (label_box), pixwid, FALSE, TRUE, 0);
6154 gtk_misc_set_padding (GTK_MISC (pixwid), 3, 1);
6155 label = gtk_label_new_with_mnemonic (accel_buffer);
6156 gtk_box_pack_start (GTK_BOX (label_box), label, FALSE, TRUE, 0);
6157 gtk_widget_show_all (label_box);
6160 menu_box = gtk_hbox_new (FALSE, 0);
6161 pixwid = gtk_image_new_from_pixbuf (book_closed);
6162 g_object_set_data (G_OBJECT (child), "menu_pixmap", pixwid);
6164 gtk_box_pack_start (GTK_BOX (menu_box), pixwid, FALSE, TRUE, 0);
6165 gtk_misc_set_padding (GTK_MISC (pixwid), 3, 1);
6166 label = gtk_label_new (buffer);
6167 gtk_box_pack_start (GTK_BOX (menu_box), label, FALSE, TRUE, 0);
6168 gtk_widget_show_all (menu_box);
6170 gtk_notebook_append_page_menu (notebook, child, label_box, menu_box);
6175 rotate_notebook (GtkButton *button,
6176 GtkNotebook *notebook)
6178 gtk_notebook_set_tab_pos (notebook, (gtk_notebook_get_tab_pos (notebook) + 1) % 4);
6182 show_all_pages (GtkButton *button,
6183 GtkNotebook *notebook)
6185 gtk_container_foreach (GTK_CONTAINER (notebook),
6186 (GtkCallback) gtk_widget_show, NULL);
6190 notebook_type_changed (GtkWidget *optionmenu,
6193 GtkNotebook *notebook;
6203 notebook = GTK_NOTEBOOK (data);
6205 c = gtk_combo_box_get_active (GTK_COMBO_BOX (optionmenu));
6210 /* standard notebook */
6211 gtk_notebook_set_show_tabs (notebook, TRUE);
6212 gtk_notebook_set_show_border (notebook, TRUE);
6213 gtk_notebook_set_scrollable (notebook, FALSE);
6217 /* notabs notebook */
6218 gtk_notebook_set_show_tabs (notebook, FALSE);
6219 gtk_notebook_set_show_border (notebook, TRUE);
6224 gtk_notebook_set_show_tabs (notebook, FALSE);
6225 gtk_notebook_set_show_border (notebook, FALSE);
6230 gtk_notebook_set_show_tabs (notebook, TRUE);
6231 gtk_notebook_set_show_border (notebook, TRUE);
6232 gtk_notebook_set_scrollable (notebook, TRUE);
6233 if (gtk_notebook_get_n_pages (notebook) == 5)
6234 create_pages (notebook, 6, 15);
6240 if (gtk_notebook_get_n_pages (notebook) == 15)
6241 for (i = 0; i < 10; i++)
6242 gtk_notebook_remove_page (notebook, 5);
6246 notebook_popup (GtkToggleButton *button,
6247 GtkNotebook *notebook)
6250 gtk_notebook_popup_enable (notebook);
6252 gtk_notebook_popup_disable (notebook);
6256 create_notebook (GtkWidget *widget)
6258 static GtkWidget *window = NULL;
6262 GtkWidget *separator;
6266 static gchar *items[] =
6276 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
6277 gtk_window_set_screen (GTK_WINDOW (window),
6278 gtk_widget_get_screen (widget));
6280 g_signal_connect (window, "destroy",
6281 G_CALLBACK (gtk_widget_destroyed),
6284 gtk_window_set_title (GTK_WINDOW (window), "notebook");
6285 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
6287 box1 = gtk_vbox_new (FALSE, 0);
6288 gtk_container_add (GTK_CONTAINER (window), box1);
6290 sample_notebook = gtk_notebook_new ();
6291 g_signal_connect (sample_notebook, "switch_page",
6292 G_CALLBACK (page_switch), NULL);
6293 gtk_notebook_set_tab_pos (GTK_NOTEBOOK (sample_notebook), GTK_POS_TOP);
6294 gtk_box_pack_start (GTK_BOX (box1), sample_notebook, TRUE, TRUE, 0);
6295 gtk_container_set_border_width (GTK_CONTAINER (sample_notebook), 10);
6297 gtk_widget_realize (sample_notebook);
6300 book_open = gdk_pixbuf_new_from_xpm_data (book_open_xpm);
6303 book_closed = gdk_pixbuf_new_from_xpm_data (book_closed_xpm);
6305 create_pages (GTK_NOTEBOOK (sample_notebook), 1, 5);
6307 separator = gtk_hseparator_new ();
6308 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 10);
6310 box2 = gtk_hbox_new (FALSE, 5);
6311 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
6312 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
6314 button = gtk_check_button_new_with_label ("popup menu");
6315 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, FALSE, 0);
6316 g_signal_connect (button, "clicked",
6317 G_CALLBACK (notebook_popup),
6320 box2 = gtk_hbox_new (FALSE, 5);
6321 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
6322 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
6324 label = gtk_label_new ("Notebook Style :");
6325 gtk_box_pack_start (GTK_BOX (box2), label, FALSE, TRUE, 0);
6327 omenu = build_option_menu (items, G_N_ELEMENTS (items), 0,
6328 notebook_type_changed,
6330 gtk_box_pack_start (GTK_BOX (box2), omenu, FALSE, TRUE, 0);
6332 button = gtk_button_new_with_label ("Show all Pages");
6333 gtk_box_pack_start (GTK_BOX (box2), button, FALSE, TRUE, 0);
6334 g_signal_connect (button, "clicked",
6335 G_CALLBACK (show_all_pages), sample_notebook);
6337 box2 = gtk_hbox_new (TRUE, 10);
6338 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
6339 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
6341 button = gtk_button_new_with_label ("prev");
6342 g_signal_connect_swapped (button, "clicked",
6343 G_CALLBACK (gtk_notebook_prev_page),
6345 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
6347 button = gtk_button_new_with_label ("next");
6348 g_signal_connect_swapped (button, "clicked",
6349 G_CALLBACK (gtk_notebook_next_page),
6351 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
6353 button = gtk_button_new_with_label ("rotate");
6354 g_signal_connect (button, "clicked",
6355 G_CALLBACK (rotate_notebook), sample_notebook);
6356 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
6358 separator = gtk_hseparator_new ();
6359 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 5);
6361 button = gtk_button_new_with_label ("close");
6362 gtk_container_set_border_width (GTK_CONTAINER (button), 5);
6363 g_signal_connect_swapped (button, "clicked",
6364 G_CALLBACK (gtk_widget_destroy),
6366 gtk_box_pack_start (GTK_BOX (box1), button, FALSE, FALSE, 0);
6367 gtk_widget_set_can_default (button, TRUE);
6368 gtk_widget_grab_default (button);
6371 if (!gtk_widget_get_visible (window))
6372 gtk_widget_show_all (window);
6374 gtk_widget_destroy (window);
6382 toggle_resize (GtkWidget *widget, GtkWidget *child)
6384 GtkContainer *container = GTK_CONTAINER (gtk_widget_get_parent (child));
6385 GValue value = { 0, };
6386 g_value_init (&value, G_TYPE_BOOLEAN);
6387 gtk_container_child_get_property (container, child, "resize", &value);
6388 g_value_set_boolean (&value, !g_value_get_boolean (&value));
6389 gtk_container_child_set_property (container, child, "resize", &value);
6393 toggle_shrink (GtkWidget *widget, GtkWidget *child)
6395 GtkContainer *container = GTK_CONTAINER (gtk_widget_get_parent (child));
6396 GValue value = { 0, };
6397 g_value_init (&value, G_TYPE_BOOLEAN);
6398 gtk_container_child_get_property (container, child, "shrink", &value);
6399 g_value_set_boolean (&value, !g_value_get_boolean (&value));
6400 gtk_container_child_set_property (container, child, "shrink", &value);
6404 paned_props_clicked (GtkWidget *button,
6407 GtkWidget *window = create_prop_editor (paned, GTK_TYPE_PANED);
6409 gtk_window_set_title (GTK_WINDOW (window), "Paned Properties");
6413 create_pane_options (GtkPaned *paned,
6414 const gchar *frame_label,
6415 const gchar *label1,
6416 const gchar *label2)
6418 GtkWidget *child1, *child2;
6423 GtkWidget *check_button;
6425 child1 = gtk_paned_get_child1 (paned);
6426 child2 = gtk_paned_get_child2 (paned);
6428 frame = gtk_frame_new (frame_label);
6429 gtk_container_set_border_width (GTK_CONTAINER (frame), 4);
6431 table = gtk_table_new (4, 2, 4);
6432 gtk_container_add (GTK_CONTAINER (frame), table);
6434 label = gtk_label_new (label1);
6435 gtk_table_attach_defaults (GTK_TABLE (table), label,
6438 check_button = gtk_check_button_new_with_label ("Resize");
6439 gtk_table_attach_defaults (GTK_TABLE (table), check_button,
6441 g_signal_connect (check_button, "toggled",
6442 G_CALLBACK (toggle_resize),
6445 check_button = gtk_check_button_new_with_label ("Shrink");
6446 gtk_table_attach_defaults (GTK_TABLE (table), check_button,
6448 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check_button),
6450 g_signal_connect (check_button, "toggled",
6451 G_CALLBACK (toggle_shrink),
6454 label = gtk_label_new (label2);
6455 gtk_table_attach_defaults (GTK_TABLE (table), label,
6458 check_button = gtk_check_button_new_with_label ("Resize");
6459 gtk_table_attach_defaults (GTK_TABLE (table), check_button,
6461 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check_button),
6463 g_signal_connect (check_button, "toggled",
6464 G_CALLBACK (toggle_resize),
6467 check_button = gtk_check_button_new_with_label ("Shrink");
6468 gtk_table_attach_defaults (GTK_TABLE (table), check_button,
6470 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check_button),
6472 g_signal_connect (check_button, "toggled",
6473 G_CALLBACK (toggle_shrink),
6476 button = gtk_button_new_with_mnemonic ("_Properties");
6477 gtk_table_attach_defaults (GTK_TABLE (table), button,
6479 g_signal_connect (button, "clicked",
6480 G_CALLBACK (paned_props_clicked),
6487 create_panes (GtkWidget *widget)
6489 static GtkWidget *window = NULL;
6498 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
6500 gtk_window_set_screen (GTK_WINDOW (window),
6501 gtk_widget_get_screen (widget));
6503 g_signal_connect (window, "destroy",
6504 G_CALLBACK (gtk_widget_destroyed),
6507 gtk_window_set_title (GTK_WINDOW (window), "Panes");
6508 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
6510 vbox = gtk_vbox_new (FALSE, 0);
6511 gtk_container_add (GTK_CONTAINER (window), vbox);
6513 vpaned = gtk_vpaned_new ();
6514 gtk_box_pack_start (GTK_BOX (vbox), vpaned, TRUE, TRUE, 0);
6515 gtk_container_set_border_width (GTK_CONTAINER(vpaned), 5);
6517 hpaned = gtk_hpaned_new ();
6518 gtk_paned_add1 (GTK_PANED (vpaned), hpaned);
6520 frame = gtk_frame_new (NULL);
6521 gtk_frame_set_shadow_type (GTK_FRAME(frame), GTK_SHADOW_IN);
6522 gtk_widget_set_size_request (frame, 60, 60);
6523 gtk_paned_add1 (GTK_PANED (hpaned), frame);
6525 button = gtk_button_new_with_label ("Hi there");
6526 gtk_container_add (GTK_CONTAINER(frame), button);
6528 frame = gtk_frame_new (NULL);
6529 gtk_frame_set_shadow_type (GTK_FRAME(frame), GTK_SHADOW_IN);
6530 gtk_widget_set_size_request (frame, 80, 60);
6531 gtk_paned_add2 (GTK_PANED (hpaned), frame);
6533 frame = gtk_frame_new (NULL);
6534 gtk_frame_set_shadow_type (GTK_FRAME(frame), GTK_SHADOW_IN);
6535 gtk_widget_set_size_request (frame, 60, 80);
6536 gtk_paned_add2 (GTK_PANED (vpaned), frame);
6538 /* Now create toggle buttons to control sizing */
6540 gtk_box_pack_start (GTK_BOX (vbox),
6541 create_pane_options (GTK_PANED (hpaned),
6547 gtk_box_pack_start (GTK_BOX (vbox),
6548 create_pane_options (GTK_PANED (vpaned),
6554 gtk_widget_show_all (vbox);
6557 if (!gtk_widget_get_visible (window))
6558 gtk_widget_show (window);
6560 gtk_widget_destroy (window);
6564 * Paned keyboard navigation
6568 paned_keyboard_window1 (GtkWidget *widget)
6591 window1 = gtk_window_new (GTK_WINDOW_TOPLEVEL);
6592 gtk_window_set_title (GTK_WINDOW (window1), "Basic paned navigation");
6593 gtk_window_set_screen (GTK_WINDOW (window1),
6594 gtk_widget_get_screen (widget));
6596 hpaned1 = gtk_hpaned_new ();
6597 gtk_container_add (GTK_CONTAINER (window1), hpaned1);
6599 frame1 = gtk_frame_new (NULL);
6600 gtk_paned_pack1 (GTK_PANED (hpaned1), frame1, FALSE, TRUE);
6601 gtk_frame_set_shadow_type (GTK_FRAME (frame1), GTK_SHADOW_IN);
6603 vbox1 = gtk_vbox_new (FALSE, 0);
6604 gtk_container_add (GTK_CONTAINER (frame1), vbox1);
6606 button7 = gtk_button_new_with_label ("button7");
6607 gtk_box_pack_start (GTK_BOX (vbox1), button7, FALSE, FALSE, 0);
6609 button8 = gtk_button_new_with_label ("button8");
6610 gtk_box_pack_start (GTK_BOX (vbox1), button8, FALSE, FALSE, 0);
6612 button9 = gtk_button_new_with_label ("button9");
6613 gtk_box_pack_start (GTK_BOX (vbox1), button9, FALSE, FALSE, 0);
6615 vpaned1 = gtk_vpaned_new ();
6616 gtk_paned_pack2 (GTK_PANED (hpaned1), vpaned1, TRUE, TRUE);
6618 frame2 = gtk_frame_new (NULL);
6619 gtk_paned_pack1 (GTK_PANED (vpaned1), frame2, FALSE, TRUE);
6620 gtk_frame_set_shadow_type (GTK_FRAME (frame2), GTK_SHADOW_IN);
6622 frame5 = gtk_frame_new (NULL);
6623 gtk_container_add (GTK_CONTAINER (frame2), frame5);
6625 hbox1 = gtk_hbox_new (FALSE, 0);
6626 gtk_container_add (GTK_CONTAINER (frame5), hbox1);
6628 button5 = gtk_button_new_with_label ("button5");
6629 gtk_box_pack_start (GTK_BOX (hbox1), button5, FALSE, FALSE, 0);
6631 button6 = gtk_button_new_with_label ("button6");
6632 gtk_box_pack_start (GTK_BOX (hbox1), button6, FALSE, FALSE, 0);
6634 frame3 = gtk_frame_new (NULL);
6635 gtk_paned_pack2 (GTK_PANED (vpaned1), frame3, TRUE, TRUE);
6636 gtk_frame_set_shadow_type (GTK_FRAME (frame3), GTK_SHADOW_IN);
6638 frame4 = gtk_frame_new ("Buttons");
6639 gtk_container_add (GTK_CONTAINER (frame3), frame4);
6640 gtk_container_set_border_width (GTK_CONTAINER (frame4), 15);
6642 table1 = gtk_table_new (2, 2, FALSE);
6643 gtk_container_add (GTK_CONTAINER (frame4), table1);
6644 gtk_container_set_border_width (GTK_CONTAINER (table1), 11);
6646 button1 = gtk_button_new_with_label ("button1");
6647 gtk_table_attach (GTK_TABLE (table1), button1, 0, 1, 0, 1,
6648 (GtkAttachOptions) (GTK_FILL),
6649 (GtkAttachOptions) (0), 0, 0);
6651 button2 = gtk_button_new_with_label ("button2");
6652 gtk_table_attach (GTK_TABLE (table1), button2, 1, 2, 0, 1,
6653 (GtkAttachOptions) (GTK_FILL),
6654 (GtkAttachOptions) (0), 0, 0);
6656 button3 = gtk_button_new_with_label ("button3");
6657 gtk_table_attach (GTK_TABLE (table1), button3, 0, 1, 1, 2,
6658 (GtkAttachOptions) (GTK_FILL),
6659 (GtkAttachOptions) (0), 0, 0);
6661 button4 = gtk_button_new_with_label ("button4");
6662 gtk_table_attach (GTK_TABLE (table1), button4, 1, 2, 1, 2,
6663 (GtkAttachOptions) (GTK_FILL),
6664 (GtkAttachOptions) (0), 0, 0);
6670 paned_keyboard_window2 (GtkWidget *widget)
6675 GtkWidget *button13;
6679 GtkWidget *button12;
6681 GtkWidget *button11;
6682 GtkWidget *button10;
6684 window2 = gtk_window_new (GTK_WINDOW_TOPLEVEL);
6685 gtk_window_set_title (GTK_WINDOW (window2), "\"button 10\" is not inside the horisontal pane");
6687 gtk_window_set_screen (GTK_WINDOW (window2),
6688 gtk_widget_get_screen (widget));
6690 hpaned2 = gtk_hpaned_new ();
6691 gtk_container_add (GTK_CONTAINER (window2), hpaned2);
6693 frame6 = gtk_frame_new (NULL);
6694 gtk_paned_pack1 (GTK_PANED (hpaned2), frame6, FALSE, TRUE);
6695 gtk_frame_set_shadow_type (GTK_FRAME (frame6), GTK_SHADOW_IN);
6697 button13 = gtk_button_new_with_label ("button13");
6698 gtk_container_add (GTK_CONTAINER (frame6), button13);
6700 hbox2 = gtk_hbox_new (FALSE, 0);
6701 gtk_paned_pack2 (GTK_PANED (hpaned2), hbox2, TRUE, TRUE);
6703 vpaned2 = gtk_vpaned_new ();
6704 gtk_box_pack_start (GTK_BOX (hbox2), vpaned2, TRUE, TRUE, 0);
6706 frame7 = gtk_frame_new (NULL);
6707 gtk_paned_pack1 (GTK_PANED (vpaned2), frame7, FALSE, TRUE);
6708 gtk_frame_set_shadow_type (GTK_FRAME (frame7), GTK_SHADOW_IN);
6710 button12 = gtk_button_new_with_label ("button12");
6711 gtk_container_add (GTK_CONTAINER (frame7), button12);
6713 frame8 = gtk_frame_new (NULL);
6714 gtk_paned_pack2 (GTK_PANED (vpaned2), frame8, TRUE, TRUE);
6715 gtk_frame_set_shadow_type (GTK_FRAME (frame8), GTK_SHADOW_IN);
6717 button11 = gtk_button_new_with_label ("button11");
6718 gtk_container_add (GTK_CONTAINER (frame8), button11);
6720 button10 = gtk_button_new_with_label ("button10");
6721 gtk_box_pack_start (GTK_BOX (hbox2), button10, FALSE, FALSE, 0);
6727 paned_keyboard_window3 (GtkWidget *widget)
6734 GtkWidget *button14;
6737 GtkWidget *button15;
6740 GtkWidget *button16;
6742 GtkWidget *button17;
6744 window3 = gtk_window_new (GTK_WINDOW_TOPLEVEL);
6745 g_object_set_data (G_OBJECT (window3), "window3", window3);
6746 gtk_window_set_title (GTK_WINDOW (window3), "Nested panes");
6748 gtk_window_set_screen (GTK_WINDOW (window3),
6749 gtk_widget_get_screen (widget));
6752 vbox2 = gtk_vbox_new (FALSE, 0);
6753 gtk_container_add (GTK_CONTAINER (window3), vbox2);
6755 label1 = gtk_label_new ("Three panes nested inside each other");
6756 gtk_box_pack_start (GTK_BOX (vbox2), label1, FALSE, FALSE, 0);
6758 hpaned3 = gtk_hpaned_new ();
6759 gtk_box_pack_start (GTK_BOX (vbox2), hpaned3, TRUE, TRUE, 0);
6761 frame9 = gtk_frame_new (NULL);
6762 gtk_paned_pack1 (GTK_PANED (hpaned3), frame9, FALSE, TRUE);
6763 gtk_frame_set_shadow_type (GTK_FRAME (frame9), GTK_SHADOW_IN);
6765 button14 = gtk_button_new_with_label ("button14");
6766 gtk_container_add (GTK_CONTAINER (frame9), button14);
6768 hpaned4 = gtk_hpaned_new ();
6769 gtk_paned_pack2 (GTK_PANED (hpaned3), hpaned4, TRUE, TRUE);
6771 frame10 = gtk_frame_new (NULL);
6772 gtk_paned_pack1 (GTK_PANED (hpaned4), frame10, FALSE, TRUE);
6773 gtk_frame_set_shadow_type (GTK_FRAME (frame10), GTK_SHADOW_IN);
6775 button15 = gtk_button_new_with_label ("button15");
6776 gtk_container_add (GTK_CONTAINER (frame10), button15);
6778 hpaned5 = gtk_hpaned_new ();
6779 gtk_paned_pack2 (GTK_PANED (hpaned4), hpaned5, TRUE, TRUE);
6781 frame11 = gtk_frame_new (NULL);
6782 gtk_paned_pack1 (GTK_PANED (hpaned5), frame11, FALSE, TRUE);
6783 gtk_frame_set_shadow_type (GTK_FRAME (frame11), GTK_SHADOW_IN);
6785 button16 = gtk_button_new_with_label ("button16");
6786 gtk_container_add (GTK_CONTAINER (frame11), button16);
6788 frame12 = gtk_frame_new (NULL);
6789 gtk_paned_pack2 (GTK_PANED (hpaned5), frame12, TRUE, TRUE);
6790 gtk_frame_set_shadow_type (GTK_FRAME (frame12), GTK_SHADOW_IN);
6792 button17 = gtk_button_new_with_label ("button17");
6793 gtk_container_add (GTK_CONTAINER (frame12), button17);
6799 paned_keyboard_window4 (GtkWidget *widget)
6806 GtkWidget *button19;
6807 GtkWidget *button18;
6810 GtkWidget *button21;
6811 GtkWidget *button20;
6813 GtkWidget *button23;
6814 GtkWidget *button22;
6816 GtkWidget *button25;
6817 GtkWidget *button24;
6819 window4 = gtk_window_new (GTK_WINDOW_TOPLEVEL);
6820 g_object_set_data (G_OBJECT (window4), "window4", window4);
6821 gtk_window_set_title (GTK_WINDOW (window4), "window4");
6823 gtk_window_set_screen (GTK_WINDOW (window4),
6824 gtk_widget_get_screen (widget));
6826 vbox3 = gtk_vbox_new (FALSE, 0);
6827 gtk_container_add (GTK_CONTAINER (window4), vbox3);
6829 label2 = gtk_label_new ("Widget tree:\n\nhpaned \n - vpaned\n - hbox\n - vpaned\n - vpaned\n - vpaned\n");
6830 gtk_box_pack_start (GTK_BOX (vbox3), label2, FALSE, FALSE, 0);
6831 gtk_label_set_justify (GTK_LABEL (label2), GTK_JUSTIFY_LEFT);
6833 hpaned6 = gtk_hpaned_new ();
6834 gtk_box_pack_start (GTK_BOX (vbox3), hpaned6, TRUE, TRUE, 0);
6836 vpaned3 = gtk_vpaned_new ();
6837 gtk_paned_pack1 (GTK_PANED (hpaned6), vpaned3, FALSE, TRUE);
6839 button19 = gtk_button_new_with_label ("button19");
6840 gtk_paned_pack1 (GTK_PANED (vpaned3), button19, FALSE, TRUE);
6842 button18 = gtk_button_new_with_label ("button18");
6843 gtk_paned_pack2 (GTK_PANED (vpaned3), button18, TRUE, TRUE);
6845 hbox3 = gtk_hbox_new (FALSE, 0);
6846 gtk_paned_pack2 (GTK_PANED (hpaned6), hbox3, TRUE, TRUE);
6848 vpaned4 = gtk_vpaned_new ();
6849 gtk_box_pack_start (GTK_BOX (hbox3), vpaned4, TRUE, TRUE, 0);
6851 button21 = gtk_button_new_with_label ("button21");
6852 gtk_paned_pack1 (GTK_PANED (vpaned4), button21, FALSE, TRUE);
6854 button20 = gtk_button_new_with_label ("button20");
6855 gtk_paned_pack2 (GTK_PANED (vpaned4), button20, TRUE, TRUE);
6857 vpaned5 = gtk_vpaned_new ();
6858 gtk_box_pack_start (GTK_BOX (hbox3), vpaned5, TRUE, TRUE, 0);
6860 button23 = gtk_button_new_with_label ("button23");
6861 gtk_paned_pack1 (GTK_PANED (vpaned5), button23, FALSE, TRUE);
6863 button22 = gtk_button_new_with_label ("button22");
6864 gtk_paned_pack2 (GTK_PANED (vpaned5), button22, TRUE, TRUE);
6866 vpaned6 = gtk_vpaned_new ();
6867 gtk_box_pack_start (GTK_BOX (hbox3), vpaned6, TRUE, TRUE, 0);
6869 button25 = gtk_button_new_with_label ("button25");
6870 gtk_paned_pack1 (GTK_PANED (vpaned6), button25, FALSE, TRUE);
6872 button24 = gtk_button_new_with_label ("button24");
6873 gtk_paned_pack2 (GTK_PANED (vpaned6), button24, TRUE, TRUE);
6879 create_paned_keyboard_navigation (GtkWidget *widget)
6881 static GtkWidget *window1 = NULL;
6882 static GtkWidget *window2 = NULL;
6883 static GtkWidget *window3 = NULL;
6884 static GtkWidget *window4 = NULL;
6887 (gtk_widget_get_screen (window1) != gtk_widget_get_screen (widget)))
6889 gtk_widget_destroy (window1);
6890 gtk_widget_destroy (window2);
6891 gtk_widget_destroy (window3);
6892 gtk_widget_destroy (window4);
6897 window1 = paned_keyboard_window1 (widget);
6898 g_signal_connect (window1, "destroy",
6899 G_CALLBACK (gtk_widget_destroyed),
6905 window2 = paned_keyboard_window2 (widget);
6906 g_signal_connect (window2, "destroy",
6907 G_CALLBACK (gtk_widget_destroyed),
6913 window3 = paned_keyboard_window3 (widget);
6914 g_signal_connect (window3, "destroy",
6915 G_CALLBACK (gtk_widget_destroyed),
6921 window4 = paned_keyboard_window4 (widget);
6922 g_signal_connect (window4, "destroy",
6923 G_CALLBACK (gtk_widget_destroyed),
6927 if (gtk_widget_get_visible (window1))
6928 gtk_widget_destroy (GTK_WIDGET (window1));
6930 gtk_widget_show_all (GTK_WIDGET (window1));
6932 if (gtk_widget_get_visible (window2))
6933 gtk_widget_destroy (GTK_WIDGET (window2));
6935 gtk_widget_show_all (GTK_WIDGET (window2));
6937 if (gtk_widget_get_visible (window3))
6938 gtk_widget_destroy (GTK_WIDGET (window3));
6940 gtk_widget_show_all (GTK_WIDGET (window3));
6942 if (gtk_widget_get_visible (window4))
6943 gtk_widget_destroy (GTK_WIDGET (window4));
6945 gtk_widget_show_all (GTK_WIDGET (window4));
6953 typedef struct _cursoroffset {gint x,y;} CursorOffset;
6956 shape_pressed (GtkWidget *widget, GdkEventButton *event)
6960 /* ignore double and triple click */
6961 if (event->type != GDK_BUTTON_PRESS)
6964 p = g_object_get_data (G_OBJECT (widget), "cursor_offset");
6965 p->x = (int) event->x;
6966 p->y = (int) event->y;
6968 gtk_grab_add (widget);
6969 gdk_pointer_grab (gtk_widget_get_window (widget), TRUE,
6970 GDK_BUTTON_RELEASE_MASK |
6971 GDK_BUTTON_MOTION_MASK |
6972 GDK_POINTER_MOTION_HINT_MASK,
6977 shape_released (GtkWidget *widget)
6979 gtk_grab_remove (widget);
6980 gdk_display_pointer_ungrab (gtk_widget_get_display (widget),
6985 shape_motion (GtkWidget *widget,
6986 GdkEventMotion *event)
6990 GdkModifierType mask;
6992 p = g_object_get_data (G_OBJECT (widget), "cursor_offset");
6995 * Can't use event->x / event->y here
6996 * because I need absolute coordinates.
6998 gdk_window_get_pointer (NULL, &xp, &yp, &mask);
6999 gtk_window_move (GTK_WINDOW (widget), xp - p->x, yp - p->y);
7003 shape_create_icon (GdkScreen *screen,
7014 CursorOffset* icon_pos;
7015 cairo_surface_t *mask;
7016 cairo_region_t *mask_region;
7021 * GDK_WINDOW_TOPLEVEL works also, giving you a title border
7023 window = gtk_window_new (window_type);
7024 gtk_window_set_screen (GTK_WINDOW (window), screen);
7026 fixed = gtk_fixed_new ();
7027 gtk_widget_set_size_request (fixed, 100, 100);
7028 gtk_container_add (GTK_CONTAINER (window), fixed);
7029 gtk_widget_show (fixed);
7031 gtk_widget_set_events (window,
7032 gtk_widget_get_events (window) |
7033 GDK_BUTTON_MOTION_MASK |
7034 GDK_POINTER_MOTION_HINT_MASK |
7035 GDK_BUTTON_PRESS_MASK);
7037 gtk_widget_realize (window);
7039 pixbuf = gdk_pixbuf_new_from_file (xpm_file, NULL);
7040 g_assert (pixbuf); /* FIXME: error handling */
7042 mask = cairo_image_surface_create (CAIRO_FORMAT_A1,
7043 gdk_pixbuf_get_width (pixbuf),
7044 gdk_pixbuf_get_height (pixbuf));
7045 cr = cairo_create (mask);
7046 gdk_cairo_set_source_pixbuf (cr, pixbuf, 0, 0);
7050 mask_region = gdk_cairo_region_create_from_surface (mask);
7052 cairo_region_translate (mask_region, px, py);
7054 image = gtk_image_new_from_pixbuf (pixbuf);
7055 gtk_fixed_put (GTK_FIXED (fixed), image, px,py);
7056 gtk_widget_show (image);
7058 gtk_widget_shape_combine_region (window, mask_region);
7060 cairo_region_destroy (mask_region);
7061 cairo_surface_destroy (mask);
7062 g_object_unref (pixbuf);
7064 g_signal_connect (window, "button_press_event",
7065 G_CALLBACK (shape_pressed), NULL);
7066 g_signal_connect (window, "button_release_event",
7067 G_CALLBACK (shape_released), NULL);
7068 g_signal_connect (window, "motion_notify_event",
7069 G_CALLBACK (shape_motion), NULL);
7071 icon_pos = g_new (CursorOffset, 1);
7072 g_object_set_data (G_OBJECT (window), "cursor_offset", icon_pos);
7074 gtk_window_move (GTK_WINDOW (window), x, y);
7075 gtk_widget_show (window);
7081 create_shapes (GtkWidget *widget)
7083 /* Variables used by the Drag/Drop and Shape Window demos */
7084 static GtkWidget *modeller = NULL;
7085 static GtkWidget *sheets = NULL;
7086 static GtkWidget *rings = NULL;
7087 static GtkWidget *with_region = NULL;
7088 GdkScreen *screen = gtk_widget_get_screen (widget);
7090 if (!(file_exists ("Modeller.xpm") &&
7091 file_exists ("FilesQueue.xpm") &&
7092 file_exists ("3DRings.xpm")))
7098 modeller = shape_create_icon (screen, "Modeller.xpm",
7099 440, 140, 0,0, GTK_WINDOW_POPUP);
7101 g_signal_connect (modeller, "destroy",
7102 G_CALLBACK (gtk_widget_destroyed),
7106 gtk_widget_destroy (modeller);
7110 sheets = shape_create_icon (screen, "FilesQueue.xpm",
7111 580, 170, 0,0, GTK_WINDOW_POPUP);
7113 g_signal_connect (sheets, "destroy",
7114 G_CALLBACK (gtk_widget_destroyed),
7119 gtk_widget_destroy (sheets);
7123 rings = shape_create_icon (screen, "3DRings.xpm",
7124 460, 270, 25,25, GTK_WINDOW_TOPLEVEL);
7126 g_signal_connect (rings, "destroy",
7127 G_CALLBACK (gtk_widget_destroyed),
7131 gtk_widget_destroy (rings);
7135 cairo_region_t *region;
7138 with_region = shape_create_icon (screen, "3DRings.xpm",
7139 460, 270, 25,25, GTK_WINDOW_TOPLEVEL);
7141 gtk_window_set_decorated (GTK_WINDOW (with_region), FALSE);
7143 g_signal_connect (with_region, "destroy",
7144 G_CALLBACK (gtk_widget_destroyed),
7147 /* reset shape from mask to a region */
7150 region = cairo_region_create ();
7162 cairo_region_union_rectangle (region, &rect);
7170 gdk_window_shape_combine_region (gtk_widget_get_window (with_region),
7175 gtk_widget_destroy (with_region);
7183 create_wmhints (GtkWidget *widget)
7185 static GtkWidget *window = NULL;
7187 GtkWidget *separator;
7191 GdkWindow *gdk_window;
7197 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
7199 gtk_window_set_screen (GTK_WINDOW (window),
7200 gtk_widget_get_screen (widget));
7202 g_signal_connect (window, "destroy",
7203 G_CALLBACK (gtk_widget_destroyed),
7206 gtk_window_set_title (GTK_WINDOW (window), "WM Hints");
7207 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
7209 gtk_widget_realize (window);
7211 gdk_window = gtk_widget_get_window (window);
7213 pixbuf = gdk_pixbuf_new_from_xpm_data ((const char **) openfile);
7214 list = g_list_prepend (NULL, pixbuf);
7216 gdk_window_set_icon_list (gdk_window, list);
7219 g_object_unref (pixbuf);
7221 gdk_window_set_icon_name (gdk_window, "WMHints Test Icon");
7223 gdk_window_set_decorations (gdk_window, GDK_DECOR_ALL | GDK_DECOR_MENU);
7224 gdk_window_set_functions (gdk_window, GDK_FUNC_ALL | GDK_FUNC_RESIZE);
7226 box1 = gtk_vbox_new (FALSE, 0);
7227 gtk_container_add (GTK_CONTAINER (window), box1);
7228 gtk_widget_show (box1);
7230 label = gtk_label_new ("Try iconizing me!");
7231 gtk_widget_set_size_request (label, 150, 50);
7232 gtk_box_pack_start (GTK_BOX (box1), label, TRUE, TRUE, 0);
7233 gtk_widget_show (label);
7236 separator = gtk_hseparator_new ();
7237 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
7238 gtk_widget_show (separator);
7241 box2 = gtk_vbox_new (FALSE, 10);
7242 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
7243 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
7244 gtk_widget_show (box2);
7247 button = gtk_button_new_with_label ("close");
7249 g_signal_connect_swapped (button, "clicked",
7250 G_CALLBACK (gtk_widget_destroy),
7253 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
7254 gtk_widget_set_can_default (button, TRUE);
7255 gtk_widget_grab_default (button);
7256 gtk_widget_show (button);
7259 if (!gtk_widget_get_visible (window))
7260 gtk_widget_show (window);
7262 gtk_widget_destroy (window);
7267 * Window state tracking
7271 window_state_callback (GtkWidget *widget,
7272 GdkEventWindowState *event,
7275 GtkWidget *label = data;
7278 msg = g_strconcat (gtk_window_get_title (GTK_WINDOW (widget)), ": ",
7279 (event->new_window_state & GDK_WINDOW_STATE_WITHDRAWN) ?
7280 "withdrawn" : "not withdrawn", ", ",
7281 (event->new_window_state & GDK_WINDOW_STATE_ICONIFIED) ?
7282 "iconified" : "not iconified", ", ",
7283 (event->new_window_state & GDK_WINDOW_STATE_STICKY) ?
7284 "sticky" : "not sticky", ", ",
7285 (event->new_window_state & GDK_WINDOW_STATE_MAXIMIZED) ?
7286 "maximized" : "not maximized", ", ",
7287 (event->new_window_state & GDK_WINDOW_STATE_FULLSCREEN) ?
7288 "fullscreen" : "not fullscreen",
7289 (event->new_window_state & GDK_WINDOW_STATE_ABOVE) ?
7290 "above" : "not above", ", ",
7291 (event->new_window_state & GDK_WINDOW_STATE_BELOW) ?
7292 "below" : "not below", ", ",
7295 gtk_label_set_text (GTK_LABEL (label), msg);
7303 tracking_label (GtkWidget *window)
7309 hbox = gtk_hbox_new (FALSE, 5);
7311 g_signal_connect_object (hbox,
7313 G_CALLBACK (gtk_widget_destroy),
7317 label = gtk_label_new ("<no window state events received>");
7318 gtk_label_set_line_wrap (GTK_LABEL (label), TRUE);
7319 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
7321 g_signal_connect (window,
7322 "window_state_event",
7323 G_CALLBACK (window_state_callback),
7326 button = gtk_button_new_with_label ("Deiconify");
7327 g_signal_connect_object (button,
7329 G_CALLBACK (gtk_window_deiconify),
7332 gtk_box_pack_end (GTK_BOX (hbox), button, FALSE, FALSE, 0);
7334 button = gtk_button_new_with_label ("Iconify");
7335 g_signal_connect_object (button,
7337 G_CALLBACK (gtk_window_iconify),
7340 gtk_box_pack_end (GTK_BOX (hbox), button, FALSE, FALSE, 0);
7342 button = gtk_button_new_with_label ("Fullscreen");
7343 g_signal_connect_object (button,
7345 G_CALLBACK (gtk_window_fullscreen),
7348 gtk_box_pack_end (GTK_BOX (hbox), button, FALSE, FALSE, 0);
7350 button = gtk_button_new_with_label ("Unfullscreen");
7351 g_signal_connect_object (button,
7353 G_CALLBACK (gtk_window_unfullscreen),
7356 gtk_box_pack_end (GTK_BOX (hbox), button, FALSE, FALSE, 0);
7358 button = gtk_button_new_with_label ("Present");
7359 g_signal_connect_object (button,
7361 G_CALLBACK (gtk_window_present),
7364 gtk_box_pack_end (GTK_BOX (hbox), button, FALSE, FALSE, 0);
7366 button = gtk_button_new_with_label ("Show");
7367 g_signal_connect_object (button,
7369 G_CALLBACK (gtk_widget_show),
7372 gtk_box_pack_end (GTK_BOX (hbox), button, FALSE, FALSE, 0);
7374 gtk_widget_show_all (hbox);
7380 keep_window_above (GtkToggleButton *togglebutton, gpointer data)
7382 GtkWidget *button = g_object_get_data (G_OBJECT (togglebutton), "radio");
7384 gtk_window_set_keep_above (GTK_WINDOW (data),
7385 gtk_toggle_button_get_active (togglebutton));
7387 if (gtk_toggle_button_get_active (togglebutton))
7388 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), FALSE);
7392 keep_window_below (GtkToggleButton *togglebutton, gpointer data)
7394 GtkWidget *button = g_object_get_data (G_OBJECT (togglebutton), "radio");
7396 gtk_window_set_keep_below (GTK_WINDOW (data),
7397 gtk_toggle_button_get_active (togglebutton));
7399 if (gtk_toggle_button_get_active (togglebutton))
7400 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), FALSE);
7405 get_state_controls (GtkWidget *window)
7409 GtkWidget *button_above;
7410 GtkWidget *button_below;
7412 vbox = gtk_vbox_new (FALSE, 0);
7414 button = gtk_button_new_with_label ("Stick");
7415 g_signal_connect_object (button,
7417 G_CALLBACK (gtk_window_stick),
7420 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
7422 button = gtk_button_new_with_label ("Unstick");
7423 g_signal_connect_object (button,
7425 G_CALLBACK (gtk_window_unstick),
7428 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
7430 button = gtk_button_new_with_label ("Maximize");
7431 g_signal_connect_object (button,
7433 G_CALLBACK (gtk_window_maximize),
7436 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
7438 button = gtk_button_new_with_label ("Unmaximize");
7439 g_signal_connect_object (button,
7441 G_CALLBACK (gtk_window_unmaximize),
7444 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
7446 button = gtk_button_new_with_label ("Iconify");
7447 g_signal_connect_object (button,
7449 G_CALLBACK (gtk_window_iconify),
7452 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
7454 button = gtk_button_new_with_label ("Fullscreen");
7455 g_signal_connect_object (button,
7457 G_CALLBACK (gtk_window_fullscreen),
7460 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
7462 button = gtk_button_new_with_label ("Unfullscreen");
7463 g_signal_connect_object (button,
7465 G_CALLBACK (gtk_window_unfullscreen),
7468 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
7470 button_above = gtk_toggle_button_new_with_label ("Keep above");
7471 g_signal_connect (button_above,
7473 G_CALLBACK (keep_window_above),
7475 gtk_box_pack_start (GTK_BOX (vbox), button_above, FALSE, FALSE, 0);
7477 button_below = gtk_toggle_button_new_with_label ("Keep below");
7478 g_signal_connect (button_below,
7480 G_CALLBACK (keep_window_below),
7482 gtk_box_pack_start (GTK_BOX (vbox), button_below, FALSE, FALSE, 0);
7484 g_object_set_data (G_OBJECT (button_above), "radio", button_below);
7485 g_object_set_data (G_OBJECT (button_below), "radio", button_above);
7487 button = gtk_button_new_with_label ("Hide (withdraw)");
7488 g_signal_connect_object (button,
7490 G_CALLBACK (gtk_widget_hide),
7493 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
7495 gtk_widget_show_all (vbox);
7501 create_window_states (GtkWidget *widget)
7503 static GtkWidget *window = NULL;
7506 GtkWidget *iconified;
7508 GtkWidget *controls;
7512 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
7513 gtk_window_set_screen (GTK_WINDOW (window),
7514 gtk_widget_get_screen (widget));
7516 g_signal_connect (window, "destroy",
7517 G_CALLBACK (gtk_widget_destroyed),
7520 gtk_window_set_title (GTK_WINDOW (window), "Window states");
7522 box1 = gtk_vbox_new (FALSE, 0);
7523 gtk_container_add (GTK_CONTAINER (window), box1);
7525 iconified = gtk_window_new (GTK_WINDOW_TOPLEVEL);
7527 gtk_window_set_screen (GTK_WINDOW (iconified),
7528 gtk_widget_get_screen (widget));
7530 g_signal_connect_object (iconified, "destroy",
7531 G_CALLBACK (gtk_widget_destroy),
7534 gtk_window_iconify (GTK_WINDOW (iconified));
7535 gtk_window_set_title (GTK_WINDOW (iconified), "Iconified initially");
7536 controls = get_state_controls (iconified);
7537 gtk_container_add (GTK_CONTAINER (iconified), controls);
7539 normal = gtk_window_new (GTK_WINDOW_TOPLEVEL);
7541 gtk_window_set_screen (GTK_WINDOW (normal),
7542 gtk_widget_get_screen (widget));
7544 g_signal_connect_object (normal, "destroy",
7545 G_CALLBACK (gtk_widget_destroy),
7549 gtk_window_set_title (GTK_WINDOW (normal), "Deiconified initially");
7550 controls = get_state_controls (normal);
7551 gtk_container_add (GTK_CONTAINER (normal), controls);
7553 label = tracking_label (iconified);
7554 gtk_container_add (GTK_CONTAINER (box1), label);
7556 label = tracking_label (normal);
7557 gtk_container_add (GTK_CONTAINER (box1), label);
7559 gtk_widget_show_all (iconified);
7560 gtk_widget_show_all (normal);
7561 gtk_widget_show_all (box1);
7564 if (!gtk_widget_get_visible (window))
7565 gtk_widget_show (window);
7567 gtk_widget_destroy (window);
7575 configure_event_callback (GtkWidget *widget,
7576 GdkEventConfigure *event,
7579 GtkWidget *label = data;
7583 gtk_window_get_position (GTK_WINDOW (widget), &x, &y);
7585 msg = g_strdup_printf ("event: %d,%d %d x %d\n"
7587 event->x, event->y, event->width, event->height,
7590 gtk_label_set_text (GTK_LABEL (label), msg);
7598 get_ints (GtkWidget *window,
7605 spin1 = g_object_get_data (G_OBJECT (window), "spin1");
7606 spin2 = g_object_get_data (G_OBJECT (window), "spin2");
7608 *a = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (spin1));
7609 *b = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (spin2));
7613 set_size_callback (GtkWidget *widget,
7618 get_ints (data, &w, &h);
7620 gtk_window_resize (GTK_WINDOW (g_object_get_data (data, "target")), w, h);
7624 unset_default_size_callback (GtkWidget *widget,
7627 gtk_window_set_default_size (g_object_get_data (data, "target"),
7632 set_default_size_callback (GtkWidget *widget,
7637 get_ints (data, &w, &h);
7639 gtk_window_set_default_size (g_object_get_data (data, "target"),
7644 unset_size_request_callback (GtkWidget *widget,
7647 gtk_widget_set_size_request (g_object_get_data (data, "target"),
7652 set_size_request_callback (GtkWidget *widget,
7657 get_ints (data, &w, &h);
7659 gtk_widget_set_size_request (g_object_get_data (data, "target"),
7664 set_location_callback (GtkWidget *widget,
7669 get_ints (data, &x, &y);
7671 gtk_window_move (g_object_get_data (data, "target"), x, y);
7675 move_to_position_callback (GtkWidget *widget,
7681 window = g_object_get_data (data, "target");
7683 gtk_window_get_position (window, &x, &y);
7685 gtk_window_move (window, x, y);
7689 set_geometry_callback (GtkWidget *entry,
7695 target = GTK_WINDOW (g_object_get_data (G_OBJECT (data), "target"));
7697 text = gtk_editable_get_chars (GTK_EDITABLE (entry), 0, -1);
7699 if (!gtk_window_parse_geometry (target, text))
7700 g_print ("Bad geometry string '%s'\n", text);
7706 resizable_callback (GtkWidget *widget,
7709 g_object_set (g_object_get_data (data, "target"),
7710 "resizable", GTK_TOGGLE_BUTTON (widget)->active,
7715 gravity_selected (GtkWidget *widget,
7718 gtk_window_set_gravity (GTK_WINDOW (g_object_get_data (data, "target")),
7719 gtk_combo_box_get_active (GTK_COMBO_BOX (widget)) + GDK_GRAVITY_NORTH_WEST);
7723 pos_selected (GtkWidget *widget,
7726 gtk_window_set_position (GTK_WINDOW (g_object_get_data (data, "target")),
7727 gtk_combo_box_get_active (GTK_COMBO_BOX (widget)) + GTK_WIN_POS_NONE);
7731 move_gravity_window_to_current_position (GtkWidget *widget,
7737 window = GTK_WINDOW (data);
7739 gtk_window_get_position (window, &x, &y);
7741 gtk_window_move (window, x, y);
7745 get_screen_corner (GtkWindow *window,
7750 GdkScreen * screen = gtk_window_get_screen (window);
7752 gtk_window_get_size (GTK_WINDOW (window), &w, &h);
7754 switch (gtk_window_get_gravity (window))
7756 case GDK_GRAVITY_SOUTH_EAST:
7757 *x = gdk_screen_get_width (screen) - w;
7758 *y = gdk_screen_get_height (screen) - h;
7761 case GDK_GRAVITY_NORTH_EAST:
7762 *x = gdk_screen_get_width (screen) - w;
7766 case GDK_GRAVITY_SOUTH_WEST:
7768 *y = gdk_screen_get_height (screen) - h;
7771 case GDK_GRAVITY_NORTH_WEST:
7776 case GDK_GRAVITY_SOUTH:
7777 *x = (gdk_screen_get_width (screen) - w) / 2;
7778 *y = gdk_screen_get_height (screen) - h;
7781 case GDK_GRAVITY_NORTH:
7782 *x = (gdk_screen_get_width (screen) - w) / 2;
7786 case GDK_GRAVITY_WEST:
7788 *y = (gdk_screen_get_height (screen) - h) / 2;
7791 case GDK_GRAVITY_EAST:
7792 *x = gdk_screen_get_width (screen) - w;
7793 *y = (gdk_screen_get_height (screen) - h) / 2;
7796 case GDK_GRAVITY_CENTER:
7797 *x = (gdk_screen_get_width (screen) - w) / 2;
7798 *y = (gdk_screen_get_height (screen) - h) / 2;
7801 case GDK_GRAVITY_STATIC:
7802 /* pick some random numbers */
7808 g_assert_not_reached ();
7814 move_gravity_window_to_starting_position (GtkWidget *widget,
7820 window = GTK_WINDOW (data);
7822 get_screen_corner (window,
7825 gtk_window_move (window, x, y);
7829 make_gravity_window (GtkWidget *destroy_with,
7838 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
7840 gtk_window_set_screen (GTK_WINDOW (window),
7841 gtk_widget_get_screen (destroy_with));
7843 vbox = gtk_vbox_new (FALSE, 0);
7844 gtk_widget_show (vbox);
7846 gtk_container_add (GTK_CONTAINER (window), vbox);
7847 gtk_window_set_title (GTK_WINDOW (window), title);
7848 gtk_window_set_gravity (GTK_WINDOW (window), gravity);
7850 g_signal_connect_object (destroy_with,
7852 G_CALLBACK (gtk_widget_destroy),
7857 button = gtk_button_new_with_mnemonic ("_Move to current position");
7859 g_signal_connect (button, "clicked",
7860 G_CALLBACK (move_gravity_window_to_current_position),
7863 gtk_container_add (GTK_CONTAINER (vbox), button);
7864 gtk_widget_show (button);
7866 button = gtk_button_new_with_mnemonic ("Move to _starting position");
7868 g_signal_connect (button, "clicked",
7869 G_CALLBACK (move_gravity_window_to_starting_position),
7872 gtk_container_add (GTK_CONTAINER (vbox), button);
7873 gtk_widget_show (button);
7875 /* Pretend this is the result of --geometry.
7876 * DO NOT COPY THIS CODE unless you are setting --geometry results,
7877 * and in that case you probably should just use gtk_window_parse_geometry().
7878 * AGAIN, DO NOT SET GDK_HINT_USER_POS! It violates the ICCCM unless
7879 * you are parsing --geometry or equivalent.
7881 gtk_window_set_geometry_hints (GTK_WINDOW (window),
7885 gtk_window_set_default_size (GTK_WINDOW (window),
7888 get_screen_corner (GTK_WINDOW (window), &x, &y);
7890 gtk_window_move (GTK_WINDOW (window),
7897 do_gravity_test (GtkWidget *widget,
7900 GtkWidget *destroy_with = data;
7903 /* We put a window at each gravity point on the screen. */
7904 window = make_gravity_window (destroy_with, GDK_GRAVITY_NORTH_WEST,
7906 gtk_widget_show (window);
7908 window = make_gravity_window (destroy_with, GDK_GRAVITY_SOUTH_EAST,
7910 gtk_widget_show (window);
7912 window = make_gravity_window (destroy_with, GDK_GRAVITY_NORTH_EAST,
7914 gtk_widget_show (window);
7916 window = make_gravity_window (destroy_with, GDK_GRAVITY_SOUTH_WEST,
7918 gtk_widget_show (window);
7920 window = make_gravity_window (destroy_with, GDK_GRAVITY_SOUTH,
7922 gtk_widget_show (window);
7924 window = make_gravity_window (destroy_with, GDK_GRAVITY_NORTH,
7926 gtk_widget_show (window);
7929 window = make_gravity_window (destroy_with, GDK_GRAVITY_WEST,
7931 gtk_widget_show (window);
7934 window = make_gravity_window (destroy_with, GDK_GRAVITY_EAST,
7936 gtk_widget_show (window);
7938 window = make_gravity_window (destroy_with, GDK_GRAVITY_CENTER,
7940 gtk_widget_show (window);
7942 window = make_gravity_window (destroy_with, GDK_GRAVITY_STATIC,
7944 gtk_widget_show (window);
7948 window_controls (GtkWidget *window)
7950 GtkWidget *control_window;
7960 control_window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
7962 gtk_window_set_screen (GTK_WINDOW (control_window),
7963 gtk_widget_get_screen (window));
7965 gtk_window_set_title (GTK_WINDOW (control_window), "Size controls");
7967 g_object_set_data (G_OBJECT (control_window),
7971 g_signal_connect_object (control_window,
7973 G_CALLBACK (gtk_widget_destroy),
7977 vbox = gtk_vbox_new (FALSE, 5);
7979 gtk_container_add (GTK_CONTAINER (control_window), vbox);
7981 label = gtk_label_new ("<no configure events>");
7982 gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
7984 g_signal_connect (window,
7986 G_CALLBACK (configure_event_callback),
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), "spin1", spin);
7996 adj = gtk_adjustment_new (10.0, -2000.0, 2000.0, 1.0, 5.0, 0.0);
7997 spin = gtk_spin_button_new (adj, 0, 0);
7999 gtk_box_pack_start (GTK_BOX (vbox), spin, FALSE, FALSE, 0);
8001 g_object_set_data (G_OBJECT (control_window), "spin2", spin);
8003 entry = gtk_entry_new ();
8004 gtk_box_pack_start (GTK_BOX (vbox), entry, FALSE, FALSE, 0);
8006 g_signal_connect (entry, "changed",
8007 G_CALLBACK (set_geometry_callback),
8010 button = gtk_button_new_with_label ("Show gravity test windows");
8011 g_signal_connect_swapped (button,
8013 G_CALLBACK (do_gravity_test),
8015 gtk_box_pack_end (GTK_BOX (vbox), button, FALSE, FALSE, 0);
8017 button = gtk_button_new_with_label ("Reshow with initial size");
8018 g_signal_connect_object (button,
8020 G_CALLBACK (gtk_window_reshow_with_initial_size),
8023 gtk_box_pack_end (GTK_BOX (vbox), button, FALSE, FALSE, 0);
8025 button = gtk_button_new_with_label ("Queue resize");
8026 g_signal_connect_object (button,
8028 G_CALLBACK (gtk_widget_queue_resize),
8031 gtk_box_pack_end (GTK_BOX (vbox), button, FALSE, FALSE, 0);
8033 button = gtk_button_new_with_label ("Resize");
8034 g_signal_connect (button,
8036 G_CALLBACK (set_size_callback),
8038 gtk_box_pack_end (GTK_BOX (vbox), button, FALSE, FALSE, 0);
8040 button = gtk_button_new_with_label ("Set default size");
8041 g_signal_connect (button,
8043 G_CALLBACK (set_default_size_callback),
8045 gtk_box_pack_end (GTK_BOX (vbox), button, FALSE, FALSE, 0);
8047 button = gtk_button_new_with_label ("Unset default size");
8048 g_signal_connect (button,
8050 G_CALLBACK (unset_default_size_callback),
8052 gtk_box_pack_end (GTK_BOX (vbox), button, FALSE, FALSE, 0);
8054 button = gtk_button_new_with_label ("Set size request");
8055 g_signal_connect (button,
8057 G_CALLBACK (set_size_request_callback),
8059 gtk_box_pack_end (GTK_BOX (vbox), button, FALSE, FALSE, 0);
8061 button = gtk_button_new_with_label ("Unset size request");
8062 g_signal_connect (button,
8064 G_CALLBACK (unset_size_request_callback),
8066 gtk_box_pack_end (GTK_BOX (vbox), button, FALSE, FALSE, 0);
8068 button = gtk_button_new_with_label ("Move");
8069 g_signal_connect (button,
8071 G_CALLBACK (set_location_callback),
8073 gtk_box_pack_end (GTK_BOX (vbox), button, FALSE, FALSE, 0);
8075 button = gtk_button_new_with_label ("Move to current position");
8076 g_signal_connect (button,
8078 G_CALLBACK (move_to_position_callback),
8080 gtk_box_pack_end (GTK_BOX (vbox), button, FALSE, FALSE, 0);
8082 button = gtk_check_button_new_with_label ("Allow resize");
8083 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE);
8084 g_signal_connect (button,
8086 G_CALLBACK (resizable_callback),
8088 gtk_box_pack_end (GTK_BOX (vbox), button, FALSE, FALSE, 0);
8090 button = gtk_button_new_with_mnemonic ("_Show");
8091 g_signal_connect_object (button,
8093 G_CALLBACK (gtk_widget_show),
8096 gtk_box_pack_end (GTK_BOX (vbox), button, FALSE, FALSE, 0);
8098 button = gtk_button_new_with_mnemonic ("_Hide");
8099 g_signal_connect_object (button,
8101 G_CALLBACK (gtk_widget_hide),
8104 gtk_box_pack_end (GTK_BOX (vbox), button, FALSE, FALSE, 0);
8106 om = gtk_combo_box_text_new ();
8110 static gchar *names[] = {
8111 "GDK_GRAVITY_NORTH_WEST",
8112 "GDK_GRAVITY_NORTH",
8113 "GDK_GRAVITY_NORTH_EAST",
8115 "GDK_GRAVITY_CENTER",
8117 "GDK_GRAVITY_SOUTH_WEST",
8118 "GDK_GRAVITY_SOUTH",
8119 "GDK_GRAVITY_SOUTH_EAST",
8120 "GDK_GRAVITY_STATIC",
8124 g_assert (names[i]);
8125 gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (om), names[i]);
8130 g_signal_connect (om,
8132 G_CALLBACK (gravity_selected),
8135 gtk_box_pack_end (GTK_BOX (vbox), om, FALSE, FALSE, 0);
8138 om = gtk_combo_box_text_new ();
8142 static gchar *names[] = {
8144 "GTK_WIN_POS_CENTER",
8145 "GTK_WIN_POS_MOUSE",
8146 "GTK_WIN_POS_CENTER_ALWAYS",
8147 "GTK_WIN_POS_CENTER_ON_PARENT",
8151 g_assert (names[i]);
8152 gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (om), names[i]);
8157 g_signal_connect (om,
8159 G_CALLBACK (pos_selected),
8162 gtk_box_pack_end (GTK_BOX (vbox), om, FALSE, FALSE, 0);
8164 gtk_widget_show_all (vbox);
8166 return control_window;
8170 create_window_sizing (GtkWidget *widget)
8172 static GtkWidget *window = NULL;
8173 static GtkWidget *target_window = NULL;
8179 target_window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
8180 gtk_window_set_screen (GTK_WINDOW (target_window),
8181 gtk_widget_get_screen (widget));
8182 label = gtk_label_new (NULL);
8183 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");
8184 gtk_container_add (GTK_CONTAINER (target_window), label);
8185 gtk_widget_show (label);
8187 g_signal_connect (target_window, "destroy",
8188 G_CALLBACK (gtk_widget_destroyed),
8191 window = window_controls (target_window);
8193 g_signal_connect (window, "destroy",
8194 G_CALLBACK (gtk_widget_destroyed),
8197 gtk_window_set_title (GTK_WINDOW (target_window), "Window to size");
8200 /* don't show target window by default, we want to allow testing
8201 * of behavior on first show.
8204 if (!gtk_widget_get_visible (window))
8205 gtk_widget_show (window);
8207 gtk_widget_destroy (window);
8214 typedef struct _ProgressData {
8217 GtkWidget *block_spin;
8218 GtkWidget *x_align_spin;
8219 GtkWidget *y_align_spin;
8220 GtkWidget *step_spin;
8221 GtkWidget *act_blocks_spin;
8232 progress_timeout (gpointer data)
8234 ProgressData *pdata = data;
8238 if (pdata->activity)
8240 gtk_progress_bar_pulse (GTK_PROGRESS_BAR (pdata->pbar));
8242 text = g_strdup_printf ("%s", "???");
8246 new_val = gtk_progress_bar_get_fraction (GTK_PROGRESS_BAR (pdata->pbar)) + 0.01;
8249 gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (pdata->pbar), new_val);
8251 text = g_strdup_printf ("%.0f%%", 100 * new_val);
8254 gtk_label_set_text (GTK_LABEL (pdata->label), text);
8261 destroy_progress (GtkWidget *widget,
8262 ProgressData **pdata)
8264 g_source_remove ((*pdata)->timer);
8265 (*pdata)->timer = 0;
8266 (*pdata)->window = NULL;
8272 progressbar_toggle_orientation (GtkWidget *widget, gpointer data)
8274 ProgressData *pdata;
8277 pdata = (ProgressData *) data;
8279 if (!gtk_widget_get_mapped (widget))
8282 i = gtk_combo_box_get_active (GTK_COMBO_BOX (widget));
8284 if (i == 0 || i == 1)
8285 gtk_orientable_set_orientation (GTK_ORIENTABLE (pdata->pbar), GTK_ORIENTATION_HORIZONTAL);
8287 gtk_orientable_set_orientation (GTK_ORIENTABLE (pdata->pbar), GTK_ORIENTATION_VERTICAL);
8289 if (i == 1 || i == 2)
8290 gtk_progress_bar_set_inverted (GTK_PROGRESS_BAR (pdata->pbar), TRUE);
8292 gtk_progress_bar_set_inverted (GTK_PROGRESS_BAR (pdata->pbar), FALSE);
8296 toggle_show_text (GtkWidget *widget, ProgressData *pdata)
8300 active = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget));
8301 gtk_progress_bar_set_show_text (GTK_PROGRESS_BAR (pdata->pbar), active);
8305 progressbar_toggle_ellipsize (GtkWidget *widget,
8308 ProgressData *pdata = data;
8309 if (gtk_widget_is_drawable (widget))
8311 gint i = gtk_combo_box_get_active (GTK_COMBO_BOX (widget));
8312 gtk_progress_bar_set_ellipsize (GTK_PROGRESS_BAR (pdata->pbar), i);
8317 toggle_activity_mode (GtkWidget *widget, ProgressData *pdata)
8319 pdata->activity = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget));
8323 entry_changed (GtkWidget *widget, ProgressData *pdata)
8325 gtk_progress_bar_set_text (GTK_PROGRESS_BAR (pdata->pbar),
8326 gtk_entry_get_text (GTK_ENTRY (pdata->entry)));
8330 create_progress_bar (GtkWidget *widget)
8332 GtkWidget *action_area, *content_area;
8342 static ProgressData *pdata = NULL;
8344 static gchar *items1[] =
8352 static char *ellipsize_items[] = {
8353 "None", // PANGO_ELLIPSIZE_NONE,
8354 "Start", // PANGO_ELLIPSIZE_START,
8355 "Middle", // PANGO_ELLIPSIZE_MIDDLE,
8356 "End", // PANGO_ELLIPSIZE_END
8360 pdata = g_new0 (ProgressData, 1);
8364 pdata->window = gtk_dialog_new ();
8366 gtk_window_set_screen (GTK_WINDOW (pdata->window),
8367 gtk_widget_get_screen (widget));
8369 gtk_window_set_resizable (GTK_WINDOW (pdata->window), TRUE);
8371 g_signal_connect (pdata->window, "destroy",
8372 G_CALLBACK (destroy_progress),
8376 content_area = gtk_dialog_get_content_area (GTK_DIALOG (pdata->window));
8377 action_area = gtk_dialog_get_action_area (GTK_DIALOG (pdata->window));
8379 gtk_window_set_title (GTK_WINDOW (pdata->window), "GtkProgressBar");
8380 gtk_container_set_border_width (GTK_CONTAINER (pdata->window), 0);
8382 vbox = gtk_vbox_new (FALSE, 5);
8383 gtk_container_set_border_width (GTK_CONTAINER (vbox), 10);
8384 gtk_box_pack_start (GTK_BOX (content_area), vbox, FALSE, TRUE, 0);
8386 frame = gtk_frame_new ("Progress");
8387 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, TRUE, 0);
8389 vbox2 = gtk_vbox_new (FALSE, 5);
8390 gtk_container_add (GTK_CONTAINER (frame), vbox2);
8392 align = gtk_alignment_new (0.5, 0.5, 0, 0);
8393 gtk_box_pack_start (GTK_BOX (vbox2), align, FALSE, FALSE, 5);
8395 pdata->pbar = gtk_progress_bar_new ();
8396 gtk_progress_bar_set_ellipsize (GTK_PROGRESS_BAR (pdata->pbar),
8397 PANGO_ELLIPSIZE_MIDDLE);
8399 gtk_container_add (GTK_CONTAINER (align), pdata->pbar);
8400 pdata->timer = g_timeout_add (100, (GSourceFunc)progress_timeout, pdata);
8402 align = gtk_alignment_new (0.5, 0.5, 0, 0);
8403 gtk_box_pack_start (GTK_BOX (vbox2), align, FALSE, FALSE, 5);
8405 hbox = gtk_hbox_new (FALSE, 5);
8406 gtk_container_add (GTK_CONTAINER (align), hbox);
8407 label = gtk_label_new ("Label updated by user :");
8408 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
8409 pdata->label = gtk_label_new ("");
8410 gtk_box_pack_start (GTK_BOX (hbox), pdata->label, FALSE, TRUE, 0);
8412 frame = gtk_frame_new ("Options");
8413 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, TRUE, 0);
8415 vbox2 = gtk_vbox_new (FALSE, 5);
8416 gtk_container_add (GTK_CONTAINER (frame), vbox2);
8418 tab = gtk_table_new (7, 2, FALSE);
8419 gtk_box_pack_start (GTK_BOX (vbox2), tab, FALSE, TRUE, 0);
8421 label = gtk_label_new ("Orientation :");
8422 gtk_table_attach (GTK_TABLE (tab), label, 0, 1, 0, 1,
8423 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
8425 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
8427 pdata->omenu1 = build_option_menu (items1, 4, 0,
8428 progressbar_toggle_orientation,
8430 hbox = gtk_hbox_new (FALSE, 0);
8431 gtk_table_attach (GTK_TABLE (tab), hbox, 1, 2, 0, 1,
8432 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
8434 gtk_box_pack_start (GTK_BOX (hbox), pdata->omenu1, TRUE, TRUE, 0);
8436 check = gtk_check_button_new_with_label ("Show text");
8437 g_signal_connect (check, "clicked",
8438 G_CALLBACK (toggle_show_text),
8440 gtk_table_attach (GTK_TABLE (tab), check, 0, 1, 1, 2,
8441 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
8444 hbox = gtk_hbox_new (FALSE, 0);
8445 gtk_table_attach (GTK_TABLE (tab), hbox, 1, 2, 1, 2,
8446 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
8449 label = gtk_label_new ("Text: ");
8450 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
8452 pdata->entry = gtk_entry_new ();
8453 g_signal_connect (pdata->entry, "changed",
8454 G_CALLBACK (entry_changed),
8456 gtk_box_pack_start (GTK_BOX (hbox), pdata->entry, TRUE, TRUE, 0);
8457 gtk_widget_set_size_request (pdata->entry, 100, -1);
8459 label = gtk_label_new ("Ellipsize text :");
8460 gtk_table_attach (GTK_TABLE (tab), label, 0, 1, 10, 11,
8461 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
8463 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
8464 pdata->elmenu = build_option_menu (ellipsize_items,
8465 sizeof (ellipsize_items) / sizeof (ellipsize_items[0]),
8466 2, // PANGO_ELLIPSIZE_MIDDLE
8467 progressbar_toggle_ellipsize,
8469 hbox = gtk_hbox_new (FALSE, 0);
8470 gtk_table_attach (GTK_TABLE (tab), hbox, 1, 2, 10, 11,
8471 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
8473 gtk_box_pack_start (GTK_BOX (hbox), pdata->elmenu, TRUE, TRUE, 0);
8475 check = gtk_check_button_new_with_label ("Activity mode");
8476 g_signal_connect (check, "clicked",
8477 G_CALLBACK (toggle_activity_mode), pdata);
8478 gtk_table_attach (GTK_TABLE (tab), check, 0, 1, 15, 16,
8479 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
8482 button = gtk_button_new_with_label ("close");
8483 g_signal_connect_swapped (button, "clicked",
8484 G_CALLBACK (gtk_widget_destroy),
8486 gtk_widget_set_can_default (button, TRUE);
8487 gtk_box_pack_start (GTK_BOX (action_area), button, TRUE, TRUE, 0);
8488 gtk_widget_grab_default (button);
8491 if (!gtk_widget_get_visible (pdata->window))
8492 gtk_widget_show_all (pdata->window);
8494 gtk_widget_destroy (pdata->window);
8506 GtkWidget *res_widget;
8510 find_widget (GtkWidget *widget, FindWidgetData *data)
8512 GtkAllocation new_allocation;
8516 gtk_widget_get_allocation (widget, &new_allocation);
8518 if (data->found || !gtk_widget_get_mapped (widget))
8521 /* Note that in the following code, we only count the
8522 * position as being inside a WINDOW widget if it is inside
8523 * widget->window; points that are outside of widget->window
8524 * but within the allocation are not counted. This is consistent
8525 * with the way we highlight drag targets.
8527 if (gtk_widget_get_has_window (widget))
8529 new_allocation.x = 0;
8530 new_allocation.y = 0;
8533 if (gtk_widget_get_parent (widget) && !data->first)
8535 GdkWindow *window = gtk_widget_get_window (widget);
8536 while (window != gtk_widget_get_window (gtk_widget_get_parent (widget)))
8538 gint tx, ty, twidth, theight;
8540 twidth = gdk_window_get_width (window);
8541 theight = gdk_window_get_height (window);
8543 if (new_allocation.x < 0)
8545 new_allocation.width += new_allocation.x;
8546 new_allocation.x = 0;
8548 if (new_allocation.y < 0)
8550 new_allocation.height += new_allocation.y;
8551 new_allocation.y = 0;
8553 if (new_allocation.x + new_allocation.width > twidth)
8554 new_allocation.width = twidth - new_allocation.x;
8555 if (new_allocation.y + new_allocation.height > theight)
8556 new_allocation.height = theight - new_allocation.y;
8558 gdk_window_get_position (window, &tx, &ty);
8559 new_allocation.x += tx;
8561 new_allocation.y += ty;
8564 window = gdk_window_get_parent (window);
8568 if ((data->x >= new_allocation.x) && (data->y >= new_allocation.y) &&
8569 (data->x < new_allocation.x + new_allocation.width) &&
8570 (data->y < new_allocation.y + new_allocation.height))
8572 /* First, check if the drag is in a valid drop site in
8573 * one of our children
8575 if (GTK_IS_CONTAINER (widget))
8577 FindWidgetData new_data = *data;
8579 new_data.x -= x_offset;
8580 new_data.y -= y_offset;
8581 new_data.found = FALSE;
8582 new_data.first = FALSE;
8584 gtk_container_forall (GTK_CONTAINER (widget),
8585 (GtkCallback)find_widget,
8588 data->found = new_data.found;
8590 data->res_widget = new_data.res_widget;
8593 /* If not, and this widget is registered as a drop site, check to
8594 * emit "drag_motion" to check if we are actually in
8600 data->res_widget = widget;
8606 find_widget_at_pointer (GdkDisplay *display)
8608 GtkWidget *widget = NULL;
8609 GdkWindow *pointer_window;
8611 FindWidgetData data;
8613 pointer_window = gdk_display_get_window_at_pointer (display, NULL, NULL);
8617 gpointer widget_ptr;
8619 gdk_window_get_user_data (pointer_window, &widget_ptr);
8620 widget = widget_ptr;
8625 gdk_window_get_pointer (gtk_widget_get_window (widget),
8633 find_widget (widget, &data);
8635 return data.res_widget;
8641 struct PropertiesData {
8649 destroy_properties (GtkWidget *widget,
8650 struct PropertiesData *data)
8654 *data->window = NULL;
8655 data->window = NULL;
8660 gdk_cursor_unref (data->cursor);
8661 data->cursor = NULL;
8666 g_signal_handler_disconnect (widget, data->handler);
8674 property_query_event (GtkWidget *widget,
8676 struct PropertiesData *data)
8678 GtkWidget *res_widget = NULL;
8680 if (!data->in_query)
8683 if (event->type == GDK_BUTTON_RELEASE)
8685 gtk_grab_remove (widget);
8686 gdk_display_pointer_ungrab (gtk_widget_get_display (widget),
8689 res_widget = find_widget_at_pointer (gtk_widget_get_display (widget));
8692 g_object_set_data (G_OBJECT (res_widget), "prop-editor-screen",
8693 gtk_widget_get_screen (widget));
8694 create_prop_editor (G_OBJECT (res_widget), 0);
8697 data->in_query = FALSE;
8704 query_properties (GtkButton *button,
8705 struct PropertiesData *data)
8707 GtkWidget *widget = GTK_WIDGET (button);
8710 g_signal_connect (button, "event",
8711 G_CALLBACK (property_query_event), data);
8715 data->cursor = gdk_cursor_new_for_display (gtk_widget_get_display (widget),
8718 failure = gdk_pointer_grab (gtk_widget_get_window (widget),
8720 GDK_BUTTON_RELEASE_MASK,
8725 gtk_grab_add (widget);
8727 data->in_query = TRUE;
8731 create_properties (GtkWidget *widget)
8733 static GtkWidget *window = NULL;
8737 struct PropertiesData *data;
8739 data = g_new (struct PropertiesData, 1);
8740 data->window = &window;
8741 data->in_query = FALSE;
8742 data->cursor = NULL;
8747 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
8749 gtk_window_set_screen (GTK_WINDOW (window),
8750 gtk_widget_get_screen (widget));
8752 data->handler = g_signal_connect (window, "destroy",
8753 G_CALLBACK (destroy_properties),
8756 gtk_window_set_title (GTK_WINDOW (window), "test properties");
8757 gtk_container_set_border_width (GTK_CONTAINER (window), 10);
8759 vbox = gtk_vbox_new (FALSE, 1);
8760 gtk_container_add (GTK_CONTAINER (window), vbox);
8762 label = gtk_label_new ("This is just a dumb test to test properties.\nIf you need a generic module, get GLE.");
8763 gtk_box_pack_start (GTK_BOX (vbox), label, TRUE, TRUE, 0);
8765 button = gtk_button_new_with_label ("Query properties");
8766 gtk_box_pack_start (GTK_BOX (vbox), button, TRUE, TRUE, 0);
8767 g_signal_connect (button, "clicked",
8768 G_CALLBACK (query_properties),
8772 if (!gtk_widget_get_visible (window))
8773 gtk_widget_show_all (window);
8775 gtk_widget_destroy (window);
8779 struct SnapshotData {
8780 GtkWidget *toplevel_button;
8784 gboolean is_toplevel;
8789 destroy_snapshot_data (GtkWidget *widget,
8790 struct SnapshotData *data)
8793 *data->window = NULL;
8797 gdk_cursor_unref (data->cursor);
8798 data->cursor = NULL;
8803 g_signal_handler_disconnect (widget, data->handler);
8811 snapshot_widget_event (GtkWidget *widget,
8813 struct SnapshotData *data)
8815 GtkWidget *res_widget = NULL;
8817 if (!data->in_query)
8820 if (event->type == GDK_BUTTON_RELEASE)
8822 gtk_grab_remove (widget);
8823 gdk_display_pointer_ungrab (gtk_widget_get_display (widget),
8826 res_widget = find_widget_at_pointer (gtk_widget_get_display (widget));
8827 if (data->is_toplevel && res_widget)
8828 res_widget = gtk_widget_get_toplevel (res_widget);
8831 cairo_surface_t *surface;
8832 GtkWidget *window, *image;
8837 width = gtk_widget_get_allocated_width (res_widget);
8838 height = gtk_widget_get_allocated_height (res_widget);
8840 surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, width, height);
8842 cr = cairo_create (surface);
8843 gtk_widget_draw (res_widget, cr);
8846 pixbuf = gdk_pixbuf_get_from_surface (surface,
8849 cairo_surface_destroy (surface);
8851 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
8852 image = gtk_image_new_from_pixbuf (pixbuf);
8853 g_object_unref (pixbuf);
8855 gtk_container_add (GTK_CONTAINER (window), image);
8856 gtk_widget_show_all (window);
8859 data->in_query = FALSE;
8866 snapshot_widget (GtkButton *button,
8867 struct SnapshotData *data)
8869 GtkWidget *widget = GTK_WIDGET (button);
8872 g_signal_connect (button, "event",
8873 G_CALLBACK (snapshot_widget_event), data);
8875 data->is_toplevel = widget == data->toplevel_button;
8878 data->cursor = gdk_cursor_new_for_display (gtk_widget_get_display (widget),
8881 failure = gdk_pointer_grab (gtk_widget_get_window (widget),
8883 GDK_BUTTON_RELEASE_MASK,
8888 gtk_grab_add (widget);
8890 data->in_query = TRUE;
8894 create_snapshot (GtkWidget *widget)
8896 static GtkWidget *window = NULL;
8899 struct SnapshotData *data;
8901 data = g_new (struct SnapshotData, 1);
8902 data->window = &window;
8903 data->in_query = FALSE;
8904 data->cursor = NULL;
8909 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
8911 gtk_window_set_screen (GTK_WINDOW (window),
8912 gtk_widget_get_screen (widget));
8914 data->handler = g_signal_connect (window, "destroy",
8915 G_CALLBACK (destroy_snapshot_data),
8918 gtk_window_set_title (GTK_WINDOW (window), "test snapshot");
8919 gtk_container_set_border_width (GTK_CONTAINER (window), 10);
8921 vbox = gtk_vbox_new (FALSE, 1);
8922 gtk_container_add (GTK_CONTAINER (window), vbox);
8924 button = gtk_button_new_with_label ("Snapshot widget");
8925 gtk_box_pack_start (GTK_BOX (vbox), button, TRUE, TRUE, 0);
8926 g_signal_connect (button, "clicked",
8927 G_CALLBACK (snapshot_widget),
8930 button = gtk_button_new_with_label ("Snapshot toplevel");
8931 data->toplevel_button = button;
8932 gtk_box_pack_start (GTK_BOX (vbox), button, TRUE, TRUE, 0);
8933 g_signal_connect (button, "clicked",
8934 G_CALLBACK (snapshot_widget),
8938 if (!gtk_widget_get_visible (window))
8939 gtk_widget_show_all (window);
8941 gtk_widget_destroy (window);
8950 selection_test_received (GtkWidget *tree_view,
8951 GtkSelectionData *data)
8953 GtkTreeModel *model;
8954 GtkListStore *store;
8958 if (data->length < 0)
8960 g_print ("Selection retrieval failed\n");
8963 if (data->type != GDK_SELECTION_TYPE_ATOM)
8965 g_print ("Selection \"TARGETS\" was not returned as atoms!\n");
8969 /* Clear out any current list items */
8971 model = gtk_tree_view_get_model (GTK_TREE_VIEW (tree_view));
8972 store = GTK_LIST_STORE (model);
8973 gtk_list_store_clear (store);
8975 /* Add new items to list */
8977 atoms = (GdkAtom *)data->data;
8979 l = data->length / sizeof (GdkAtom);
8980 for (i = 0; i < l; i++)
8985 name = gdk_atom_name (atoms[i]);
8988 gtk_list_store_insert_with_values (store, &iter, i, 0, name, -1);
8992 gtk_list_store_insert_with_values (store, &iter, i, 0, "(bad atom)", -1);
8999 selection_test_get_targets (GtkWidget *widget, GtkWidget *tree_view)
9001 static GdkAtom targets_atom = GDK_NONE;
9003 if (targets_atom == GDK_NONE)
9004 targets_atom = gdk_atom_intern ("TARGETS", FALSE);
9006 gtk_selection_convert (tree_view, GDK_SELECTION_PRIMARY, targets_atom,
9011 create_selection_test (GtkWidget *widget)
9013 static GtkWidget *window = NULL;
9014 GtkWidget *action_area, *content_area;
9017 GtkWidget *scrolled_win;
9018 GtkListStore* store;
9019 GtkWidget *tree_view;
9020 GtkTreeViewColumn *column;
9021 GtkCellRenderer *renderer;
9026 window = gtk_dialog_new ();
9028 gtk_window_set_screen (GTK_WINDOW (window),
9029 gtk_widget_get_screen (widget));
9031 g_signal_connect (window, "destroy",
9032 G_CALLBACK (gtk_widget_destroyed),
9035 content_area = gtk_dialog_get_content_area (GTK_DIALOG (window));
9036 action_area = gtk_dialog_get_action_area (GTK_DIALOG (window));
9038 gtk_window_set_title (GTK_WINDOW (window), "Selection Test");
9039 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
9041 /* Create the list */
9043 vbox = gtk_vbox_new (FALSE, 5);
9044 gtk_container_set_border_width (GTK_CONTAINER (vbox), 10);
9045 gtk_box_pack_start (GTK_BOX (content_area), vbox, TRUE, TRUE, 0);
9047 label = gtk_label_new ("Gets available targets for current selection");
9048 gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
9050 scrolled_win = gtk_scrolled_window_new (NULL, NULL);
9051 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win),
9052 GTK_POLICY_AUTOMATIC,
9053 GTK_POLICY_AUTOMATIC);
9054 gtk_box_pack_start (GTK_BOX (vbox), scrolled_win, TRUE, TRUE, 0);
9055 gtk_widget_set_size_request (scrolled_win, 100, 200);
9057 store = gtk_list_store_new (1, G_TYPE_STRING);
9058 tree_view = gtk_tree_view_new_with_model (GTK_TREE_MODEL (store));
9059 gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scrolled_win), tree_view);
9061 renderer = gtk_cell_renderer_text_new ();
9062 column = gtk_tree_view_column_new_with_attributes ("Target", renderer,
9064 gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view), column);
9066 g_signal_connect (tree_view, "selection_received",
9067 G_CALLBACK (selection_test_received), NULL);
9069 /* .. And create some buttons */
9070 button = gtk_button_new_with_label ("Get Targets");
9071 gtk_box_pack_start (GTK_BOX (action_area), button, TRUE, TRUE, 0);
9073 g_signal_connect (button, "clicked",
9074 G_CALLBACK (selection_test_get_targets), tree_view);
9076 button = gtk_button_new_with_label ("Quit");
9077 gtk_box_pack_start (GTK_BOX (action_area), button, TRUE, TRUE, 0);
9079 g_signal_connect_swapped (button, "clicked",
9080 G_CALLBACK (gtk_widget_destroy),
9084 if (!gtk_widget_get_visible (window))
9085 gtk_widget_show_all (window);
9087 gtk_widget_destroy (window);
9094 static int scroll_test_pos = 0.0;
9097 scroll_test_draw (GtkWidget *widget,
9102 gint imin, imax, jmin, jmax;
9105 gdk_cairo_get_clip_rectangle (cr, &clip);
9107 imin = (clip.x) / 10;
9108 imax = (clip.x + clip.width + 9) / 10;
9110 jmin = ((int)adj->value + clip.y) / 10;
9111 jmax = ((int)adj->value + clip.y + clip.height + 9) / 10;
9113 for (i=imin; i<imax; i++)
9114 for (j=jmin; j<jmax; j++)
9116 cairo_rectangle (cr, 10*i, 10*j - (int)adj->value, 1+i%10, 1+j%10);
9124 scroll_test_scroll (GtkWidget *widget, GdkEventScroll *event,
9127 gdouble new_value = adj->value + ((event->direction == GDK_SCROLL_UP) ?
9128 -adj->page_increment / 2:
9129 adj->page_increment / 2);
9130 new_value = CLAMP (new_value, adj->lower, adj->upper - adj->page_size);
9131 gtk_adjustment_set_value (adj, new_value);
9137 scroll_test_configure (GtkWidget *widget, GdkEventConfigure *event,
9140 GtkAllocation allocation;
9142 gtk_widget_get_allocation (widget, &allocation);
9143 adj->page_increment = 0.9 * allocation.height;
9144 adj->page_size = allocation.height;
9146 g_signal_emit_by_name (adj, "changed");
9150 scroll_test_adjustment_changed (GtkAdjustment *adj, GtkWidget *widget)
9155 dy = scroll_test_pos - (int)adj->value;
9156 scroll_test_pos = adj->value;
9158 if (!gtk_widget_is_drawable (widget))
9161 window = gtk_widget_get_window (widget);
9162 gdk_window_scroll (window, 0, dy);
9163 gdk_window_process_updates (window, FALSE);
9168 create_scroll_test (GtkWidget *widget)
9170 static GtkWidget *window = NULL;
9171 GtkWidget *action_area, *content_area;
9173 GtkWidget *drawing_area;
9174 GtkWidget *scrollbar;
9177 GdkGeometry geometry;
9178 GdkWindowHints geometry_mask;
9182 window = gtk_dialog_new ();
9184 gtk_window_set_screen (GTK_WINDOW (window),
9185 gtk_widget_get_screen (widget));
9187 g_signal_connect (window, "destroy",
9188 G_CALLBACK (gtk_widget_destroyed),
9191 content_area = gtk_dialog_get_content_area (GTK_DIALOG (window));
9192 action_area = gtk_dialog_get_action_area (GTK_DIALOG (window));
9194 gtk_window_set_title (GTK_WINDOW (window), "Scroll Test");
9195 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
9197 hbox = gtk_hbox_new (FALSE, 0);
9198 gtk_box_pack_start (GTK_BOX (content_area), hbox, TRUE, TRUE, 0);
9199 gtk_widget_show (hbox);
9201 drawing_area = gtk_drawing_area_new ();
9202 gtk_widget_set_size_request (drawing_area, 200, 200);
9203 gtk_box_pack_start (GTK_BOX (hbox), drawing_area, TRUE, TRUE, 0);
9204 gtk_widget_show (drawing_area);
9206 gtk_widget_set_events (drawing_area, GDK_EXPOSURE_MASK | GDK_SCROLL_MASK);
9208 adj = gtk_adjustment_new (0.0, 0.0, 1000.0, 1.0, 180.0, 200.0);
9209 scroll_test_pos = 0.0;
9211 scrollbar = gtk_vscrollbar_new (adj);
9212 gtk_box_pack_start (GTK_BOX (hbox), scrollbar, FALSE, FALSE, 0);
9213 gtk_widget_show (scrollbar);
9215 g_signal_connect (drawing_area, "draw",
9216 G_CALLBACK (scroll_test_draw), adj);
9217 g_signal_connect (drawing_area, "configure_event",
9218 G_CALLBACK (scroll_test_configure), adj);
9219 g_signal_connect (drawing_area, "scroll_event",
9220 G_CALLBACK (scroll_test_scroll), adj);
9222 g_signal_connect (adj, "value_changed",
9223 G_CALLBACK (scroll_test_adjustment_changed),
9226 /* .. And create some buttons */
9228 button = gtk_button_new_with_label ("Quit");
9229 gtk_box_pack_start (GTK_BOX (action_area), button, TRUE, TRUE, 0);
9231 g_signal_connect_swapped (button, "clicked",
9232 G_CALLBACK (gtk_widget_destroy),
9234 gtk_widget_show (button);
9236 /* Set up gridded geometry */
9238 geometry_mask = GDK_HINT_MIN_SIZE |
9239 GDK_HINT_BASE_SIZE |
9240 GDK_HINT_RESIZE_INC;
9242 geometry.min_width = 20;
9243 geometry.min_height = 20;
9244 geometry.base_width = 0;
9245 geometry.base_height = 0;
9246 geometry.width_inc = 10;
9247 geometry.height_inc = 10;
9249 gtk_window_set_geometry_hints (GTK_WINDOW (window),
9250 drawing_area, &geometry, geometry_mask);
9253 if (!gtk_widget_get_visible (window))
9254 gtk_widget_show (window);
9256 gtk_widget_destroy (window);
9263 static int timer = 0;
9266 timeout_test (GtkWidget *label)
9268 static int count = 0;
9269 static char buffer[32];
9271 sprintf (buffer, "count: %d", ++count);
9272 gtk_label_set_text (GTK_LABEL (label), buffer);
9278 start_timeout_test (GtkWidget *widget,
9283 timer = g_timeout_add (100, (GSourceFunc)timeout_test, label);
9288 stop_timeout_test (GtkWidget *widget,
9293 g_source_remove (timer);
9299 destroy_timeout_test (GtkWidget *widget,
9302 stop_timeout_test (NULL, NULL);
9308 create_timeout_test (GtkWidget *widget)
9310 static GtkWidget *window = NULL;
9311 GtkWidget *action_area, *content_area;
9317 window = gtk_dialog_new ();
9319 gtk_window_set_screen (GTK_WINDOW (window),
9320 gtk_widget_get_screen (widget));
9322 g_signal_connect (window, "destroy",
9323 G_CALLBACK (destroy_timeout_test),
9326 content_area = gtk_dialog_get_content_area (GTK_DIALOG (window));
9327 action_area = gtk_dialog_get_content_area (GTK_DIALOG (window));
9329 gtk_window_set_title (GTK_WINDOW (window), "Timeout Test");
9330 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
9332 label = gtk_label_new ("count: 0");
9333 gtk_misc_set_padding (GTK_MISC (label), 10, 10);
9334 gtk_box_pack_start (GTK_BOX (content_area), label, TRUE, TRUE, 0);
9335 gtk_widget_show (label);
9337 button = gtk_button_new_with_label ("close");
9338 g_signal_connect_swapped (button, "clicked",
9339 G_CALLBACK (gtk_widget_destroy),
9341 gtk_widget_set_can_default (button, TRUE);
9342 gtk_box_pack_start (GTK_BOX (action_area), button, TRUE, TRUE, 0);
9343 gtk_widget_grab_default (button);
9344 gtk_widget_show (button);
9346 button = gtk_button_new_with_label ("start");
9347 g_signal_connect (button, "clicked",
9348 G_CALLBACK(start_timeout_test),
9350 gtk_widget_set_can_default (button, TRUE);
9351 gtk_box_pack_start (GTK_BOX (action_area), button, TRUE, TRUE, 0);
9352 gtk_widget_show (button);
9354 button = gtk_button_new_with_label ("stop");
9355 g_signal_connect (button, "clicked",
9356 G_CALLBACK (stop_timeout_test),
9358 gtk_widget_set_can_default (button, TRUE);
9359 gtk_box_pack_start (GTK_BOX (action_area), button, TRUE, TRUE, 0);
9360 gtk_widget_show (button);
9363 if (!gtk_widget_get_visible (window))
9364 gtk_widget_show (window);
9366 gtk_widget_destroy (window);
9373 static int idle_id = 0;
9376 idle_test (GtkWidget *label)
9378 static int count = 0;
9379 static char buffer[32];
9381 sprintf (buffer, "count: %d", ++count);
9382 gtk_label_set_text (GTK_LABEL (label), buffer);
9388 start_idle_test (GtkWidget *widget,
9393 idle_id = g_idle_add ((GSourceFunc) idle_test, label);
9398 stop_idle_test (GtkWidget *widget,
9403 g_source_remove (idle_id);
9409 destroy_idle_test (GtkWidget *widget,
9412 stop_idle_test (NULL, NULL);
9418 toggle_idle_container (GObject *button,
9419 GtkContainer *container)
9421 gtk_container_set_resize_mode (container, GPOINTER_TO_INT (g_object_get_data (button, "user_data")));
9425 create_idle_test (GtkWidget *widget)
9427 static GtkWidget *window = NULL;
9430 GtkWidget *container;
9434 GtkWidget *action_area, *content_area;
9439 window = gtk_dialog_new ();
9441 gtk_window_set_screen (GTK_WINDOW (window),
9442 gtk_widget_get_screen (widget));
9444 g_signal_connect (window, "destroy",
9445 G_CALLBACK (destroy_idle_test),
9448 content_area = gtk_dialog_get_content_area (GTK_DIALOG (window));
9449 action_area = gtk_dialog_get_action_area (GTK_DIALOG (window));
9451 gtk_window_set_title (GTK_WINDOW (window), "Idle Test");
9452 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
9454 label = gtk_label_new ("count: 0");
9455 gtk_misc_set_padding (GTK_MISC (label), 10, 10);
9456 gtk_widget_show (label);
9459 g_object_new (GTK_TYPE_HBOX,
9461 /* "GtkContainer::child", g_object_new (GTK_TYPE_HBOX,
9462 * "GtkWidget::visible", TRUE,
9467 gtk_box_pack_start (GTK_BOX (content_area), container, TRUE, TRUE, 0);
9470 g_object_new (GTK_TYPE_FRAME,
9472 "label", "Label Container",
9474 "parent", content_area,
9477 g_object_new (GTK_TYPE_VBOX,
9482 g_object_connect (g_object_new (GTK_TYPE_RADIO_BUTTON,
9483 "label", "Resize-Parent",
9484 "user_data", (void*)GTK_RESIZE_PARENT,
9488 "signal::clicked", toggle_idle_container, container,
9490 button = g_object_new (GTK_TYPE_RADIO_BUTTON,
9491 "label", "Resize-Queue",
9492 "user_data", (void*)GTK_RESIZE_QUEUE,
9497 g_object_connect (button,
9498 "signal::clicked", toggle_idle_container, container,
9500 button2 = g_object_new (GTK_TYPE_RADIO_BUTTON,
9501 "label", "Resize-Immediate",
9502 "user_data", (void*)GTK_RESIZE_IMMEDIATE,
9504 g_object_connect (button2,
9505 "signal::clicked", toggle_idle_container, container,
9507 g_object_set (button2,
9513 button = gtk_button_new_with_label ("close");
9514 g_signal_connect_swapped (button, "clicked",
9515 G_CALLBACK (gtk_widget_destroy),
9517 gtk_widget_set_can_default (button, TRUE);
9518 gtk_box_pack_start (GTK_BOX (action_area), button, TRUE, TRUE, 0);
9519 gtk_widget_grab_default (button);
9520 gtk_widget_show (button);
9522 button = gtk_button_new_with_label ("start");
9523 g_signal_connect (button, "clicked",
9524 G_CALLBACK (start_idle_test),
9526 gtk_widget_set_can_default (button, TRUE);
9527 gtk_box_pack_start (GTK_BOX (action_area), button, TRUE, TRUE, 0);
9528 gtk_widget_show (button);
9530 button = gtk_button_new_with_label ("stop");
9531 g_signal_connect (button, "clicked",
9532 G_CALLBACK (stop_idle_test),
9534 gtk_widget_set_can_default (button, TRUE);
9535 gtk_box_pack_start (GTK_BOX (action_area), button, TRUE, TRUE, 0);
9536 gtk_widget_show (button);
9539 if (!gtk_widget_get_visible (window))
9540 gtk_widget_show (window);
9542 gtk_widget_destroy (window);
9550 reload_all_rc_files (void)
9552 static GdkAtom atom_rcfiles = GDK_NONE;
9554 GdkEvent *send_event = gdk_event_new (GDK_CLIENT_EVENT);
9558 atom_rcfiles = gdk_atom_intern("_GTK_READ_RCFILES", FALSE);
9560 for(i = 0; i < 5; i++)
9561 send_event->client.data.l[i] = 0;
9562 send_event->client.data_format = 32;
9563 send_event->client.message_type = atom_rcfiles;
9564 gdk_event_send_clientmessage_toall (send_event);
9566 gdk_event_free (send_event);
9570 create_rc_file (GtkWidget *widget)
9572 static GtkWidget *window = NULL;
9573 GtkWidget *action_area, *content_area;
9581 window = gtk_dialog_new ();
9583 gtk_window_set_screen (GTK_WINDOW (window),
9584 gtk_widget_get_screen (widget));
9586 g_signal_connect (window, "destroy",
9587 G_CALLBACK (gtk_widget_destroyed),
9590 content_area = gtk_dialog_get_content_area (GTK_DIALOG (window));
9591 action_area = gtk_dialog_get_action_area (GTK_DIALOG (window));
9593 frame = gtk_aspect_frame_new ("Testing RC file prioritization", 0.5, 0.5, 0.0, TRUE);
9594 gtk_box_pack_start (GTK_BOX (content_area), frame, FALSE, FALSE, 0);
9596 vbox = gtk_vbox_new (FALSE, 0);
9597 gtk_container_add (GTK_CONTAINER (frame), vbox);
9599 label = gtk_label_new ("This label should be red");
9600 gtk_widget_set_name (label, "testgtk-red-label");
9601 gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
9603 label = gtk_label_new ("This label should be green");
9604 gtk_widget_set_name (label, "testgtk-green-label");
9605 gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
9607 label = gtk_label_new ("This label should be blue");
9608 gtk_widget_set_name (label, "testgtk-blue-label");
9609 gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
9611 gtk_window_set_title (GTK_WINDOW (window), "Reload Rc file");
9612 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
9614 button = gtk_button_new_with_label ("Reload");
9615 g_signal_connect (button, "clicked",
9616 G_CALLBACK (gtk_rc_reparse_all), NULL);
9617 gtk_widget_set_can_default (button, TRUE);
9618 gtk_box_pack_start (GTK_BOX (action_area), button, TRUE, TRUE, 0);
9619 gtk_widget_grab_default (button);
9621 button = gtk_button_new_with_label ("Reload All");
9622 g_signal_connect (button, "clicked",
9623 G_CALLBACK (reload_all_rc_files), NULL);
9624 gtk_widget_set_can_default (button, TRUE);
9625 gtk_box_pack_start (GTK_BOX (action_area), button, TRUE, TRUE, 0);
9627 button = gtk_button_new_with_label ("Close");
9628 g_signal_connect_swapped (button, "clicked",
9629 G_CALLBACK (gtk_widget_destroy),
9631 gtk_widget_set_can_default (button, TRUE);
9632 gtk_box_pack_start (GTK_BOX (action_area), button, TRUE, TRUE, 0);
9635 if (!gtk_widget_get_visible (window))
9636 gtk_widget_show_all (window);
9638 gtk_widget_destroy (window);
9642 * Test of recursive mainloop
9646 mainloop_destroyed (GtkWidget *w, GtkWidget **window)
9653 create_mainloop (GtkWidget *widget)
9655 static GtkWidget *window = NULL;
9656 GtkWidget *action_area, *content_area;
9662 window = gtk_dialog_new ();
9664 gtk_window_set_screen (GTK_WINDOW (window),
9665 gtk_widget_get_screen (widget));
9667 gtk_window_set_title (GTK_WINDOW (window), "Test Main Loop");
9669 g_signal_connect (window, "destroy",
9670 G_CALLBACK (mainloop_destroyed),
9673 content_area = gtk_dialog_get_content_area (GTK_DIALOG (window));
9674 action_area = gtk_dialog_get_action_area (GTK_DIALOG (window));
9676 label = gtk_label_new ("In recursive main loop...");
9677 gtk_misc_set_padding (GTK_MISC(label), 20, 20);
9679 gtk_box_pack_start (GTK_BOX (content_area), label, TRUE, TRUE, 0);
9680 gtk_widget_show (label);
9682 button = gtk_button_new_with_label ("Leave");
9683 gtk_box_pack_start (GTK_BOX (action_area), button, FALSE, TRUE, 0);
9685 g_signal_connect_swapped (button, "clicked",
9686 G_CALLBACK (gtk_widget_destroy),
9689 gtk_widget_set_can_default (button, TRUE);
9690 gtk_widget_grab_default (button);
9692 gtk_widget_show (button);
9695 if (!gtk_widget_get_visible (window))
9697 gtk_widget_show (window);
9699 g_print ("create_mainloop: start\n");
9701 g_print ("create_mainloop: done\n");
9704 gtk_widget_destroy (window);
9708 layout_draw_handler (GtkWidget *widget, cairo_t *cr)
9711 GdkWindow *bin_window;
9714 gint imin, imax, jmin, jmax;
9716 layout = GTK_LAYOUT (widget);
9717 bin_window = gtk_layout_get_bin_window (layout);
9719 if (!gtk_cairo_should_draw_window (cr, bin_window))
9722 gdk_window_get_position (bin_window, &x, &y);
9723 cairo_translate (cr, x, y);
9725 gdk_cairo_get_clip_rectangle (cr, &clip);
9727 imin = (clip.x) / 10;
9728 imax = (clip.x + clip.width + 9) / 10;
9730 jmin = (clip.y) / 10;
9731 jmax = (clip.y + clip.height + 9) / 10;
9733 for (i=imin; i<imax; i++)
9734 for (j=jmin; j<jmax; j++)
9736 cairo_rectangle (cr,
9745 void create_layout (GtkWidget *widget)
9747 GtkAdjustment *hadjustment, *vadjustment;
9749 static GtkWidget *window = NULL;
9750 GtkWidget *layout_widget;
9751 GtkWidget *scrolledwindow;
9760 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
9761 gtk_window_set_screen (GTK_WINDOW (window),
9762 gtk_widget_get_screen (widget));
9764 g_signal_connect (window, "destroy",
9765 G_CALLBACK (gtk_widget_destroyed),
9768 gtk_window_set_title (GTK_WINDOW (window), "Layout");
9769 gtk_widget_set_size_request (window, 200, 200);
9771 scrolledwindow = gtk_scrolled_window_new (NULL, NULL);
9772 gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolledwindow),
9774 gtk_scrolled_window_set_placement (GTK_SCROLLED_WINDOW (scrolledwindow),
9775 GTK_CORNER_TOP_RIGHT);
9777 gtk_container_add (GTK_CONTAINER (window), scrolledwindow);
9779 layout_widget = gtk_layout_new (NULL, NULL);
9780 layout = GTK_LAYOUT (layout_widget);
9781 gtk_container_add (GTK_CONTAINER (scrolledwindow), layout_widget);
9783 /* We set step sizes here since GtkLayout does not set
9786 hadjustment = gtk_layout_get_hadjustment (layout);
9787 vadjustment = gtk_layout_get_vadjustment (layout);
9788 gtk_adjustment_set_step_increment (hadjustment, 10.0);
9789 gtk_adjustment_set_step_increment (vadjustment, 10.0);
9790 gtk_layout_set_hadjustment (layout, hadjustment);
9791 gtk_layout_set_vadjustment (layout, vadjustment);
9793 gtk_widget_set_events (layout_widget, GDK_EXPOSURE_MASK);
9794 g_signal_connect (layout, "draw",
9795 G_CALLBACK (layout_draw_handler), NULL);
9797 gtk_layout_set_size (layout, 1600, 128000);
9799 for (i=0 ; i < 16 ; i++)
9800 for (j=0 ; j < 16 ; j++)
9802 sprintf(buf, "Button %d, %d", i, j);
9804 button = gtk_button_new_with_label (buf);
9806 button = gtk_label_new (buf);
9808 gtk_layout_put (layout, button, j*100, i*100);
9811 for (i=16; i < 1280; i++)
9813 sprintf(buf, "Button %d, %d", i, 0);
9815 button = gtk_button_new_with_label (buf);
9817 button = gtk_label_new (buf);
9819 gtk_layout_put (layout, button, 0, i*100);
9823 if (!gtk_widget_get_visible (window))
9824 gtk_widget_show_all (window);
9826 gtk_widget_destroy (window);
9830 create_styles (GtkWidget *widget)
9832 static GtkWidget *window = NULL;
9833 GtkWidget *content_area, *action_area;
9838 static GdkColor red = { 0, 0xffff, 0, 0 };
9839 static GdkColor green = { 0, 0, 0xffff, 0 };
9840 static GdkColor blue = { 0, 0, 0, 0xffff };
9841 static GdkColor yellow = { 0, 0xffff, 0xffff, 0 };
9842 static GdkColor cyan = { 0, 0 , 0xffff, 0xffff };
9843 PangoFontDescription *font_desc;
9845 GtkRcStyle *rc_style;
9849 window = gtk_dialog_new ();
9850 gtk_window_set_screen (GTK_WINDOW (window),
9851 gtk_widget_get_screen (widget));
9853 g_signal_connect (window, "destroy",
9854 G_CALLBACK (gtk_widget_destroyed),
9857 content_area = gtk_dialog_get_content_area (GTK_DIALOG (window));
9858 action_area = gtk_dialog_get_action_area (GTK_DIALOG (window));
9860 button = gtk_button_new_with_label ("Close");
9861 g_signal_connect_swapped (button, "clicked",
9862 G_CALLBACK (gtk_widget_destroy),
9864 gtk_widget_set_can_default (button, TRUE);
9865 gtk_box_pack_start (GTK_BOX (action_area), button, TRUE, TRUE, 0);
9866 gtk_widget_show (button);
9868 vbox = gtk_vbox_new (FALSE, 5);
9869 gtk_container_set_border_width (GTK_CONTAINER (vbox), 10);
9870 gtk_box_pack_start (GTK_BOX (content_area), vbox, FALSE, FALSE, 0);
9872 label = gtk_label_new ("Font:");
9873 gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
9874 gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
9876 font_desc = pango_font_description_from_string ("Helvetica,Sans Oblique 18");
9878 button = gtk_button_new_with_label ("Some Text");
9879 gtk_widget_modify_font (gtk_bin_get_child (GTK_BIN (button)),
9881 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
9883 label = gtk_label_new ("Foreground:");
9884 gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
9885 gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
9887 button = gtk_button_new_with_label ("Some Text");
9888 gtk_widget_modify_fg (gtk_bin_get_child (GTK_BIN (button)),
9889 GTK_STATE_NORMAL, &red);
9890 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
9892 label = gtk_label_new ("Background:");
9893 gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
9894 gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
9896 button = gtk_button_new_with_label ("Some Text");
9897 gtk_widget_modify_bg (button, GTK_STATE_NORMAL, &green);
9898 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
9900 label = gtk_label_new ("Text:");
9901 gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
9902 gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
9904 entry = gtk_entry_new ();
9905 gtk_entry_set_text (GTK_ENTRY (entry), "Some Text");
9906 gtk_widget_modify_text (entry, GTK_STATE_NORMAL, &blue);
9907 gtk_box_pack_start (GTK_BOX (vbox), entry, FALSE, FALSE, 0);
9909 label = gtk_label_new ("Base:");
9910 gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
9911 gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
9913 entry = gtk_entry_new ();
9914 gtk_entry_set_text (GTK_ENTRY (entry), "Some Text");
9915 gtk_widget_modify_base (entry, GTK_STATE_NORMAL, &yellow);
9916 gtk_box_pack_start (GTK_BOX (vbox), entry, FALSE, FALSE, 0);
9918 label = gtk_label_new ("Cursor:");
9919 gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
9920 gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
9922 entry = gtk_entry_new ();
9923 gtk_entry_set_text (GTK_ENTRY (entry), "Some Text");
9924 gtk_widget_modify_cursor (entry, &red, &red);
9925 gtk_box_pack_start (GTK_BOX (vbox), entry, FALSE, FALSE, 0);
9927 label = gtk_label_new ("Multiple:");
9928 gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
9929 gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
9931 button = gtk_button_new_with_label ("Some Text");
9933 rc_style = gtk_rc_style_new ();
9935 rc_style->font_desc = pango_font_description_copy (font_desc);
9936 rc_style->color_flags[GTK_STATE_NORMAL] = GTK_RC_FG | GTK_RC_BG;
9937 rc_style->color_flags[GTK_STATE_PRELIGHT] = GTK_RC_FG | GTK_RC_BG;
9938 rc_style->color_flags[GTK_STATE_ACTIVE] = GTK_RC_FG | GTK_RC_BG;
9939 rc_style->fg[GTK_STATE_NORMAL] = yellow;
9940 rc_style->bg[GTK_STATE_NORMAL] = blue;
9941 rc_style->fg[GTK_STATE_PRELIGHT] = blue;
9942 rc_style->bg[GTK_STATE_PRELIGHT] = yellow;
9943 rc_style->fg[GTK_STATE_ACTIVE] = red;
9944 rc_style->bg[GTK_STATE_ACTIVE] = cyan;
9945 rc_style->xthickness = 5;
9946 rc_style->ythickness = 5;
9948 gtk_widget_modify_style (button, rc_style);
9949 gtk_widget_modify_style (gtk_bin_get_child (GTK_BIN (button)), rc_style);
9951 g_object_unref (rc_style);
9953 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
9956 if (!gtk_widget_get_visible (window))
9957 gtk_widget_show_all (window);
9959 gtk_widget_destroy (window);
9963 * Main Window and Exit
9967 do_exit (GtkWidget *widget, GtkWidget *window)
9969 gtk_widget_destroy (window);
9975 void (*func) (GtkWidget *widget);
9976 gboolean do_not_benchmark;
9979 { "alpha window", create_alpha_window },
9980 { "big windows", create_big_windows },
9981 { "button box", create_button_box },
9982 { "buttons", create_buttons },
9983 { "check buttons", create_check_buttons },
9984 { "color selection", create_color_selection },
9985 { "composited window", create_composited_window },
9986 { "cursors", create_cursors },
9987 { "dialog", create_dialog },
9988 { "display & screen", create_display_screen, TRUE },
9989 { "entry", create_entry },
9990 { "event box", create_event_box },
9991 { "event watcher", create_event_watcher },
9992 { "expander", create_expander },
9993 { "flipping", create_flipping },
9994 { "focus", create_focus },
9995 { "font selection", create_font_selection },
9996 { "handle box", create_handle_box },
9997 { "image", create_image },
9998 { "key lookup", create_key_lookup },
9999 { "labels", create_labels },
10000 { "layout", create_layout },
10001 { "menus", create_menus },
10002 { "message dialog", create_message_dialog },
10003 { "modal window", create_modal_window, TRUE },
10004 { "notebook", create_notebook },
10005 { "panes", create_panes },
10006 { "paned keyboard", create_paned_keyboard_navigation },
10007 { "pixbuf", create_pixbuf },
10008 { "progress bar", create_progress_bar },
10009 { "properties", create_properties },
10010 { "radio buttons", create_radio_buttons },
10011 { "range controls", create_range_controls },
10012 { "rc file", create_rc_file },
10013 { "reparent", create_reparent },
10014 { "resize grips", create_resize_grips },
10015 { "rotated label", create_rotated_label },
10016 { "rotated text", create_rotated_text },
10017 { "rulers", create_rulers },
10018 { "saved position", create_saved_position },
10019 { "scrolled windows", create_scrolled_windows },
10020 { "shapes", create_shapes },
10021 { "size groups", create_size_groups },
10022 { "snapshot", create_snapshot },
10023 { "spinbutton", create_spins },
10024 { "statusbar", create_statusbar },
10025 { "styles", create_styles },
10026 { "test idle", create_idle_test },
10027 { "test mainloop", create_mainloop, TRUE },
10028 { "test scrolling", create_scroll_test },
10029 { "test selection", create_selection_test },
10030 { "test timeout", create_timeout_test },
10031 { "toggle buttons", create_toggle_buttons },
10032 { "toolbar", create_toolbar },
10033 { "tooltips", create_tooltips },
10034 { "WM hints", create_wmhints },
10035 { "window sizing", create_window_sizing },
10036 { "window states", create_window_states }
10038 int nbuttons = sizeof (buttons) / sizeof (buttons[0]);
10041 create_main_window (void)
10046 GtkWidget *scrolled_window;
10050 GtkWidget *separator;
10051 GdkGeometry geometry;
10054 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
10055 gtk_widget_set_name (window, "main window");
10056 gtk_window_move (GTK_WINDOW (window), 50, 20);
10057 gtk_window_set_default_size (GTK_WINDOW (window), -1, 400);
10059 geometry.min_width = -1;
10060 geometry.min_height = -1;
10061 geometry.max_width = -1;
10062 geometry.max_height = G_MAXSHORT;
10063 gtk_window_set_geometry_hints (GTK_WINDOW (window), NULL,
10065 GDK_HINT_MIN_SIZE | GDK_HINT_MAX_SIZE);
10067 g_signal_connect (window, "destroy",
10068 G_CALLBACK (gtk_main_quit),
10070 g_signal_connect (window, "delete-event",
10071 G_CALLBACK (gtk_false),
10074 box1 = gtk_vbox_new (FALSE, 0);
10075 gtk_container_add (GTK_CONTAINER (window), box1);
10077 if (gtk_micro_version > 0)
10080 gtk_get_major_version (),
10081 gtk_get_minor_version (),
10082 gtk_get_micro_version ());
10086 gtk_get_major_version (),
10087 gtk_get_minor_version ());
10089 label = gtk_label_new (buffer);
10090 gtk_box_pack_start (GTK_BOX (box1), label, FALSE, FALSE, 0);
10091 gtk_widget_set_name (label, "testgtk-version-label");
10093 scrolled_window = gtk_scrolled_window_new (NULL, NULL);
10094 gtk_container_set_border_width (GTK_CONTAINER (scrolled_window), 10);
10095 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
10097 GTK_POLICY_AUTOMATIC);
10098 gtk_box_pack_start (GTK_BOX (box1), scrolled_window, TRUE, TRUE, 0);
10100 box2 = gtk_vbox_new (FALSE, 0);
10101 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
10102 gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scrolled_window), box2);
10103 gtk_container_set_focus_vadjustment (GTK_CONTAINER (box2),
10104 gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (scrolled_window)));
10105 gtk_widget_show (box2);
10107 for (i = 0; i < nbuttons; i++)
10109 button = gtk_button_new_with_label (buttons[i].label);
10110 if (buttons[i].func)
10111 g_signal_connect (button,
10113 G_CALLBACK(buttons[i].func),
10116 gtk_widget_set_sensitive (button, FALSE);
10117 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
10120 separator = gtk_hseparator_new ();
10121 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
10123 box2 = gtk_vbox_new (FALSE, 10);
10124 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
10125 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
10127 button = gtk_button_new_with_mnemonic ("_Close");
10128 g_signal_connect (button, "clicked",
10129 G_CALLBACK (do_exit),
10131 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
10132 gtk_widget_set_can_default (button, TRUE);
10133 gtk_widget_grab_default (button);
10135 gtk_widget_show_all (window);
10141 if (g_file_test ("../gdk-pixbuf/libpixbufloader-pnm.la",
10142 G_FILE_TEST_EXISTS))
10144 g_setenv ("GDK_PIXBUF_MODULE_FILE", "../gdk-pixbuf/loaders.cache", TRUE);
10145 g_setenv ("GTK_IM_MODULE_FILE", "../modules/input/immodules.cache", TRUE);
10150 pad (const char *str, int to)
10152 static char buf[256];
10153 int len = strlen (str);
10156 for (i = 0; i < to; i++)
10161 memcpy (buf, str, len);
10167 bench_iteration (GtkWidget *widget, void (* fn) (GtkWidget *widget))
10169 fn (widget); /* on */
10170 while (g_main_context_iteration (NULL, FALSE));
10171 fn (widget); /* off */
10172 while (g_main_context_iteration (NULL, FALSE));
10176 do_real_bench (GtkWidget *widget, void (* fn) (GtkWidget *widget), char *name, int num)
10182 static gboolean printed_headers = FALSE;
10184 if (!printed_headers) {
10185 g_print ("Test Iters First Other\n");
10186 g_print ("-------------------- ----- ---------- ----------\n");
10187 printed_headers = TRUE;
10190 g_get_current_time (&tv0);
10191 bench_iteration (widget, fn);
10192 g_get_current_time (&tv1);
10194 dt_first = ((double)tv1.tv_sec - tv0.tv_sec) * 1000.0
10195 + (tv1.tv_usec - tv0.tv_usec) / 1000.0;
10197 g_get_current_time (&tv0);
10198 for (n = 0; n < num - 1; n++)
10199 bench_iteration (widget, fn);
10200 g_get_current_time (&tv1);
10201 dt = ((double)tv1.tv_sec - tv0.tv_sec) * 1000.0
10202 + (tv1.tv_usec - tv0.tv_usec) / 1000.0;
10204 g_print ("%s %5d ", pad (name, 20), num);
10206 g_print ("%10.1f %10.1f\n", dt_first, dt/(num-1));
10208 g_print ("%10.1f\n", dt_first);
10212 do_bench (char* what, int num)
10216 void (* fn) (GtkWidget *widget);
10218 widget = gtk_window_new (GTK_WINDOW_TOPLEVEL);
10220 if (g_ascii_strcasecmp (what, "ALL") == 0)
10222 for (i = 0; i < nbuttons; i++)
10224 if (!buttons[i].do_not_benchmark)
10225 do_real_bench (widget, buttons[i].func, buttons[i].label, num);
10232 for (i = 0; i < nbuttons; i++)
10234 if (strcmp (buttons[i].label, what) == 0)
10236 fn = buttons[i].func;
10242 g_print ("Can't bench: \"%s\" not found.\n", what);
10244 do_real_bench (widget, fn, buttons[i].label, num);
10251 fprintf (stderr, "Usage: testgtk [--bench ALL|<bench>[:<count>]]\n");
10256 main (int argc, char *argv[])
10258 GtkBindingSet *binding_set;
10260 gboolean done_benchmarks = FALSE;
10262 srand (time (NULL));
10266 /* Check to see if we are being run from the correct
10269 if (file_exists ("testgtkrc"))
10270 gtk_rc_add_default_file ("testgtkrc");
10271 else if (file_exists ("tests/testgtkrc"))
10272 gtk_rc_add_default_file ("tests/testgtkrc");
10274 g_warning ("Couldn't find file \"testgtkrc\".");
10276 g_set_application_name ("GTK+ Test Program");
10278 gtk_init (&argc, &argv);
10280 gtk_accelerator_set_default_mod_mask (GDK_SHIFT_MASK |
10289 for (i = 1; i < argc; i++)
10291 if (strncmp (argv[i], "--bench", strlen("--bench")) == 0)
10298 nextarg = strchr (argv[i], '=');
10309 count = strchr (nextarg, ':');
10312 what = g_strndup (nextarg, count - nextarg);
10314 num = atoi (count);
10319 what = g_strdup (nextarg);
10321 do_bench (what, num ? num : 1);
10322 done_benchmarks = TRUE;
10327 if (done_benchmarks)
10332 binding_set = gtk_binding_set_by_class (g_type_class_ref (GTK_TYPE_WIDGET));
10333 gtk_binding_entry_add_signal (binding_set,
10334 '9', GDK_CONTROL_MASK | GDK_RELEASE_MASK,
10337 G_TYPE_STRING, "GtkWidgetClass <ctrl><release>9 test");
10339 /* We use gtk_rc_parse_string() here so we can make sure it works across theme
10343 gtk_rc_parse_string ("style \"testgtk-version-label\" { "
10344 " fg[NORMAL] = \"#ff0000\"\n"
10345 " font = \"Sans 18\"\n"
10347 "widget \"*.testgtk-version-label\" style \"testgtk-version-label\"");
10349 create_main_window ();
10355 while (g_main_context_pending (NULL))
10356 g_main_context_iteration (NULL, FALSE);
10359 while (g_main_context_pending (NULL))
10360 g_main_context_iteration (NULL, FALSE);