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_new_text ();
113 g_signal_connect (omenu, "changed",
114 G_CALLBACK (func), data);
116 for (i = 0; i < num_items; i++)
117 gtk_combo_box_append_text (GTK_COMBO_BOX (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_window_set_visual (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 = (GtkAdjustment *)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 = (GtkAdjustment *)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);
1650 #define GRID_SIZE 20
1651 #define DEFAULT_GEOMETRY "10x10"
1654 gridded_geometry_draw (GtkWidget *widget,
1659 int i, j, width, height;
1661 style = gtk_widget_get_style (widget);
1662 state = gtk_widget_get_state (widget);
1663 width = gtk_widget_get_allocated_width (widget);
1664 height = gtk_widget_get_allocated_height (widget);
1666 gdk_cairo_set_source_color (cr, &style->base[state]);
1669 for (i = 0 ; i * GRID_SIZE < width; i++)
1670 for (j = 0 ; j * GRID_SIZE < height; j++)
1672 if ((i + j) % 2 == 0)
1673 cairo_rectangle (cr, i * GRID_SIZE, j * GRID_SIZE, GRID_SIZE, GRID_SIZE);
1676 gdk_cairo_set_source_color (cr, &style->text[state]);
1683 gridded_geometry_subresponse (GtkDialog *dialog,
1685 gchar *geometry_string)
1687 if (response_id == GTK_RESPONSE_NONE)
1689 gtk_widget_destroy (GTK_WIDGET (dialog));
1693 if (!gtk_window_parse_geometry (GTK_WINDOW (dialog), geometry_string))
1695 g_print ("Can't parse geometry string %s\n", geometry_string);
1696 gtk_window_parse_geometry (GTK_WINDOW (dialog), DEFAULT_GEOMETRY);
1702 gridded_geometry_response (GtkDialog *dialog,
1706 if (response_id == GTK_RESPONSE_NONE)
1708 gtk_widget_destroy (GTK_WIDGET (dialog));
1712 gchar *geometry_string = g_strdup (gtk_entry_get_text (entry));
1713 gchar *title = g_strdup_printf ("Gridded window at: %s", geometry_string);
1714 GtkWidget *content_area;
1716 GtkWidget *drawing_area;
1718 GdkGeometry geometry;
1720 window = gtk_dialog_new_with_buttons (title,
1723 GTK_STOCK_CLOSE, GTK_RESPONSE_NONE,
1726 gtk_window_set_screen (GTK_WINDOW (window),
1727 gtk_widget_get_screen (GTK_WIDGET (dialog)));
1729 g_signal_connect (window, "response",
1730 G_CALLBACK (gridded_geometry_subresponse), geometry_string);
1732 content_area = gtk_dialog_get_content_area (GTK_DIALOG (window));
1734 box = gtk_vbox_new (FALSE, 0);
1735 gtk_box_pack_start (GTK_BOX (content_area), box, TRUE, TRUE, 0);
1737 gtk_container_set_border_width (GTK_CONTAINER (box), 7);
1739 drawing_area = gtk_drawing_area_new ();
1740 g_signal_connect (drawing_area, "draw",
1741 G_CALLBACK (gridded_geometry_draw), NULL);
1742 gtk_box_pack_start (GTK_BOX (box), drawing_area, TRUE, TRUE, 0);
1744 /* Gross hack to work around bug 68668... if we set the size request
1745 * large enough, then the current
1747 * request_of_window - request_of_geometry_widget
1749 * method of getting the base size works more or less works.
1751 gtk_widget_set_size_request (drawing_area, 2000, 2000);
1753 geometry.base_width = 0;
1754 geometry.base_height = 0;
1755 geometry.min_width = 2 * GRID_SIZE;
1756 geometry.min_height = 2 * GRID_SIZE;
1757 geometry.width_inc = GRID_SIZE;
1758 geometry.height_inc = GRID_SIZE;
1760 gtk_window_set_geometry_hints (GTK_WINDOW (window), drawing_area,
1762 GDK_HINT_BASE_SIZE | GDK_HINT_MIN_SIZE | GDK_HINT_RESIZE_INC);
1764 if (!gtk_window_parse_geometry (GTK_WINDOW (window), geometry_string))
1766 g_print ("Can't parse geometry string %s\n", geometry_string);
1767 gtk_window_parse_geometry (GTK_WINDOW (window), DEFAULT_GEOMETRY);
1770 gtk_widget_show_all (window);
1775 create_gridded_geometry (GtkWidget *widget)
1777 static GtkWidget *window = NULL;
1778 gpointer window_ptr;
1779 GtkWidget *content_area;
1785 window = gtk_dialog_new_with_buttons ("Gridded Geometry",
1788 GTK_STOCK_CLOSE, GTK_RESPONSE_NONE,
1791 gtk_window_set_screen (GTK_WINDOW (window),
1792 gtk_widget_get_screen (widget));
1794 content_area = gtk_dialog_get_content_area (GTK_DIALOG (window));
1796 label = gtk_label_new ("Geometry string:");
1797 gtk_box_pack_start (GTK_BOX (content_area), label, FALSE, FALSE, 0);
1799 entry = gtk_entry_new ();
1800 gtk_entry_set_text (GTK_ENTRY (entry), DEFAULT_GEOMETRY);
1801 gtk_box_pack_start (GTK_BOX (content_area), entry, FALSE, FALSE, 0);
1803 g_signal_connect (window, "response",
1804 G_CALLBACK (gridded_geometry_response), entry);
1805 window_ptr = &window;
1806 g_object_add_weak_pointer (G_OBJECT (window), window_ptr);
1808 gtk_widget_show_all (window);
1811 gtk_widget_destroy (window);
1819 handle_box_child_signal (GtkHandleBox *hb,
1821 const gchar *action)
1823 printf ("%s: child <%s> %sed\n",
1824 g_type_name (G_OBJECT_TYPE (hb)),
1825 g_type_name (G_OBJECT_TYPE (child)),
1830 create_handle_box (GtkWidget *widget)
1832 static GtkWidget* window = NULL;
1833 GtkWidget *handle_box;
1834 GtkWidget *handle_box2;
1839 GtkWidget *separator;
1843 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
1845 gtk_window_set_screen (GTK_WINDOW (window),
1846 gtk_widget_get_screen (widget));
1847 gtk_window_set_modal (GTK_WINDOW (window), FALSE);
1848 gtk_window_set_title (GTK_WINDOW (window),
1850 gtk_window_set_resizable (GTK_WINDOW (window), TRUE);
1852 g_signal_connect (window, "destroy",
1853 G_CALLBACK (gtk_widget_destroyed),
1856 gtk_container_set_border_width (GTK_CONTAINER (window), 20);
1858 vbox = gtk_vbox_new (FALSE, 0);
1859 gtk_container_add (GTK_CONTAINER (window), vbox);
1860 gtk_widget_show (vbox);
1862 label = gtk_label_new ("Above");
1863 gtk_container_add (GTK_CONTAINER (vbox), label);
1864 gtk_widget_show (label);
1866 separator = gtk_hseparator_new ();
1867 gtk_container_add (GTK_CONTAINER (vbox), separator);
1868 gtk_widget_show (separator);
1870 hbox = gtk_hbox_new (FALSE, 10);
1871 gtk_container_add (GTK_CONTAINER (vbox), hbox);
1872 gtk_widget_show (hbox);
1874 separator = gtk_hseparator_new ();
1875 gtk_container_add (GTK_CONTAINER (vbox), separator);
1876 gtk_widget_show (separator);
1878 label = gtk_label_new ("Below");
1879 gtk_container_add (GTK_CONTAINER (vbox), label);
1880 gtk_widget_show (label);
1882 handle_box = gtk_handle_box_new ();
1883 gtk_box_pack_start (GTK_BOX (hbox), handle_box, FALSE, FALSE, 0);
1884 g_signal_connect (handle_box,
1886 G_CALLBACK (handle_box_child_signal),
1888 g_signal_connect (handle_box,
1890 G_CALLBACK (handle_box_child_signal),
1892 gtk_widget_show (handle_box);
1894 toolbar = make_toolbar (window);
1896 gtk_container_add (GTK_CONTAINER (handle_box), toolbar);
1897 gtk_widget_show (toolbar);
1899 handle_box = gtk_handle_box_new ();
1900 gtk_box_pack_start (GTK_BOX (hbox), handle_box, FALSE, FALSE, 0);
1901 g_signal_connect (handle_box,
1903 G_CALLBACK (handle_box_child_signal),
1905 g_signal_connect (handle_box,
1907 G_CALLBACK (handle_box_child_signal),
1909 gtk_widget_show (handle_box);
1911 handle_box2 = gtk_handle_box_new ();
1912 gtk_container_add (GTK_CONTAINER (handle_box), handle_box2);
1913 g_signal_connect (handle_box2,
1915 G_CALLBACK (handle_box_child_signal),
1917 g_signal_connect (handle_box2,
1919 G_CALLBACK (handle_box_child_signal),
1921 gtk_widget_show (handle_box2);
1923 hbox = g_object_new (GTK_TYPE_HBOX, "visible", 1, "parent", handle_box2, NULL);
1924 label = gtk_label_new ("Fooo!");
1925 gtk_container_add (GTK_CONTAINER (hbox), label);
1926 gtk_widget_show (label);
1927 g_object_new (GTK_TYPE_ARROW, "visible", 1, "parent", hbox, NULL);
1930 if (!gtk_widget_get_visible (window))
1931 gtk_widget_show (window);
1933 gtk_widget_destroy (window);
1940 sensitivity_toggled (GtkWidget *toggle,
1943 gtk_widget_set_sensitive (widget, GTK_TOGGLE_BUTTON (toggle)->active);
1947 create_sensitivity_control (GtkWidget *widget)
1951 button = gtk_toggle_button_new_with_label ("Sensitive");
1953 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button),
1954 gtk_widget_is_sensitive (widget));
1956 g_signal_connect (button,
1958 G_CALLBACK (sensitivity_toggled),
1961 gtk_widget_show_all (button);
1967 set_selectable_recursive (GtkWidget *widget,
1970 if (GTK_IS_CONTAINER (widget))
1975 children = gtk_container_get_children (GTK_CONTAINER (widget));
1979 set_selectable_recursive (tmp->data, setting);
1983 g_list_free (children);
1985 else if (GTK_IS_LABEL (widget))
1987 gtk_label_set_selectable (GTK_LABEL (widget), setting);
1992 selectable_toggled (GtkWidget *toggle,
1995 set_selectable_recursive (widget,
1996 GTK_TOGGLE_BUTTON (toggle)->active);
2000 create_selectable_control (GtkWidget *widget)
2004 button = gtk_toggle_button_new_with_label ("Selectable");
2006 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button),
2009 g_signal_connect (button,
2011 G_CALLBACK (selectable_toggled),
2014 gtk_widget_show_all (button);
2020 dialog_response (GtkWidget *dialog, gint response_id, GtkLabel *label)
2024 gtk_widget_destroy (dialog);
2026 text = "Some <a href=\"http://en.wikipedia.org/wiki/Text\" title=\"plain text\">text</a> may be marked up\n"
2027 "as hyperlinks, which can be clicked\n"
2028 "or activated via <a href=\"keynav\">keynav</a>.\n"
2029 "The links remain the same.";
2030 gtk_label_set_markup (label, text);
2034 activate_link (GtkWidget *label, const gchar *uri, gpointer data)
2036 if (g_strcmp0 (uri, "keynav") == 0)
2040 dialog = gtk_message_dialog_new_with_markup (GTK_WINDOW (gtk_widget_get_toplevel (label)),
2041 GTK_DIALOG_DESTROY_WITH_PARENT,
2044 "The term <i>keynav</i> is a shorthand for "
2045 "keyboard navigation and refers to the process of using a program "
2046 "(exclusively) via keyboard input.");
2048 gtk_window_present (GTK_WINDOW (dialog));
2050 g_signal_connect (dialog, "response", G_CALLBACK (dialog_response), label);
2058 void create_labels (GtkWidget *widget)
2060 static GtkWidget *window = NULL;
2069 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
2071 gtk_window_set_screen (GTK_WINDOW (window),
2072 gtk_widget_get_screen (widget));
2074 g_signal_connect (window, "destroy",
2075 G_CALLBACK (gtk_widget_destroyed),
2078 gtk_window_set_title (GTK_WINDOW (window), "Label");
2080 vbox = gtk_vbox_new (FALSE, 5);
2082 hbox = gtk_hbox_new (FALSE, 5);
2083 gtk_container_add (GTK_CONTAINER (window), vbox);
2085 gtk_box_pack_end (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
2087 button = create_sensitivity_control (hbox);
2089 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
2091 button = create_selectable_control (hbox);
2093 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
2095 vbox = gtk_vbox_new (FALSE, 5);
2097 gtk_box_pack_start (GTK_BOX (hbox), vbox, FALSE, FALSE, 0);
2098 gtk_container_set_border_width (GTK_CONTAINER (window), 5);
2100 frame = gtk_frame_new ("Normal Label");
2101 label = gtk_label_new ("This is a Normal label");
2102 gtk_label_set_ellipsize (GTK_LABEL (label), PANGO_ELLIPSIZE_START);
2103 gtk_container_add (GTK_CONTAINER (frame), label);
2104 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
2106 frame = gtk_frame_new ("Multi-line Label");
2107 label = gtk_label_new ("This is a Multi-line label.\nSecond line\nThird line");
2108 gtk_label_set_ellipsize (GTK_LABEL (label), PANGO_ELLIPSIZE_END);
2109 gtk_container_add (GTK_CONTAINER (frame), label);
2110 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
2112 frame = gtk_frame_new ("Left Justified Label");
2113 label = gtk_label_new ("This is a Left-Justified\nMulti-line label.\nThird line");
2114 gtk_label_set_ellipsize (GTK_LABEL (label), PANGO_ELLIPSIZE_MIDDLE);
2115 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
2116 gtk_container_add (GTK_CONTAINER (frame), label);
2117 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
2119 frame = gtk_frame_new ("Right Justified Label");
2120 gtk_label_set_ellipsize (GTK_LABEL (label), PANGO_ELLIPSIZE_START);
2121 label = gtk_label_new ("This is a Right-Justified\nMulti-line label.\nFourth line, (j/k)");
2122 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_RIGHT);
2123 gtk_container_add (GTK_CONTAINER (frame), label);
2124 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
2126 frame = gtk_frame_new ("Internationalized Label");
2127 label = gtk_label_new (NULL);
2128 gtk_label_set_markup (GTK_LABEL (label),
2129 "French (Fran\303\247ais) Bonjour, Salut\n"
2130 "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"
2131 "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"
2132 "Chinese (Simplified) <span lang=\"zh-cn\">\345\205\203\346\260\224 \345\274\200\345\217\221</span>\n"
2133 "Chinese (Traditional) <span lang=\"zh-tw\">\345\205\203\346\260\243 \351\226\213\347\231\274</span>\n"
2134 "Japanese <span lang=\"ja\">\345\205\203\346\260\227 \351\226\213\347\231\272</span>");
2135 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
2136 gtk_container_add (GTK_CONTAINER (frame), label);
2137 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
2139 frame = gtk_frame_new ("Bidirection Label");
2140 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"
2141 "\342\200\217Hebrew \327\251\327\234\327\225\327\235");
2142 gtk_container_add (GTK_CONTAINER (frame), label);
2143 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
2145 frame = gtk_frame_new ("Links in a label");
2146 label = gtk_label_new ("Some <a href=\"http://en.wikipedia.org/wiki/Text\" title=\"plain text\">text</a> may be marked up\n"
2147 "as hyperlinks, which can be clicked\n"
2148 "or activated via <a href=\"keynav\">keynav</a>");
2149 gtk_label_set_use_markup (GTK_LABEL (label), TRUE);
2150 gtk_container_add (GTK_CONTAINER (frame), label);
2151 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
2152 g_signal_connect (label, "activate-link", G_CALLBACK (activate_link), NULL);
2154 vbox = gtk_vbox_new (FALSE, 5);
2155 gtk_box_pack_start (GTK_BOX (hbox), vbox, FALSE, FALSE, 0);
2156 frame = gtk_frame_new ("Line wrapped label");
2157 label = gtk_label_new ("This is an example of a line-wrapped label. It should not be taking "\
2158 "up the entire "/* big space to test spacing */\
2159 "width allocated to it, but automatically wraps the words to fit. "\
2160 "The time has come, for all good men, to come to the aid of their party. "\
2161 "The sixth sheik's six sheep's sick.\n"\
2162 " It supports multiple paragraphs correctly, and correctly adds "\
2163 "many extra spaces. ");
2165 gtk_label_set_line_wrap (GTK_LABEL (label), TRUE);
2166 gtk_container_add (GTK_CONTAINER (frame), label);
2167 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
2169 frame = gtk_frame_new ("Filled, wrapped label");
2170 label = gtk_label_new ("This is an example of a line-wrapped, filled label. It should be taking "\
2171 "up the entire width allocated to it. Here is a seneance to prove "\
2172 "my point. Here is another sentence. "\
2173 "Here comes the sun, do de do de do.\n"\
2174 " This is a new paragraph.\n"\
2175 " This is another newer, longer, better paragraph. It is coming to an end, "\
2177 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_FILL);
2178 gtk_label_set_line_wrap (GTK_LABEL (label), TRUE);
2179 gtk_container_add (GTK_CONTAINER (frame), label);
2180 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
2182 frame = gtk_frame_new ("Underlined label");
2183 label = gtk_label_new ("This label is underlined!\n"
2184 "This one is underlined (\343\201\223\343\202\223\343\201\253\343\201\241\343\201\257) in quite a funky fashion");
2185 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
2186 gtk_label_set_pattern (GTK_LABEL (label), "_________________________ _ _________ _ _____ _ __ __ ___ ____ _____");
2187 gtk_container_add (GTK_CONTAINER (frame), label);
2188 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
2190 frame = gtk_frame_new ("Markup label");
2191 label = gtk_label_new (NULL);
2193 /* There's also a gtk_label_set_markup() without accel if you
2194 * don't have an accelerator key
2196 gtk_label_set_markup_with_mnemonic (GTK_LABEL (label),
2197 "This <span foreground=\"blue\" background=\"orange\">label</span> has "
2198 "<b>markup</b> _such as "
2199 "<big><i>Big Italics</i></big>\n"
2200 "<tt>Monospace font</tt>\n"
2201 "<u>Underline!</u>\n"
2203 "<span foreground=\"green\" background=\"red\">Ugly colors</span>\n"
2204 "and nothing on this line,\n"
2207 "or even on this one\n"
2208 "la <big>la <big>la <big>la <big>la</big></big></big></big>\n"
2209 "but this _word is <span foreground=\"purple\"><big>purple</big></span>\n"
2210 "<span underline=\"double\">We like <sup>superscript</sup> and <sub>subscript</sub> too</span>");
2212 g_assert (gtk_label_get_mnemonic_keyval (GTK_LABEL (label)) == GDK_KEY_s);
2214 gtk_container_add (GTK_CONTAINER (frame), label);
2215 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
2218 if (!gtk_widget_get_visible (window))
2219 gtk_widget_show_all (window);
2221 gtk_widget_destroy (window);
2225 on_angle_scale_changed (GtkRange *range,
2228 gtk_label_set_angle (GTK_LABEL (label), gtk_range_get_value (range));
2232 create_rotated_label (GtkWidget *widget)
2234 static GtkWidget *window = NULL;
2235 GtkWidget *content_area;
2239 GtkWidget *scale_label;
2240 GtkWidget *scale_hbox;
2244 window = gtk_dialog_new_with_buttons ("Rotated Label",
2245 GTK_WINDOW (gtk_widget_get_toplevel (widget)), 0,
2246 GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE,
2249 gtk_window_set_resizable (GTK_WINDOW (window), TRUE);
2251 gtk_window_set_screen (GTK_WINDOW (window),
2252 gtk_widget_get_screen (widget));
2254 g_signal_connect (window, "response",
2255 G_CALLBACK (gtk_object_destroy), NULL);
2256 g_signal_connect (window, "destroy",
2257 G_CALLBACK (gtk_widget_destroyed), &window);
2259 content_area = gtk_dialog_get_content_area (GTK_DIALOG (window));
2261 vbox = gtk_vbox_new (FALSE, 5);
2262 gtk_box_pack_start (GTK_BOX (content_area), vbox, TRUE, TRUE, 0);
2263 gtk_container_set_border_width (GTK_CONTAINER (vbox), 10);
2265 label = gtk_label_new (NULL);
2266 gtk_label_set_markup (GTK_LABEL (label), "Hello World\n<i>Rotate</i> <span underline='single' foreground='blue'>me</span>");
2267 gtk_box_pack_start (GTK_BOX (vbox), label, TRUE, TRUE, 0);
2269 scale_hbox = gtk_hbox_new (FALSE, 0);
2270 gtk_box_pack_start (GTK_BOX (vbox), scale_hbox, FALSE, FALSE, 0);
2272 scale_label = gtk_label_new (NULL);
2273 gtk_label_set_markup (GTK_LABEL (scale_label), "<i>Angle: </i>");
2274 gtk_box_pack_start (GTK_BOX (scale_hbox), scale_label, FALSE, FALSE, 0);
2276 hscale = gtk_hscale_new_with_range (0, 360, 5);
2277 g_signal_connect (hscale, "value-changed",
2278 G_CALLBACK (on_angle_scale_changed), label);
2280 gtk_range_set_value (GTK_RANGE (hscale), 45);
2281 gtk_widget_set_size_request (hscale, 200, -1);
2282 gtk_box_pack_start (GTK_BOX (scale_hbox), hscale, TRUE, TRUE, 0);
2285 if (!gtk_widget_get_visible (window))
2286 gtk_widget_show_all (window);
2288 gtk_widget_destroy (window);
2291 #define DEFAULT_TEXT_RADIUS 200
2294 on_rotated_text_unrealize (GtkWidget *widget)
2296 g_object_set_data (G_OBJECT (widget), "text-gc", NULL);
2300 on_rotated_text_draw (GtkWidget *widget,
2302 GdkPixbuf *tile_pixbuf)
2304 static const gchar *words[] = { "The", "grand", "old", "Duke", "of", "York",
2305 "had", "10,000", "men" };
2310 PangoLayout *layout;
2311 PangoContext *context;
2312 PangoFontDescription *desc;
2316 gdk_cairo_set_source_pixbuf (cr, tile_pixbuf, 0, 0);
2317 cairo_pattern_set_extend (cairo_get_source (cr), CAIRO_EXTEND_REPEAT);
2320 cairo_set_source_rgb (cr, 0, 0, 0);
2322 width = gtk_widget_get_allocated_width (widget);
2323 height = gtk_widget_get_allocated_height (widget);
2324 radius = MIN (width, height) / 2.;
2326 cairo_translate (cr,
2327 radius + (width - 2 * radius) / 2,
2328 radius + (height - 2 * radius) / 2);
2329 cairo_scale (cr, radius / DEFAULT_TEXT_RADIUS, radius / DEFAULT_TEXT_RADIUS);
2331 context = gtk_widget_get_pango_context (widget);
2332 layout = pango_layout_new (context);
2333 desc = pango_font_description_from_string ("Sans Bold 30");
2334 pango_layout_set_font_description (layout, desc);
2335 pango_font_description_free (desc);
2337 n_words = G_N_ELEMENTS (words);
2338 for (i = 0; i < n_words; i++)
2344 cairo_rotate (cr, 2 * G_PI * i / n_words);
2345 pango_cairo_update_layout (cr, layout);
2347 pango_layout_set_text (layout, words[i], -1);
2348 pango_layout_get_size (layout, &width, &height);
2350 cairo_move_to (cr, - width / 2 / PANGO_SCALE, - DEFAULT_TEXT_RADIUS);
2351 pango_cairo_show_layout (cr, layout);
2356 g_object_unref (layout);
2362 create_rotated_text (GtkWidget *widget)
2364 static GtkWidget *window = NULL;
2368 const GdkColor white = { 0, 0xffff, 0xffff, 0xffff };
2369 GtkRequisition requisition;
2370 GtkWidget *content_area;
2371 GtkWidget *drawing_area;
2372 GdkPixbuf *tile_pixbuf;
2374 window = gtk_dialog_new_with_buttons ("Rotated Text",
2375 GTK_WINDOW (gtk_widget_get_toplevel (widget)), 0,
2376 GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE,
2379 gtk_window_set_resizable (GTK_WINDOW (window), TRUE);
2381 gtk_window_set_screen (GTK_WINDOW (window),
2382 gtk_widget_get_screen (widget));
2384 g_signal_connect (window, "response",
2385 G_CALLBACK (gtk_object_destroy), NULL);
2386 g_signal_connect (window, "destroy",
2387 G_CALLBACK (gtk_widget_destroyed), &window);
2389 content_area = gtk_dialog_get_content_area (GTK_DIALOG (window));
2391 drawing_area = gtk_drawing_area_new ();
2392 gtk_box_pack_start (GTK_BOX (content_area), drawing_area, TRUE, TRUE, 0);
2393 gtk_widget_modify_bg (drawing_area, GTK_STATE_NORMAL, &white);
2395 tile_pixbuf = gdk_pixbuf_new_from_file ("marble.xpm", NULL);
2397 g_signal_connect (drawing_area, "draw",
2398 G_CALLBACK (on_rotated_text_draw), tile_pixbuf);
2399 g_signal_connect (drawing_area, "unrealize",
2400 G_CALLBACK (on_rotated_text_unrealize), NULL);
2402 gtk_widget_show_all (gtk_bin_get_child (GTK_BIN (window)));
2404 gtk_widget_set_size_request (drawing_area, DEFAULT_TEXT_RADIUS * 2, DEFAULT_TEXT_RADIUS * 2);
2405 gtk_size_request_get_size (GTK_SIZE_REQUEST (window),
2406 &requisition, NULL);
2407 gtk_widget_set_size_request (drawing_area, -1, -1);
2408 gtk_window_resize (GTK_WINDOW (window), requisition.width, requisition.height);
2411 if (!gtk_widget_get_visible (window))
2412 gtk_widget_show (window);
2414 gtk_widget_destroy (window);
2422 reparent_label (GtkWidget *widget,
2423 GtkWidget *new_parent)
2427 label = g_object_get_data (G_OBJECT (widget), "user_data");
2429 gtk_widget_reparent (label, new_parent);
2433 set_parent_signal (GtkWidget *child,
2434 GtkWidget *old_parent,
2439 parent = gtk_widget_get_parent (child);
2440 g_message ("set_parent for \"%s\": new parent: \"%s\", old parent: \"%s\", data: %d\n",
2441 g_type_name (G_OBJECT_TYPE (child)),
2442 parent ? g_type_name (G_OBJECT_TYPE (parent)) : "NULL",
2443 old_parent ? g_type_name (G_OBJECT_TYPE (old_parent)) : "NULL",
2444 GPOINTER_TO_INT (func_data));
2448 create_reparent (GtkWidget *widget)
2450 static GtkWidget *window = NULL;
2457 GtkWidget *separator;
2458 GtkWidget *event_box;
2462 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
2464 gtk_window_set_screen (GTK_WINDOW (window),
2465 gtk_widget_get_screen (widget));
2467 g_signal_connect (window, "destroy",
2468 G_CALLBACK (gtk_widget_destroyed),
2471 gtk_window_set_title (GTK_WINDOW (window), "reparent");
2472 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
2474 box1 = gtk_vbox_new (FALSE, 0);
2475 gtk_container_add (GTK_CONTAINER (window), box1);
2477 box2 = gtk_hbox_new (FALSE, 5);
2478 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
2479 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
2481 label = gtk_label_new ("Hello World");
2483 frame = gtk_frame_new ("Frame 1");
2484 gtk_box_pack_start (GTK_BOX (box2), frame, TRUE, TRUE, 0);
2486 box3 = gtk_vbox_new (FALSE, 5);
2487 gtk_container_set_border_width (GTK_CONTAINER (box3), 5);
2488 gtk_container_add (GTK_CONTAINER (frame), box3);
2490 button = gtk_button_new_with_label ("switch");
2491 g_object_set_data (G_OBJECT (button), "user_data", label);
2492 gtk_box_pack_start (GTK_BOX (box3), button, FALSE, TRUE, 0);
2494 event_box = gtk_event_box_new ();
2495 gtk_box_pack_start (GTK_BOX (box3), event_box, FALSE, TRUE, 0);
2496 gtk_container_add (GTK_CONTAINER (event_box), label);
2498 g_signal_connect (button, "clicked",
2499 G_CALLBACK (reparent_label),
2502 g_signal_connect (label, "parent_set",
2503 G_CALLBACK (set_parent_signal),
2504 GINT_TO_POINTER (42));
2506 frame = gtk_frame_new ("Frame 2");
2507 gtk_box_pack_start (GTK_BOX (box2), frame, TRUE, TRUE, 0);
2509 box3 = gtk_vbox_new (FALSE, 5);
2510 gtk_container_set_border_width (GTK_CONTAINER (box3), 5);
2511 gtk_container_add (GTK_CONTAINER (frame), box3);
2513 button = gtk_button_new_with_label ("switch");
2514 g_object_set_data (G_OBJECT (button), "user_data", label);
2515 gtk_box_pack_start (GTK_BOX (box3), button, FALSE, TRUE, 0);
2517 event_box = gtk_event_box_new ();
2518 gtk_box_pack_start (GTK_BOX (box3), event_box, FALSE, TRUE, 0);
2520 g_signal_connect (button, "clicked",
2521 G_CALLBACK (reparent_label),
2524 separator = gtk_hseparator_new ();
2525 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
2527 box2 = gtk_vbox_new (FALSE, 10);
2528 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
2529 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
2531 button = gtk_button_new_with_label ("close");
2532 g_signal_connect_swapped (button, "clicked",
2533 G_CALLBACK (gtk_widget_destroy), window);
2534 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
2535 gtk_widget_set_can_default (button, TRUE);
2536 gtk_widget_grab_default (button);
2539 if (!gtk_widget_get_visible (window))
2540 gtk_widget_show_all (window);
2542 gtk_widget_destroy (window);
2549 grippy_button_press (GtkWidget *area, GdkEventButton *event, GdkWindowEdge edge)
2551 if (event->type == GDK_BUTTON_PRESS)
2553 if (event->button == 1)
2554 gtk_window_begin_resize_drag (GTK_WINDOW (gtk_widget_get_toplevel (area)), edge,
2555 event->button, event->x_root, event->y_root,
2557 else if (event->button == 2)
2558 gtk_window_begin_move_drag (GTK_WINDOW (gtk_widget_get_toplevel (area)),
2559 event->button, event->x_root, event->y_root,
2566 grippy_draw (GtkWidget *area, cairo_t *cr, GdkWindowEdge edge)
2568 gtk_cairo_paint_resize_grip (gtk_widget_get_style (area),
2570 gtk_widget_get_state (area),
2575 gtk_widget_get_allocated_width (area),
2576 gtk_widget_get_allocated_height (area));
2582 create_resize_grips (GtkWidget *widget)
2584 static GtkWidget *window = NULL;
2586 GtkWidget *hbox, *vbox;
2589 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
2591 gtk_window_set_screen (GTK_WINDOW (window),
2592 gtk_widget_get_screen (widget));
2594 gtk_window_set_title (GTK_WINDOW (window), "resize grips");
2596 g_signal_connect (window, "destroy",
2597 G_CALLBACK (gtk_widget_destroyed),
2600 vbox = gtk_vbox_new (FALSE, 0);
2601 gtk_container_add (GTK_CONTAINER (window), vbox);
2603 hbox = gtk_hbox_new (FALSE, 0);
2604 gtk_box_pack_start (GTK_BOX (vbox), hbox, TRUE, TRUE, 0);
2607 area = gtk_drawing_area_new ();
2608 gtk_widget_add_events (area, GDK_BUTTON_PRESS_MASK);
2609 gtk_box_pack_start (GTK_BOX (hbox), area, TRUE, TRUE, 0);
2610 g_signal_connect (area, "draw", G_CALLBACK (grippy_draw),
2611 GINT_TO_POINTER (GDK_WINDOW_EDGE_NORTH_WEST));
2612 g_signal_connect (area, "button_press_event", G_CALLBACK (grippy_button_press),
2613 GINT_TO_POINTER (GDK_WINDOW_EDGE_NORTH_WEST));
2616 area = gtk_drawing_area_new ();
2617 gtk_widget_add_events (area, GDK_BUTTON_PRESS_MASK);
2618 gtk_box_pack_start (GTK_BOX (hbox), area, TRUE, TRUE, 0);
2619 g_signal_connect (area, "draw", G_CALLBACK (grippy_draw),
2620 GINT_TO_POINTER (GDK_WINDOW_EDGE_NORTH));
2621 g_signal_connect (area, "button_press_event", G_CALLBACK (grippy_button_press),
2622 GINT_TO_POINTER (GDK_WINDOW_EDGE_NORTH));
2625 area = gtk_drawing_area_new ();
2626 gtk_widget_add_events (area, GDK_BUTTON_PRESS_MASK);
2627 gtk_box_pack_start (GTK_BOX (hbox), area, TRUE, TRUE, 0);
2628 g_signal_connect (area, "draw", G_CALLBACK (grippy_draw),
2629 GINT_TO_POINTER (GDK_WINDOW_EDGE_NORTH_EAST));
2630 g_signal_connect (area, "button_press_event", G_CALLBACK (grippy_button_press),
2631 GINT_TO_POINTER (GDK_WINDOW_EDGE_NORTH_EAST));
2633 hbox = gtk_hbox_new (FALSE, 0);
2634 gtk_box_pack_start (GTK_BOX (vbox), hbox, TRUE, TRUE, 0);
2637 area = gtk_drawing_area_new ();
2638 gtk_widget_add_events (area, GDK_BUTTON_PRESS_MASK);
2639 gtk_box_pack_start (GTK_BOX (hbox), area, TRUE, TRUE, 0);
2640 g_signal_connect (area, "draw", G_CALLBACK (grippy_draw),
2641 GINT_TO_POINTER (GDK_WINDOW_EDGE_WEST));
2642 g_signal_connect (area, "button_press_event", G_CALLBACK (grippy_button_press),
2643 GINT_TO_POINTER (GDK_WINDOW_EDGE_WEST));
2646 area = gtk_drawing_area_new ();
2647 gtk_box_pack_start (GTK_BOX (hbox), area, TRUE, TRUE, 0);
2650 area = gtk_drawing_area_new ();
2651 gtk_widget_add_events (area, GDK_BUTTON_PRESS_MASK);
2652 gtk_box_pack_start (GTK_BOX (hbox), area, TRUE, TRUE, 0);
2653 g_signal_connect (area, "draw", G_CALLBACK (grippy_draw),
2654 GINT_TO_POINTER (GDK_WINDOW_EDGE_EAST));
2655 g_signal_connect (area, "button_press_event", G_CALLBACK (grippy_button_press),
2656 GINT_TO_POINTER (GDK_WINDOW_EDGE_EAST));
2659 hbox = gtk_hbox_new (FALSE, 0);
2660 gtk_box_pack_start (GTK_BOX (vbox), hbox, TRUE, TRUE, 0);
2663 area = gtk_drawing_area_new ();
2664 gtk_widget_add_events (area, GDK_BUTTON_PRESS_MASK);
2665 gtk_box_pack_start (GTK_BOX (hbox), area, TRUE, TRUE, 0);
2666 g_signal_connect (area, "draw", G_CALLBACK (grippy_draw),
2667 GINT_TO_POINTER (GDK_WINDOW_EDGE_SOUTH_WEST));
2668 g_signal_connect (area, "button_press_event", G_CALLBACK (grippy_button_press),
2669 GINT_TO_POINTER (GDK_WINDOW_EDGE_SOUTH_WEST));
2671 area = gtk_drawing_area_new ();
2672 gtk_widget_add_events (area, GDK_BUTTON_PRESS_MASK);
2673 gtk_box_pack_start (GTK_BOX (hbox), area, TRUE, TRUE, 0);
2674 g_signal_connect (area, "draw", G_CALLBACK (grippy_draw),
2675 GINT_TO_POINTER (GDK_WINDOW_EDGE_SOUTH));
2676 g_signal_connect (area, "button_press_event", G_CALLBACK (grippy_button_press),
2677 GINT_TO_POINTER (GDK_WINDOW_EDGE_SOUTH));
2680 area = gtk_drawing_area_new ();
2681 gtk_widget_add_events (area, GDK_BUTTON_PRESS_MASK);
2682 gtk_box_pack_start (GTK_BOX (hbox), area, TRUE, TRUE, 0);
2683 g_signal_connect (area, "draw", G_CALLBACK (grippy_draw),
2684 GINT_TO_POINTER (GDK_WINDOW_EDGE_SOUTH_EAST));
2685 g_signal_connect (area, "button_press_event", G_CALLBACK (grippy_button_press),
2686 GINT_TO_POINTER (GDK_WINDOW_EDGE_SOUTH_EAST));
2689 if (!gtk_widget_get_visible (window))
2690 gtk_widget_show_all (window);
2692 gtk_widget_destroy (window);
2698 gint upositionx = 0;
2699 gint upositiony = 0;
2702 uposition_configure (GtkWidget *window)
2708 lx = g_object_get_data (G_OBJECT (window), "x");
2709 ly = g_object_get_data (G_OBJECT (window), "y");
2711 gdk_window_get_root_origin (gtk_widget_get_window (window),
2712 &upositionx, &upositiony);
2713 sprintf (buffer, "%d", upositionx);
2714 gtk_label_set_text (lx, buffer);
2715 sprintf (buffer, "%d", upositiony);
2716 gtk_label_set_text (ly, buffer);
2722 uposition_stop_configure (GtkToggleButton *toggle,
2726 g_signal_handlers_block_by_func (window, G_CALLBACK (uposition_configure), NULL);
2728 g_signal_handlers_unblock_by_func (window, G_CALLBACK (uposition_configure), NULL);
2732 create_saved_position (GtkWidget *widget)
2734 static GtkWidget *window = NULL;
2739 GtkWidget *main_vbox;
2747 window = g_object_connect (g_object_new (GTK_TYPE_WINDOW,
2748 "type", GTK_WINDOW_TOPLEVEL,
2749 "title", "Saved Position",
2751 "signal::configure_event", uposition_configure, NULL,
2754 gtk_window_move (GTK_WINDOW (window), upositionx, upositiony);
2756 gtk_window_set_screen (GTK_WINDOW (window),
2757 gtk_widget_get_screen (widget));
2760 g_signal_connect (window, "destroy",
2761 G_CALLBACK (gtk_widget_destroyed),
2764 main_vbox = gtk_vbox_new (FALSE, 5);
2765 gtk_container_set_border_width (GTK_CONTAINER (main_vbox), 0);
2766 gtk_container_add (GTK_CONTAINER (window), main_vbox);
2769 g_object_new (gtk_vbox_get_type (),
2770 "GtkBox::homogeneous", FALSE,
2771 "GtkBox::spacing", 5,
2772 "GtkContainer::border_width", 10,
2773 "GtkWidget::parent", main_vbox,
2774 "GtkWidget::visible", TRUE,
2775 "child", g_object_connect (g_object_new (GTK_TYPE_TOGGLE_BUTTON,
2776 "label", "Stop Events",
2780 "signal::clicked", uposition_stop_configure, window,
2784 hbox = gtk_hbox_new (FALSE, 0);
2785 gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
2786 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0);
2788 label = gtk_label_new ("X Origin : ");
2789 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
2790 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
2792 x_label = gtk_label_new ("");
2793 gtk_box_pack_start (GTK_BOX (hbox), x_label, TRUE, TRUE, 0);
2794 g_object_set_data (G_OBJECT (window), "x", x_label);
2796 hbox = gtk_hbox_new (FALSE, 0);
2797 gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
2798 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0);
2800 label = gtk_label_new ("Y Origin : ");
2801 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
2802 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
2804 y_label = gtk_label_new ("");
2805 gtk_box_pack_start (GTK_BOX (hbox), y_label, TRUE, TRUE, 0);
2806 g_object_set_data (G_OBJECT (window), "y", y_label);
2809 g_object_new (gtk_hseparator_get_type (),
2810 "GtkWidget::visible", TRUE,
2812 gtk_box_pack_start (GTK_BOX (main_vbox), any, FALSE, TRUE, 0);
2814 hbox = gtk_hbox_new (FALSE, 0);
2815 gtk_container_set_border_width (GTK_CONTAINER (hbox), 10);
2816 gtk_box_pack_start (GTK_BOX (main_vbox), hbox, FALSE, TRUE, 0);
2818 button = gtk_button_new_with_label ("Close");
2819 g_signal_connect_swapped (button, "clicked",
2820 G_CALLBACK (gtk_widget_destroy),
2822 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
2823 gtk_widget_set_can_default (button, TRUE);
2824 gtk_widget_grab_default (button);
2826 gtk_widget_show_all (window);
2829 gtk_widget_destroy (window);
2837 create_pixbuf (GtkWidget *widget)
2839 static GtkWidget *window = NULL;
2845 GtkWidget *separator;
2846 GtkWidget *pixbufwid;
2847 GdkWindow *gdk_window;
2851 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
2853 gtk_window_set_screen (GTK_WINDOW (window),
2854 gtk_widget_get_screen (widget));
2856 g_signal_connect (window, "destroy",
2857 G_CALLBACK (gtk_widget_destroyed),
2860 gtk_window_set_title (GTK_WINDOW (window), "GtkPixmap");
2861 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
2862 gtk_widget_realize(window);
2864 box1 = gtk_vbox_new (FALSE, 0);
2865 gtk_container_add (GTK_CONTAINER (window), box1);
2867 box2 = gtk_vbox_new (FALSE, 10);
2868 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
2869 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
2871 button = gtk_button_new ();
2872 gtk_box_pack_start (GTK_BOX (box2), button, FALSE, FALSE, 0);
2874 gdk_window = gtk_widget_get_window (window);
2876 pixbufwid = new_pixbuf ("test.xpm", gdk_window, NULL);
2878 label = gtk_label_new ("Pixbuf\ntest");
2879 box3 = gtk_hbox_new (FALSE, 0);
2880 gtk_container_set_border_width (GTK_CONTAINER (box3), 2);
2881 gtk_container_add (GTK_CONTAINER (box3), pixbufwid);
2882 gtk_container_add (GTK_CONTAINER (box3), label);
2883 gtk_container_add (GTK_CONTAINER (button), box3);
2885 button = gtk_button_new ();
2886 gtk_box_pack_start (GTK_BOX (box2), button, FALSE, FALSE, 0);
2888 pixbufwid = new_pixbuf ("test.xpm", gdk_window, NULL);
2890 label = gtk_label_new ("Pixbuf\ntest");
2891 box3 = gtk_hbox_new (FALSE, 0);
2892 gtk_container_set_border_width (GTK_CONTAINER (box3), 2);
2893 gtk_container_add (GTK_CONTAINER (box3), pixbufwid);
2894 gtk_container_add (GTK_CONTAINER (box3), label);
2895 gtk_container_add (GTK_CONTAINER (button), box3);
2897 gtk_widget_set_sensitive (button, FALSE);
2899 separator = gtk_hseparator_new ();
2900 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
2902 box2 = gtk_vbox_new (FALSE, 10);
2903 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
2904 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
2906 button = gtk_button_new_with_label ("close");
2907 g_signal_connect_swapped (button, "clicked",
2908 G_CALLBACK (gtk_widget_destroy),
2910 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
2911 gtk_widget_set_can_default (button, TRUE);
2912 gtk_widget_grab_default (button);
2915 if (!gtk_widget_get_visible (window))
2916 gtk_widget_show_all (window);
2918 gtk_widget_destroy (window);
2922 create_tooltips (GtkWidget *widget)
2924 static GtkWidget *window = NULL;
2931 GtkWidget *separator;
2936 g_object_new (gtk_window_get_type (),
2937 "GtkWindow::type", GTK_WINDOW_TOPLEVEL,
2938 "GtkContainer::border_width", 0,
2939 "GtkWindow::title", "Tooltips",
2940 "GtkWindow::resizable", FALSE,
2943 gtk_window_set_screen (GTK_WINDOW (window),
2944 gtk_widget_get_screen (widget));
2946 box1 = gtk_vbox_new (FALSE, 0);
2947 gtk_container_add (GTK_CONTAINER (window), box1);
2949 box2 = gtk_vbox_new (FALSE, 10);
2950 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
2951 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
2953 button = gtk_toggle_button_new_with_label ("button1");
2954 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
2956 gtk_widget_set_tooltip_text (button, "This is button 1");
2958 button = gtk_toggle_button_new_with_label ("button2");
2959 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
2961 gtk_widget_set_tooltip_text (button,
2962 "This is button 2. This is also a really long tooltip which probably "
2963 "won't fit on a single line and will therefore need to be wrapped. "
2964 "Hopefully the wrapping will work correctly.");
2966 toggle = gtk_toggle_button_new_with_label ("Override TipsQuery Label");
2967 gtk_box_pack_start (GTK_BOX (box2), toggle, TRUE, TRUE, 0);
2969 gtk_widget_set_tooltip_text (toggle, "Toggle TipsQuery view.");
2972 g_object_new (gtk_vbox_get_type (),
2973 "homogeneous", FALSE,
2980 g_object_new (gtk_button_get_type (),
2985 gtk_box_set_child_packing (GTK_BOX (box3), button, FALSE, FALSE, 0, GTK_PACK_START);
2986 gtk_widget_set_tooltip_text (button, "Start the Tooltips Inspector");
2988 frame = g_object_new (gtk_frame_get_type (),
2989 "label", "ToolTips Inspector",
2990 "label_xalign", (double) 0.5,
2996 gtk_box_set_child_packing (GTK_BOX (box2), frame, TRUE, TRUE, 10, GTK_PACK_START);
2998 separator = gtk_hseparator_new ();
2999 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
3001 box2 = gtk_vbox_new (FALSE, 10);
3002 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
3003 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
3005 button = gtk_button_new_with_label ("close");
3006 g_signal_connect_swapped (button, "clicked",
3007 G_CALLBACK (gtk_widget_destroy),
3009 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
3010 gtk_widget_set_can_default (button, TRUE);
3011 gtk_widget_grab_default (button);
3013 gtk_widget_set_tooltip_text (button, "Push this button to close window");
3016 if (!gtk_widget_get_visible (window))
3017 gtk_widget_show_all (window);
3019 gtk_widget_destroy (window);
3027 pack_image (GtkWidget *box,
3031 gtk_box_pack_start (GTK_BOX (box),
3032 gtk_label_new (text),
3035 gtk_box_pack_start (GTK_BOX (box),
3041 create_image (GtkWidget *widget)
3043 static GtkWidget *window = NULL;
3050 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
3052 gtk_window_set_screen (GTK_WINDOW (window),
3053 gtk_widget_get_screen (widget));
3055 /* this is bogus for testing drawing when allocation < request,
3056 * don't copy into real code
3058 gtk_window_set_resizable (GTK_WINDOW (window), TRUE);
3060 g_signal_connect (window, "destroy",
3061 G_CALLBACK (gtk_widget_destroyed),
3064 vbox = gtk_vbox_new (FALSE, 5);
3066 gtk_container_add (GTK_CONTAINER (window), vbox);
3068 pack_image (vbox, "Stock Warning Dialog",
3069 gtk_image_new_from_stock (GTK_STOCK_DIALOG_WARNING,
3070 GTK_ICON_SIZE_DIALOG));
3072 pixbuf = gdk_pixbuf_new_from_xpm_data ((const char **) openfile);
3074 pack_image (vbox, "Pixbuf",
3075 gtk_image_new_from_pixbuf (pixbuf));
3077 g_object_unref (pixbuf);
3080 if (!gtk_widget_get_visible (window))
3081 gtk_widget_show_all (window);
3083 gtk_widget_destroy (window);
3091 create_menu (GdkScreen *screen, gint depth, gint length, gboolean tearoff)
3094 GtkWidget *menuitem;
3103 menu = gtk_menu_new ();
3104 gtk_menu_set_screen (GTK_MENU (menu), screen);
3110 menuitem = gtk_tearoff_menu_item_new ();
3111 gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem);
3112 gtk_widget_show (menuitem);
3115 image = gtk_image_new_from_stock (GTK_STOCK_OPEN,
3116 GTK_ICON_SIZE_MENU);
3117 gtk_widget_show (image);
3118 menuitem = gtk_image_menu_item_new_with_label ("Image item");
3119 gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menuitem), image);
3120 gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem);
3121 gtk_widget_show (menuitem);
3123 for (i = 0, j = 1; i < length; i++, j++)
3125 sprintf (buf, "item %2d - %d", depth, j);
3127 menuitem = gtk_radio_menu_item_new_with_label (group, buf);
3128 group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (menuitem));
3130 gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem);
3131 gtk_widget_show (menuitem);
3133 gtk_widget_set_sensitive (menuitem, FALSE);
3136 gtk_check_menu_item_set_inconsistent (GTK_CHECK_MENU_ITEM (menuitem),
3140 gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem),
3141 create_menu (screen, depth - 1, 5, TRUE));
3148 create_table_menu (GdkScreen *screen, gint cols, gint rows, gboolean tearoff)
3151 GtkWidget *menuitem;
3157 menu = gtk_menu_new ();
3158 gtk_menu_set_screen (GTK_MENU (menu), screen);
3163 menuitem = gtk_tearoff_menu_item_new ();
3164 gtk_menu_attach (GTK_MENU (menu), menuitem, 0, cols, j, j + 1);
3165 gtk_widget_show (menuitem);
3169 menuitem = gtk_menu_item_new_with_label ("items");
3170 gtk_menu_attach (GTK_MENU (menu), menuitem, 0, cols, j, j + 1);
3172 submenu = gtk_menu_new ();
3173 gtk_menu_set_screen (GTK_MENU (submenu), screen);
3174 gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem), submenu);
3175 gtk_widget_show (menuitem);
3178 /* now fill the items submenu */
3179 image = gtk_image_new_from_stock (GTK_STOCK_HELP,
3180 GTK_ICON_SIZE_MENU);
3181 gtk_widget_show (image);
3182 menuitem = gtk_image_menu_item_new_with_label ("Image");
3183 gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menuitem), image);
3184 gtk_menu_attach (GTK_MENU (submenu), menuitem, 0, 1, 0, 1);
3185 gtk_widget_show (menuitem);
3187 menuitem = gtk_menu_item_new_with_label ("x");
3188 gtk_menu_attach (GTK_MENU (submenu), menuitem, 1, 2, 0, 1);
3189 gtk_widget_show (menuitem);
3191 menuitem = gtk_menu_item_new_with_label ("x");
3192 gtk_menu_attach (GTK_MENU (submenu), menuitem, 0, 1, 1, 2);
3193 gtk_widget_show (menuitem);
3195 image = gtk_image_new_from_stock (GTK_STOCK_HELP,
3196 GTK_ICON_SIZE_MENU);
3197 gtk_widget_show (image);
3198 menuitem = gtk_image_menu_item_new_with_label ("Image");
3199 gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menuitem), image);
3200 gtk_menu_attach (GTK_MENU (submenu), menuitem, 1, 2, 1, 2);
3201 gtk_widget_show (menuitem);
3203 menuitem = gtk_radio_menu_item_new_with_label (NULL, "Radio");
3204 gtk_menu_attach (GTK_MENU (submenu), menuitem, 0, 1, 2, 3);
3205 gtk_widget_show (menuitem);
3207 menuitem = gtk_menu_item_new_with_label ("x");
3208 gtk_menu_attach (GTK_MENU (submenu), menuitem, 1, 2, 2, 3);
3209 gtk_widget_show (menuitem);
3211 menuitem = gtk_menu_item_new_with_label ("x");
3212 gtk_menu_attach (GTK_MENU (submenu), menuitem, 0, 1, 3, 4);
3213 gtk_widget_show (menuitem);
3215 menuitem = gtk_radio_menu_item_new_with_label (NULL, "Radio");
3216 gtk_menu_attach (GTK_MENU (submenu), menuitem, 1, 2, 3, 4);
3217 gtk_widget_show (menuitem);
3219 menuitem = gtk_check_menu_item_new_with_label ("Check");
3220 gtk_menu_attach (GTK_MENU (submenu), menuitem, 0, 1, 4, 5);
3221 gtk_widget_show (menuitem);
3223 menuitem = gtk_menu_item_new_with_label ("x");
3224 gtk_menu_attach (GTK_MENU (submenu), menuitem, 1, 2, 4, 5);
3225 gtk_widget_show (menuitem);
3227 menuitem = gtk_menu_item_new_with_label ("x");
3228 gtk_menu_attach (GTK_MENU (submenu), menuitem, 0, 1, 5, 6);
3229 gtk_widget_show (menuitem);
3231 menuitem = gtk_check_menu_item_new_with_label ("Check");
3232 gtk_menu_attach (GTK_MENU (submenu), menuitem, 1, 2, 5, 6);
3233 gtk_widget_show (menuitem);
3235 menuitem = gtk_menu_item_new_with_label ("1. Inserted normally (8)");
3236 gtk_widget_show (menuitem);
3237 gtk_menu_shell_insert (GTK_MENU_SHELL (submenu), menuitem, 8);
3239 menuitem = gtk_menu_item_new_with_label ("2. Inserted normally (2)");
3240 gtk_widget_show (menuitem);
3241 gtk_menu_shell_insert (GTK_MENU_SHELL (submenu), menuitem, 2);
3243 menuitem = gtk_menu_item_new_with_label ("3. Inserted normally (0)");
3244 gtk_widget_show (menuitem);
3245 gtk_menu_shell_insert (GTK_MENU_SHELL (submenu), menuitem, 0);
3247 menuitem = gtk_menu_item_new_with_label ("4. Inserted normally (-1)");
3248 gtk_widget_show (menuitem);
3249 gtk_menu_shell_insert (GTK_MENU_SHELL (submenu), menuitem, -1);
3251 /* end of items submenu */
3253 menuitem = gtk_menu_item_new_with_label ("spanning");
3254 gtk_menu_attach (GTK_MENU (menu), menuitem, 0, cols, j, j + 1);
3256 submenu = gtk_menu_new ();
3257 gtk_menu_set_screen (GTK_MENU (submenu), screen);
3258 gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem), submenu);
3259 gtk_widget_show (menuitem);
3262 /* now fill the spanning submenu */
3263 menuitem = gtk_menu_item_new_with_label ("a");
3264 gtk_menu_attach (GTK_MENU (submenu), menuitem, 0, 2, 0, 1);
3265 gtk_widget_show (menuitem);
3267 menuitem = gtk_menu_item_new_with_label ("b");
3268 gtk_menu_attach (GTK_MENU (submenu), menuitem, 2, 3, 0, 2);
3269 gtk_widget_show (menuitem);
3271 menuitem = gtk_menu_item_new_with_label ("c");
3272 gtk_menu_attach (GTK_MENU (submenu), menuitem, 0, 1, 1, 3);
3273 gtk_widget_show (menuitem);
3275 menuitem = gtk_menu_item_new_with_label ("d");
3276 gtk_menu_attach (GTK_MENU (submenu), menuitem, 1, 2, 1, 2);
3277 gtk_widget_show (menuitem);
3279 menuitem = gtk_menu_item_new_with_label ("e");
3280 gtk_menu_attach (GTK_MENU (submenu), menuitem, 1, 3, 2, 3);
3281 gtk_widget_show (menuitem);
3282 /* end of spanning submenu */
3284 menuitem = gtk_menu_item_new_with_label ("left");
3285 gtk_menu_attach (GTK_MENU (menu), menuitem, 0, 1, j, j + 1);
3286 submenu = gtk_menu_new ();
3287 gtk_menu_set_screen (GTK_MENU (submenu), screen);
3288 gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem), submenu);
3289 gtk_widget_show (menuitem);
3291 menuitem = gtk_menu_item_new_with_label ("Empty");
3292 gtk_menu_attach (GTK_MENU (submenu), menuitem, 0, 1, 0, 1);
3293 submenu = gtk_menu_new ();
3294 gtk_menu_set_screen (GTK_MENU (submenu), screen);
3295 gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem), submenu);
3296 gtk_widget_show (menuitem);
3298 menuitem = gtk_menu_item_new_with_label ("right");
3299 gtk_menu_attach (GTK_MENU (menu), menuitem, 1, 2, j, j + 1);
3300 submenu = gtk_menu_new ();
3301 gtk_menu_set_screen (GTK_MENU (submenu), screen);
3302 gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem), submenu);
3303 gtk_widget_show (menuitem);
3305 menuitem = gtk_menu_item_new_with_label ("Empty");
3306 gtk_menu_attach (GTK_MENU (submenu), menuitem, 0, 1, 0, 1);
3307 gtk_widget_show (menuitem);
3311 for (; j < rows; j++)
3312 for (i = 0; i < cols; i++)
3314 sprintf (buf, "(%d %d)", i, j);
3315 menuitem = gtk_menu_item_new_with_label (buf);
3316 gtk_menu_attach (GTK_MENU (menu), menuitem, i, i + 1, j, j + 1);
3317 gtk_widget_show (menuitem);
3320 menuitem = gtk_menu_item_new_with_label ("1. Inserted normally (8)");
3321 gtk_menu_shell_insert (GTK_MENU_SHELL (menu), menuitem, 8);
3322 gtk_widget_show (menuitem);
3323 menuitem = gtk_menu_item_new_with_label ("2. Inserted normally (2)");
3324 gtk_menu_shell_insert (GTK_MENU_SHELL (menu), menuitem, 2);
3325 gtk_widget_show (menuitem);
3326 menuitem = gtk_menu_item_new_with_label ("3. Inserted normally (0)");
3327 gtk_menu_shell_insert (GTK_MENU_SHELL (menu), menuitem, 0);
3328 gtk_widget_show (menuitem);
3329 menuitem = gtk_menu_item_new_with_label ("4. Inserted normally (-1)");
3330 gtk_menu_shell_insert (GTK_MENU_SHELL (menu), menuitem, -1);
3331 gtk_widget_show (menuitem);
3337 create_menus (GtkWidget *widget)
3339 static GtkWidget *window = NULL;
3343 GtkWidget *optionmenu;
3344 GtkWidget *separator;
3350 GtkWidget *menuitem;
3351 GtkAccelGroup *accel_group;
3353 GdkScreen *screen = gtk_widget_get_screen (widget);
3355 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
3357 gtk_window_set_screen (GTK_WINDOW (window), screen);
3359 g_signal_connect (window, "destroy",
3360 G_CALLBACK (gtk_widget_destroyed),
3362 g_signal_connect (window, "delete-event",
3363 G_CALLBACK (gtk_true),
3366 accel_group = gtk_accel_group_new ();
3367 gtk_window_add_accel_group (GTK_WINDOW (window), accel_group);
3369 gtk_window_set_title (GTK_WINDOW (window), "menus");
3370 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
3373 box1 = gtk_vbox_new (FALSE, 0);
3374 gtk_container_add (GTK_CONTAINER (window), box1);
3375 gtk_widget_show (box1);
3377 menubar = gtk_menu_bar_new ();
3378 gtk_box_pack_start (GTK_BOX (box1), menubar, FALSE, TRUE, 0);
3379 gtk_widget_show (menubar);
3381 menu = create_menu (screen, 2, 50, TRUE);
3383 menuitem = gtk_menu_item_new_with_label ("test\nline2");
3384 gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem), menu);
3385 gtk_menu_shell_append (GTK_MENU_SHELL (menubar), menuitem);
3386 gtk_widget_show (menuitem);
3388 menu = create_table_menu (screen, 2, 50, TRUE);
3390 menuitem = gtk_menu_item_new_with_label ("table");
3391 gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem), menu);
3392 gtk_menu_shell_append (GTK_MENU_SHELL (menubar), menuitem);
3393 gtk_widget_show (menuitem);
3395 menuitem = gtk_menu_item_new_with_label ("foo");
3396 gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem), create_menu (screen, 3, 5, TRUE));
3397 gtk_menu_shell_append (GTK_MENU_SHELL (menubar), menuitem);
3398 gtk_widget_show (menuitem);
3400 image = gtk_image_new_from_stock (GTK_STOCK_HELP,
3401 GTK_ICON_SIZE_MENU);
3402 gtk_widget_show (image);
3403 menuitem = gtk_image_menu_item_new_with_label ("Help");
3404 gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menuitem), image);
3405 gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem), create_menu (screen, 4, 5, TRUE));
3406 gtk_menu_item_set_right_justified (GTK_MENU_ITEM (menuitem), TRUE);
3407 gtk_menu_shell_append (GTK_MENU_SHELL (menubar), menuitem);
3408 gtk_widget_show (menuitem);
3410 menubar = gtk_menu_bar_new ();
3411 gtk_box_pack_start (GTK_BOX (box1), menubar, FALSE, TRUE, 0);
3412 gtk_widget_show (menubar);
3414 menu = create_menu (screen, 2, 10, TRUE);
3416 menuitem = gtk_menu_item_new_with_label ("Second menu bar");
3417 gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem), menu);
3418 gtk_menu_shell_append (GTK_MENU_SHELL (menubar), menuitem);
3419 gtk_widget_show (menuitem);
3421 box2 = gtk_vbox_new (FALSE, 10);
3422 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
3423 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
3424 gtk_widget_show (box2);
3426 menu = create_menu (screen, 1, 5, FALSE);
3427 gtk_menu_set_accel_group (GTK_MENU (menu), accel_group);
3429 menuitem = gtk_image_menu_item_new_from_stock (GTK_STOCK_NEW, accel_group);
3430 gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem);
3431 gtk_widget_show (menuitem);
3433 menuitem = gtk_check_menu_item_new_with_label ("Accelerate Me");
3434 gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem);
3435 gtk_widget_show (menuitem);
3436 gtk_widget_add_accelerator (menuitem,
3442 menuitem = gtk_check_menu_item_new_with_label ("Accelerator Locked");
3443 gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem);
3444 gtk_widget_show (menuitem);
3445 gtk_widget_add_accelerator (menuitem,
3450 GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
3451 menuitem = gtk_check_menu_item_new_with_label ("Accelerators Frozen");
3452 gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem);
3453 gtk_widget_show (menuitem);
3454 gtk_widget_add_accelerator (menuitem,
3460 gtk_widget_add_accelerator (menuitem,
3467 optionmenu = gtk_combo_box_new_text ();
3468 gtk_combo_box_set_active (GTK_COMBO_BOX (optionmenu), 3);
3469 gtk_box_pack_start (GTK_BOX (box2), optionmenu, TRUE, TRUE, 0);
3470 gtk_widget_show (optionmenu);
3472 separator = gtk_hseparator_new ();
3473 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
3474 gtk_widget_show (separator);
3476 box2 = gtk_vbox_new (FALSE, 10);
3477 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
3478 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
3479 gtk_widget_show (box2);
3481 button = gtk_button_new_with_label ("close");
3482 g_signal_connect_swapped (button, "clicked",
3483 G_CALLBACK (gtk_widget_destroy),
3485 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
3486 gtk_widget_set_can_default (button, TRUE);
3487 gtk_widget_grab_default (button);
3488 gtk_widget_show (button);
3491 if (!gtk_widget_get_visible (window))
3492 gtk_widget_show (window);
3494 gtk_widget_destroy (window);
3497 /* GdkPixbuf RGBA C-Source image dump */
3499 static const guint8 apple[] =
3501 /* Pixbuf magic (0x47646b50) */
3503 /* length: header (24) + pixel_data (2304) */
3505 /* pixdata_type (0x1010002) */
3507 /* rowstride (96) */
3514 "\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"
3515 "\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"
3516 "\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"
3517 "\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"
3518 "\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"
3519 "\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"
3520 "\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"
3521 "\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"
3522 "\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"
3523 "[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"
3524 "\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"
3525 "\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"
3526 "\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"
3527 "\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"
3528 "\0\0\0\0\0\0`l\\\20iw_\356y\211h\373x\207g\364~\216i\364u\204e\366gt"
3529 "_\374^jX\241A;-_\0\0\0~\0\0\0\0SM4)SM21B9&\22\320\270\204\1\320\270\204"
3530 "\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"
3531 "]\212r\200c\366v\205f\371jx_\323_kY\232_kZH^jY\26]iW\211@G9\272:6%j\220"
3532 "\211]\320\221\211`\377\212\203Z\377~xP\377mkE\331]^;|/0\37\21\0\0\0\0"
3533 "\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["
3534 "eT<\216\200Z\203\227\211_\354\234\217c\377\232\217b\362\232\220c\337"
3535 "\243\233k\377\252\241p\377\250\236p\377\241\225h\377\231\214_\377\210"
3536 "\202U\377srI\377[]:\355KO0U\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0i"
3537 "v^\200`lY\211^jY\"\0\0\0\0\221\204\\\273\250\233r\377\302\267\224\377"
3538 "\311\300\237\377\272\256\204\377\271\256\177\377\271\257\200\377\267"
3539 "\260\177\377\260\251x\377\250\236l\377\242\225e\377\226\213]\377~zP\377"
3540 "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"
3541 "\0\213\203[v\253\240t\377\334\326\301\377\344\340\317\377\321\312\253"
3542 "\377\303\271\217\377\300\270\213\377\277\267\210\377\272\264\203\377"
3543 "\261\255z\377\250\242n\377\243\232h\377\232\220`\377\210\202V\377nnE"
3544 "\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"
3545 "\234\222e\362\304\274\232\377\337\333\306\377\332\325\273\377\311\302"
3546 "\232\377\312\303\236\377\301\273\216\377\300\271\212\377\270\264\200"
3547 "\377\256\253v\377\246\243n\377\236\232h\377\230\220`\377\213\203V\377"
3548 "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"
3549 "\203Zl\242\234l\377\321\315\260\377\331\324\271\377\320\313\251\377\307"
3550 "\301\232\377\303\276\224\377\300\272\214\377\274\267\206\377\264\260"
3551 "|\377\253\251s\377\244\243n\377\232\230e\377\223\216^\377\207\200U\377"
3552 "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"
3553 "\210\204Y\240\245\237o\377\316\310\253\377\310\303\237\377\304\300\230"
3554 "\377\303\277\225\377\277\272\216\377\274\270\210\377\266\263\200\377"
3555 "\256\254v\377\247\246p\377\237\236j\377\227\226d\377\215\212[\377\203"
3556 "\177T\377qsH\377X]8\377FN.\377DK-\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
3557 "\0\0\0\0\207\204X\257\244\240o\377\300\275\231\377\301\275\226\377\274"
3558 "\270\213\377\274\270\214\377\267\264\205\377\264\262\200\377\260\256"
3559 "z\377\251\251s\377\243\244n\377\231\232g\377\220\222`\377\210\211Y\377"
3560 "|}Q\377hlC\377PU3\377CK,\377DL/Y\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
3561 "\0\0\205\204X\220\232\230h\377\261\260\204\377\266\264\212\377\261\260"
3562 "\201\377\263\260\200\377\260\257}\377\256\256x\377\253\254t\377\244\246"
3563 "o\377\233\236i\377\221\224b\377\211\214\\\377\202\204V\377txM\377]b>"
3564 "\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>"
3565 "\215\215_\377\237\237r\377\247\247x\377\247\247t\377\252\252w\377\252"
3566 "\252u\377\252\253t\377\243\246o\377\235\240j\377\223\230c\377\213\217"
3567 "]\377\201\206V\377x}P\377gkD\377RY5\377BI,\377AI,\262\0\0\0\0\0\0\0\0"
3568 "\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"
3569 "\232g\377\234\236i\377\236\241l\377\241\244n\377\240\244m\377\232\237"
3570 "i\377\223\230c\377\212\221]\377\200\210W\377v|P\377jnG\377Za>\377HP2"
3571 "\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"
3572 "\0wzQ6\177\201U\371\206\211Z\377\216\222`\377\220\225a\377\220\225b\377"
3573 "\220\226a\377\213\221_\377\204\213Z\377{\203R\377ryN\377iqH\377^fA\377"
3574 "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"
3575 "\0\0\0\0\0\0\0\0\0\0\0\0ptJTw|Q\371z\177R\377}\202T\377|\203T\377z\200"
3576 "R\377v|O\377pwL\377jpF\377dlB\377`hB\377Yb@\377LT6\377<C*\377\11\12\6"
3577 "\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"
3578 "\0\0\0\0\0\0\0\0\0\0\\`=UgnE\370hnG\377gmE\377djB\377]d>\377[c<\377Y"
3579 "b<\377Zc>\377V_>\377OW8\377BK/\377\16\20\12\377\0\0\0\377\0\0\0\377\0"
3580 "\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"
3581 "\0\1\0\0\0\40\22\24\15\260@D+\377W`;\377OV5\377.3\36\377.3\37\377IP0"
3582 "\377RZ7\377PZ8\3776=&\377\14\15\10\377\0\0\0\377\0\0\0\377\0\0\0\377"
3583 "\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"
3584 "\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"
3585 "\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"
3586 "\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"
3587 "\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"
3588 "\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"
3589 "\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"
3590 "\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"
3591 "\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"
3592 "\0\0\5\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"};
3596 accel_button_new (GtkAccelGroup *accel_group,
3601 GdkModifierType modifiers;
3605 gtk_accelerator_parse (accel, &keyval, &modifiers);
3608 button = gtk_button_new ();
3609 gtk_widget_add_accelerator (button, "activate", accel_group,
3610 keyval, modifiers, GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
3612 label = gtk_accel_label_new (text);
3613 gtk_accel_label_set_accel_widget (GTK_ACCEL_LABEL (label), button);
3614 gtk_widget_show (label);
3616 gtk_container_add (GTK_CONTAINER (button), label);
3622 create_key_lookup (GtkWidget *widget)
3624 static GtkWidget *window = NULL;
3625 gpointer window_ptr;
3629 GtkAccelGroup *accel_group = gtk_accel_group_new ();
3631 GtkWidget *content_area;
3633 window = gtk_dialog_new_with_buttons ("Key Lookup", NULL, 0,
3634 GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE,
3637 gtk_window_set_screen (GTK_WINDOW (window),
3638 gtk_widget_get_screen (widget));
3640 /* We have to expand it so the accel labels will draw their labels
3642 gtk_window_set_default_size (GTK_WINDOW (window), 300, -1);
3644 gtk_window_add_accel_group (GTK_WINDOW (window), accel_group);
3646 content_area = gtk_dialog_get_content_area (GTK_DIALOG (window));
3648 button = gtk_button_new_with_mnemonic ("Button 1 (_a)");
3649 gtk_box_pack_start (GTK_BOX (content_area), button, FALSE, FALSE, 0);
3650 button = gtk_button_new_with_mnemonic ("Button 2 (_A)");
3651 gtk_box_pack_start (GTK_BOX (content_area), button, FALSE, FALSE, 0);
3652 button = gtk_button_new_with_mnemonic ("Button 3 (_\321\204)");
3653 gtk_box_pack_start (GTK_BOX (content_area), button, FALSE, FALSE, 0);
3654 button = gtk_button_new_with_mnemonic ("Button 4 (_\320\244)");
3655 gtk_box_pack_start (GTK_BOX (content_area), button, FALSE, FALSE, 0);
3656 button = gtk_button_new_with_mnemonic ("Button 6 (_b)");
3657 gtk_box_pack_start (GTK_BOX (content_area), button, FALSE, FALSE, 0);
3658 button = accel_button_new (accel_group, "Button 7", "<Alt><Shift>b");
3659 gtk_box_pack_start (GTK_BOX (content_area), button, FALSE, FALSE, 0);
3660 button = accel_button_new (accel_group, "Button 8", "<Alt>d");
3661 gtk_box_pack_start (GTK_BOX (content_area), button, FALSE, FALSE, 0);
3662 button = accel_button_new (accel_group, "Button 9", "<Alt>Cyrillic_ve");
3663 gtk_box_pack_start (GTK_BOX (content_area), button, FALSE, FALSE, 0);
3664 button = gtk_button_new_with_mnemonic ("Button 10 (_1)");
3665 gtk_box_pack_start (GTK_BOX (content_area), button, FALSE, FALSE, 0);
3666 button = gtk_button_new_with_mnemonic ("Button 11 (_!)");
3667 gtk_box_pack_start (GTK_BOX (content_area), button, FALSE, FALSE, 0);
3668 button = accel_button_new (accel_group, "Button 12", "<Super>a");
3669 gtk_box_pack_start (GTK_BOX (content_area), button, FALSE, FALSE, 0);
3670 button = accel_button_new (accel_group, "Button 13", "<Hyper>a");
3671 gtk_box_pack_start (GTK_BOX (content_area), button, FALSE, FALSE, 0);
3672 button = accel_button_new (accel_group, "Button 14", "<Meta>a");
3673 gtk_box_pack_start (GTK_BOX (content_area), button, FALSE, FALSE, 0);
3674 button = accel_button_new (accel_group, "Button 15", "<Shift><Mod4>b");
3675 gtk_box_pack_start (GTK_BOX (content_area), button, FALSE, FALSE, 0);
3677 window_ptr = &window;
3678 g_object_add_weak_pointer (G_OBJECT (window), window_ptr);
3679 g_signal_connect (window, "response", G_CALLBACK (gtk_object_destroy), NULL);
3681 gtk_widget_show_all (window);
3684 gtk_widget_destroy (window);
3693 cmw_destroy_cb(GtkWidget *widget)
3695 /* This is needed to get out of gtk_main */
3702 cmw_color (GtkWidget *widget, GtkWidget *parent)
3705 GtkWidget *colorsel;
3706 GtkWidget *ok_button, *cancel_button;
3708 csd = gtk_color_selection_dialog_new ("This is a modal color selection dialog");
3710 gtk_window_set_screen (GTK_WINDOW (csd), gtk_widget_get_screen (parent));
3712 colorsel = gtk_color_selection_dialog_get_color_selection (GTK_COLOR_SELECTION_DIALOG (csd));
3713 gtk_color_selection_set_has_palette (GTK_COLOR_SELECTION (colorsel),
3717 gtk_window_set_modal (GTK_WINDOW(csd),TRUE);
3719 /* And mark it as a transient dialog */
3720 gtk_window_set_transient_for (GTK_WINDOW (csd), GTK_WINDOW (parent));
3722 g_signal_connect (csd, "destroy",
3723 G_CALLBACK (cmw_destroy_cb), NULL);
3726 "ok-button", &ok_button,
3727 "cancel-button", &cancel_button,
3730 g_signal_connect_swapped (ok_button,
3731 "clicked", G_CALLBACK (gtk_widget_destroy), csd);
3732 g_signal_connect_swapped (cancel_button,
3733 "clicked", G_CALLBACK (gtk_widget_destroy), csd);
3735 /* wait until destroy calls gtk_main_quit */
3736 gtk_widget_show (csd);
3741 cmw_file (GtkWidget *widget, GtkWidget *parent)
3745 fs = gtk_file_chooser_dialog_new ("This is a modal file selection dialog",
3746 GTK_WINDOW (parent), GTK_FILE_CHOOSER_ACTION_OPEN,
3747 GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT,
3748 GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
3750 gtk_window_set_screen (GTK_WINDOW (fs), gtk_widget_get_screen (parent));
3751 gtk_window_set_modal (GTK_WINDOW (fs), TRUE);
3753 g_signal_connect (fs, "destroy",
3754 G_CALLBACK (cmw_destroy_cb), NULL);
3755 g_signal_connect_swapped (fs, "response",
3756 G_CALLBACK (gtk_widget_destroy), fs);
3758 /* wait until destroy calls gtk_main_quit */
3759 gtk_widget_show (fs);
3765 create_modal_window (GtkWidget *widget)
3767 GtkWidget *window = NULL;
3768 GtkWidget *box1,*box2;
3770 GtkWidget *btnColor,*btnFile,*btnClose;
3772 /* Create modal window (Here you can use any window descendent )*/
3773 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
3774 gtk_window_set_screen (GTK_WINDOW (window),
3775 gtk_widget_get_screen (widget));
3777 gtk_window_set_title (GTK_WINDOW(window),"This window is modal");
3779 /* Set window as modal */
3780 gtk_window_set_modal (GTK_WINDOW(window),TRUE);
3782 /* Create widgets */
3783 box1 = gtk_vbox_new (FALSE,5);
3784 frame1 = gtk_frame_new ("Standard dialogs in modal form");
3785 box2 = gtk_vbox_new (TRUE,5);
3786 btnColor = gtk_button_new_with_label ("Color");
3787 btnFile = gtk_button_new_with_label ("File Selection");
3788 btnClose = gtk_button_new_with_label ("Close");
3791 gtk_container_set_border_width (GTK_CONTAINER (box1), 3);
3792 gtk_container_set_border_width (GTK_CONTAINER (box2), 3);
3795 gtk_container_add (GTK_CONTAINER (window), box1);
3796 gtk_box_pack_start (GTK_BOX (box1), frame1, TRUE, TRUE, 4);
3797 gtk_container_add (GTK_CONTAINER (frame1), box2);
3798 gtk_box_pack_start (GTK_BOX (box2), btnColor, FALSE, FALSE, 4);
3799 gtk_box_pack_start (GTK_BOX (box2), btnFile, FALSE, FALSE, 4);
3800 gtk_box_pack_start (GTK_BOX (box1), gtk_hseparator_new (), FALSE, FALSE, 4);
3801 gtk_box_pack_start (GTK_BOX (box1), btnClose, FALSE, FALSE, 4);
3803 /* connect signals */
3804 g_signal_connect_swapped (btnClose, "clicked",
3805 G_CALLBACK (gtk_widget_destroy), window);
3807 g_signal_connect (window, "destroy",
3808 G_CALLBACK (cmw_destroy_cb), NULL);
3810 g_signal_connect (btnColor, "clicked",
3811 G_CALLBACK (cmw_color), window);
3812 g_signal_connect (btnFile, "clicked",
3813 G_CALLBACK (cmw_file), window);
3816 gtk_widget_show_all (window);
3818 /* wait until dialog get destroyed */
3827 make_message_dialog (GdkScreen *screen,
3829 GtkMessageType type,
3830 GtkButtonsType buttons,
3831 guint default_response)
3835 gtk_widget_destroy (*dialog);
3840 *dialog = gtk_message_dialog_new (NULL, 0, type, buttons,
3841 "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.)");
3843 gtk_window_set_screen (GTK_WINDOW (*dialog), screen);
3845 g_signal_connect_swapped (*dialog,
3847 G_CALLBACK (gtk_widget_destroy),
3850 g_signal_connect (*dialog,
3852 G_CALLBACK (gtk_widget_destroyed),
3855 gtk_dialog_set_default_response (GTK_DIALOG (*dialog), default_response);
3857 gtk_widget_show (*dialog);
3861 create_message_dialog (GtkWidget *widget)
3863 static GtkWidget *info = NULL;
3864 static GtkWidget *warning = NULL;
3865 static GtkWidget *error = NULL;
3866 static GtkWidget *question = NULL;
3867 GdkScreen *screen = gtk_widget_get_screen (widget);
3869 make_message_dialog (screen, &info, GTK_MESSAGE_INFO, GTK_BUTTONS_OK, GTK_RESPONSE_OK);
3870 make_message_dialog (screen, &warning, GTK_MESSAGE_WARNING, GTK_BUTTONS_CLOSE, GTK_RESPONSE_CLOSE);
3871 make_message_dialog (screen, &error, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK_CANCEL, GTK_RESPONSE_OK);
3872 make_message_dialog (screen, &question, GTK_MESSAGE_QUESTION, GTK_BUTTONS_YES_NO, GTK_RESPONSE_NO);
3879 static GtkWidget *sw_parent = NULL;
3880 static GtkWidget *sw_float_parent;
3881 static guint sw_destroyed_handler = 0;
3884 scrolled_windows_delete_cb (GtkWidget *widget, GdkEventAny *event, GtkWidget *scrollwin)
3886 gtk_widget_reparent (scrollwin, sw_parent);
3888 g_signal_handler_disconnect (sw_parent, sw_destroyed_handler);
3889 sw_float_parent = NULL;
3891 sw_destroyed_handler = 0;
3897 scrolled_windows_destroy_cb (GtkWidget *widget, GtkWidget *scrollwin)
3899 gtk_widget_destroy (sw_float_parent);
3901 sw_float_parent = NULL;
3903 sw_destroyed_handler = 0;
3907 scrolled_windows_remove (GtkWidget *widget, GtkWidget *scrollwin)
3911 gtk_widget_reparent (scrollwin, sw_parent);
3912 gtk_widget_destroy (sw_float_parent);
3914 g_signal_handler_disconnect (sw_parent, sw_destroyed_handler);
3915 sw_float_parent = NULL;
3917 sw_destroyed_handler = 0;
3921 sw_parent = gtk_widget_get_parent (scrollwin);
3922 sw_float_parent = gtk_window_new (GTK_WINDOW_TOPLEVEL);
3923 gtk_window_set_screen (GTK_WINDOW (sw_float_parent),
3924 gtk_widget_get_screen (widget));
3926 gtk_window_set_default_size (GTK_WINDOW (sw_float_parent), 200, 200);
3928 gtk_widget_reparent (scrollwin, sw_float_parent);
3929 gtk_widget_show (sw_float_parent);
3931 sw_destroyed_handler =
3932 g_signal_connect (sw_parent, "destroy",
3933 G_CALLBACK (scrolled_windows_destroy_cb), scrollwin);
3934 g_signal_connect (sw_float_parent, "delete_event",
3935 G_CALLBACK (scrolled_windows_delete_cb), scrollwin);
3940 create_scrolled_windows (GtkWidget *widget)
3942 static GtkWidget *window;
3943 GtkWidget *content_area, *action_area;
3944 GtkWidget *scrolled_window;
3952 window = gtk_dialog_new ();
3954 gtk_window_set_screen (GTK_WINDOW (window),
3955 gtk_widget_get_screen (widget));
3957 g_signal_connect (window, "destroy",
3958 G_CALLBACK (gtk_widget_destroyed),
3961 content_area = gtk_dialog_get_content_area (GTK_DIALOG (window));
3962 action_area = gtk_dialog_get_action_area (GTK_DIALOG (window));
3964 gtk_window_set_title (GTK_WINDOW (window), "dialog");
3965 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
3967 scrolled_window = gtk_scrolled_window_new (NULL, NULL);
3968 gtk_container_set_border_width (GTK_CONTAINER (scrolled_window), 10);
3969 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
3970 GTK_POLICY_AUTOMATIC,
3971 GTK_POLICY_AUTOMATIC);
3972 gtk_box_pack_start (GTK_BOX (content_area), scrolled_window, TRUE, TRUE, 0);
3973 gtk_widget_show (scrolled_window);
3975 table = gtk_table_new (20, 20, FALSE);
3976 gtk_table_set_row_spacings (GTK_TABLE (table), 10);
3977 gtk_table_set_col_spacings (GTK_TABLE (table), 10);
3978 gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scrolled_window), table);
3979 gtk_container_set_focus_hadjustment (GTK_CONTAINER (table),
3980 gtk_scrolled_window_get_hadjustment (GTK_SCROLLED_WINDOW (scrolled_window)));
3981 gtk_container_set_focus_vadjustment (GTK_CONTAINER (table),
3982 gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (scrolled_window)));
3983 gtk_widget_show (table);
3985 for (i = 0; i < 20; i++)
3986 for (j = 0; j < 20; j++)
3988 sprintf (buffer, "button (%d,%d)\n", i, j);
3989 button = gtk_toggle_button_new_with_label (buffer);
3990 gtk_table_attach_defaults (GTK_TABLE (table), button,
3992 gtk_widget_show (button);
3996 button = gtk_button_new_with_label ("Close");
3997 g_signal_connect_swapped (button, "clicked",
3998 G_CALLBACK (gtk_widget_destroy),
4000 gtk_widget_set_can_default (button, TRUE);
4001 gtk_box_pack_start (GTK_BOX (action_area), button, TRUE, TRUE, 0);
4002 gtk_widget_grab_default (button);
4003 gtk_widget_show (button);
4005 button = gtk_button_new_with_label ("Reparent Out");
4006 g_signal_connect (button, "clicked",
4007 G_CALLBACK (scrolled_windows_remove),
4009 gtk_widget_set_can_default (button, TRUE);
4010 gtk_box_pack_start (GTK_BOX (action_area), button, TRUE, TRUE, 0);
4011 gtk_widget_grab_default (button);
4012 gtk_widget_show (button);
4014 gtk_window_set_default_size (GTK_WINDOW (window), 300, 300);
4017 if (!gtk_widget_get_visible (window))
4018 gtk_widget_show (window);
4020 gtk_widget_destroy (window);
4028 entry_toggle_frame (GtkWidget *checkbutton,
4031 gtk_entry_set_has_frame (GTK_ENTRY(entry),
4032 GTK_TOGGLE_BUTTON(checkbutton)->active);
4036 entry_toggle_sensitive (GtkWidget *checkbutton,
4039 gtk_widget_set_sensitive (entry, GTK_TOGGLE_BUTTON(checkbutton)->active);
4043 entry_progress_timeout (gpointer data)
4045 if (GPOINTER_TO_INT (g_object_get_data (G_OBJECT (data), "progress-pulse")))
4047 gtk_entry_progress_pulse (GTK_ENTRY (data));
4053 fraction = gtk_entry_get_progress_fraction (GTK_ENTRY (data));
4056 if (fraction > 1.0001)
4059 gtk_entry_set_progress_fraction (GTK_ENTRY (data), fraction);
4066 entry_remove_timeout (gpointer data)
4068 g_source_remove (GPOINTER_TO_UINT (data));
4072 entry_toggle_progress (GtkWidget *checkbutton,
4075 if (GTK_TOGGLE_BUTTON (checkbutton)->active)
4077 guint timeout = gdk_threads_add_timeout (100,
4078 entry_progress_timeout,
4080 g_object_set_data_full (G_OBJECT (entry), "timeout-id",
4081 GUINT_TO_POINTER (timeout),
4082 entry_remove_timeout);
4086 g_object_set_data (G_OBJECT (entry), "timeout-id",
4087 GUINT_TO_POINTER (0));
4089 gtk_entry_set_progress_fraction (GTK_ENTRY (entry), 0.0);
4094 entry_toggle_pulse (GtkWidget *checkbutton,
4097 g_object_set_data (G_OBJECT (entry), "progress-pulse",
4098 GUINT_TO_POINTER ((guint) GTK_TOGGLE_BUTTON (checkbutton)->active));
4102 props_clicked (GtkWidget *button,
4105 GtkWidget *window = create_prop_editor (object, 0);
4107 gtk_window_set_title (GTK_WINDOW (window), "Object Properties");
4111 create_entry (GtkWidget *widget)
4113 static GtkWidget *window = NULL;
4117 GtkWidget *has_frame_check;
4118 GtkWidget *sensitive_check;
4119 GtkWidget *progress_check;
4122 GtkWidget *cb_entry;
4124 GtkWidget *separator;
4128 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
4129 gtk_window_set_screen (GTK_WINDOW (window),
4130 gtk_widget_get_screen (widget));
4132 g_signal_connect (window, "destroy",
4133 G_CALLBACK (gtk_widget_destroyed),
4136 gtk_window_set_title (GTK_WINDOW (window), "entry");
4137 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
4140 box1 = gtk_vbox_new (FALSE, 0);
4141 gtk_container_add (GTK_CONTAINER (window), box1);
4144 box2 = gtk_vbox_new (FALSE, 10);
4145 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
4146 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
4148 hbox = gtk_hbox_new (FALSE, 5);
4149 gtk_box_pack_start (GTK_BOX (box2), hbox, TRUE, TRUE, 0);
4151 entry = gtk_entry_new ();
4152 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");
4153 gtk_editable_select_region (GTK_EDITABLE (entry), 0, 5);
4154 gtk_box_pack_start (GTK_BOX (hbox), entry, TRUE, TRUE, 0);
4156 button = gtk_button_new_with_mnemonic ("_Props");
4157 gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, FALSE, 0);
4158 g_signal_connect (button, "clicked",
4159 G_CALLBACK (props_clicked),
4162 cb = GTK_COMBO_BOX (gtk_combo_box_entry_new_text ());
4163 gtk_combo_box_append_text (cb, "item0");
4164 gtk_combo_box_append_text (cb, "item0");
4165 gtk_combo_box_append_text (cb, "item1 item1");
4166 gtk_combo_box_append_text (cb, "item2 item2 item2");
4167 gtk_combo_box_append_text (cb, "item3 item3 item3 item3");
4168 gtk_combo_box_append_text (cb, "item4 item4 item4 item4 item4");
4169 gtk_combo_box_append_text (cb, "item5 item5 item5 item5 item5 item5");
4170 gtk_combo_box_append_text (cb, "item6 item6 item6 item6 item6");
4171 gtk_combo_box_append_text (cb, "item7 item7 item7 item7");
4172 gtk_combo_box_append_text (cb, "item8 item8 item8");
4173 gtk_combo_box_append_text (cb, "item9 item9");
4175 cb_entry = gtk_bin_get_child (GTK_BIN (cb));
4176 gtk_entry_set_text (GTK_ENTRY (cb_entry), "hello world \n\n\n foo");
4177 gtk_editable_select_region (GTK_EDITABLE (cb_entry), 0, -1);
4178 gtk_box_pack_start (GTK_BOX (box2), GTK_WIDGET (cb), TRUE, TRUE, 0);
4180 sensitive_check = gtk_check_button_new_with_label("Sensitive");
4181 gtk_box_pack_start (GTK_BOX (box2), sensitive_check, FALSE, TRUE, 0);
4182 g_signal_connect (sensitive_check, "toggled",
4183 G_CALLBACK (entry_toggle_sensitive), entry);
4184 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (sensitive_check), TRUE);
4186 has_frame_check = gtk_check_button_new_with_label("Has Frame");
4187 gtk_box_pack_start (GTK_BOX (box2), has_frame_check, FALSE, TRUE, 0);
4188 g_signal_connect (has_frame_check, "toggled",
4189 G_CALLBACK (entry_toggle_frame), entry);
4190 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (has_frame_check), TRUE);
4192 progress_check = gtk_check_button_new_with_label("Show Progress");
4193 gtk_box_pack_start (GTK_BOX (box2), progress_check, FALSE, TRUE, 0);
4194 g_signal_connect (progress_check, "toggled",
4195 G_CALLBACK (entry_toggle_progress), entry);
4197 progress_check = gtk_check_button_new_with_label("Pulse Progress");
4198 gtk_box_pack_start (GTK_BOX (box2), progress_check, FALSE, TRUE, 0);
4199 g_signal_connect (progress_check, "toggled",
4200 G_CALLBACK (entry_toggle_pulse), entry);
4202 separator = gtk_hseparator_new ();
4203 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
4205 box2 = gtk_vbox_new (FALSE, 10);
4206 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
4207 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
4209 button = gtk_button_new_with_label ("close");
4210 g_signal_connect_swapped (button, "clicked",
4211 G_CALLBACK (gtk_widget_destroy),
4213 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
4214 gtk_widget_set_can_default (button, TRUE);
4215 gtk_widget_grab_default (button);
4218 if (!gtk_widget_get_visible (window))
4219 gtk_widget_show_all (window);
4221 gtk_widget_destroy (window);
4225 create_expander (GtkWidget *widget)
4228 GtkWidget *expander;
4230 static GtkWidget *window = NULL;
4234 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
4235 gtk_window_set_screen (GTK_WINDOW (window),
4236 gtk_widget_get_screen (widget));
4238 g_signal_connect (window, "destroy",
4239 G_CALLBACK (gtk_widget_destroyed),
4242 gtk_window_set_title (GTK_WINDOW (window), "expander");
4243 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
4245 box1 = gtk_vbox_new (FALSE, 0);
4246 gtk_container_add (GTK_CONTAINER (window), box1);
4248 expander = gtk_expander_new ("The Hidden");
4250 gtk_box_pack_start (GTK_BOX (box1), expander, TRUE, TRUE, 0);
4252 hidden = gtk_label_new ("Revealed!");
4254 gtk_container_add (GTK_CONTAINER (expander), hidden);
4257 if (!gtk_widget_get_visible (window))
4258 gtk_widget_show_all (window);
4260 gtk_widget_destroy (window);
4268 event_box_label_pressed (GtkWidget *widget,
4269 GdkEventButton *event,
4272 g_print ("clicked on event box\n");
4276 event_box_button_clicked (GtkWidget *widget,
4280 g_print ("pushed button\n");
4284 event_box_toggle_visible_window (GtkWidget *checkbutton,
4285 GtkEventBox *event_box)
4287 gtk_event_box_set_visible_window (event_box,
4288 GTK_TOGGLE_BUTTON(checkbutton)->active);
4292 event_box_toggle_above_child (GtkWidget *checkbutton,
4293 GtkEventBox *event_box)
4295 gtk_event_box_set_above_child (event_box,
4296 GTK_TOGGLE_BUTTON(checkbutton)->active);
4300 create_event_box (GtkWidget *widget)
4302 static GtkWidget *window = NULL;
4308 GtkWidget *separator;
4309 GtkWidget *event_box;
4311 GtkWidget *visible_window_check;
4312 GtkWidget *above_child_check;
4321 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
4322 gtk_window_set_screen (GTK_WINDOW (window),
4323 gtk_widget_get_screen (widget));
4325 g_signal_connect (window, "destroy",
4326 G_CALLBACK (gtk_widget_destroyed),
4329 gtk_window_set_title (GTK_WINDOW (window), "event box");
4330 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
4332 box1 = gtk_vbox_new (FALSE, 0);
4333 gtk_container_add (GTK_CONTAINER (window), box1);
4334 gtk_widget_modify_bg (window, GTK_STATE_NORMAL, &color);
4336 hbox = gtk_hbox_new (FALSE, 0);
4337 gtk_box_pack_start (GTK_BOX (box1), hbox, TRUE, FALSE, 0);
4339 event_box = gtk_event_box_new ();
4340 gtk_box_pack_start (GTK_BOX (hbox), event_box, TRUE, FALSE, 0);
4342 vbox = gtk_vbox_new (FALSE, 0);
4343 gtk_container_add (GTK_CONTAINER (event_box), vbox);
4344 g_signal_connect (event_box, "button_press_event",
4345 G_CALLBACK (event_box_label_pressed),
4348 label = gtk_label_new ("Click on this label");
4349 gtk_box_pack_start (GTK_BOX (vbox), label, TRUE, FALSE, 0);
4351 button = gtk_button_new_with_label ("button in eventbox");
4352 gtk_box_pack_start (GTK_BOX (vbox), button, TRUE, FALSE, 0);
4353 g_signal_connect (button, "clicked",
4354 G_CALLBACK (event_box_button_clicked),
4358 visible_window_check = gtk_check_button_new_with_label("Visible Window");
4359 gtk_box_pack_start (GTK_BOX (box1), visible_window_check, FALSE, TRUE, 0);
4360 g_signal_connect (visible_window_check, "toggled",
4361 G_CALLBACK (event_box_toggle_visible_window), event_box);
4362 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (visible_window_check), FALSE);
4364 above_child_check = gtk_check_button_new_with_label("Above Child");
4365 gtk_box_pack_start (GTK_BOX (box1), above_child_check, FALSE, TRUE, 0);
4366 g_signal_connect (above_child_check, "toggled",
4367 G_CALLBACK (event_box_toggle_above_child), event_box);
4368 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (above_child_check), FALSE);
4370 separator = gtk_hseparator_new ();
4371 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
4373 box2 = gtk_vbox_new (FALSE, 10);
4374 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
4375 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
4377 button = gtk_button_new_with_label ("close");
4378 g_signal_connect_swapped (button, "clicked",
4379 G_CALLBACK (gtk_widget_destroy),
4381 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
4382 gtk_widget_set_can_default (button, TRUE);
4383 gtk_widget_grab_default (button);
4386 if (!gtk_widget_get_visible (window))
4387 gtk_widget_show_all (window);
4389 gtk_widget_destroy (window);
4397 #define SIZE_GROUP_INITIAL_SIZE 50
4400 size_group_hsize_changed (GtkSpinButton *spin_button,
4403 gtk_widget_set_size_request (gtk_bin_get_child (GTK_BIN (button)),
4404 gtk_spin_button_get_value_as_int (spin_button),
4409 size_group_vsize_changed (GtkSpinButton *spin_button,
4412 gtk_widget_set_size_request (gtk_bin_get_child (GTK_BIN (button)),
4414 gtk_spin_button_get_value_as_int (spin_button));
4418 create_size_group_window (GdkScreen *screen,
4419 GtkSizeGroup *master_size_group)
4421 GtkWidget *content_area;
4424 GtkWidget *main_button;
4426 GtkWidget *spin_button;
4428 GtkSizeGroup *hgroup1;
4429 GtkSizeGroup *hgroup2;
4430 GtkSizeGroup *vgroup1;
4431 GtkSizeGroup *vgroup2;
4433 window = gtk_dialog_new_with_buttons ("GtkSizeGroup",
4439 gtk_window_set_screen (GTK_WINDOW (window), screen);
4441 gtk_window_set_resizable (GTK_WINDOW (window), TRUE);
4443 g_signal_connect (window, "response",
4444 G_CALLBACK (gtk_widget_destroy),
4447 content_area = gtk_dialog_get_content_area (GTK_DIALOG (window));
4449 table = gtk_table_new (2, 2, FALSE);
4450 gtk_box_pack_start (GTK_BOX (content_area), table, TRUE, TRUE, 0);
4452 gtk_table_set_row_spacings (GTK_TABLE (table), 5);
4453 gtk_table_set_col_spacings (GTK_TABLE (table), 5);
4454 gtk_container_set_border_width (GTK_CONTAINER (table), 5);
4455 gtk_widget_set_size_request (table, 250, 250);
4457 hgroup1 = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
4458 hgroup2 = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
4459 vgroup1 = gtk_size_group_new (GTK_SIZE_GROUP_VERTICAL);
4460 vgroup2 = gtk_size_group_new (GTK_SIZE_GROUP_VERTICAL);
4462 main_button = gtk_button_new_with_label ("X");
4464 gtk_table_attach (GTK_TABLE (table), main_button,
4466 GTK_EXPAND, GTK_EXPAND,
4468 gtk_size_group_add_widget (master_size_group, main_button);
4469 gtk_size_group_add_widget (hgroup1, main_button);
4470 gtk_size_group_add_widget (vgroup1, main_button);
4471 gtk_widget_set_size_request (gtk_bin_get_child (GTK_BIN (main_button)),
4472 SIZE_GROUP_INITIAL_SIZE,
4473 SIZE_GROUP_INITIAL_SIZE);
4475 button = gtk_button_new ();
4476 gtk_table_attach (GTK_TABLE (table), button,
4478 GTK_EXPAND, GTK_EXPAND,
4480 gtk_size_group_add_widget (vgroup1, button);
4481 gtk_size_group_add_widget (vgroup2, button);
4483 button = gtk_button_new ();
4484 gtk_table_attach (GTK_TABLE (table), button,
4486 GTK_EXPAND, GTK_EXPAND,
4488 gtk_size_group_add_widget (hgroup1, button);
4489 gtk_size_group_add_widget (hgroup2, button);
4491 button = gtk_button_new ();
4492 gtk_table_attach (GTK_TABLE (table), button,
4494 GTK_EXPAND, GTK_EXPAND,
4496 gtk_size_group_add_widget (hgroup2, button);
4497 gtk_size_group_add_widget (vgroup2, button);
4499 g_object_unref (hgroup1);
4500 g_object_unref (hgroup2);
4501 g_object_unref (vgroup1);
4502 g_object_unref (vgroup2);
4504 hbox = gtk_hbox_new (FALSE, 5);
4505 gtk_box_pack_start (GTK_BOX (content_area), hbox, FALSE, FALSE, 0);
4507 spin_button = gtk_spin_button_new_with_range (1, 100, 1);
4508 gtk_spin_button_set_value (GTK_SPIN_BUTTON (spin_button), SIZE_GROUP_INITIAL_SIZE);
4509 gtk_box_pack_start (GTK_BOX (hbox), spin_button, TRUE, TRUE, 0);
4510 g_signal_connect (spin_button, "value_changed",
4511 G_CALLBACK (size_group_hsize_changed), main_button);
4513 spin_button = gtk_spin_button_new_with_range (1, 100, 1);
4514 gtk_spin_button_set_value (GTK_SPIN_BUTTON (spin_button), SIZE_GROUP_INITIAL_SIZE);
4515 gtk_box_pack_start (GTK_BOX (hbox), spin_button, TRUE, TRUE, 0);
4516 g_signal_connect (spin_button, "value_changed",
4517 G_CALLBACK (size_group_vsize_changed), main_button);
4523 create_size_groups (GtkWidget *widget)
4525 static GtkWidget *window1 = NULL;
4526 static GtkWidget *window2 = NULL;
4527 static GtkSizeGroup *master_size_group;
4529 if (!master_size_group)
4530 master_size_group = gtk_size_group_new (GTK_SIZE_GROUP_BOTH);
4534 window1 = create_size_group_window (gtk_widget_get_screen (widget),
4537 g_signal_connect (window1, "destroy",
4538 G_CALLBACK (gtk_widget_destroyed),
4544 window2 = create_size_group_window (gtk_widget_get_screen (widget),
4547 g_signal_connect (window2, "destroy",
4548 G_CALLBACK (gtk_widget_destroyed),
4552 if (gtk_widget_get_visible (window1) && gtk_widget_get_visible (window2))
4554 gtk_widget_destroy (window1);
4555 gtk_widget_destroy (window2);
4559 if (!gtk_widget_get_visible (window1))
4560 gtk_widget_show_all (window1);
4561 if (!gtk_widget_get_visible (window2))
4562 gtk_widget_show_all (window2);
4570 static GtkWidget *spinner1;
4573 toggle_snap (GtkWidget *widget, GtkSpinButton *spin)
4575 gtk_spin_button_set_snap_to_ticks (spin, GTK_TOGGLE_BUTTON (widget)->active);
4579 toggle_numeric (GtkWidget *widget, GtkSpinButton *spin)
4581 gtk_spin_button_set_numeric (spin, GTK_TOGGLE_BUTTON (widget)->active);
4585 change_digits (GtkWidget *widget, GtkSpinButton *spin)
4587 gtk_spin_button_set_digits (GTK_SPIN_BUTTON (spinner1),
4588 gtk_spin_button_get_value_as_int (spin));
4592 get_value (GtkWidget *widget, gpointer data)
4596 GtkSpinButton *spin;
4598 spin = GTK_SPIN_BUTTON (spinner1);
4599 label = GTK_LABEL (g_object_get_data (G_OBJECT (widget), "user_data"));
4600 if (GPOINTER_TO_INT (data) == 1)
4601 sprintf (buf, "%d", gtk_spin_button_get_value_as_int (spin));
4603 sprintf (buf, "%0.*f",
4604 gtk_spin_button_get_digits (spin),
4605 gtk_spin_button_get_value (spin));
4607 gtk_label_set_text (label, buf);
4611 get_spin_value (GtkWidget *widget, gpointer data)
4615 GtkSpinButton *spin;
4617 spin = GTK_SPIN_BUTTON (widget);
4618 label = GTK_LABEL (data);
4620 buffer = g_strdup_printf ("%0.*f",
4621 gtk_spin_button_get_digits (spin),
4622 gtk_spin_button_get_value (spin));
4623 gtk_label_set_text (label, buffer);
4629 spin_button_time_output_func (GtkSpinButton *spin_button)
4631 GtkAdjustment *adjustment;
4632 static gchar buf[6];
4636 adjustment = gtk_spin_button_get_adjustment (spin_button);
4637 hours = gtk_adjustment_get_value (adjustment) / 60.0;
4638 minutes = (fabs(floor (hours) - hours) < 1e-5) ? 0.0 : 30;
4639 sprintf (buf, "%02.0f:%02.0f", floor (hours), minutes);
4640 if (strcmp (buf, gtk_entry_get_text (GTK_ENTRY (spin_button))))
4641 gtk_entry_set_text (GTK_ENTRY (spin_button), buf);
4646 spin_button_month_input_func (GtkSpinButton *spin_button,
4650 static gchar *month[12] = { "January", "February", "March", "April",
4651 "May", "June", "July", "August",
4652 "September", "October", "November", "December" };
4654 gboolean found = FALSE;
4656 for (i = 1; i <= 12; i++)
4658 tmp1 = g_ascii_strup (month[i - 1], -1);
4659 tmp2 = g_ascii_strup (gtk_entry_get_text (GTK_ENTRY (spin_button)), -1);
4660 if (strstr (tmp1, tmp2) == tmp1)
4670 return GTK_INPUT_ERROR;
4672 *new_val = (gdouble) i;
4677 spin_button_month_output_func (GtkSpinButton *spin_button)
4679 GtkAdjustment *adjustment;
4682 static gchar *month[12] = { "January", "February", "March", "April",
4683 "May", "June", "July", "August", "September",
4684 "October", "November", "December" };
4686 adjustment = gtk_spin_button_get_adjustment (spin_button);
4687 value = gtk_adjustment_get_value (adjustment);
4688 for (i = 1; i <= 12; i++)
4689 if (fabs (value - (double)i) < 1e-5)
4691 if (strcmp (month[i-1], gtk_entry_get_text (GTK_ENTRY (spin_button))))
4692 gtk_entry_set_text (GTK_ENTRY (spin_button), month[i-1]);
4698 spin_button_hex_input_func (GtkSpinButton *spin_button,
4705 buf = gtk_entry_get_text (GTK_ENTRY (spin_button));
4706 res = strtol(buf, &err, 16);
4709 return GTK_INPUT_ERROR;
4715 spin_button_hex_output_func (GtkSpinButton *spin_button)
4717 GtkAdjustment *adjustment;
4718 static gchar buf[7];
4721 adjustment = gtk_spin_button_get_adjustment (spin_button);
4722 val = (gint) gtk_adjustment_get_value (adjustment);
4723 if (fabs (val) < 1e-5)
4724 sprintf (buf, "0x00");
4726 sprintf (buf, "0x%.2X", val);
4727 if (strcmp (buf, gtk_entry_get_text (GTK_ENTRY (spin_button))))
4728 gtk_entry_set_text (GTK_ENTRY (spin_button), buf);
4733 create_spins (GtkWidget *widget)
4735 static GtkWidget *window = NULL;
4738 GtkWidget *main_vbox;
4741 GtkWidget *spinner2;
4745 GtkWidget *val_label;
4750 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
4751 gtk_window_set_screen (GTK_WINDOW (window),
4752 gtk_widget_get_screen (widget));
4754 g_signal_connect (window, "destroy",
4755 G_CALLBACK (gtk_widget_destroyed),
4758 gtk_window_set_title (GTK_WINDOW (window), "GtkSpinButton");
4760 main_vbox = gtk_vbox_new (FALSE, 5);
4761 gtk_container_set_border_width (GTK_CONTAINER (main_vbox), 10);
4762 gtk_container_add (GTK_CONTAINER (window), main_vbox);
4764 frame = gtk_frame_new ("Not accelerated");
4765 gtk_box_pack_start (GTK_BOX (main_vbox), frame, TRUE, TRUE, 0);
4767 vbox = gtk_vbox_new (FALSE, 0);
4768 gtk_container_set_border_width (GTK_CONTAINER (vbox), 5);
4769 gtk_container_add (GTK_CONTAINER (frame), vbox);
4771 /* Time, month, hex spinners */
4773 hbox = gtk_hbox_new (FALSE, 0);
4774 gtk_box_pack_start (GTK_BOX (vbox), hbox, TRUE, TRUE, 5);
4776 vbox2 = gtk_vbox_new (FALSE, 0);
4777 gtk_box_pack_start (GTK_BOX (hbox), vbox2, TRUE, TRUE, 5);
4779 label = gtk_label_new ("Time :");
4780 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
4781 gtk_box_pack_start (GTK_BOX (vbox2), label, FALSE, TRUE, 0);
4783 adj = (GtkAdjustment *) gtk_adjustment_new (0, 0, 1410, 30, 60, 0);
4784 spinner = gtk_spin_button_new (adj, 0, 0);
4785 gtk_editable_set_editable (GTK_EDITABLE (spinner), FALSE);
4786 g_signal_connect (spinner,
4788 G_CALLBACK (spin_button_time_output_func),
4790 gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (spinner), TRUE);
4791 gtk_entry_set_width_chars (GTK_ENTRY (spinner), 5);
4792 gtk_box_pack_start (GTK_BOX (vbox2), spinner, FALSE, TRUE, 0);
4794 vbox2 = gtk_vbox_new (FALSE, 0);
4795 gtk_box_pack_start (GTK_BOX (hbox), vbox2, TRUE, TRUE, 5);
4797 label = gtk_label_new ("Month :");
4798 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
4799 gtk_box_pack_start (GTK_BOX (vbox2), label, FALSE, TRUE, 0);
4801 adj = (GtkAdjustment *) gtk_adjustment_new (1.0, 1.0, 12.0, 1.0,
4803 spinner = gtk_spin_button_new (adj, 0, 0);
4804 gtk_spin_button_set_update_policy (GTK_SPIN_BUTTON (spinner),
4805 GTK_UPDATE_IF_VALID);
4806 g_signal_connect (spinner,
4808 G_CALLBACK (spin_button_month_input_func),
4810 g_signal_connect (spinner,
4812 G_CALLBACK (spin_button_month_output_func),
4814 gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (spinner), TRUE);
4815 gtk_entry_set_width_chars (GTK_ENTRY (spinner), 9);
4816 gtk_box_pack_start (GTK_BOX (vbox2), spinner, FALSE, TRUE, 0);
4818 vbox2 = gtk_vbox_new (FALSE, 0);
4819 gtk_box_pack_start (GTK_BOX (hbox), vbox2, TRUE, TRUE, 5);
4821 label = gtk_label_new ("Hex :");
4822 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
4823 gtk_box_pack_start (GTK_BOX (vbox2), label, FALSE, TRUE, 0);
4825 adj = (GtkAdjustment *) gtk_adjustment_new (0, 0, 255, 1, 16, 0);
4826 spinner = gtk_spin_button_new (adj, 0, 0);
4827 gtk_editable_set_editable (GTK_EDITABLE (spinner), TRUE);
4828 g_signal_connect (spinner,
4830 G_CALLBACK (spin_button_hex_input_func),
4832 g_signal_connect (spinner,
4834 G_CALLBACK (spin_button_hex_output_func),
4836 gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (spinner), TRUE);
4837 gtk_entry_set_width_chars (GTK_ENTRY (spinner), 4);
4838 gtk_box_pack_start (GTK_BOX (vbox2), spinner, FALSE, TRUE, 0);
4840 frame = gtk_frame_new ("Accelerated");
4841 gtk_box_pack_start (GTK_BOX (main_vbox), frame, TRUE, TRUE, 0);
4843 vbox = gtk_vbox_new (FALSE, 0);
4844 gtk_container_set_border_width (GTK_CONTAINER (vbox), 5);
4845 gtk_container_add (GTK_CONTAINER (frame), vbox);
4847 hbox = gtk_hbox_new (FALSE, 0);
4848 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 5);
4850 vbox2 = gtk_vbox_new (FALSE, 0);
4851 gtk_box_pack_start (GTK_BOX (hbox), vbox2, FALSE, FALSE, 5);
4853 label = gtk_label_new ("Value :");
4854 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
4855 gtk_box_pack_start (GTK_BOX (vbox2), label, FALSE, TRUE, 0);
4857 adj = (GtkAdjustment *) gtk_adjustment_new (0.0, -10000.0, 10000.0,
4859 spinner1 = gtk_spin_button_new (adj, 1.0, 2);
4860 gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (spinner1), TRUE);
4861 gtk_box_pack_start (GTK_BOX (vbox2), spinner1, FALSE, TRUE, 0);
4863 vbox2 = gtk_vbox_new (FALSE, 0);
4864 gtk_box_pack_start (GTK_BOX (hbox), vbox2, FALSE, FALSE, 5);
4866 label = gtk_label_new ("Digits :");
4867 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
4868 gtk_box_pack_start (GTK_BOX (vbox2), label, FALSE, TRUE, 0);
4870 adj = (GtkAdjustment *) gtk_adjustment_new (2, 1, 15, 1, 1, 0);
4871 spinner2 = gtk_spin_button_new (adj, 0.0, 0);
4872 g_signal_connect (adj, "value_changed",
4873 G_CALLBACK (change_digits),
4875 gtk_box_pack_start (GTK_BOX (vbox2), spinner2, FALSE, TRUE, 0);
4877 hbox = gtk_hbox_new (FALSE, 0);
4878 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 5);
4880 button = gtk_check_button_new_with_label ("Snap to 0.5-ticks");
4881 g_signal_connect (button, "clicked",
4882 G_CALLBACK (toggle_snap),
4884 gtk_box_pack_start (GTK_BOX (vbox), button, TRUE, TRUE, 0);
4885 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE);
4887 button = gtk_check_button_new_with_label ("Numeric only input mode");
4888 g_signal_connect (button, "clicked",
4889 G_CALLBACK (toggle_numeric),
4891 gtk_box_pack_start (GTK_BOX (vbox), button, TRUE, TRUE, 0);
4892 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE);
4894 val_label = gtk_label_new ("");
4896 hbox = gtk_hbox_new (FALSE, 0);
4897 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 5);
4899 button = gtk_button_new_with_label ("Value as Int");
4900 g_object_set_data (G_OBJECT (button), "user_data", val_label);
4901 g_signal_connect (button, "clicked",
4902 G_CALLBACK (get_value),
4903 GINT_TO_POINTER (1));
4904 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
4906 button = gtk_button_new_with_label ("Value as Float");
4907 g_object_set_data (G_OBJECT (button), "user_data", val_label);
4908 g_signal_connect (button, "clicked",
4909 G_CALLBACK (get_value),
4910 GINT_TO_POINTER (2));
4911 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
4913 gtk_box_pack_start (GTK_BOX (vbox), val_label, TRUE, TRUE, 0);
4914 gtk_label_set_text (GTK_LABEL (val_label), "0");
4916 frame = gtk_frame_new ("Using Convenience Constructor");
4917 gtk_box_pack_start (GTK_BOX (main_vbox), frame, TRUE, TRUE, 0);
4919 hbox = gtk_hbox_new (FALSE, 0);
4920 gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
4921 gtk_container_add (GTK_CONTAINER (frame), hbox);
4923 val_label = gtk_label_new ("0.0");
4925 spinner = gtk_spin_button_new_with_range (0.0, 10.0, 0.009);
4926 gtk_spin_button_set_value (GTK_SPIN_BUTTON (spinner), 0.0);
4927 g_signal_connect (spinner, "value_changed",
4928 G_CALLBACK (get_spin_value), val_label);
4929 gtk_box_pack_start (GTK_BOX (hbox), spinner, TRUE, TRUE, 5);
4930 gtk_box_pack_start (GTK_BOX (hbox), val_label, TRUE, TRUE, 5);
4932 hbox = gtk_hbox_new (FALSE, 0);
4933 gtk_box_pack_start (GTK_BOX (main_vbox), hbox, FALSE, TRUE, 0);
4935 button = gtk_button_new_with_label ("Close");
4936 g_signal_connect_swapped (button, "clicked",
4937 G_CALLBACK (gtk_widget_destroy),
4939 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
4942 if (!gtk_widget_get_visible (window))
4943 gtk_widget_show_all (window);
4945 gtk_widget_destroy (window);
4954 cursor_draw (GtkWidget *widget,
4960 width = gtk_widget_get_allocated_width (widget);
4961 height = gtk_widget_get_allocated_height (widget);
4963 cairo_set_source_rgb (cr, 1, 1, 1);
4964 cairo_rectangle (cr, 0, 0, width, height / 2);
4967 cairo_set_source_rgb (cr, 0, 0, 0);
4968 cairo_rectangle (cr, 0, height / 2, width, height / 2);
4971 gdk_cairo_set_source_color (cr, >k_widget_get_style (widget)->bg[GTK_STATE_NORMAL]);
4972 cairo_rectangle (cr, width / 3, height / 3, width / 3, height / 3);
4979 set_cursor (GtkWidget *spinner,
4988 c = CLAMP (gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (spinner)), 0, 152);
4991 label = g_object_get_data (G_OBJECT (spinner), "user_data");
4993 class = g_type_class_ref (GDK_TYPE_CURSOR_TYPE);
4994 vals = class->values;
4996 while (vals && vals->value != c)
4999 gtk_label_set_text (GTK_LABEL (label), vals->value_nick);
5001 gtk_label_set_text (GTK_LABEL (label), "<unknown>");
5003 g_type_class_unref (class);
5005 cursor = gdk_cursor_new_for_display (gtk_widget_get_display (widget), c);
5006 gdk_window_set_cursor (gtk_widget_get_window (widget),
5008 gdk_cursor_unref (cursor);
5012 cursor_event (GtkWidget *widget,
5014 GtkSpinButton *spinner)
5016 if ((event->type == GDK_BUTTON_PRESS) &&
5017 ((event->button.button == 1) ||
5018 (event->button.button == 3)))
5020 gtk_spin_button_spin (spinner, event->button.button == 1 ?
5021 GTK_SPIN_STEP_FORWARD : GTK_SPIN_STEP_BACKWARD, 0);
5028 #ifdef GDK_WINDOWING_X11
5029 #include "x11/gdkx.h"
5032 change_cursor_theme (GtkWidget *widget,
5039 children = gtk_container_get_children (GTK_CONTAINER (data));
5041 theme = gtk_entry_get_text (GTK_ENTRY (children->next->data));
5042 size = (gint) gtk_spin_button_get_value (GTK_SPIN_BUTTON (children->next->next->data));
5044 g_list_free (children);
5046 gdk_x11_display_set_cursor_theme (gtk_widget_get_display (widget),
5053 create_cursors (GtkWidget *widget)
5055 static GtkWidget *window = NULL;
5058 GtkWidget *main_vbox;
5071 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
5072 gtk_window_set_screen (GTK_WINDOW (window),
5073 gtk_widget_get_screen (widget));
5075 g_signal_connect (window, "destroy",
5076 G_CALLBACK (gtk_widget_destroyed),
5079 gtk_window_set_title (GTK_WINDOW (window), "Cursors");
5081 main_vbox = gtk_vbox_new (FALSE, 5);
5082 gtk_container_set_border_width (GTK_CONTAINER (main_vbox), 0);
5083 gtk_container_add (GTK_CONTAINER (window), main_vbox);
5086 g_object_new (gtk_vbox_get_type (),
5087 "GtkBox::homogeneous", FALSE,
5088 "GtkBox::spacing", 5,
5089 "GtkContainer::border_width", 10,
5090 "GtkWidget::parent", main_vbox,
5091 "GtkWidget::visible", TRUE,
5094 #ifdef GDK_WINDOWING_X11
5095 hbox = gtk_hbox_new (FALSE, 0);
5096 gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
5097 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0);
5099 label = gtk_label_new ("Cursor Theme : ");
5100 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
5101 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
5103 entry = gtk_entry_new ();
5104 gtk_entry_set_text (GTK_ENTRY (entry), "default");
5105 gtk_box_pack_start (GTK_BOX (hbox), entry, FALSE, TRUE, 0);
5107 size = gtk_spin_button_new_with_range (1.0, 64.0, 1.0);
5108 gtk_spin_button_set_value (GTK_SPIN_BUTTON (size), 24.0);
5109 gtk_box_pack_start (GTK_BOX (hbox), size, TRUE, TRUE, 0);
5111 g_signal_connect (entry, "changed",
5112 G_CALLBACK (change_cursor_theme), hbox);
5113 g_signal_connect (size, "changed",
5114 G_CALLBACK (change_cursor_theme), hbox);
5117 hbox = gtk_hbox_new (FALSE, 0);
5118 gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
5119 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0);
5121 label = gtk_label_new ("Cursor Value : ");
5122 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
5123 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
5125 adj = (GtkAdjustment *) gtk_adjustment_new (0,
5129 spinner = gtk_spin_button_new (adj, 0, 0);
5130 gtk_box_pack_start (GTK_BOX (hbox), spinner, TRUE, TRUE, 0);
5133 g_object_new (gtk_frame_get_type (),
5134 "GtkFrame::label_xalign", 0.5,
5135 "GtkFrame::label", "Cursor Area",
5136 "GtkContainer::border_width", 10,
5137 "GtkWidget::parent", vbox,
5138 "GtkWidget::visible", TRUE,
5141 darea = gtk_drawing_area_new ();
5142 gtk_widget_set_size_request (darea, 80, 80);
5143 gtk_container_add (GTK_CONTAINER (frame), darea);
5144 g_signal_connect (darea,
5146 G_CALLBACK (cursor_draw),
5148 gtk_widget_set_events (darea, GDK_EXPOSURE_MASK | GDK_BUTTON_PRESS_MASK);
5149 g_signal_connect (darea,
5150 "button_press_event",
5151 G_CALLBACK (cursor_event),
5153 gtk_widget_show (darea);
5155 g_signal_connect (spinner, "changed",
5156 G_CALLBACK (set_cursor),
5159 label = g_object_new (GTK_TYPE_LABEL,
5164 gtk_container_child_set (GTK_CONTAINER (vbox), label,
5167 g_object_set_data (G_OBJECT (spinner), "user_data", label);
5170 g_object_new (gtk_hseparator_get_type (),
5171 "GtkWidget::visible", TRUE,
5173 gtk_box_pack_start (GTK_BOX (main_vbox), any, FALSE, TRUE, 0);
5175 hbox = gtk_hbox_new (FALSE, 0);
5176 gtk_container_set_border_width (GTK_CONTAINER (hbox), 10);
5177 gtk_box_pack_start (GTK_BOX (main_vbox), hbox, FALSE, TRUE, 0);
5179 button = gtk_button_new_with_label ("Close");
5180 g_signal_connect_swapped (button, "clicked",
5181 G_CALLBACK (gtk_widget_destroy),
5183 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
5185 gtk_widget_show_all (window);
5187 set_cursor (spinner, darea);
5190 gtk_widget_destroy (window);
5198 color_selection_ok (GtkWidget *w,
5199 GtkColorSelectionDialog *cs)
5201 GtkWidget *colorsel;
5204 colorsel = gtk_color_selection_dialog_get_color_selection (cs);
5206 gtk_color_selection_get_current_color (GTK_COLOR_SELECTION (colorsel), &color);
5207 gtk_color_selection_set_current_color (GTK_COLOR_SELECTION (colorsel), &color);
5211 color_selection_changed (GtkWidget *w,
5212 GtkColorSelectionDialog *cs)
5214 GtkWidget *colorsel;
5217 colorsel = gtk_color_selection_dialog_get_color_selection (cs);
5218 gtk_color_selection_get_current_color (GTK_COLOR_SELECTION (colorsel), &color);
5219 gtk_color_selection_set_current_color (GTK_COLOR_SELECTION (colorsel), &color);
5224 opacity_toggled_cb (GtkWidget *w,
5225 GtkColorSelectionDialog *cs)
5227 GtkColorSelection *colorsel;
5229 colorsel = GTK_COLOR_SELECTION (cs->colorsel);
5230 gtk_color_selection_set_has_opacity_control (colorsel,
5231 gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (w)));
5235 palette_toggled_cb (GtkWidget *w,
5236 GtkColorSelectionDialog *cs)
5238 GtkColorSelection *colorsel;
5240 colorsel = GTK_COLOR_SELECTION (cs->colorsel);
5241 gtk_color_selection_set_has_palette (colorsel,
5242 gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (w)));
5247 create_color_selection (GtkWidget *widget)
5249 static GtkWidget *window = NULL;
5258 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
5259 gtk_window_set_screen (GTK_WINDOW (window),
5260 gtk_widget_get_screen (widget));
5262 g_signal_connect (window, "destroy",
5263 G_CALLBACK (gtk_widget_destroyed),
5266 gtk_window_set_title (GTK_WINDOW (window), "GtkColorButton");
5267 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
5269 hbox = gtk_hbox_new (FALSE, 8);
5270 gtk_container_set_border_width (GTK_CONTAINER (hbox), 8);
5271 gtk_container_add (GTK_CONTAINER (window), hbox);
5273 label = gtk_label_new ("Pick a color");
5274 gtk_container_add (GTK_CONTAINER (hbox), label);
5276 picker = gtk_color_button_new ();
5277 gtk_color_button_set_use_alpha (GTK_COLOR_BUTTON (picker), TRUE);
5278 gtk_container_add (GTK_CONTAINER (hbox), picker);
5280 button = gtk_button_new_with_mnemonic ("_Props");
5281 gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, FALSE, 0);
5282 g_signal_connect (button, "clicked",
5283 G_CALLBACK (props_clicked),
5287 if (!gtk_widget_get_visible (window))
5288 gtk_widget_show_all (window);
5290 gtk_widget_destroy (window);
5294 flipping_toggled_cb (GtkWidget *widget, gpointer data)
5296 int state = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget));
5297 int new_direction = state ? GTK_TEXT_DIR_RTL : GTK_TEXT_DIR_LTR;
5299 gtk_widget_set_default_direction (new_direction);
5303 orientable_toggle_orientation (GtkOrientable *orientable)
5305 GtkOrientation orientation;
5307 orientation = gtk_orientable_get_orientation (orientable);
5308 gtk_orientable_set_orientation (orientable,
5309 orientation == GTK_ORIENTATION_HORIZONTAL ?
5310 GTK_ORIENTATION_VERTICAL :
5311 GTK_ORIENTATION_HORIZONTAL);
5313 if (GTK_IS_CONTAINER (orientable))
5318 children = gtk_container_get_children (GTK_CONTAINER (orientable));
5320 for (child = children; child; child = child->next)
5322 if (GTK_IS_ORIENTABLE (child->data))
5323 orientable_toggle_orientation (child->data);
5326 g_list_free (children);
5331 flipping_orientation_toggled_cb (GtkWidget *widget, gpointer data)
5333 GtkWidget *content_area;
5334 GtkWidget *toplevel;
5336 toplevel = gtk_widget_get_toplevel (widget);
5337 content_area = gtk_dialog_get_content_area (GTK_DIALOG (toplevel));
5338 orientable_toggle_orientation (GTK_ORIENTABLE (content_area));
5342 set_direction_recurse (GtkWidget *widget,
5345 GtkTextDirection *dir = data;
5347 gtk_widget_set_direction (widget, *dir);
5348 if (GTK_IS_CONTAINER (widget))
5349 gtk_container_foreach (GTK_CONTAINER (widget),
5350 set_direction_recurse,
5355 create_forward_back (const char *title,
5356 GtkTextDirection text_dir)
5358 GtkWidget *frame = gtk_frame_new (title);
5359 GtkWidget *bbox = gtk_hbutton_box_new ();
5360 GtkWidget *back_button = gtk_button_new_from_stock (GTK_STOCK_GO_BACK);
5361 GtkWidget *forward_button = gtk_button_new_from_stock (GTK_STOCK_GO_FORWARD);
5363 gtk_container_set_border_width (GTK_CONTAINER (bbox), 5);
5365 gtk_container_add (GTK_CONTAINER (frame), bbox);
5366 gtk_container_add (GTK_CONTAINER (bbox), back_button);
5367 gtk_container_add (GTK_CONTAINER (bbox), forward_button);
5369 set_direction_recurse (frame, &text_dir);
5375 create_flipping (GtkWidget *widget)
5377 static GtkWidget *window = NULL;
5378 GtkWidget *check_button, *button;
5379 GtkWidget *action_area, *content_area;
5383 window = gtk_dialog_new ();
5385 gtk_window_set_screen (GTK_WINDOW (window),
5386 gtk_widget_get_screen (widget));
5388 g_signal_connect (window, "destroy",
5389 G_CALLBACK (gtk_widget_destroyed),
5392 content_area = gtk_dialog_get_content_area (GTK_DIALOG (window));
5393 action_area = gtk_dialog_get_action_area (GTK_DIALOG (window));
5395 gtk_window_set_title (GTK_WINDOW (window), "Bidirectional Flipping");
5397 check_button = gtk_check_button_new_with_label ("Right-to-left global direction");
5398 gtk_container_set_border_width (GTK_CONTAINER (check_button), 10);
5399 gtk_box_pack_start (GTK_BOX (content_area), check_button, TRUE, TRUE, 0);
5401 if (gtk_widget_get_default_direction () == GTK_TEXT_DIR_RTL)
5402 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check_button), TRUE);
5404 g_signal_connect (check_button, "toggled",
5405 G_CALLBACK (flipping_toggled_cb), NULL);
5407 check_button = gtk_check_button_new_with_label ("Toggle orientation of all boxes");
5408 gtk_container_set_border_width (GTK_CONTAINER (check_button), 10);
5409 gtk_box_pack_start (GTK_BOX (content_area), check_button, TRUE, TRUE, 0);
5411 g_signal_connect (check_button, "toggled",
5412 G_CALLBACK (flipping_orientation_toggled_cb), NULL);
5414 gtk_box_pack_start (GTK_BOX (content_area),
5415 create_forward_back ("Default", GTK_TEXT_DIR_NONE),
5418 gtk_box_pack_start (GTK_BOX (content_area),
5419 create_forward_back ("Left-to-Right", GTK_TEXT_DIR_LTR),
5422 gtk_box_pack_start (GTK_BOX (content_area),
5423 create_forward_back ("Right-to-Left", GTK_TEXT_DIR_RTL),
5426 button = gtk_button_new_with_label ("Close");
5427 g_signal_connect_swapped (button, "clicked",
5428 G_CALLBACK (gtk_widget_destroy), window);
5429 gtk_box_pack_start (GTK_BOX (action_area), button, TRUE, TRUE, 0);
5432 if (!gtk_widget_get_visible (window))
5433 gtk_widget_show_all (window);
5435 gtk_widget_destroy (window);
5443 make_focus_table (GList **list)
5448 table = gtk_table_new (5, 5, FALSE);
5461 widget = gtk_entry_new ();
5463 widget = gtk_button_new_with_label ("Foo");
5465 *list = g_list_prepend (*list, widget);
5467 gtk_table_attach (GTK_TABLE (table),
5471 GTK_EXPAND | GTK_FILL,
5472 GTK_EXPAND | GTK_FILL,
5481 *list = g_list_reverse (*list);
5487 create_focus (GtkWidget *widget)
5489 static GtkWidget *window = NULL;
5493 GtkWidget *content_area;
5498 window = gtk_dialog_new_with_buttons ("Keyboard focus navigation",
5504 gtk_window_set_screen (GTK_WINDOW (window),
5505 gtk_widget_get_screen (widget));
5507 g_signal_connect (window, "destroy",
5508 G_CALLBACK (gtk_widget_destroyed),
5511 g_signal_connect (window, "response",
5512 G_CALLBACK (gtk_widget_destroy),
5515 content_area = gtk_dialog_get_content_area (GTK_DIALOG (window));
5517 gtk_window_set_title (GTK_WINDOW (window), "Keyboard Focus Navigation");
5519 frame = gtk_frame_new ("Weird tab focus chain");
5521 gtk_box_pack_start (GTK_BOX (content_area), frame, TRUE, TRUE, 0);
5523 table = make_focus_table (&list);
5525 gtk_container_add (GTK_CONTAINER (frame), table);
5527 gtk_container_set_focus_chain (GTK_CONTAINER (table),
5532 frame = gtk_frame_new ("Default tab focus chain");
5534 gtk_box_pack_start (GTK_BOX (content_area), frame, TRUE, TRUE, 0);
5537 table = make_focus_table (&list);
5541 gtk_container_add (GTK_CONTAINER (frame), table);
5544 if (!gtk_widget_get_visible (window))
5545 gtk_widget_show_all (window);
5547 gtk_widget_destroy (window);
5555 font_selection_ok (GtkWidget *w,
5556 GtkFontSelectionDialog *fs)
5558 gchar *s = gtk_font_selection_dialog_get_font_name (fs);
5560 g_print ("%s\n", s);
5562 gtk_widget_destroy (GTK_WIDGET (fs));
5566 create_font_selection (GtkWidget *widget)
5568 static GtkWidget *window = NULL;
5576 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
5577 gtk_window_set_screen (GTK_WINDOW (window),
5578 gtk_widget_get_screen (widget));
5580 g_signal_connect (window, "destroy",
5581 G_CALLBACK (gtk_widget_destroyed),
5584 gtk_window_set_title (GTK_WINDOW (window), "GtkFontButton");
5585 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
5587 hbox = gtk_hbox_new (FALSE, 8);
5588 gtk_container_set_border_width (GTK_CONTAINER (hbox), 8);
5589 gtk_container_add (GTK_CONTAINER (window), hbox);
5591 label = gtk_label_new ("Pick a font");
5592 gtk_container_add (GTK_CONTAINER (hbox), label);
5594 picker = gtk_font_button_new ();
5595 gtk_font_button_set_use_font (GTK_FONT_BUTTON (picker), TRUE);
5596 gtk_container_add (GTK_CONTAINER (hbox), picker);
5599 if (!gtk_widget_get_visible (window))
5600 gtk_widget_show_all (window);
5602 gtk_widget_destroy (window);
5609 static GtkWidget *dialog_window = NULL;
5612 label_toggle (GtkWidget *widget,
5617 *label = gtk_label_new ("Dialog Test");
5618 g_signal_connect (*label,
5620 G_CALLBACK (gtk_widget_destroyed),
5622 gtk_misc_set_padding (GTK_MISC (*label), 10, 10);
5623 gtk_box_pack_start (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (dialog_window))),
5624 *label, TRUE, TRUE, 0);
5625 gtk_widget_show (*label);
5628 gtk_widget_destroy (*label);
5632 create_dialog (GtkWidget *widget)
5634 static GtkWidget *label;
5635 GtkWidget *action_area;
5640 /* This is a terrible example; it's much simpler to create
5641 * dialogs than this. Don't use testgtk for example code,
5645 dialog_window = gtk_dialog_new ();
5646 gtk_window_set_screen (GTK_WINDOW (dialog_window),
5647 gtk_widget_get_screen (widget));
5649 g_signal_connect (dialog_window, "destroy",
5650 G_CALLBACK (gtk_widget_destroyed),
5653 action_area = gtk_dialog_get_action_area (GTK_DIALOG (dialog_window));
5655 gtk_window_set_title (GTK_WINDOW (dialog_window), "GtkDialog");
5656 gtk_container_set_border_width (GTK_CONTAINER (dialog_window), 0);
5658 button = gtk_button_new_with_label ("OK");
5659 gtk_widget_set_can_default (button, TRUE);
5660 gtk_box_pack_start (GTK_BOX (action_area), button, TRUE, TRUE, 0);
5661 gtk_widget_grab_default (button);
5662 gtk_widget_show (button);
5664 button = gtk_button_new_with_label ("Toggle");
5665 g_signal_connect (button, "clicked",
5666 G_CALLBACK (label_toggle),
5668 gtk_widget_set_can_default (button, TRUE);
5669 gtk_box_pack_start (GTK_BOX (action_area), button, TRUE, TRUE, 0);
5670 gtk_widget_show (button);
5675 if (!gtk_widget_get_visible (dialog_window))
5676 gtk_widget_show (dialog_window);
5678 gtk_widget_destroy (dialog_window);
5681 /* Display & Screen test
5688 GtkWidget *radio_dpy;
5689 GtkWidget *toplevel;
5690 GtkWidget *dialog_window;
5691 } ScreenDisplaySelection;
5694 screen_display_check (GtkWidget *widget, ScreenDisplaySelection *data)
5696 const gchar *display_name;
5697 GdkDisplay *display = gtk_widget_get_display (widget);
5699 GdkScreen *new_screen = NULL;
5700 GdkScreen *current_screen = gtk_widget_get_screen (widget);
5702 if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (data->radio_dpy)))
5704 display_name = gtk_entry_get_text (GTK_ENTRY (data->entry));
5705 display = gdk_display_open (display_name);
5709 dialog = gtk_message_dialog_new (GTK_WINDOW (gtk_widget_get_toplevel (widget)),
5710 GTK_DIALOG_DESTROY_WITH_PARENT,
5713 "The display :\n%s\ncannot be opened",
5715 gtk_window_set_screen (GTK_WINDOW (dialog), current_screen);
5716 gtk_widget_show (dialog);
5717 g_signal_connect (dialog, "response",
5718 G_CALLBACK (gtk_widget_destroy),
5723 GtkTreeModel *model = gtk_combo_box_get_model (GTK_COMBO_BOX (data->combo));
5726 gboolean found = FALSE;
5727 while (gtk_tree_model_iter_nth_child (model, &iter, NULL, i++))
5730 gtk_tree_model_get (model, &iter, 0, &name, -1);
5731 found = !g_ascii_strcasecmp (display_name, name);
5738 gtk_combo_box_append_text (GTK_COMBO_BOX (data->combo), display_name);
5739 new_screen = gdk_display_get_default_screen (display);
5744 gint number_of_screens = gdk_display_get_n_screens (display);
5745 gint screen_num = gdk_screen_get_number (current_screen);
5746 if ((screen_num +1) < number_of_screens)
5747 new_screen = gdk_display_get_screen (display, screen_num + 1);
5749 new_screen = gdk_display_get_screen (display, 0);
5754 gtk_window_set_screen (GTK_WINDOW (data->toplevel), new_screen);
5755 gtk_widget_destroy (data->dialog_window);
5760 screen_display_destroy_diag (GtkWidget *widget, GtkWidget *data)
5762 gtk_widget_destroy (data);
5766 create_display_screen (GtkWidget *widget)
5768 GtkWidget *table, *frame, *window, *combo_dpy, *vbox;
5769 GtkWidget *radio_dpy, *radio_scr, *applyb, *cancelb;
5771 ScreenDisplaySelection *scr_dpy_data;
5772 GdkScreen *screen = gtk_widget_get_screen (widget);
5773 GdkDisplay *display = gdk_screen_get_display (screen);
5775 window = g_object_new (gtk_window_get_type (),
5778 "type", GTK_WINDOW_TOPLEVEL,
5780 "Screen or Display selection",
5781 "border_width", 10, NULL);
5782 g_signal_connect (window, "destroy",
5783 G_CALLBACK (gtk_widget_destroy), NULL);
5785 vbox = gtk_vbox_new (FALSE, 3);
5786 gtk_container_add (GTK_CONTAINER (window), vbox);
5788 frame = gtk_frame_new ("Select screen or display");
5789 gtk_container_add (GTK_CONTAINER (vbox), frame);
5791 table = gtk_table_new (2, 2, TRUE);
5792 gtk_table_set_row_spacings (GTK_TABLE (table), 3);
5793 gtk_table_set_col_spacings (GTK_TABLE (table), 3);
5795 gtk_container_add (GTK_CONTAINER (frame), table);
5797 radio_dpy = gtk_radio_button_new_with_label (NULL, "move to another X display");
5798 if (gdk_display_get_n_screens(display) > 1)
5799 radio_scr = gtk_radio_button_new_with_label
5800 (gtk_radio_button_get_group (GTK_RADIO_BUTTON (radio_dpy)), "move to next screen");
5803 radio_scr = gtk_radio_button_new_with_label
5804 (gtk_radio_button_get_group (GTK_RADIO_BUTTON (radio_dpy)),
5805 "only one screen on the current display");
5806 gtk_widget_set_sensitive (radio_scr, FALSE);
5808 combo_dpy = gtk_combo_box_new_text ();
5809 gtk_combo_box_append_text (GTK_COMBO_BOX (combo_dpy), "diabolo:0.0");
5810 gtk_entry_set_text (GTK_ENTRY (gtk_bin_get_child (GTK_BIN (combo_dpy))),
5811 "<hostname>:<X Server Num>.<Screen Num>");
5813 gtk_table_attach_defaults (GTK_TABLE (table), radio_dpy, 0, 1, 0, 1);
5814 gtk_table_attach_defaults (GTK_TABLE (table), radio_scr, 0, 1, 1, 2);
5815 gtk_table_attach_defaults (GTK_TABLE (table), combo_dpy, 1, 2, 0, 1);
5817 bbox = gtk_hbutton_box_new ();
5818 applyb = gtk_button_new_from_stock (GTK_STOCK_APPLY);
5819 cancelb = gtk_button_new_from_stock (GTK_STOCK_CANCEL);
5821 gtk_container_add (GTK_CONTAINER (vbox), bbox);
5823 gtk_container_add (GTK_CONTAINER (bbox), applyb);
5824 gtk_container_add (GTK_CONTAINER (bbox), cancelb);
5826 scr_dpy_data = g_new0 (ScreenDisplaySelection, 1);
5828 scr_dpy_data->entry = gtk_bin_get_child (GTK_BIN (combo_dpy));
5829 scr_dpy_data->radio_dpy = radio_dpy;
5830 scr_dpy_data->toplevel = gtk_widget_get_toplevel (widget);
5831 scr_dpy_data->dialog_window = window;
5833 g_signal_connect (cancelb, "clicked",
5834 G_CALLBACK (screen_display_destroy_diag), window);
5835 g_signal_connect (applyb, "clicked",
5836 G_CALLBACK (screen_display_check), scr_dpy_data);
5837 gtk_widget_show_all (window);
5842 static gboolean event_watcher_enter_id = 0;
5843 static gboolean event_watcher_leave_id = 0;
5846 event_watcher (GSignalInvocationHint *ihint,
5847 guint n_param_values,
5848 const GValue *param_values,
5851 g_print ("Watch: \"%s\" emitted for %s\n",
5852 g_signal_name (ihint->signal_id),
5853 G_OBJECT_TYPE_NAME (g_value_get_object (param_values + 0)));
5859 event_watcher_down (void)
5861 if (event_watcher_enter_id)
5865 signal_id = g_signal_lookup ("enter_notify_event", GTK_TYPE_WIDGET);
5866 g_signal_remove_emission_hook (signal_id, event_watcher_enter_id);
5867 event_watcher_enter_id = 0;
5868 signal_id = g_signal_lookup ("leave_notify_event", GTK_TYPE_WIDGET);
5869 g_signal_remove_emission_hook (signal_id, event_watcher_leave_id);
5870 event_watcher_leave_id = 0;
5875 event_watcher_toggle (void)
5877 if (event_watcher_enter_id)
5878 event_watcher_down ();
5883 signal_id = g_signal_lookup ("enter_notify_event", GTK_TYPE_WIDGET);
5884 event_watcher_enter_id = g_signal_add_emission_hook (signal_id, 0, event_watcher, NULL, NULL);
5885 signal_id = g_signal_lookup ("leave_notify_event", GTK_TYPE_WIDGET);
5886 event_watcher_leave_id = g_signal_add_emission_hook (signal_id, 0, event_watcher, NULL, NULL);
5891 create_event_watcher (GtkWidget *widget)
5893 GtkWidget *action_area, *content_area;
5898 dialog_window = gtk_dialog_new ();
5899 gtk_window_set_screen (GTK_WINDOW (dialog_window),
5900 gtk_widget_get_screen (widget));
5902 g_signal_connect (dialog_window, "destroy",
5903 G_CALLBACK (gtk_widget_destroyed),
5905 g_signal_connect (dialog_window, "destroy",
5906 G_CALLBACK (event_watcher_down),
5909 content_area = gtk_dialog_get_content_area (GTK_DIALOG (dialog_window));
5910 action_area = gtk_dialog_get_action_area (GTK_DIALOG (dialog_window));
5912 gtk_window_set_title (GTK_WINDOW (dialog_window), "Event Watcher");
5913 gtk_container_set_border_width (GTK_CONTAINER (dialog_window), 0);
5914 gtk_widget_set_size_request (dialog_window, 200, 110);
5916 button = gtk_toggle_button_new_with_label ("Activate Watch");
5917 g_signal_connect (button, "clicked",
5918 G_CALLBACK (event_watcher_toggle),
5920 gtk_container_set_border_width (GTK_CONTAINER (button), 10);
5921 gtk_box_pack_start (GTK_BOX (content_area), button, TRUE, TRUE, 0);
5922 gtk_widget_show (button);
5924 button = gtk_button_new_with_label ("Close");
5925 g_signal_connect_swapped (button, "clicked",
5926 G_CALLBACK (gtk_widget_destroy),
5928 gtk_widget_set_can_default (button, TRUE);
5929 gtk_box_pack_start (GTK_BOX (action_area), button, TRUE, TRUE, 0);
5930 gtk_widget_grab_default (button);
5931 gtk_widget_show (button);
5934 if (!gtk_widget_get_visible (dialog_window))
5935 gtk_widget_show (dialog_window);
5937 gtk_widget_destroy (dialog_window);
5945 reformat_value (GtkScale *scale,
5948 return g_strdup_printf ("-->%0.*g<--",
5949 gtk_scale_get_digits (scale), value);
5953 create_range_controls (GtkWidget *widget)
5955 static GtkWidget *window = NULL;
5959 GtkWidget *scrollbar;
5961 GtkWidget *separator;
5962 GtkObject *adjustment;
5967 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
5969 gtk_window_set_screen (GTK_WINDOW (window),
5970 gtk_widget_get_screen (widget));
5972 g_signal_connect (window, "destroy",
5973 G_CALLBACK (gtk_widget_destroyed),
5976 gtk_window_set_title (GTK_WINDOW (window), "range controls");
5977 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
5980 box1 = gtk_vbox_new (FALSE, 0);
5981 gtk_container_add (GTK_CONTAINER (window), box1);
5982 gtk_widget_show (box1);
5985 box2 = gtk_vbox_new (FALSE, 10);
5986 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
5987 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
5988 gtk_widget_show (box2);
5991 adjustment = gtk_adjustment_new (0.0, 0.0, 101.0, 0.1, 1.0, 1.0);
5993 scale = gtk_hscale_new (GTK_ADJUSTMENT (adjustment));
5994 gtk_widget_set_size_request (GTK_WIDGET (scale), 150, -1);
5995 gtk_range_set_update_policy (GTK_RANGE (scale), GTK_UPDATE_DELAYED);
5996 gtk_scale_set_digits (GTK_SCALE (scale), 1);
5997 gtk_scale_set_draw_value (GTK_SCALE (scale), TRUE);
5998 gtk_box_pack_start (GTK_BOX (box2), scale, TRUE, TRUE, 0);
5999 gtk_widget_show (scale);
6001 scrollbar = gtk_hscrollbar_new (GTK_ADJUSTMENT (adjustment));
6002 gtk_range_set_update_policy (GTK_RANGE (scrollbar),
6003 GTK_UPDATE_CONTINUOUS);
6004 gtk_box_pack_start (GTK_BOX (box2), scrollbar, TRUE, TRUE, 0);
6005 gtk_widget_show (scrollbar);
6007 scale = gtk_hscale_new (GTK_ADJUSTMENT (adjustment));
6008 gtk_scale_set_draw_value (GTK_SCALE (scale), TRUE);
6009 g_signal_connect (scale,
6011 G_CALLBACK (reformat_value),
6013 gtk_box_pack_start (GTK_BOX (box2), scale, TRUE, TRUE, 0);
6014 gtk_widget_show (scale);
6016 hbox = gtk_hbox_new (FALSE, 0);
6018 scale = gtk_vscale_new (GTK_ADJUSTMENT (adjustment));
6019 gtk_widget_set_size_request (scale, -1, 200);
6020 gtk_scale_set_digits (GTK_SCALE (scale), 2);
6021 gtk_scale_set_draw_value (GTK_SCALE (scale), TRUE);
6022 gtk_box_pack_start (GTK_BOX (hbox), scale, TRUE, TRUE, 0);
6023 gtk_widget_show (scale);
6025 scale = gtk_vscale_new (GTK_ADJUSTMENT (adjustment));
6026 gtk_widget_set_size_request (scale, -1, 200);
6027 gtk_scale_set_digits (GTK_SCALE (scale), 2);
6028 gtk_scale_set_draw_value (GTK_SCALE (scale), TRUE);
6029 gtk_range_set_inverted (GTK_RANGE (scale), TRUE);
6030 gtk_box_pack_start (GTK_BOX (hbox), scale, TRUE, TRUE, 0);
6031 gtk_widget_show (scale);
6033 scale = gtk_vscale_new (GTK_ADJUSTMENT (adjustment));
6034 gtk_scale_set_draw_value (GTK_SCALE (scale), TRUE);
6035 g_signal_connect (scale,
6037 G_CALLBACK (reformat_value),
6039 gtk_box_pack_start (GTK_BOX (hbox), scale, TRUE, TRUE, 0);
6040 gtk_widget_show (scale);
6043 gtk_box_pack_start (GTK_BOX (box2), hbox, TRUE, TRUE, 0);
6044 gtk_widget_show (hbox);
6046 separator = gtk_hseparator_new ();
6047 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
6048 gtk_widget_show (separator);
6051 box2 = gtk_vbox_new (FALSE, 10);
6052 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
6053 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
6054 gtk_widget_show (box2);
6057 button = gtk_button_new_with_label ("close");
6058 g_signal_connect_swapped (button, "clicked",
6059 G_CALLBACK (gtk_widget_destroy),
6061 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
6062 gtk_widget_set_can_default (button, TRUE);
6063 gtk_widget_grab_default (button);
6064 gtk_widget_show (button);
6067 if (!gtk_widget_get_visible (window))
6068 gtk_widget_show (window);
6070 gtk_widget_destroy (window);
6078 create_rulers (GtkWidget *widget)
6080 static GtkWidget *window = NULL;
6086 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
6088 gtk_window_set_screen (GTK_WINDOW (window),
6089 gtk_widget_get_screen (widget));
6091 gtk_window_set_resizable (GTK_WINDOW (window), TRUE);
6093 g_signal_connect (window, "destroy",
6094 G_CALLBACK (gtk_widget_destroyed),
6097 gtk_window_set_title (GTK_WINDOW (window), "rulers");
6098 gtk_widget_set_size_request (window, 300, 300);
6099 gtk_widget_set_events (window,
6100 GDK_POINTER_MOTION_MASK
6101 | GDK_POINTER_MOTION_HINT_MASK);
6102 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
6104 table = gtk_table_new (2, 2, FALSE);
6105 gtk_container_add (GTK_CONTAINER (window), table);
6106 gtk_widget_show (table);
6108 ruler = gtk_hruler_new ();
6109 gtk_ruler_set_metric (GTK_RULER (ruler), GTK_CENTIMETERS);
6110 gtk_ruler_set_range (GTK_RULER (ruler), 100, 0, 0, 20);
6112 g_signal_connect_swapped (window,
6113 "motion_notify_event",
6114 G_CALLBACK (GTK_WIDGET_GET_CLASS (ruler)->motion_notify_event),
6117 gtk_table_attach (GTK_TABLE (table), ruler, 1, 2, 0, 1,
6118 GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 0);
6119 gtk_widget_show (ruler);
6122 ruler = gtk_vruler_new ();
6123 gtk_ruler_set_range (GTK_RULER (ruler), 5, 15, 0, 20);
6125 g_signal_connect_swapped (window,
6126 "motion_notify_event",
6127 G_CALLBACK (GTK_WIDGET_GET_CLASS (ruler)->motion_notify_event),
6130 gtk_table_attach (GTK_TABLE (table), ruler, 0, 1, 1, 2,
6131 GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
6132 gtk_widget_show (ruler);
6135 if (!gtk_widget_get_visible (window))
6136 gtk_widget_show (window);
6138 gtk_widget_destroy (window);
6145 { { 0, 0x0000, 0x0000, 0x0000 }, "black" },
6146 { { 0, 0xFFFF, 0xFFFF, 0xFFFF }, "white" },
6147 { { 0, 0xFFFF, 0x0000, 0x0000 }, "red" },
6148 { { 0, 0x0000, 0xFFFF, 0x0000 }, "green" },
6149 { { 0, 0x0000, 0x0000, 0xFFFF }, "blue" },
6150 { { 0, 0x0000, 0xFFFF, 0xFFFF }, "cyan" },
6151 { { 0, 0xFFFF, 0x0000, 0xFFFF }, "magenta" },
6152 { { 0, 0xFFFF, 0xFFFF, 0x0000 }, "yellow" }
6155 int ntext_colors = sizeof(text_colors) / sizeof(text_colors[0]);
6161 static const char * book_open_xpm[] = {
6184 static const char * book_closed_xpm[] = {
6209 GdkPixbuf *book_open;
6210 GdkPixbuf *book_closed;
6211 GtkWidget *sample_notebook;
6214 set_page_image (GtkNotebook *notebook, gint page_num, GdkPixbuf *pixbuf)
6216 GtkWidget *page_widget;
6219 page_widget = gtk_notebook_get_nth_page (notebook, page_num);
6221 pixwid = g_object_get_data (G_OBJECT (page_widget), "tab_pixmap");
6222 gtk_image_set_from_pixbuf (GTK_IMAGE (pixwid), pixbuf);
6224 pixwid = g_object_get_data (G_OBJECT (page_widget), "menu_pixmap");
6225 gtk_image_set_from_pixbuf (GTK_IMAGE (pixwid), pixbuf);
6229 page_switch (GtkWidget *widget, gpointer *page, gint page_num)
6231 GtkNotebook *notebook = GTK_NOTEBOOK (widget);
6232 gint old_page_num = gtk_notebook_get_current_page (notebook);
6234 if (page_num == old_page_num)
6237 set_page_image (notebook, page_num, book_open);
6239 if (old_page_num != -1)
6240 set_page_image (notebook, old_page_num, book_closed);
6244 tab_fill (GtkToggleButton *button, GtkWidget *child)
6246 gtk_container_child_set (GTK_CONTAINER (sample_notebook), child,
6247 "tab-fill", gtk_toggle_button_get_active (button),
6252 tab_expand (GtkToggleButton *button, GtkWidget *child)
6254 gtk_container_child_set (GTK_CONTAINER (sample_notebook), child,
6255 "tab-expand", gtk_toggle_button_get_active (button),
6260 create_pages (GtkNotebook *notebook, gint start, gint end)
6262 GtkWidget *child = NULL;
6267 GtkWidget *label_box;
6268 GtkWidget *menu_box;
6272 char accel_buffer[32];
6274 for (i = start; i <= end; i++)
6276 sprintf (buffer, "Page %d", i);
6277 sprintf (accel_buffer, "Page _%d", i);
6279 child = gtk_frame_new (buffer);
6280 gtk_container_set_border_width (GTK_CONTAINER (child), 10);
6282 vbox = gtk_vbox_new (TRUE,0);
6283 gtk_container_set_border_width (GTK_CONTAINER (vbox), 10);
6284 gtk_container_add (GTK_CONTAINER (child), vbox);
6286 hbox = gtk_hbox_new (TRUE,0);
6287 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 5);
6289 button = gtk_check_button_new_with_label ("Fill Tab");
6290 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
6291 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE);
6292 g_signal_connect (button, "toggled",
6293 G_CALLBACK (tab_fill), child);
6295 button = gtk_check_button_new_with_label ("Expand Tab");
6296 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
6297 g_signal_connect (button, "toggled",
6298 G_CALLBACK (tab_expand), child);
6300 button = gtk_button_new_with_label ("Hide Page");
6301 gtk_box_pack_end (GTK_BOX (vbox), button, FALSE, FALSE, 5);
6302 g_signal_connect_swapped (button, "clicked",
6303 G_CALLBACK (gtk_widget_hide),
6306 gtk_widget_show_all (child);
6308 label_box = gtk_hbox_new (FALSE, 0);
6309 pixwid = gtk_image_new_from_pixbuf (book_closed);
6310 g_object_set_data (G_OBJECT (child), "tab_pixmap", pixwid);
6312 gtk_box_pack_start (GTK_BOX (label_box), pixwid, FALSE, TRUE, 0);
6313 gtk_misc_set_padding (GTK_MISC (pixwid), 3, 1);
6314 label = gtk_label_new_with_mnemonic (accel_buffer);
6315 gtk_box_pack_start (GTK_BOX (label_box), label, FALSE, TRUE, 0);
6316 gtk_widget_show_all (label_box);
6319 menu_box = gtk_hbox_new (FALSE, 0);
6320 pixwid = gtk_image_new_from_pixbuf (book_closed);
6321 g_object_set_data (G_OBJECT (child), "menu_pixmap", pixwid);
6323 gtk_box_pack_start (GTK_BOX (menu_box), pixwid, FALSE, TRUE, 0);
6324 gtk_misc_set_padding (GTK_MISC (pixwid), 3, 1);
6325 label = gtk_label_new (buffer);
6326 gtk_box_pack_start (GTK_BOX (menu_box), label, FALSE, TRUE, 0);
6327 gtk_widget_show_all (menu_box);
6329 gtk_notebook_append_page_menu (notebook, child, label_box, menu_box);
6334 rotate_notebook (GtkButton *button,
6335 GtkNotebook *notebook)
6337 gtk_notebook_set_tab_pos (notebook, (gtk_notebook_get_tab_pos (notebook) + 1) % 4);
6341 show_all_pages (GtkButton *button,
6342 GtkNotebook *notebook)
6344 gtk_container_foreach (GTK_CONTAINER (notebook),
6345 (GtkCallback) gtk_widget_show, NULL);
6349 notebook_type_changed (GtkWidget *optionmenu,
6352 GtkNotebook *notebook;
6362 notebook = GTK_NOTEBOOK (data);
6364 c = gtk_combo_box_get_active (GTK_COMBO_BOX (optionmenu));
6369 /* standard notebook */
6370 gtk_notebook_set_show_tabs (notebook, TRUE);
6371 gtk_notebook_set_show_border (notebook, TRUE);
6372 gtk_notebook_set_scrollable (notebook, FALSE);
6376 /* notabs notebook */
6377 gtk_notebook_set_show_tabs (notebook, FALSE);
6378 gtk_notebook_set_show_border (notebook, TRUE);
6383 gtk_notebook_set_show_tabs (notebook, FALSE);
6384 gtk_notebook_set_show_border (notebook, FALSE);
6389 gtk_notebook_set_show_tabs (notebook, TRUE);
6390 gtk_notebook_set_show_border (notebook, TRUE);
6391 gtk_notebook_set_scrollable (notebook, TRUE);
6392 if (gtk_notebook_get_n_pages (notebook) == 5)
6393 create_pages (notebook, 6, 15);
6399 if (gtk_notebook_get_n_pages (notebook) == 15)
6400 for (i = 0; i < 10; i++)
6401 gtk_notebook_remove_page (notebook, 5);
6405 notebook_popup (GtkToggleButton *button,
6406 GtkNotebook *notebook)
6409 gtk_notebook_popup_enable (notebook);
6411 gtk_notebook_popup_disable (notebook);
6415 create_notebook (GtkWidget *widget)
6417 static GtkWidget *window = NULL;
6421 GtkWidget *separator;
6425 static gchar *items[] =
6435 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
6436 gtk_window_set_screen (GTK_WINDOW (window),
6437 gtk_widget_get_screen (widget));
6439 g_signal_connect (window, "destroy",
6440 G_CALLBACK (gtk_widget_destroyed),
6443 gtk_window_set_title (GTK_WINDOW (window), "notebook");
6444 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
6446 box1 = gtk_vbox_new (FALSE, 0);
6447 gtk_container_add (GTK_CONTAINER (window), box1);
6449 sample_notebook = gtk_notebook_new ();
6450 g_signal_connect (sample_notebook, "switch_page",
6451 G_CALLBACK (page_switch), NULL);
6452 gtk_notebook_set_tab_pos (GTK_NOTEBOOK (sample_notebook), GTK_POS_TOP);
6453 gtk_box_pack_start (GTK_BOX (box1), sample_notebook, TRUE, TRUE, 0);
6454 gtk_container_set_border_width (GTK_CONTAINER (sample_notebook), 10);
6456 gtk_widget_realize (sample_notebook);
6459 book_open = gdk_pixbuf_new_from_xpm_data (book_open_xpm);
6462 book_closed = gdk_pixbuf_new_from_xpm_data (book_closed_xpm);
6464 create_pages (GTK_NOTEBOOK (sample_notebook), 1, 5);
6466 separator = gtk_hseparator_new ();
6467 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 10);
6469 box2 = gtk_hbox_new (FALSE, 5);
6470 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
6471 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
6473 button = gtk_check_button_new_with_label ("popup menu");
6474 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, FALSE, 0);
6475 g_signal_connect (button, "clicked",
6476 G_CALLBACK (notebook_popup),
6479 box2 = gtk_hbox_new (FALSE, 5);
6480 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
6481 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
6483 label = gtk_label_new ("Notebook Style :");
6484 gtk_box_pack_start (GTK_BOX (box2), label, FALSE, TRUE, 0);
6486 omenu = build_option_menu (items, G_N_ELEMENTS (items), 0,
6487 notebook_type_changed,
6489 gtk_box_pack_start (GTK_BOX (box2), omenu, FALSE, TRUE, 0);
6491 button = gtk_button_new_with_label ("Show all Pages");
6492 gtk_box_pack_start (GTK_BOX (box2), button, FALSE, TRUE, 0);
6493 g_signal_connect (button, "clicked",
6494 G_CALLBACK (show_all_pages), sample_notebook);
6496 box2 = gtk_hbox_new (TRUE, 10);
6497 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
6498 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
6500 button = gtk_button_new_with_label ("prev");
6501 g_signal_connect_swapped (button, "clicked",
6502 G_CALLBACK (gtk_notebook_prev_page),
6504 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
6506 button = gtk_button_new_with_label ("next");
6507 g_signal_connect_swapped (button, "clicked",
6508 G_CALLBACK (gtk_notebook_next_page),
6510 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
6512 button = gtk_button_new_with_label ("rotate");
6513 g_signal_connect (button, "clicked",
6514 G_CALLBACK (rotate_notebook), sample_notebook);
6515 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
6517 separator = gtk_hseparator_new ();
6518 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 5);
6520 button = gtk_button_new_with_label ("close");
6521 gtk_container_set_border_width (GTK_CONTAINER (button), 5);
6522 g_signal_connect_swapped (button, "clicked",
6523 G_CALLBACK (gtk_widget_destroy),
6525 gtk_box_pack_start (GTK_BOX (box1), button, FALSE, FALSE, 0);
6526 gtk_widget_set_can_default (button, TRUE);
6527 gtk_widget_grab_default (button);
6530 if (!gtk_widget_get_visible (window))
6531 gtk_widget_show_all (window);
6533 gtk_widget_destroy (window);
6541 toggle_resize (GtkWidget *widget, GtkWidget *child)
6543 GtkContainer *container = GTK_CONTAINER (gtk_widget_get_parent (child));
6544 GValue value = { 0, };
6545 g_value_init (&value, G_TYPE_BOOLEAN);
6546 gtk_container_child_get_property (container, child, "resize", &value);
6547 g_value_set_boolean (&value, !g_value_get_boolean (&value));
6548 gtk_container_child_set_property (container, child, "resize", &value);
6552 toggle_shrink (GtkWidget *widget, GtkWidget *child)
6554 GtkContainer *container = GTK_CONTAINER (gtk_widget_get_parent (child));
6555 GValue value = { 0, };
6556 g_value_init (&value, G_TYPE_BOOLEAN);
6557 gtk_container_child_get_property (container, child, "shrink", &value);
6558 g_value_set_boolean (&value, !g_value_get_boolean (&value));
6559 gtk_container_child_set_property (container, child, "shrink", &value);
6563 paned_props_clicked (GtkWidget *button,
6566 GtkWidget *window = create_prop_editor (paned, GTK_TYPE_PANED);
6568 gtk_window_set_title (GTK_WINDOW (window), "Paned Properties");
6572 create_pane_options (GtkPaned *paned,
6573 const gchar *frame_label,
6574 const gchar *label1,
6575 const gchar *label2)
6577 GtkWidget *child1, *child2;
6582 GtkWidget *check_button;
6584 child1 = gtk_paned_get_child1 (paned);
6585 child2 = gtk_paned_get_child2 (paned);
6587 frame = gtk_frame_new (frame_label);
6588 gtk_container_set_border_width (GTK_CONTAINER (frame), 4);
6590 table = gtk_table_new (4, 2, 4);
6591 gtk_container_add (GTK_CONTAINER (frame), table);
6593 label = gtk_label_new (label1);
6594 gtk_table_attach_defaults (GTK_TABLE (table), label,
6597 check_button = gtk_check_button_new_with_label ("Resize");
6598 gtk_table_attach_defaults (GTK_TABLE (table), check_button,
6600 g_signal_connect (check_button, "toggled",
6601 G_CALLBACK (toggle_resize),
6604 check_button = gtk_check_button_new_with_label ("Shrink");
6605 gtk_table_attach_defaults (GTK_TABLE (table), check_button,
6607 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check_button),
6609 g_signal_connect (check_button, "toggled",
6610 G_CALLBACK (toggle_shrink),
6613 label = gtk_label_new (label2);
6614 gtk_table_attach_defaults (GTK_TABLE (table), label,
6617 check_button = gtk_check_button_new_with_label ("Resize");
6618 gtk_table_attach_defaults (GTK_TABLE (table), check_button,
6620 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check_button),
6622 g_signal_connect (check_button, "toggled",
6623 G_CALLBACK (toggle_resize),
6626 check_button = gtk_check_button_new_with_label ("Shrink");
6627 gtk_table_attach_defaults (GTK_TABLE (table), check_button,
6629 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check_button),
6631 g_signal_connect (check_button, "toggled",
6632 G_CALLBACK (toggle_shrink),
6635 button = gtk_button_new_with_mnemonic ("_Properties");
6636 gtk_table_attach_defaults (GTK_TABLE (table), button,
6638 g_signal_connect (button, "clicked",
6639 G_CALLBACK (paned_props_clicked),
6646 create_panes (GtkWidget *widget)
6648 static GtkWidget *window = NULL;
6657 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
6659 gtk_window_set_screen (GTK_WINDOW (window),
6660 gtk_widget_get_screen (widget));
6662 g_signal_connect (window, "destroy",
6663 G_CALLBACK (gtk_widget_destroyed),
6666 gtk_window_set_title (GTK_WINDOW (window), "Panes");
6667 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
6669 vbox = gtk_vbox_new (FALSE, 0);
6670 gtk_container_add (GTK_CONTAINER (window), vbox);
6672 vpaned = gtk_vpaned_new ();
6673 gtk_box_pack_start (GTK_BOX (vbox), vpaned, TRUE, TRUE, 0);
6674 gtk_container_set_border_width (GTK_CONTAINER(vpaned), 5);
6676 hpaned = gtk_hpaned_new ();
6677 gtk_paned_add1 (GTK_PANED (vpaned), hpaned);
6679 frame = gtk_frame_new (NULL);
6680 gtk_frame_set_shadow_type (GTK_FRAME(frame), GTK_SHADOW_IN);
6681 gtk_widget_set_size_request (frame, 60, 60);
6682 gtk_paned_add1 (GTK_PANED (hpaned), frame);
6684 button = gtk_button_new_with_label ("Hi there");
6685 gtk_container_add (GTK_CONTAINER(frame), button);
6687 frame = gtk_frame_new (NULL);
6688 gtk_frame_set_shadow_type (GTK_FRAME(frame), GTK_SHADOW_IN);
6689 gtk_widget_set_size_request (frame, 80, 60);
6690 gtk_paned_add2 (GTK_PANED (hpaned), frame);
6692 frame = gtk_frame_new (NULL);
6693 gtk_frame_set_shadow_type (GTK_FRAME(frame), GTK_SHADOW_IN);
6694 gtk_widget_set_size_request (frame, 60, 80);
6695 gtk_paned_add2 (GTK_PANED (vpaned), frame);
6697 /* Now create toggle buttons to control sizing */
6699 gtk_box_pack_start (GTK_BOX (vbox),
6700 create_pane_options (GTK_PANED (hpaned),
6706 gtk_box_pack_start (GTK_BOX (vbox),
6707 create_pane_options (GTK_PANED (vpaned),
6713 gtk_widget_show_all (vbox);
6716 if (!gtk_widget_get_visible (window))
6717 gtk_widget_show (window);
6719 gtk_widget_destroy (window);
6723 * Paned keyboard navigation
6727 paned_keyboard_window1 (GtkWidget *widget)
6750 window1 = gtk_window_new (GTK_WINDOW_TOPLEVEL);
6751 gtk_window_set_title (GTK_WINDOW (window1), "Basic paned navigation");
6752 gtk_window_set_screen (GTK_WINDOW (window1),
6753 gtk_widget_get_screen (widget));
6755 hpaned1 = gtk_hpaned_new ();
6756 gtk_container_add (GTK_CONTAINER (window1), hpaned1);
6758 frame1 = gtk_frame_new (NULL);
6759 gtk_paned_pack1 (GTK_PANED (hpaned1), frame1, FALSE, TRUE);
6760 gtk_frame_set_shadow_type (GTK_FRAME (frame1), GTK_SHADOW_IN);
6762 vbox1 = gtk_vbox_new (FALSE, 0);
6763 gtk_container_add (GTK_CONTAINER (frame1), vbox1);
6765 button7 = gtk_button_new_with_label ("button7");
6766 gtk_box_pack_start (GTK_BOX (vbox1), button7, FALSE, FALSE, 0);
6768 button8 = gtk_button_new_with_label ("button8");
6769 gtk_box_pack_start (GTK_BOX (vbox1), button8, FALSE, FALSE, 0);
6771 button9 = gtk_button_new_with_label ("button9");
6772 gtk_box_pack_start (GTK_BOX (vbox1), button9, FALSE, FALSE, 0);
6774 vpaned1 = gtk_vpaned_new ();
6775 gtk_paned_pack2 (GTK_PANED (hpaned1), vpaned1, TRUE, TRUE);
6777 frame2 = gtk_frame_new (NULL);
6778 gtk_paned_pack1 (GTK_PANED (vpaned1), frame2, FALSE, TRUE);
6779 gtk_frame_set_shadow_type (GTK_FRAME (frame2), GTK_SHADOW_IN);
6781 frame5 = gtk_frame_new (NULL);
6782 gtk_container_add (GTK_CONTAINER (frame2), frame5);
6784 hbox1 = gtk_hbox_new (FALSE, 0);
6785 gtk_container_add (GTK_CONTAINER (frame5), hbox1);
6787 button5 = gtk_button_new_with_label ("button5");
6788 gtk_box_pack_start (GTK_BOX (hbox1), button5, FALSE, FALSE, 0);
6790 button6 = gtk_button_new_with_label ("button6");
6791 gtk_box_pack_start (GTK_BOX (hbox1), button6, FALSE, FALSE, 0);
6793 frame3 = gtk_frame_new (NULL);
6794 gtk_paned_pack2 (GTK_PANED (vpaned1), frame3, TRUE, TRUE);
6795 gtk_frame_set_shadow_type (GTK_FRAME (frame3), GTK_SHADOW_IN);
6797 frame4 = gtk_frame_new ("Buttons");
6798 gtk_container_add (GTK_CONTAINER (frame3), frame4);
6799 gtk_container_set_border_width (GTK_CONTAINER (frame4), 15);
6801 table1 = gtk_table_new (2, 2, FALSE);
6802 gtk_container_add (GTK_CONTAINER (frame4), table1);
6803 gtk_container_set_border_width (GTK_CONTAINER (table1), 11);
6805 button1 = gtk_button_new_with_label ("button1");
6806 gtk_table_attach (GTK_TABLE (table1), button1, 0, 1, 0, 1,
6807 (GtkAttachOptions) (GTK_FILL),
6808 (GtkAttachOptions) (0), 0, 0);
6810 button2 = gtk_button_new_with_label ("button2");
6811 gtk_table_attach (GTK_TABLE (table1), button2, 1, 2, 0, 1,
6812 (GtkAttachOptions) (GTK_FILL),
6813 (GtkAttachOptions) (0), 0, 0);
6815 button3 = gtk_button_new_with_label ("button3");
6816 gtk_table_attach (GTK_TABLE (table1), button3, 0, 1, 1, 2,
6817 (GtkAttachOptions) (GTK_FILL),
6818 (GtkAttachOptions) (0), 0, 0);
6820 button4 = gtk_button_new_with_label ("button4");
6821 gtk_table_attach (GTK_TABLE (table1), button4, 1, 2, 1, 2,
6822 (GtkAttachOptions) (GTK_FILL),
6823 (GtkAttachOptions) (0), 0, 0);
6829 paned_keyboard_window2 (GtkWidget *widget)
6834 GtkWidget *button13;
6838 GtkWidget *button12;
6840 GtkWidget *button11;
6841 GtkWidget *button10;
6843 window2 = gtk_window_new (GTK_WINDOW_TOPLEVEL);
6844 gtk_window_set_title (GTK_WINDOW (window2), "\"button 10\" is not inside the horisontal pane");
6846 gtk_window_set_screen (GTK_WINDOW (window2),
6847 gtk_widget_get_screen (widget));
6849 hpaned2 = gtk_hpaned_new ();
6850 gtk_container_add (GTK_CONTAINER (window2), hpaned2);
6852 frame6 = gtk_frame_new (NULL);
6853 gtk_paned_pack1 (GTK_PANED (hpaned2), frame6, FALSE, TRUE);
6854 gtk_frame_set_shadow_type (GTK_FRAME (frame6), GTK_SHADOW_IN);
6856 button13 = gtk_button_new_with_label ("button13");
6857 gtk_container_add (GTK_CONTAINER (frame6), button13);
6859 hbox2 = gtk_hbox_new (FALSE, 0);
6860 gtk_paned_pack2 (GTK_PANED (hpaned2), hbox2, TRUE, TRUE);
6862 vpaned2 = gtk_vpaned_new ();
6863 gtk_box_pack_start (GTK_BOX (hbox2), vpaned2, TRUE, TRUE, 0);
6865 frame7 = gtk_frame_new (NULL);
6866 gtk_paned_pack1 (GTK_PANED (vpaned2), frame7, FALSE, TRUE);
6867 gtk_frame_set_shadow_type (GTK_FRAME (frame7), GTK_SHADOW_IN);
6869 button12 = gtk_button_new_with_label ("button12");
6870 gtk_container_add (GTK_CONTAINER (frame7), button12);
6872 frame8 = gtk_frame_new (NULL);
6873 gtk_paned_pack2 (GTK_PANED (vpaned2), frame8, TRUE, TRUE);
6874 gtk_frame_set_shadow_type (GTK_FRAME (frame8), GTK_SHADOW_IN);
6876 button11 = gtk_button_new_with_label ("button11");
6877 gtk_container_add (GTK_CONTAINER (frame8), button11);
6879 button10 = gtk_button_new_with_label ("button10");
6880 gtk_box_pack_start (GTK_BOX (hbox2), button10, FALSE, FALSE, 0);
6886 paned_keyboard_window3 (GtkWidget *widget)
6893 GtkWidget *button14;
6896 GtkWidget *button15;
6899 GtkWidget *button16;
6901 GtkWidget *button17;
6903 window3 = gtk_window_new (GTK_WINDOW_TOPLEVEL);
6904 g_object_set_data (G_OBJECT (window3), "window3", window3);
6905 gtk_window_set_title (GTK_WINDOW (window3), "Nested panes");
6907 gtk_window_set_screen (GTK_WINDOW (window3),
6908 gtk_widget_get_screen (widget));
6911 vbox2 = gtk_vbox_new (FALSE, 0);
6912 gtk_container_add (GTK_CONTAINER (window3), vbox2);
6914 label1 = gtk_label_new ("Three panes nested inside each other");
6915 gtk_box_pack_start (GTK_BOX (vbox2), label1, FALSE, FALSE, 0);
6917 hpaned3 = gtk_hpaned_new ();
6918 gtk_box_pack_start (GTK_BOX (vbox2), hpaned3, TRUE, TRUE, 0);
6920 frame9 = gtk_frame_new (NULL);
6921 gtk_paned_pack1 (GTK_PANED (hpaned3), frame9, FALSE, TRUE);
6922 gtk_frame_set_shadow_type (GTK_FRAME (frame9), GTK_SHADOW_IN);
6924 button14 = gtk_button_new_with_label ("button14");
6925 gtk_container_add (GTK_CONTAINER (frame9), button14);
6927 hpaned4 = gtk_hpaned_new ();
6928 gtk_paned_pack2 (GTK_PANED (hpaned3), hpaned4, TRUE, TRUE);
6930 frame10 = gtk_frame_new (NULL);
6931 gtk_paned_pack1 (GTK_PANED (hpaned4), frame10, FALSE, TRUE);
6932 gtk_frame_set_shadow_type (GTK_FRAME (frame10), GTK_SHADOW_IN);
6934 button15 = gtk_button_new_with_label ("button15");
6935 gtk_container_add (GTK_CONTAINER (frame10), button15);
6937 hpaned5 = gtk_hpaned_new ();
6938 gtk_paned_pack2 (GTK_PANED (hpaned4), hpaned5, TRUE, TRUE);
6940 frame11 = gtk_frame_new (NULL);
6941 gtk_paned_pack1 (GTK_PANED (hpaned5), frame11, FALSE, TRUE);
6942 gtk_frame_set_shadow_type (GTK_FRAME (frame11), GTK_SHADOW_IN);
6944 button16 = gtk_button_new_with_label ("button16");
6945 gtk_container_add (GTK_CONTAINER (frame11), button16);
6947 frame12 = gtk_frame_new (NULL);
6948 gtk_paned_pack2 (GTK_PANED (hpaned5), frame12, TRUE, TRUE);
6949 gtk_frame_set_shadow_type (GTK_FRAME (frame12), GTK_SHADOW_IN);
6951 button17 = gtk_button_new_with_label ("button17");
6952 gtk_container_add (GTK_CONTAINER (frame12), button17);
6958 paned_keyboard_window4 (GtkWidget *widget)
6965 GtkWidget *button19;
6966 GtkWidget *button18;
6969 GtkWidget *button21;
6970 GtkWidget *button20;
6972 GtkWidget *button23;
6973 GtkWidget *button22;
6975 GtkWidget *button25;
6976 GtkWidget *button24;
6978 window4 = gtk_window_new (GTK_WINDOW_TOPLEVEL);
6979 g_object_set_data (G_OBJECT (window4), "window4", window4);
6980 gtk_window_set_title (GTK_WINDOW (window4), "window4");
6982 gtk_window_set_screen (GTK_WINDOW (window4),
6983 gtk_widget_get_screen (widget));
6985 vbox3 = gtk_vbox_new (FALSE, 0);
6986 gtk_container_add (GTK_CONTAINER (window4), vbox3);
6988 label2 = gtk_label_new ("Widget tree:\n\nhpaned \n - vpaned\n - hbox\n - vpaned\n - vpaned\n - vpaned\n");
6989 gtk_box_pack_start (GTK_BOX (vbox3), label2, FALSE, FALSE, 0);
6990 gtk_label_set_justify (GTK_LABEL (label2), GTK_JUSTIFY_LEFT);
6992 hpaned6 = gtk_hpaned_new ();
6993 gtk_box_pack_start (GTK_BOX (vbox3), hpaned6, TRUE, TRUE, 0);
6995 vpaned3 = gtk_vpaned_new ();
6996 gtk_paned_pack1 (GTK_PANED (hpaned6), vpaned3, FALSE, TRUE);
6998 button19 = gtk_button_new_with_label ("button19");
6999 gtk_paned_pack1 (GTK_PANED (vpaned3), button19, FALSE, TRUE);
7001 button18 = gtk_button_new_with_label ("button18");
7002 gtk_paned_pack2 (GTK_PANED (vpaned3), button18, TRUE, TRUE);
7004 hbox3 = gtk_hbox_new (FALSE, 0);
7005 gtk_paned_pack2 (GTK_PANED (hpaned6), hbox3, TRUE, TRUE);
7007 vpaned4 = gtk_vpaned_new ();
7008 gtk_box_pack_start (GTK_BOX (hbox3), vpaned4, TRUE, TRUE, 0);
7010 button21 = gtk_button_new_with_label ("button21");
7011 gtk_paned_pack1 (GTK_PANED (vpaned4), button21, FALSE, TRUE);
7013 button20 = gtk_button_new_with_label ("button20");
7014 gtk_paned_pack2 (GTK_PANED (vpaned4), button20, TRUE, TRUE);
7016 vpaned5 = gtk_vpaned_new ();
7017 gtk_box_pack_start (GTK_BOX (hbox3), vpaned5, TRUE, TRUE, 0);
7019 button23 = gtk_button_new_with_label ("button23");
7020 gtk_paned_pack1 (GTK_PANED (vpaned5), button23, FALSE, TRUE);
7022 button22 = gtk_button_new_with_label ("button22");
7023 gtk_paned_pack2 (GTK_PANED (vpaned5), button22, TRUE, TRUE);
7025 vpaned6 = gtk_vpaned_new ();
7026 gtk_box_pack_start (GTK_BOX (hbox3), vpaned6, TRUE, TRUE, 0);
7028 button25 = gtk_button_new_with_label ("button25");
7029 gtk_paned_pack1 (GTK_PANED (vpaned6), button25, FALSE, TRUE);
7031 button24 = gtk_button_new_with_label ("button24");
7032 gtk_paned_pack2 (GTK_PANED (vpaned6), button24, TRUE, TRUE);
7038 create_paned_keyboard_navigation (GtkWidget *widget)
7040 static GtkWidget *window1 = NULL;
7041 static GtkWidget *window2 = NULL;
7042 static GtkWidget *window3 = NULL;
7043 static GtkWidget *window4 = NULL;
7046 (gtk_widget_get_screen (window1) != gtk_widget_get_screen (widget)))
7048 gtk_widget_destroy (window1);
7049 gtk_widget_destroy (window2);
7050 gtk_widget_destroy (window3);
7051 gtk_widget_destroy (window4);
7056 window1 = paned_keyboard_window1 (widget);
7057 g_signal_connect (window1, "destroy",
7058 G_CALLBACK (gtk_widget_destroyed),
7064 window2 = paned_keyboard_window2 (widget);
7065 g_signal_connect (window2, "destroy",
7066 G_CALLBACK (gtk_widget_destroyed),
7072 window3 = paned_keyboard_window3 (widget);
7073 g_signal_connect (window3, "destroy",
7074 G_CALLBACK (gtk_widget_destroyed),
7080 window4 = paned_keyboard_window4 (widget);
7081 g_signal_connect (window4, "destroy",
7082 G_CALLBACK (gtk_widget_destroyed),
7086 if (gtk_widget_get_visible (window1))
7087 gtk_widget_destroy (GTK_WIDGET (window1));
7089 gtk_widget_show_all (GTK_WIDGET (window1));
7091 if (gtk_widget_get_visible (window2))
7092 gtk_widget_destroy (GTK_WIDGET (window2));
7094 gtk_widget_show_all (GTK_WIDGET (window2));
7096 if (gtk_widget_get_visible (window3))
7097 gtk_widget_destroy (GTK_WIDGET (window3));
7099 gtk_widget_show_all (GTK_WIDGET (window3));
7101 if (gtk_widget_get_visible (window4))
7102 gtk_widget_destroy (GTK_WIDGET (window4));
7104 gtk_widget_show_all (GTK_WIDGET (window4));
7112 typedef struct _cursoroffset {gint x,y;} CursorOffset;
7115 shape_pressed (GtkWidget *widget, GdkEventButton *event)
7119 /* ignore double and triple click */
7120 if (event->type != GDK_BUTTON_PRESS)
7123 p = g_object_get_data (G_OBJECT (widget), "cursor_offset");
7124 p->x = (int) event->x;
7125 p->y = (int) event->y;
7127 gtk_grab_add (widget);
7128 gdk_pointer_grab (gtk_widget_get_window (widget), TRUE,
7129 GDK_BUTTON_RELEASE_MASK |
7130 GDK_BUTTON_MOTION_MASK |
7131 GDK_POINTER_MOTION_HINT_MASK,
7136 shape_released (GtkWidget *widget)
7138 gtk_grab_remove (widget);
7139 gdk_display_pointer_ungrab (gtk_widget_get_display (widget),
7144 shape_motion (GtkWidget *widget,
7145 GdkEventMotion *event)
7149 GdkModifierType mask;
7151 p = g_object_get_data (G_OBJECT (widget), "cursor_offset");
7154 * Can't use event->x / event->y here
7155 * because I need absolute coordinates.
7157 gdk_window_get_pointer (NULL, &xp, &yp, &mask);
7158 gtk_window_move (GTK_WINDOW (widget), xp - p->x, yp - p->y);
7162 shape_create_icon (GdkScreen *screen,
7173 CursorOffset* icon_pos;
7174 cairo_surface_t *mask;
7175 cairo_region_t *mask_region;
7180 * GDK_WINDOW_TOPLEVEL works also, giving you a title border
7182 window = gtk_window_new (window_type);
7183 gtk_window_set_screen (GTK_WINDOW (window), screen);
7185 fixed = gtk_fixed_new ();
7186 gtk_widget_set_size_request (fixed, 100, 100);
7187 gtk_container_add (GTK_CONTAINER (window), fixed);
7188 gtk_widget_show (fixed);
7190 gtk_widget_set_events (window,
7191 gtk_widget_get_events (window) |
7192 GDK_BUTTON_MOTION_MASK |
7193 GDK_POINTER_MOTION_HINT_MASK |
7194 GDK_BUTTON_PRESS_MASK);
7196 gtk_widget_realize (window);
7198 pixbuf = gdk_pixbuf_new_from_file (xpm_file, NULL);
7199 g_assert (pixbuf); /* FIXME: error handling */
7201 mask = cairo_image_surface_create (CAIRO_FORMAT_A1,
7202 gdk_pixbuf_get_width (pixbuf),
7203 gdk_pixbuf_get_height (pixbuf));
7204 cr = cairo_create (mask);
7205 gdk_cairo_set_source_pixbuf (cr, pixbuf, 0, 0);
7209 mask_region = gdk_cairo_region_create_from_surface (mask);
7211 cairo_region_translate (mask_region, px, py);
7213 image = gtk_image_new_from_pixbuf (pixbuf);
7214 gtk_fixed_put (GTK_FIXED (fixed), image, px,py);
7215 gtk_widget_show (image);
7217 gtk_widget_shape_combine_region (window, mask_region);
7219 cairo_region_destroy (mask_region);
7220 cairo_surface_destroy (mask);
7221 g_object_unref (pixbuf);
7223 g_signal_connect (window, "button_press_event",
7224 G_CALLBACK (shape_pressed), NULL);
7225 g_signal_connect (window, "button_release_event",
7226 G_CALLBACK (shape_released), NULL);
7227 g_signal_connect (window, "motion_notify_event",
7228 G_CALLBACK (shape_motion), NULL);
7230 icon_pos = g_new (CursorOffset, 1);
7231 g_object_set_data (G_OBJECT (window), "cursor_offset", icon_pos);
7233 gtk_window_move (GTK_WINDOW (window), x, y);
7234 gtk_widget_show (window);
7240 create_shapes (GtkWidget *widget)
7242 /* Variables used by the Drag/Drop and Shape Window demos */
7243 static GtkWidget *modeller = NULL;
7244 static GtkWidget *sheets = NULL;
7245 static GtkWidget *rings = NULL;
7246 static GtkWidget *with_region = NULL;
7247 GdkScreen *screen = gtk_widget_get_screen (widget);
7249 if (!(file_exists ("Modeller.xpm") &&
7250 file_exists ("FilesQueue.xpm") &&
7251 file_exists ("3DRings.xpm")))
7257 modeller = shape_create_icon (screen, "Modeller.xpm",
7258 440, 140, 0,0, GTK_WINDOW_POPUP);
7260 g_signal_connect (modeller, "destroy",
7261 G_CALLBACK (gtk_widget_destroyed),
7265 gtk_widget_destroy (modeller);
7269 sheets = shape_create_icon (screen, "FilesQueue.xpm",
7270 580, 170, 0,0, GTK_WINDOW_POPUP);
7272 g_signal_connect (sheets, "destroy",
7273 G_CALLBACK (gtk_widget_destroyed),
7278 gtk_widget_destroy (sheets);
7282 rings = shape_create_icon (screen, "3DRings.xpm",
7283 460, 270, 25,25, GTK_WINDOW_TOPLEVEL);
7285 g_signal_connect (rings, "destroy",
7286 G_CALLBACK (gtk_widget_destroyed),
7290 gtk_widget_destroy (rings);
7294 cairo_region_t *region;
7297 with_region = shape_create_icon (screen, "3DRings.xpm",
7298 460, 270, 25,25, GTK_WINDOW_TOPLEVEL);
7300 gtk_window_set_decorated (GTK_WINDOW (with_region), FALSE);
7302 g_signal_connect (with_region, "destroy",
7303 G_CALLBACK (gtk_widget_destroyed),
7306 /* reset shape from mask to a region */
7309 region = cairo_region_create ();
7321 cairo_region_union_rectangle (region, &rect);
7329 gdk_window_shape_combine_region (gtk_widget_get_window (with_region),
7334 gtk_widget_destroy (with_region);
7342 create_wmhints (GtkWidget *widget)
7344 static GtkWidget *window = NULL;
7346 GtkWidget *separator;
7350 GdkWindow *gdk_window;
7356 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
7358 gtk_window_set_screen (GTK_WINDOW (window),
7359 gtk_widget_get_screen (widget));
7361 g_signal_connect (window, "destroy",
7362 G_CALLBACK (gtk_widget_destroyed),
7365 gtk_window_set_title (GTK_WINDOW (window), "WM Hints");
7366 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
7368 gtk_widget_realize (window);
7370 gdk_window = gtk_widget_get_window (window);
7372 pixbuf = gdk_pixbuf_new_from_xpm_data ((const char **) openfile);
7373 list = g_list_prepend (NULL, pixbuf);
7375 gdk_window_set_icon_list (gdk_window, list);
7378 g_object_unref (pixbuf);
7380 gdk_window_set_icon_name (gdk_window, "WMHints Test Icon");
7382 gdk_window_set_decorations (gdk_window, GDK_DECOR_ALL | GDK_DECOR_MENU);
7383 gdk_window_set_functions (gdk_window, GDK_FUNC_ALL | GDK_FUNC_RESIZE);
7385 box1 = gtk_vbox_new (FALSE, 0);
7386 gtk_container_add (GTK_CONTAINER (window), box1);
7387 gtk_widget_show (box1);
7389 label = gtk_label_new ("Try iconizing me!");
7390 gtk_widget_set_size_request (label, 150, 50);
7391 gtk_box_pack_start (GTK_BOX (box1), label, TRUE, TRUE, 0);
7392 gtk_widget_show (label);
7395 separator = gtk_hseparator_new ();
7396 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
7397 gtk_widget_show (separator);
7400 box2 = gtk_vbox_new (FALSE, 10);
7401 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
7402 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
7403 gtk_widget_show (box2);
7406 button = gtk_button_new_with_label ("close");
7408 g_signal_connect_swapped (button, "clicked",
7409 G_CALLBACK (gtk_widget_destroy),
7412 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
7413 gtk_widget_set_can_default (button, TRUE);
7414 gtk_widget_grab_default (button);
7415 gtk_widget_show (button);
7418 if (!gtk_widget_get_visible (window))
7419 gtk_widget_show (window);
7421 gtk_widget_destroy (window);
7426 * Window state tracking
7430 window_state_callback (GtkWidget *widget,
7431 GdkEventWindowState *event,
7434 GtkWidget *label = data;
7437 msg = g_strconcat (gtk_window_get_title (GTK_WINDOW (widget)), ": ",
7438 (event->new_window_state & GDK_WINDOW_STATE_WITHDRAWN) ?
7439 "withdrawn" : "not withdrawn", ", ",
7440 (event->new_window_state & GDK_WINDOW_STATE_ICONIFIED) ?
7441 "iconified" : "not iconified", ", ",
7442 (event->new_window_state & GDK_WINDOW_STATE_STICKY) ?
7443 "sticky" : "not sticky", ", ",
7444 (event->new_window_state & GDK_WINDOW_STATE_MAXIMIZED) ?
7445 "maximized" : "not maximized", ", ",
7446 (event->new_window_state & GDK_WINDOW_STATE_FULLSCREEN) ?
7447 "fullscreen" : "not fullscreen",
7448 (event->new_window_state & GDK_WINDOW_STATE_ABOVE) ?
7449 "above" : "not above", ", ",
7450 (event->new_window_state & GDK_WINDOW_STATE_BELOW) ?
7451 "below" : "not below", ", ",
7454 gtk_label_set_text (GTK_LABEL (label), msg);
7462 tracking_label (GtkWidget *window)
7468 hbox = gtk_hbox_new (FALSE, 5);
7470 g_signal_connect_object (hbox,
7472 G_CALLBACK (gtk_widget_destroy),
7476 label = gtk_label_new ("<no window state events received>");
7477 gtk_label_set_line_wrap (GTK_LABEL (label), TRUE);
7478 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
7480 g_signal_connect (window,
7481 "window_state_event",
7482 G_CALLBACK (window_state_callback),
7485 button = gtk_button_new_with_label ("Deiconify");
7486 g_signal_connect_object (button,
7488 G_CALLBACK (gtk_window_deiconify),
7491 gtk_box_pack_end (GTK_BOX (hbox), button, FALSE, FALSE, 0);
7493 button = gtk_button_new_with_label ("Iconify");
7494 g_signal_connect_object (button,
7496 G_CALLBACK (gtk_window_iconify),
7499 gtk_box_pack_end (GTK_BOX (hbox), button, FALSE, FALSE, 0);
7501 button = gtk_button_new_with_label ("Fullscreen");
7502 g_signal_connect_object (button,
7504 G_CALLBACK (gtk_window_fullscreen),
7507 gtk_box_pack_end (GTK_BOX (hbox), button, FALSE, FALSE, 0);
7509 button = gtk_button_new_with_label ("Unfullscreen");
7510 g_signal_connect_object (button,
7512 G_CALLBACK (gtk_window_unfullscreen),
7515 gtk_box_pack_end (GTK_BOX (hbox), button, FALSE, FALSE, 0);
7517 button = gtk_button_new_with_label ("Present");
7518 g_signal_connect_object (button,
7520 G_CALLBACK (gtk_window_present),
7523 gtk_box_pack_end (GTK_BOX (hbox), button, FALSE, FALSE, 0);
7525 button = gtk_button_new_with_label ("Show");
7526 g_signal_connect_object (button,
7528 G_CALLBACK (gtk_widget_show),
7531 gtk_box_pack_end (GTK_BOX (hbox), button, FALSE, FALSE, 0);
7533 gtk_widget_show_all (hbox);
7539 keep_window_above (GtkToggleButton *togglebutton, gpointer data)
7541 GtkWidget *button = g_object_get_data (G_OBJECT (togglebutton), "radio");
7543 gtk_window_set_keep_above (GTK_WINDOW (data),
7544 gtk_toggle_button_get_active (togglebutton));
7546 if (gtk_toggle_button_get_active (togglebutton))
7547 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), FALSE);
7551 keep_window_below (GtkToggleButton *togglebutton, gpointer data)
7553 GtkWidget *button = g_object_get_data (G_OBJECT (togglebutton), "radio");
7555 gtk_window_set_keep_below (GTK_WINDOW (data),
7556 gtk_toggle_button_get_active (togglebutton));
7558 if (gtk_toggle_button_get_active (togglebutton))
7559 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), FALSE);
7564 get_state_controls (GtkWidget *window)
7568 GtkWidget *button_above;
7569 GtkWidget *button_below;
7571 vbox = gtk_vbox_new (FALSE, 0);
7573 button = gtk_button_new_with_label ("Stick");
7574 g_signal_connect_object (button,
7576 G_CALLBACK (gtk_window_stick),
7579 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
7581 button = gtk_button_new_with_label ("Unstick");
7582 g_signal_connect_object (button,
7584 G_CALLBACK (gtk_window_unstick),
7587 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
7589 button = gtk_button_new_with_label ("Maximize");
7590 g_signal_connect_object (button,
7592 G_CALLBACK (gtk_window_maximize),
7595 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
7597 button = gtk_button_new_with_label ("Unmaximize");
7598 g_signal_connect_object (button,
7600 G_CALLBACK (gtk_window_unmaximize),
7603 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
7605 button = gtk_button_new_with_label ("Iconify");
7606 g_signal_connect_object (button,
7608 G_CALLBACK (gtk_window_iconify),
7611 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
7613 button = gtk_button_new_with_label ("Fullscreen");
7614 g_signal_connect_object (button,
7616 G_CALLBACK (gtk_window_fullscreen),
7619 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
7621 button = gtk_button_new_with_label ("Unfullscreen");
7622 g_signal_connect_object (button,
7624 G_CALLBACK (gtk_window_unfullscreen),
7627 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
7629 button_above = gtk_toggle_button_new_with_label ("Keep above");
7630 g_signal_connect (button_above,
7632 G_CALLBACK (keep_window_above),
7634 gtk_box_pack_start (GTK_BOX (vbox), button_above, FALSE, FALSE, 0);
7636 button_below = gtk_toggle_button_new_with_label ("Keep below");
7637 g_signal_connect (button_below,
7639 G_CALLBACK (keep_window_below),
7641 gtk_box_pack_start (GTK_BOX (vbox), button_below, FALSE, FALSE, 0);
7643 g_object_set_data (G_OBJECT (button_above), "radio", button_below);
7644 g_object_set_data (G_OBJECT (button_below), "radio", button_above);
7646 button = gtk_button_new_with_label ("Hide (withdraw)");
7647 g_signal_connect_object (button,
7649 G_CALLBACK (gtk_widget_hide),
7652 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
7654 gtk_widget_show_all (vbox);
7660 create_window_states (GtkWidget *widget)
7662 static GtkWidget *window = NULL;
7665 GtkWidget *iconified;
7667 GtkWidget *controls;
7671 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
7672 gtk_window_set_screen (GTK_WINDOW (window),
7673 gtk_widget_get_screen (widget));
7675 g_signal_connect (window, "destroy",
7676 G_CALLBACK (gtk_widget_destroyed),
7679 gtk_window_set_title (GTK_WINDOW (window), "Window states");
7681 box1 = gtk_vbox_new (FALSE, 0);
7682 gtk_container_add (GTK_CONTAINER (window), box1);
7684 iconified = gtk_window_new (GTK_WINDOW_TOPLEVEL);
7686 gtk_window_set_screen (GTK_WINDOW (iconified),
7687 gtk_widget_get_screen (widget));
7689 g_signal_connect_object (iconified, "destroy",
7690 G_CALLBACK (gtk_widget_destroy),
7693 gtk_window_iconify (GTK_WINDOW (iconified));
7694 gtk_window_set_title (GTK_WINDOW (iconified), "Iconified initially");
7695 controls = get_state_controls (iconified);
7696 gtk_container_add (GTK_CONTAINER (iconified), controls);
7698 normal = gtk_window_new (GTK_WINDOW_TOPLEVEL);
7700 gtk_window_set_screen (GTK_WINDOW (normal),
7701 gtk_widget_get_screen (widget));
7703 g_signal_connect_object (normal, "destroy",
7704 G_CALLBACK (gtk_widget_destroy),
7708 gtk_window_set_title (GTK_WINDOW (normal), "Deiconified initially");
7709 controls = get_state_controls (normal);
7710 gtk_container_add (GTK_CONTAINER (normal), controls);
7712 label = tracking_label (iconified);
7713 gtk_container_add (GTK_CONTAINER (box1), label);
7715 label = tracking_label (normal);
7716 gtk_container_add (GTK_CONTAINER (box1), label);
7718 gtk_widget_show_all (iconified);
7719 gtk_widget_show_all (normal);
7720 gtk_widget_show_all (box1);
7723 if (!gtk_widget_get_visible (window))
7724 gtk_widget_show (window);
7726 gtk_widget_destroy (window);
7734 configure_event_callback (GtkWidget *widget,
7735 GdkEventConfigure *event,
7738 GtkWidget *label = data;
7742 gtk_window_get_position (GTK_WINDOW (widget), &x, &y);
7744 msg = g_strdup_printf ("event: %d,%d %d x %d\n"
7746 event->x, event->y, event->width, event->height,
7749 gtk_label_set_text (GTK_LABEL (label), msg);
7757 get_ints (GtkWidget *window,
7764 spin1 = g_object_get_data (G_OBJECT (window), "spin1");
7765 spin2 = g_object_get_data (G_OBJECT (window), "spin2");
7767 *a = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (spin1));
7768 *b = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (spin2));
7772 set_size_callback (GtkWidget *widget,
7777 get_ints (data, &w, &h);
7779 gtk_window_resize (GTK_WINDOW (g_object_get_data (data, "target")), w, h);
7783 unset_default_size_callback (GtkWidget *widget,
7786 gtk_window_set_default_size (g_object_get_data (data, "target"),
7791 set_default_size_callback (GtkWidget *widget,
7796 get_ints (data, &w, &h);
7798 gtk_window_set_default_size (g_object_get_data (data, "target"),
7803 unset_size_request_callback (GtkWidget *widget,
7806 gtk_widget_set_size_request (g_object_get_data (data, "target"),
7811 set_size_request_callback (GtkWidget *widget,
7816 get_ints (data, &w, &h);
7818 gtk_widget_set_size_request (g_object_get_data (data, "target"),
7823 set_location_callback (GtkWidget *widget,
7828 get_ints (data, &x, &y);
7830 gtk_window_move (g_object_get_data (data, "target"), x, y);
7834 move_to_position_callback (GtkWidget *widget,
7840 window = g_object_get_data (data, "target");
7842 gtk_window_get_position (window, &x, &y);
7844 gtk_window_move (window, x, y);
7848 set_geometry_callback (GtkWidget *entry,
7854 target = GTK_WINDOW (g_object_get_data (G_OBJECT (data), "target"));
7856 text = gtk_editable_get_chars (GTK_EDITABLE (entry), 0, -1);
7858 if (!gtk_window_parse_geometry (target, text))
7859 g_print ("Bad geometry string '%s'\n", text);
7865 resizable_callback (GtkWidget *widget,
7868 g_object_set (g_object_get_data (data, "target"),
7869 "resizable", GTK_TOGGLE_BUTTON (widget)->active,
7874 gravity_selected (GtkWidget *widget,
7877 gtk_window_set_gravity (GTK_WINDOW (g_object_get_data (data, "target")),
7878 gtk_combo_box_get_active (GTK_COMBO_BOX (widget)) + GDK_GRAVITY_NORTH_WEST);
7882 pos_selected (GtkWidget *widget,
7885 gtk_window_set_position (GTK_WINDOW (g_object_get_data (data, "target")),
7886 gtk_combo_box_get_active (GTK_COMBO_BOX (widget)) + GTK_WIN_POS_NONE);
7890 move_gravity_window_to_current_position (GtkWidget *widget,
7896 window = GTK_WINDOW (data);
7898 gtk_window_get_position (window, &x, &y);
7900 gtk_window_move (window, x, y);
7904 get_screen_corner (GtkWindow *window,
7909 GdkScreen * screen = gtk_window_get_screen (window);
7911 gtk_window_get_size (GTK_WINDOW (window), &w, &h);
7913 switch (gtk_window_get_gravity (window))
7915 case GDK_GRAVITY_SOUTH_EAST:
7916 *x = gdk_screen_get_width (screen) - w;
7917 *y = gdk_screen_get_height (screen) - h;
7920 case GDK_GRAVITY_NORTH_EAST:
7921 *x = gdk_screen_get_width (screen) - w;
7925 case GDK_GRAVITY_SOUTH_WEST:
7927 *y = gdk_screen_get_height (screen) - h;
7930 case GDK_GRAVITY_NORTH_WEST:
7935 case GDK_GRAVITY_SOUTH:
7936 *x = (gdk_screen_get_width (screen) - w) / 2;
7937 *y = gdk_screen_get_height (screen) - h;
7940 case GDK_GRAVITY_NORTH:
7941 *x = (gdk_screen_get_width (screen) - w) / 2;
7945 case GDK_GRAVITY_WEST:
7947 *y = (gdk_screen_get_height (screen) - h) / 2;
7950 case GDK_GRAVITY_EAST:
7951 *x = gdk_screen_get_width (screen) - w;
7952 *y = (gdk_screen_get_height (screen) - h) / 2;
7955 case GDK_GRAVITY_CENTER:
7956 *x = (gdk_screen_get_width (screen) - w) / 2;
7957 *y = (gdk_screen_get_height (screen) - h) / 2;
7960 case GDK_GRAVITY_STATIC:
7961 /* pick some random numbers */
7967 g_assert_not_reached ();
7973 move_gravity_window_to_starting_position (GtkWidget *widget,
7979 window = GTK_WINDOW (data);
7981 get_screen_corner (window,
7984 gtk_window_move (window, x, y);
7988 make_gravity_window (GtkWidget *destroy_with,
7997 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
7999 gtk_window_set_screen (GTK_WINDOW (window),
8000 gtk_widget_get_screen (destroy_with));
8002 vbox = gtk_vbox_new (FALSE, 0);
8003 gtk_widget_show (vbox);
8005 gtk_container_add (GTK_CONTAINER (window), vbox);
8006 gtk_window_set_title (GTK_WINDOW (window), title);
8007 gtk_window_set_gravity (GTK_WINDOW (window), gravity);
8009 g_signal_connect_object (destroy_with,
8011 G_CALLBACK (gtk_widget_destroy),
8016 button = gtk_button_new_with_mnemonic ("_Move to current position");
8018 g_signal_connect (button, "clicked",
8019 G_CALLBACK (move_gravity_window_to_current_position),
8022 gtk_container_add (GTK_CONTAINER (vbox), button);
8023 gtk_widget_show (button);
8025 button = gtk_button_new_with_mnemonic ("Move to _starting position");
8027 g_signal_connect (button, "clicked",
8028 G_CALLBACK (move_gravity_window_to_starting_position),
8031 gtk_container_add (GTK_CONTAINER (vbox), button);
8032 gtk_widget_show (button);
8034 /* Pretend this is the result of --geometry.
8035 * DO NOT COPY THIS CODE unless you are setting --geometry results,
8036 * and in that case you probably should just use gtk_window_parse_geometry().
8037 * AGAIN, DO NOT SET GDK_HINT_USER_POS! It violates the ICCCM unless
8038 * you are parsing --geometry or equivalent.
8040 gtk_window_set_geometry_hints (GTK_WINDOW (window),
8044 gtk_window_set_default_size (GTK_WINDOW (window),
8047 get_screen_corner (GTK_WINDOW (window), &x, &y);
8049 gtk_window_move (GTK_WINDOW (window),
8056 do_gravity_test (GtkWidget *widget,
8059 GtkWidget *destroy_with = data;
8062 /* We put a window at each gravity point on the screen. */
8063 window = make_gravity_window (destroy_with, GDK_GRAVITY_NORTH_WEST,
8065 gtk_widget_show (window);
8067 window = make_gravity_window (destroy_with, GDK_GRAVITY_SOUTH_EAST,
8069 gtk_widget_show (window);
8071 window = make_gravity_window (destroy_with, GDK_GRAVITY_NORTH_EAST,
8073 gtk_widget_show (window);
8075 window = make_gravity_window (destroy_with, GDK_GRAVITY_SOUTH_WEST,
8077 gtk_widget_show (window);
8079 window = make_gravity_window (destroy_with, GDK_GRAVITY_SOUTH,
8081 gtk_widget_show (window);
8083 window = make_gravity_window (destroy_with, GDK_GRAVITY_NORTH,
8085 gtk_widget_show (window);
8088 window = make_gravity_window (destroy_with, GDK_GRAVITY_WEST,
8090 gtk_widget_show (window);
8093 window = make_gravity_window (destroy_with, GDK_GRAVITY_EAST,
8095 gtk_widget_show (window);
8097 window = make_gravity_window (destroy_with, GDK_GRAVITY_CENTER,
8099 gtk_widget_show (window);
8101 window = make_gravity_window (destroy_with, GDK_GRAVITY_STATIC,
8103 gtk_widget_show (window);
8107 window_controls (GtkWidget *window)
8109 GtkWidget *control_window;
8119 control_window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
8121 gtk_window_set_screen (GTK_WINDOW (control_window),
8122 gtk_widget_get_screen (window));
8124 gtk_window_set_title (GTK_WINDOW (control_window), "Size controls");
8126 g_object_set_data (G_OBJECT (control_window),
8130 g_signal_connect_object (control_window,
8132 G_CALLBACK (gtk_widget_destroy),
8136 vbox = gtk_vbox_new (FALSE, 5);
8138 gtk_container_add (GTK_CONTAINER (control_window), vbox);
8140 label = gtk_label_new ("<no configure events>");
8141 gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
8143 g_signal_connect (window,
8145 G_CALLBACK (configure_event_callback),
8148 adj = (GtkAdjustment *) gtk_adjustment_new (10.0, -2000.0, 2000.0, 1.0,
8150 spin = gtk_spin_button_new (adj, 0, 0);
8152 gtk_box_pack_start (GTK_BOX (vbox), spin, FALSE, FALSE, 0);
8154 g_object_set_data (G_OBJECT (control_window), "spin1", spin);
8156 adj = (GtkAdjustment *) gtk_adjustment_new (10.0, -2000.0, 2000.0, 1.0,
8158 spin = gtk_spin_button_new (adj, 0, 0);
8160 gtk_box_pack_start (GTK_BOX (vbox), spin, FALSE, FALSE, 0);
8162 g_object_set_data (G_OBJECT (control_window), "spin2", spin);
8164 entry = gtk_entry_new ();
8165 gtk_box_pack_start (GTK_BOX (vbox), entry, FALSE, FALSE, 0);
8167 g_signal_connect (entry, "changed",
8168 G_CALLBACK (set_geometry_callback),
8171 button = gtk_button_new_with_label ("Show gravity test windows");
8172 g_signal_connect_swapped (button,
8174 G_CALLBACK (do_gravity_test),
8176 gtk_box_pack_end (GTK_BOX (vbox), button, FALSE, FALSE, 0);
8178 button = gtk_button_new_with_label ("Reshow with initial size");
8179 g_signal_connect_object (button,
8181 G_CALLBACK (gtk_window_reshow_with_initial_size),
8184 gtk_box_pack_end (GTK_BOX (vbox), button, FALSE, FALSE, 0);
8186 button = gtk_button_new_with_label ("Queue resize");
8187 g_signal_connect_object (button,
8189 G_CALLBACK (gtk_widget_queue_resize),
8192 gtk_box_pack_end (GTK_BOX (vbox), button, FALSE, FALSE, 0);
8194 button = gtk_button_new_with_label ("Resize");
8195 g_signal_connect (button,
8197 G_CALLBACK (set_size_callback),
8199 gtk_box_pack_end (GTK_BOX (vbox), button, FALSE, FALSE, 0);
8201 button = gtk_button_new_with_label ("Set default size");
8202 g_signal_connect (button,
8204 G_CALLBACK (set_default_size_callback),
8206 gtk_box_pack_end (GTK_BOX (vbox), button, FALSE, FALSE, 0);
8208 button = gtk_button_new_with_label ("Unset default size");
8209 g_signal_connect (button,
8211 G_CALLBACK (unset_default_size_callback),
8213 gtk_box_pack_end (GTK_BOX (vbox), button, FALSE, FALSE, 0);
8215 button = gtk_button_new_with_label ("Set size request");
8216 g_signal_connect (button,
8218 G_CALLBACK (set_size_request_callback),
8220 gtk_box_pack_end (GTK_BOX (vbox), button, FALSE, FALSE, 0);
8222 button = gtk_button_new_with_label ("Unset size request");
8223 g_signal_connect (button,
8225 G_CALLBACK (unset_size_request_callback),
8227 gtk_box_pack_end (GTK_BOX (vbox), button, FALSE, FALSE, 0);
8229 button = gtk_button_new_with_label ("Move");
8230 g_signal_connect (button,
8232 G_CALLBACK (set_location_callback),
8234 gtk_box_pack_end (GTK_BOX (vbox), button, FALSE, FALSE, 0);
8236 button = gtk_button_new_with_label ("Move to current position");
8237 g_signal_connect (button,
8239 G_CALLBACK (move_to_position_callback),
8241 gtk_box_pack_end (GTK_BOX (vbox), button, FALSE, FALSE, 0);
8243 button = gtk_check_button_new_with_label ("Allow resize");
8244 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE);
8245 g_signal_connect (button,
8247 G_CALLBACK (resizable_callback),
8249 gtk_box_pack_end (GTK_BOX (vbox), button, FALSE, FALSE, 0);
8251 button = gtk_button_new_with_mnemonic ("_Show");
8252 g_signal_connect_object (button,
8254 G_CALLBACK (gtk_widget_show),
8257 gtk_box_pack_end (GTK_BOX (vbox), button, FALSE, FALSE, 0);
8259 button = gtk_button_new_with_mnemonic ("_Hide");
8260 g_signal_connect_object (button,
8262 G_CALLBACK (gtk_widget_hide),
8265 gtk_box_pack_end (GTK_BOX (vbox), button, FALSE, FALSE, 0);
8267 om = gtk_combo_box_new_text ();
8271 static gchar *names[] = {
8272 "GDK_GRAVITY_NORTH_WEST",
8273 "GDK_GRAVITY_NORTH",
8274 "GDK_GRAVITY_NORTH_EAST",
8276 "GDK_GRAVITY_CENTER",
8278 "GDK_GRAVITY_SOUTH_WEST",
8279 "GDK_GRAVITY_SOUTH",
8280 "GDK_GRAVITY_SOUTH_EAST",
8281 "GDK_GRAVITY_STATIC",
8285 g_assert (names[i]);
8286 gtk_combo_box_append_text (GTK_COMBO_BOX (om), names[i]);
8291 g_signal_connect (om,
8293 G_CALLBACK (gravity_selected),
8296 gtk_box_pack_end (GTK_BOX (vbox), om, FALSE, FALSE, 0);
8299 om = gtk_combo_box_new_text ();
8303 static gchar *names[] = {
8305 "GTK_WIN_POS_CENTER",
8306 "GTK_WIN_POS_MOUSE",
8307 "GTK_WIN_POS_CENTER_ALWAYS",
8308 "GTK_WIN_POS_CENTER_ON_PARENT",
8312 g_assert (names[i]);
8313 gtk_combo_box_append_text (GTK_COMBO_BOX (om), names[i]);
8318 g_signal_connect (om,
8320 G_CALLBACK (pos_selected),
8323 gtk_box_pack_end (GTK_BOX (vbox), om, FALSE, FALSE, 0);
8325 gtk_widget_show_all (vbox);
8327 return control_window;
8331 create_window_sizing (GtkWidget *widget)
8333 static GtkWidget *window = NULL;
8334 static GtkWidget *target_window = NULL;
8340 target_window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
8341 gtk_window_set_screen (GTK_WINDOW (target_window),
8342 gtk_widget_get_screen (widget));
8343 label = gtk_label_new (NULL);
8344 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");
8345 gtk_container_add (GTK_CONTAINER (target_window), label);
8346 gtk_widget_show (label);
8348 g_signal_connect (target_window, "destroy",
8349 G_CALLBACK (gtk_widget_destroyed),
8352 window = window_controls (target_window);
8354 g_signal_connect (window, "destroy",
8355 G_CALLBACK (gtk_widget_destroyed),
8358 gtk_window_set_title (GTK_WINDOW (target_window), "Window to size");
8361 /* don't show target window by default, we want to allow testing
8362 * of behavior on first show.
8365 if (!gtk_widget_get_visible (window))
8366 gtk_widget_show (window);
8368 gtk_widget_destroy (window);
8375 typedef struct _ProgressData {
8378 GtkWidget *block_spin;
8379 GtkWidget *x_align_spin;
8380 GtkWidget *y_align_spin;
8381 GtkWidget *step_spin;
8382 GtkWidget *act_blocks_spin;
8393 progress_timeout (gpointer data)
8395 ProgressData *pdata = data;
8399 if (pdata->activity)
8401 gtk_progress_bar_pulse (GTK_PROGRESS_BAR (pdata->pbar));
8403 text = g_strdup_printf ("%s", "???");
8407 new_val = gtk_progress_bar_get_fraction (GTK_PROGRESS_BAR (pdata->pbar)) + 0.01;
8410 gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (pdata->pbar), new_val);
8412 text = g_strdup_printf ("%.0f%%", 100 * new_val);
8415 gtk_label_set_text (GTK_LABEL (pdata->label), text);
8422 destroy_progress (GtkWidget *widget,
8423 ProgressData **pdata)
8425 g_source_remove ((*pdata)->timer);
8426 (*pdata)->timer = 0;
8427 (*pdata)->window = NULL;
8433 progressbar_toggle_orientation (GtkWidget *widget, gpointer data)
8435 ProgressData *pdata;
8438 pdata = (ProgressData *) data;
8440 if (!gtk_widget_get_mapped (widget))
8443 i = gtk_combo_box_get_active (GTK_COMBO_BOX (widget));
8445 if (i == 0 || i == 1)
8446 gtk_orientable_set_orientation (GTK_ORIENTABLE (pdata->pbar), GTK_ORIENTATION_HORIZONTAL);
8448 gtk_orientable_set_orientation (GTK_ORIENTABLE (pdata->pbar), GTK_ORIENTATION_VERTICAL);
8450 if (i == 1 || i == 2)
8451 gtk_progress_bar_set_inverted (GTK_PROGRESS_BAR (pdata->pbar), TRUE);
8453 gtk_progress_bar_set_inverted (GTK_PROGRESS_BAR (pdata->pbar), FALSE);
8457 toggle_show_text (GtkWidget *widget, ProgressData *pdata)
8461 active = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget));
8462 gtk_progress_bar_set_show_text (GTK_PROGRESS_BAR (pdata->pbar), active);
8466 progressbar_toggle_ellipsize (GtkWidget *widget,
8469 ProgressData *pdata = data;
8470 if (gtk_widget_is_drawable (widget))
8472 gint i = gtk_combo_box_get_active (GTK_COMBO_BOX (widget));
8473 gtk_progress_bar_set_ellipsize (GTK_PROGRESS_BAR (pdata->pbar), i);
8478 toggle_activity_mode (GtkWidget *widget, ProgressData *pdata)
8480 pdata->activity = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget));
8484 entry_changed (GtkWidget *widget, ProgressData *pdata)
8486 gtk_progress_bar_set_text (GTK_PROGRESS_BAR (pdata->pbar),
8487 gtk_entry_get_text (GTK_ENTRY (pdata->entry)));
8491 create_progress_bar (GtkWidget *widget)
8493 GtkWidget *action_area, *content_area;
8503 static ProgressData *pdata = NULL;
8505 static gchar *items1[] =
8513 static char *ellipsize_items[] = {
8514 "None", // PANGO_ELLIPSIZE_NONE,
8515 "Start", // PANGO_ELLIPSIZE_START,
8516 "Middle", // PANGO_ELLIPSIZE_MIDDLE,
8517 "End", // PANGO_ELLIPSIZE_END
8521 pdata = g_new0 (ProgressData, 1);
8525 pdata->window = gtk_dialog_new ();
8527 gtk_window_set_screen (GTK_WINDOW (pdata->window),
8528 gtk_widget_get_screen (widget));
8530 gtk_window_set_resizable (GTK_WINDOW (pdata->window), TRUE);
8532 g_signal_connect (pdata->window, "destroy",
8533 G_CALLBACK (destroy_progress),
8537 content_area = gtk_dialog_get_content_area (GTK_DIALOG (pdata->window));
8538 action_area = gtk_dialog_get_action_area (GTK_DIALOG (pdata->window));
8540 gtk_window_set_title (GTK_WINDOW (pdata->window), "GtkProgressBar");
8541 gtk_container_set_border_width (GTK_CONTAINER (pdata->window), 0);
8543 vbox = gtk_vbox_new (FALSE, 5);
8544 gtk_container_set_border_width (GTK_CONTAINER (vbox), 10);
8545 gtk_box_pack_start (GTK_BOX (content_area), vbox, FALSE, TRUE, 0);
8547 frame = gtk_frame_new ("Progress");
8548 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, TRUE, 0);
8550 vbox2 = gtk_vbox_new (FALSE, 5);
8551 gtk_container_add (GTK_CONTAINER (frame), vbox2);
8553 align = gtk_alignment_new (0.5, 0.5, 0, 0);
8554 gtk_box_pack_start (GTK_BOX (vbox2), align, FALSE, FALSE, 5);
8556 pdata->pbar = gtk_progress_bar_new ();
8557 gtk_progress_bar_set_ellipsize (GTK_PROGRESS_BAR (pdata->pbar),
8558 PANGO_ELLIPSIZE_MIDDLE);
8560 gtk_container_add (GTK_CONTAINER (align), pdata->pbar);
8561 pdata->timer = g_timeout_add (100, (GSourceFunc)progress_timeout, pdata);
8563 align = gtk_alignment_new (0.5, 0.5, 0, 0);
8564 gtk_box_pack_start (GTK_BOX (vbox2), align, FALSE, FALSE, 5);
8566 hbox = gtk_hbox_new (FALSE, 5);
8567 gtk_container_add (GTK_CONTAINER (align), hbox);
8568 label = gtk_label_new ("Label updated by user :");
8569 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
8570 pdata->label = gtk_label_new ("");
8571 gtk_box_pack_start (GTK_BOX (hbox), pdata->label, FALSE, TRUE, 0);
8573 frame = gtk_frame_new ("Options");
8574 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, TRUE, 0);
8576 vbox2 = gtk_vbox_new (FALSE, 5);
8577 gtk_container_add (GTK_CONTAINER (frame), vbox2);
8579 tab = gtk_table_new (7, 2, FALSE);
8580 gtk_box_pack_start (GTK_BOX (vbox2), tab, FALSE, TRUE, 0);
8582 label = gtk_label_new ("Orientation :");
8583 gtk_table_attach (GTK_TABLE (tab), label, 0, 1, 0, 1,
8584 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
8586 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
8588 pdata->omenu1 = build_option_menu (items1, 4, 0,
8589 progressbar_toggle_orientation,
8591 hbox = gtk_hbox_new (FALSE, 0);
8592 gtk_table_attach (GTK_TABLE (tab), hbox, 1, 2, 0, 1,
8593 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
8595 gtk_box_pack_start (GTK_BOX (hbox), pdata->omenu1, TRUE, TRUE, 0);
8597 check = gtk_check_button_new_with_label ("Show text");
8598 g_signal_connect (check, "clicked",
8599 G_CALLBACK (toggle_show_text),
8601 gtk_table_attach (GTK_TABLE (tab), check, 0, 1, 1, 2,
8602 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
8605 hbox = gtk_hbox_new (FALSE, 0);
8606 gtk_table_attach (GTK_TABLE (tab), hbox, 1, 2, 1, 2,
8607 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
8610 label = gtk_label_new ("Text: ");
8611 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
8613 pdata->entry = gtk_entry_new ();
8614 g_signal_connect (pdata->entry, "changed",
8615 G_CALLBACK (entry_changed),
8617 gtk_box_pack_start (GTK_BOX (hbox), pdata->entry, TRUE, TRUE, 0);
8618 gtk_widget_set_size_request (pdata->entry, 100, -1);
8620 label = gtk_label_new ("Ellipsize text :");
8621 gtk_table_attach (GTK_TABLE (tab), label, 0, 1, 10, 11,
8622 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
8624 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
8625 pdata->elmenu = build_option_menu (ellipsize_items,
8626 sizeof (ellipsize_items) / sizeof (ellipsize_items[0]),
8627 2, // PANGO_ELLIPSIZE_MIDDLE
8628 progressbar_toggle_ellipsize,
8630 hbox = gtk_hbox_new (FALSE, 0);
8631 gtk_table_attach (GTK_TABLE (tab), hbox, 1, 2, 10, 11,
8632 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
8634 gtk_box_pack_start (GTK_BOX (hbox), pdata->elmenu, TRUE, TRUE, 0);
8636 check = gtk_check_button_new_with_label ("Activity mode");
8637 g_signal_connect (check, "clicked",
8638 G_CALLBACK (toggle_activity_mode), pdata);
8639 gtk_table_attach (GTK_TABLE (tab), check, 0, 1, 15, 16,
8640 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
8643 button = gtk_button_new_with_label ("close");
8644 g_signal_connect_swapped (button, "clicked",
8645 G_CALLBACK (gtk_widget_destroy),
8647 gtk_widget_set_can_default (button, TRUE);
8648 gtk_box_pack_start (GTK_BOX (action_area), button, TRUE, TRUE, 0);
8649 gtk_widget_grab_default (button);
8652 if (!gtk_widget_get_visible (pdata->window))
8653 gtk_widget_show_all (pdata->window);
8655 gtk_widget_destroy (pdata->window);
8667 GtkWidget *res_widget;
8671 find_widget (GtkWidget *widget, FindWidgetData *data)
8673 GtkAllocation new_allocation;
8677 gtk_widget_get_allocation (widget, &new_allocation);
8679 if (data->found || !gtk_widget_get_mapped (widget))
8682 /* Note that in the following code, we only count the
8683 * position as being inside a WINDOW widget if it is inside
8684 * widget->window; points that are outside of widget->window
8685 * but within the allocation are not counted. This is consistent
8686 * with the way we highlight drag targets.
8688 if (gtk_widget_get_has_window (widget))
8690 new_allocation.x = 0;
8691 new_allocation.y = 0;
8694 if (gtk_widget_get_parent (widget) && !data->first)
8696 GdkWindow *window = gtk_widget_get_window (widget);
8697 while (window != gtk_widget_get_window (gtk_widget_get_parent (widget)))
8699 gint tx, ty, twidth, theight;
8700 gdk_drawable_get_size (window, &twidth, &theight);
8702 if (new_allocation.x < 0)
8704 new_allocation.width += new_allocation.x;
8705 new_allocation.x = 0;
8707 if (new_allocation.y < 0)
8709 new_allocation.height += new_allocation.y;
8710 new_allocation.y = 0;
8712 if (new_allocation.x + new_allocation.width > twidth)
8713 new_allocation.width = twidth - new_allocation.x;
8714 if (new_allocation.y + new_allocation.height > theight)
8715 new_allocation.height = theight - new_allocation.y;
8717 gdk_window_get_position (window, &tx, &ty);
8718 new_allocation.x += tx;
8720 new_allocation.y += ty;
8723 window = gdk_window_get_parent (window);
8727 if ((data->x >= new_allocation.x) && (data->y >= new_allocation.y) &&
8728 (data->x < new_allocation.x + new_allocation.width) &&
8729 (data->y < new_allocation.y + new_allocation.height))
8731 /* First, check if the drag is in a valid drop site in
8732 * one of our children
8734 if (GTK_IS_CONTAINER (widget))
8736 FindWidgetData new_data = *data;
8738 new_data.x -= x_offset;
8739 new_data.y -= y_offset;
8740 new_data.found = FALSE;
8741 new_data.first = FALSE;
8743 gtk_container_forall (GTK_CONTAINER (widget),
8744 (GtkCallback)find_widget,
8747 data->found = new_data.found;
8749 data->res_widget = new_data.res_widget;
8752 /* If not, and this widget is registered as a drop site, check to
8753 * emit "drag_motion" to check if we are actually in
8759 data->res_widget = widget;
8765 find_widget_at_pointer (GdkDisplay *display)
8767 GtkWidget *widget = NULL;
8768 GdkWindow *pointer_window;
8770 FindWidgetData data;
8772 pointer_window = gdk_display_get_window_at_pointer (display, NULL, NULL);
8776 gpointer widget_ptr;
8778 gdk_window_get_user_data (pointer_window, &widget_ptr);
8779 widget = widget_ptr;
8784 gdk_window_get_pointer (gtk_widget_get_window (widget),
8792 find_widget (widget, &data);
8794 return data.res_widget;
8800 struct PropertiesData {
8808 destroy_properties (GtkWidget *widget,
8809 struct PropertiesData *data)
8813 *data->window = NULL;
8814 data->window = NULL;
8819 gdk_cursor_unref (data->cursor);
8820 data->cursor = NULL;
8825 g_signal_handler_disconnect (widget, data->handler);
8833 property_query_event (GtkWidget *widget,
8835 struct PropertiesData *data)
8837 GtkWidget *res_widget = NULL;
8839 if (!data->in_query)
8842 if (event->type == GDK_BUTTON_RELEASE)
8844 gtk_grab_remove (widget);
8845 gdk_display_pointer_ungrab (gtk_widget_get_display (widget),
8848 res_widget = find_widget_at_pointer (gtk_widget_get_display (widget));
8851 g_object_set_data (G_OBJECT (res_widget), "prop-editor-screen",
8852 gtk_widget_get_screen (widget));
8853 create_prop_editor (G_OBJECT (res_widget), 0);
8856 data->in_query = FALSE;
8863 query_properties (GtkButton *button,
8864 struct PropertiesData *data)
8866 GtkWidget *widget = GTK_WIDGET (button);
8869 g_signal_connect (button, "event",
8870 G_CALLBACK (property_query_event), data);
8874 data->cursor = gdk_cursor_new_for_display (gtk_widget_get_display (widget),
8877 failure = gdk_pointer_grab (gtk_widget_get_window (widget),
8879 GDK_BUTTON_RELEASE_MASK,
8884 gtk_grab_add (widget);
8886 data->in_query = TRUE;
8890 create_properties (GtkWidget *widget)
8892 static GtkWidget *window = NULL;
8896 struct PropertiesData *data;
8898 data = g_new (struct PropertiesData, 1);
8899 data->window = &window;
8900 data->in_query = FALSE;
8901 data->cursor = NULL;
8906 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
8908 gtk_window_set_screen (GTK_WINDOW (window),
8909 gtk_widget_get_screen (widget));
8911 data->handler = g_signal_connect (window, "destroy",
8912 G_CALLBACK (destroy_properties),
8915 gtk_window_set_title (GTK_WINDOW (window), "test properties");
8916 gtk_container_set_border_width (GTK_CONTAINER (window), 10);
8918 vbox = gtk_vbox_new (FALSE, 1);
8919 gtk_container_add (GTK_CONTAINER (window), vbox);
8921 label = gtk_label_new ("This is just a dumb test to test properties.\nIf you need a generic module, get GLE.");
8922 gtk_box_pack_start (GTK_BOX (vbox), label, TRUE, TRUE, 0);
8924 button = gtk_button_new_with_label ("Query properties");
8925 gtk_box_pack_start (GTK_BOX (vbox), button, TRUE, TRUE, 0);
8926 g_signal_connect (button, "clicked",
8927 G_CALLBACK (query_properties),
8931 if (!gtk_widget_get_visible (window))
8932 gtk_widget_show_all (window);
8934 gtk_widget_destroy (window);
8943 selection_test_received (GtkWidget *tree_view,
8944 GtkSelectionData *data)
8946 GtkTreeModel *model;
8947 GtkListStore *store;
8951 if (data->length < 0)
8953 g_print ("Selection retrieval failed\n");
8956 if (data->type != GDK_SELECTION_TYPE_ATOM)
8958 g_print ("Selection \"TARGETS\" was not returned as atoms!\n");
8962 /* Clear out any current list items */
8964 model = gtk_tree_view_get_model (GTK_TREE_VIEW (tree_view));
8965 store = GTK_LIST_STORE (model);
8966 gtk_list_store_clear (store);
8968 /* Add new items to list */
8970 atoms = (GdkAtom *)data->data;
8972 l = data->length / sizeof (GdkAtom);
8973 for (i = 0; i < l; i++)
8978 name = gdk_atom_name (atoms[i]);
8981 gtk_list_store_insert_with_values (store, &iter, i, 0, name, -1);
8985 gtk_list_store_insert_with_values (store, &iter, i, 0, "(bad atom)", -1);
8992 selection_test_get_targets (GtkWidget *widget, GtkWidget *tree_view)
8994 static GdkAtom targets_atom = GDK_NONE;
8996 if (targets_atom == GDK_NONE)
8997 targets_atom = gdk_atom_intern ("TARGETS", FALSE);
8999 gtk_selection_convert (tree_view, GDK_SELECTION_PRIMARY, targets_atom,
9004 create_selection_test (GtkWidget *widget)
9006 static GtkWidget *window = NULL;
9007 GtkWidget *action_area, *content_area;
9010 GtkWidget *scrolled_win;
9011 GtkListStore* store;
9012 GtkWidget *tree_view;
9013 GtkTreeViewColumn *column;
9014 GtkCellRenderer *renderer;
9019 window = gtk_dialog_new ();
9021 gtk_window_set_screen (GTK_WINDOW (window),
9022 gtk_widget_get_screen (widget));
9024 g_signal_connect (window, "destroy",
9025 G_CALLBACK (gtk_widget_destroyed),
9028 content_area = gtk_dialog_get_content_area (GTK_DIALOG (window));
9029 action_area = gtk_dialog_get_action_area (GTK_DIALOG (window));
9031 gtk_window_set_title (GTK_WINDOW (window), "Selection Test");
9032 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
9034 /* Create the list */
9036 vbox = gtk_vbox_new (FALSE, 5);
9037 gtk_container_set_border_width (GTK_CONTAINER (vbox), 10);
9038 gtk_box_pack_start (GTK_BOX (content_area), vbox, TRUE, TRUE, 0);
9040 label = gtk_label_new ("Gets available targets for current selection");
9041 gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
9043 scrolled_win = gtk_scrolled_window_new (NULL, NULL);
9044 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win),
9045 GTK_POLICY_AUTOMATIC,
9046 GTK_POLICY_AUTOMATIC);
9047 gtk_box_pack_start (GTK_BOX (vbox), scrolled_win, TRUE, TRUE, 0);
9048 gtk_widget_set_size_request (scrolled_win, 100, 200);
9050 store = gtk_list_store_new (1, G_TYPE_STRING);
9051 tree_view = gtk_tree_view_new_with_model (GTK_TREE_MODEL (store));
9052 gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scrolled_win), tree_view);
9054 renderer = gtk_cell_renderer_text_new ();
9055 column = gtk_tree_view_column_new_with_attributes ("Target", renderer,
9057 gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view), column);
9059 g_signal_connect (tree_view, "selection_received",
9060 G_CALLBACK (selection_test_received), NULL);
9062 /* .. And create some buttons */
9063 button = gtk_button_new_with_label ("Get Targets");
9064 gtk_box_pack_start (GTK_BOX (action_area), button, TRUE, TRUE, 0);
9066 g_signal_connect (button, "clicked",
9067 G_CALLBACK (selection_test_get_targets), tree_view);
9069 button = gtk_button_new_with_label ("Quit");
9070 gtk_box_pack_start (GTK_BOX (action_area), button, TRUE, TRUE, 0);
9072 g_signal_connect_swapped (button, "clicked",
9073 G_CALLBACK (gtk_widget_destroy),
9077 if (!gtk_widget_get_visible (window))
9078 gtk_widget_show_all (window);
9080 gtk_widget_destroy (window);
9087 static int scroll_test_pos = 0.0;
9090 scroll_test_draw (GtkWidget *widget,
9095 gint imin, imax, jmin, jmax;
9098 gdk_cairo_get_clip_rectangle (cr, &clip);
9100 imin = (clip.x) / 10;
9101 imax = (clip.x + clip.width + 9) / 10;
9103 jmin = ((int)adj->value + clip.y) / 10;
9104 jmax = ((int)adj->value + clip.y + clip.height + 9) / 10;
9106 for (i=imin; i<imax; i++)
9107 for (j=jmin; j<jmax; j++)
9109 cairo_rectangle (cr, 10*i, 10*j - (int)adj->value, 1+i%10, 1+j%10);
9117 scroll_test_scroll (GtkWidget *widget, GdkEventScroll *event,
9120 gdouble new_value = adj->value + ((event->direction == GDK_SCROLL_UP) ?
9121 -adj->page_increment / 2:
9122 adj->page_increment / 2);
9123 new_value = CLAMP (new_value, adj->lower, adj->upper - adj->page_size);
9124 gtk_adjustment_set_value (adj, new_value);
9130 scroll_test_configure (GtkWidget *widget, GdkEventConfigure *event,
9133 GtkAllocation allocation;
9135 gtk_widget_get_allocation (widget, &allocation);
9136 adj->page_increment = 0.9 * allocation.height;
9137 adj->page_size = allocation.height;
9139 g_signal_emit_by_name (adj, "changed");
9143 scroll_test_adjustment_changed (GtkAdjustment *adj, GtkWidget *widget)
9148 dy = scroll_test_pos - (int)adj->value;
9149 scroll_test_pos = adj->value;
9151 if (!gtk_widget_is_drawable (widget))
9154 window = gtk_widget_get_window (widget);
9155 gdk_window_scroll (window, 0, dy);
9156 gdk_window_process_updates (window, FALSE);
9161 create_scroll_test (GtkWidget *widget)
9163 static GtkWidget *window = NULL;
9164 GtkWidget *action_area, *content_area;
9166 GtkWidget *drawing_area;
9167 GtkWidget *scrollbar;
9170 GdkGeometry geometry;
9171 GdkWindowHints geometry_mask;
9175 window = gtk_dialog_new ();
9177 gtk_window_set_screen (GTK_WINDOW (window),
9178 gtk_widget_get_screen (widget));
9180 g_signal_connect (window, "destroy",
9181 G_CALLBACK (gtk_widget_destroyed),
9184 content_area = gtk_dialog_get_content_area (GTK_DIALOG (window));
9185 action_area = gtk_dialog_get_action_area (GTK_DIALOG (window));
9187 gtk_window_set_title (GTK_WINDOW (window), "Scroll Test");
9188 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
9190 hbox = gtk_hbox_new (FALSE, 0);
9191 gtk_box_pack_start (GTK_BOX (content_area), hbox, TRUE, TRUE, 0);
9192 gtk_widget_show (hbox);
9194 drawing_area = gtk_drawing_area_new ();
9195 gtk_widget_set_size_request (drawing_area, 200, 200);
9196 gtk_box_pack_start (GTK_BOX (hbox), drawing_area, TRUE, TRUE, 0);
9197 gtk_widget_show (drawing_area);
9199 gtk_widget_set_events (drawing_area, GDK_EXPOSURE_MASK | GDK_SCROLL_MASK);
9201 adj = GTK_ADJUSTMENT (gtk_adjustment_new (0.0, 0.0, 1000.0, 1.0, 180.0, 200.0));
9202 scroll_test_pos = 0.0;
9204 scrollbar = gtk_vscrollbar_new (adj);
9205 gtk_box_pack_start (GTK_BOX (hbox), scrollbar, FALSE, FALSE, 0);
9206 gtk_widget_show (scrollbar);
9208 g_signal_connect (drawing_area, "draw",
9209 G_CALLBACK (scroll_test_draw), adj);
9210 g_signal_connect (drawing_area, "configure_event",
9211 G_CALLBACK (scroll_test_configure), adj);
9212 g_signal_connect (drawing_area, "scroll_event",
9213 G_CALLBACK (scroll_test_scroll), adj);
9215 g_signal_connect (adj, "value_changed",
9216 G_CALLBACK (scroll_test_adjustment_changed),
9219 /* .. And create some buttons */
9221 button = gtk_button_new_with_label ("Quit");
9222 gtk_box_pack_start (GTK_BOX (action_area), button, TRUE, TRUE, 0);
9224 g_signal_connect_swapped (button, "clicked",
9225 G_CALLBACK (gtk_widget_destroy),
9227 gtk_widget_show (button);
9229 /* Set up gridded geometry */
9231 geometry_mask = GDK_HINT_MIN_SIZE |
9232 GDK_HINT_BASE_SIZE |
9233 GDK_HINT_RESIZE_INC;
9235 geometry.min_width = 20;
9236 geometry.min_height = 20;
9237 geometry.base_width = 0;
9238 geometry.base_height = 0;
9239 geometry.width_inc = 10;
9240 geometry.height_inc = 10;
9242 gtk_window_set_geometry_hints (GTK_WINDOW (window),
9243 drawing_area, &geometry, geometry_mask);
9246 if (!gtk_widget_get_visible (window))
9247 gtk_widget_show (window);
9249 gtk_widget_destroy (window);
9256 static int timer = 0;
9259 timeout_test (GtkWidget *label)
9261 static int count = 0;
9262 static char buffer[32];
9264 sprintf (buffer, "count: %d", ++count);
9265 gtk_label_set_text (GTK_LABEL (label), buffer);
9271 start_timeout_test (GtkWidget *widget,
9276 timer = g_timeout_add (100, (GSourceFunc)timeout_test, label);
9281 stop_timeout_test (GtkWidget *widget,
9286 g_source_remove (timer);
9292 destroy_timeout_test (GtkWidget *widget,
9295 stop_timeout_test (NULL, NULL);
9301 create_timeout_test (GtkWidget *widget)
9303 static GtkWidget *window = NULL;
9304 GtkWidget *action_area, *content_area;
9310 window = gtk_dialog_new ();
9312 gtk_window_set_screen (GTK_WINDOW (window),
9313 gtk_widget_get_screen (widget));
9315 g_signal_connect (window, "destroy",
9316 G_CALLBACK (destroy_timeout_test),
9319 content_area = gtk_dialog_get_content_area (GTK_DIALOG (window));
9320 action_area = gtk_dialog_get_content_area (GTK_DIALOG (window));
9322 gtk_window_set_title (GTK_WINDOW (window), "Timeout Test");
9323 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
9325 label = gtk_label_new ("count: 0");
9326 gtk_misc_set_padding (GTK_MISC (label), 10, 10);
9327 gtk_box_pack_start (GTK_BOX (content_area), label, TRUE, TRUE, 0);
9328 gtk_widget_show (label);
9330 button = gtk_button_new_with_label ("close");
9331 g_signal_connect_swapped (button, "clicked",
9332 G_CALLBACK (gtk_widget_destroy),
9334 gtk_widget_set_can_default (button, TRUE);
9335 gtk_box_pack_start (GTK_BOX (action_area), button, TRUE, TRUE, 0);
9336 gtk_widget_grab_default (button);
9337 gtk_widget_show (button);
9339 button = gtk_button_new_with_label ("start");
9340 g_signal_connect (button, "clicked",
9341 G_CALLBACK(start_timeout_test),
9343 gtk_widget_set_can_default (button, TRUE);
9344 gtk_box_pack_start (GTK_BOX (action_area), button, TRUE, TRUE, 0);
9345 gtk_widget_show (button);
9347 button = gtk_button_new_with_label ("stop");
9348 g_signal_connect (button, "clicked",
9349 G_CALLBACK (stop_timeout_test),
9351 gtk_widget_set_can_default (button, TRUE);
9352 gtk_box_pack_start (GTK_BOX (action_area), button, TRUE, TRUE, 0);
9353 gtk_widget_show (button);
9356 if (!gtk_widget_get_visible (window))
9357 gtk_widget_show (window);
9359 gtk_widget_destroy (window);
9366 static int idle_id = 0;
9369 idle_test (GtkWidget *label)
9371 static int count = 0;
9372 static char buffer[32];
9374 sprintf (buffer, "count: %d", ++count);
9375 gtk_label_set_text (GTK_LABEL (label), buffer);
9381 start_idle_test (GtkWidget *widget,
9386 idle_id = g_idle_add ((GSourceFunc) idle_test, label);
9391 stop_idle_test (GtkWidget *widget,
9396 g_source_remove (idle_id);
9402 destroy_idle_test (GtkWidget *widget,
9405 stop_idle_test (NULL, NULL);
9411 toggle_idle_container (GObject *button,
9412 GtkContainer *container)
9414 gtk_container_set_resize_mode (container, GPOINTER_TO_INT (g_object_get_data (button, "user_data")));
9418 create_idle_test (GtkWidget *widget)
9420 static GtkWidget *window = NULL;
9423 GtkWidget *container;
9427 GtkWidget *action_area, *content_area;
9432 window = gtk_dialog_new ();
9434 gtk_window_set_screen (GTK_WINDOW (window),
9435 gtk_widget_get_screen (widget));
9437 g_signal_connect (window, "destroy",
9438 G_CALLBACK (destroy_idle_test),
9441 content_area = gtk_dialog_get_content_area (GTK_DIALOG (window));
9442 action_area = gtk_dialog_get_action_area (GTK_DIALOG (window));
9444 gtk_window_set_title (GTK_WINDOW (window), "Idle Test");
9445 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
9447 label = gtk_label_new ("count: 0");
9448 gtk_misc_set_padding (GTK_MISC (label), 10, 10);
9449 gtk_widget_show (label);
9452 g_object_new (GTK_TYPE_HBOX,
9454 /* "GtkContainer::child", g_object_new (GTK_TYPE_HBOX,
9455 * "GtkWidget::visible", TRUE,
9460 gtk_box_pack_start (GTK_BOX (content_area), container, TRUE, TRUE, 0);
9463 g_object_new (GTK_TYPE_FRAME,
9465 "label", "Label Container",
9467 "parent", content_area,
9470 g_object_new (GTK_TYPE_VBOX,
9475 g_object_connect (g_object_new (GTK_TYPE_RADIO_BUTTON,
9476 "label", "Resize-Parent",
9477 "user_data", (void*)GTK_RESIZE_PARENT,
9481 "signal::clicked", toggle_idle_container, container,
9483 button = g_object_new (GTK_TYPE_RADIO_BUTTON,
9484 "label", "Resize-Queue",
9485 "user_data", (void*)GTK_RESIZE_QUEUE,
9490 g_object_connect (button,
9491 "signal::clicked", toggle_idle_container, container,
9493 button2 = g_object_new (GTK_TYPE_RADIO_BUTTON,
9494 "label", "Resize-Immediate",
9495 "user_data", (void*)GTK_RESIZE_IMMEDIATE,
9497 g_object_connect (button2,
9498 "signal::clicked", toggle_idle_container, container,
9500 g_object_set (button2,
9506 button = gtk_button_new_with_label ("close");
9507 g_signal_connect_swapped (button, "clicked",
9508 G_CALLBACK (gtk_widget_destroy),
9510 gtk_widget_set_can_default (button, TRUE);
9511 gtk_box_pack_start (GTK_BOX (action_area), button, TRUE, TRUE, 0);
9512 gtk_widget_grab_default (button);
9513 gtk_widget_show (button);
9515 button = gtk_button_new_with_label ("start");
9516 g_signal_connect (button, "clicked",
9517 G_CALLBACK (start_idle_test),
9519 gtk_widget_set_can_default (button, TRUE);
9520 gtk_box_pack_start (GTK_BOX (action_area), button, TRUE, TRUE, 0);
9521 gtk_widget_show (button);
9523 button = gtk_button_new_with_label ("stop");
9524 g_signal_connect (button, "clicked",
9525 G_CALLBACK (stop_idle_test),
9527 gtk_widget_set_can_default (button, TRUE);
9528 gtk_box_pack_start (GTK_BOX (action_area), button, TRUE, TRUE, 0);
9529 gtk_widget_show (button);
9532 if (!gtk_widget_get_visible (window))
9533 gtk_widget_show (window);
9535 gtk_widget_destroy (window);
9543 reload_all_rc_files (void)
9545 static GdkAtom atom_rcfiles = GDK_NONE;
9547 GdkEvent *send_event = gdk_event_new (GDK_CLIENT_EVENT);
9551 atom_rcfiles = gdk_atom_intern("_GTK_READ_RCFILES", FALSE);
9553 for(i = 0; i < 5; i++)
9554 send_event->client.data.l[i] = 0;
9555 send_event->client.data_format = 32;
9556 send_event->client.message_type = atom_rcfiles;
9557 gdk_event_send_clientmessage_toall (send_event);
9559 gdk_event_free (send_event);
9563 create_rc_file (GtkWidget *widget)
9565 static GtkWidget *window = NULL;
9566 GtkWidget *action_area, *content_area;
9574 window = gtk_dialog_new ();
9576 gtk_window_set_screen (GTK_WINDOW (window),
9577 gtk_widget_get_screen (widget));
9579 g_signal_connect (window, "destroy",
9580 G_CALLBACK (gtk_widget_destroyed),
9583 content_area = gtk_dialog_get_content_area (GTK_DIALOG (window));
9584 action_area = gtk_dialog_get_action_area (GTK_DIALOG (window));
9586 frame = gtk_aspect_frame_new ("Testing RC file prioritization", 0.5, 0.5, 0.0, TRUE);
9587 gtk_box_pack_start (GTK_BOX (content_area), frame, FALSE, FALSE, 0);
9589 vbox = gtk_vbox_new (FALSE, 0);
9590 gtk_container_add (GTK_CONTAINER (frame), vbox);
9592 label = gtk_label_new ("This label should be red");
9593 gtk_widget_set_name (label, "testgtk-red-label");
9594 gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
9596 label = gtk_label_new ("This label should be green");
9597 gtk_widget_set_name (label, "testgtk-green-label");
9598 gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
9600 label = gtk_label_new ("This label should be blue");
9601 gtk_widget_set_name (label, "testgtk-blue-label");
9602 gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
9604 gtk_window_set_title (GTK_WINDOW (window), "Reload Rc file");
9605 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
9607 button = gtk_button_new_with_label ("Reload");
9608 g_signal_connect (button, "clicked",
9609 G_CALLBACK (gtk_rc_reparse_all), NULL);
9610 gtk_widget_set_can_default (button, TRUE);
9611 gtk_box_pack_start (GTK_BOX (action_area), button, TRUE, TRUE, 0);
9612 gtk_widget_grab_default (button);
9614 button = gtk_button_new_with_label ("Reload All");
9615 g_signal_connect (button, "clicked",
9616 G_CALLBACK (reload_all_rc_files), NULL);
9617 gtk_widget_set_can_default (button, TRUE);
9618 gtk_box_pack_start (GTK_BOX (action_area), button, TRUE, TRUE, 0);
9620 button = gtk_button_new_with_label ("Close");
9621 g_signal_connect_swapped (button, "clicked",
9622 G_CALLBACK (gtk_widget_destroy),
9624 gtk_widget_set_can_default (button, TRUE);
9625 gtk_box_pack_start (GTK_BOX (action_area), button, TRUE, TRUE, 0);
9628 if (!gtk_widget_get_visible (window))
9629 gtk_widget_show_all (window);
9631 gtk_widget_destroy (window);
9635 * Test of recursive mainloop
9639 mainloop_destroyed (GtkWidget *w, GtkWidget **window)
9646 create_mainloop (GtkWidget *widget)
9648 static GtkWidget *window = NULL;
9649 GtkWidget *action_area, *content_area;
9655 window = gtk_dialog_new ();
9657 gtk_window_set_screen (GTK_WINDOW (window),
9658 gtk_widget_get_screen (widget));
9660 gtk_window_set_title (GTK_WINDOW (window), "Test Main Loop");
9662 g_signal_connect (window, "destroy",
9663 G_CALLBACK (mainloop_destroyed),
9666 content_area = gtk_dialog_get_content_area (GTK_DIALOG (window));
9667 action_area = gtk_dialog_get_action_area (GTK_DIALOG (window));
9669 label = gtk_label_new ("In recursive main loop...");
9670 gtk_misc_set_padding (GTK_MISC(label), 20, 20);
9672 gtk_box_pack_start (GTK_BOX (content_area), label, TRUE, TRUE, 0);
9673 gtk_widget_show (label);
9675 button = gtk_button_new_with_label ("Leave");
9676 gtk_box_pack_start (GTK_BOX (action_area), button, FALSE, TRUE, 0);
9678 g_signal_connect_swapped (button, "clicked",
9679 G_CALLBACK (gtk_widget_destroy),
9682 gtk_widget_set_can_default (button, TRUE);
9683 gtk_widget_grab_default (button);
9685 gtk_widget_show (button);
9688 if (!gtk_widget_get_visible (window))
9690 gtk_widget_show (window);
9692 g_print ("create_mainloop: start\n");
9694 g_print ("create_mainloop: done\n");
9697 gtk_widget_destroy (window);
9701 layout_draw_handler (GtkWidget *widget, cairo_t *cr)
9704 GdkWindow *bin_window;
9707 gint imin, imax, jmin, jmax;
9709 layout = GTK_LAYOUT (widget);
9710 bin_window = gtk_layout_get_bin_window (layout);
9712 if (!gtk_cairo_should_draw_window (cr, bin_window))
9715 gdk_window_get_position (bin_window, &x, &y);
9716 cairo_translate (cr, x, y);
9718 gdk_cairo_get_clip_rectangle (cr, &clip);
9720 imin = (clip.x) / 10;
9721 imax = (clip.x + clip.width + 9) / 10;
9723 jmin = (clip.y) / 10;
9724 jmax = (clip.y + clip.height + 9) / 10;
9726 for (i=imin; i<imax; i++)
9727 for (j=jmin; j<jmax; j++)
9729 cairo_rectangle (cr,
9738 void create_layout (GtkWidget *widget)
9740 GtkAdjustment *hadjustment, *vadjustment;
9742 static GtkWidget *window = NULL;
9743 GtkWidget *layout_widget;
9744 GtkWidget *scrolledwindow;
9753 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
9754 gtk_window_set_screen (GTK_WINDOW (window),
9755 gtk_widget_get_screen (widget));
9757 g_signal_connect (window, "destroy",
9758 G_CALLBACK (gtk_widget_destroyed),
9761 gtk_window_set_title (GTK_WINDOW (window), "Layout");
9762 gtk_widget_set_size_request (window, 200, 200);
9764 scrolledwindow = gtk_scrolled_window_new (NULL, NULL);
9765 gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolledwindow),
9767 gtk_scrolled_window_set_placement (GTK_SCROLLED_WINDOW (scrolledwindow),
9768 GTK_CORNER_TOP_RIGHT);
9770 gtk_container_add (GTK_CONTAINER (window), scrolledwindow);
9772 layout_widget = gtk_layout_new (NULL, NULL);
9773 layout = GTK_LAYOUT (layout_widget);
9774 gtk_container_add (GTK_CONTAINER (scrolledwindow), layout_widget);
9776 /* We set step sizes here since GtkLayout does not set
9779 hadjustment = gtk_layout_get_hadjustment (layout);
9780 vadjustment = gtk_layout_get_vadjustment (layout);
9781 gtk_adjustment_set_step_increment (hadjustment, 10.0);
9782 gtk_adjustment_set_step_increment (vadjustment, 10.0);
9783 gtk_layout_set_hadjustment (layout, hadjustment);
9784 gtk_layout_set_vadjustment (layout, vadjustment);
9786 gtk_widget_set_events (layout_widget, GDK_EXPOSURE_MASK);
9787 g_signal_connect (layout, "draw",
9788 G_CALLBACK (layout_draw_handler), NULL);
9790 gtk_layout_set_size (layout, 1600, 128000);
9792 for (i=0 ; i < 16 ; i++)
9793 for (j=0 ; j < 16 ; j++)
9795 sprintf(buf, "Button %d, %d", i, j);
9797 button = gtk_button_new_with_label (buf);
9799 button = gtk_label_new (buf);
9801 gtk_layout_put (layout, button, j*100, i*100);
9804 for (i=16; i < 1280; i++)
9806 sprintf(buf, "Button %d, %d", i, 0);
9808 button = gtk_button_new_with_label (buf);
9810 button = gtk_label_new (buf);
9812 gtk_layout_put (layout, button, 0, i*100);
9816 if (!gtk_widget_get_visible (window))
9817 gtk_widget_show_all (window);
9819 gtk_widget_destroy (window);
9823 create_styles (GtkWidget *widget)
9825 static GtkWidget *window = NULL;
9826 GtkWidget *content_area, *action_area;
9831 static GdkColor red = { 0, 0xffff, 0, 0 };
9832 static GdkColor green = { 0, 0, 0xffff, 0 };
9833 static GdkColor blue = { 0, 0, 0, 0xffff };
9834 static GdkColor yellow = { 0, 0xffff, 0xffff, 0 };
9835 static GdkColor cyan = { 0, 0 , 0xffff, 0xffff };
9836 PangoFontDescription *font_desc;
9838 GtkRcStyle *rc_style;
9842 window = gtk_dialog_new ();
9843 gtk_window_set_screen (GTK_WINDOW (window),
9844 gtk_widget_get_screen (widget));
9846 g_signal_connect (window, "destroy",
9847 G_CALLBACK (gtk_widget_destroyed),
9850 content_area = gtk_dialog_get_content_area (GTK_DIALOG (window));
9851 action_area = gtk_dialog_get_action_area (GTK_DIALOG (window));
9853 button = gtk_button_new_with_label ("Close");
9854 g_signal_connect_swapped (button, "clicked",
9855 G_CALLBACK (gtk_widget_destroy),
9857 gtk_widget_set_can_default (button, TRUE);
9858 gtk_box_pack_start (GTK_BOX (action_area), button, TRUE, TRUE, 0);
9859 gtk_widget_show (button);
9861 vbox = gtk_vbox_new (FALSE, 5);
9862 gtk_container_set_border_width (GTK_CONTAINER (vbox), 10);
9863 gtk_box_pack_start (GTK_BOX (content_area), vbox, FALSE, FALSE, 0);
9865 label = gtk_label_new ("Font:");
9866 gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
9867 gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
9869 font_desc = pango_font_description_from_string ("Helvetica,Sans Oblique 18");
9871 button = gtk_button_new_with_label ("Some Text");
9872 gtk_widget_modify_font (gtk_bin_get_child (GTK_BIN (button)),
9874 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
9876 label = gtk_label_new ("Foreground:");
9877 gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
9878 gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
9880 button = gtk_button_new_with_label ("Some Text");
9881 gtk_widget_modify_fg (gtk_bin_get_child (GTK_BIN (button)),
9882 GTK_STATE_NORMAL, &red);
9883 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
9885 label = gtk_label_new ("Background:");
9886 gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
9887 gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
9889 button = gtk_button_new_with_label ("Some Text");
9890 gtk_widget_modify_bg (button, GTK_STATE_NORMAL, &green);
9891 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
9893 label = gtk_label_new ("Text:");
9894 gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
9895 gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
9897 entry = gtk_entry_new ();
9898 gtk_entry_set_text (GTK_ENTRY (entry), "Some Text");
9899 gtk_widget_modify_text (entry, GTK_STATE_NORMAL, &blue);
9900 gtk_box_pack_start (GTK_BOX (vbox), entry, FALSE, FALSE, 0);
9902 label = gtk_label_new ("Base:");
9903 gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
9904 gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
9906 entry = gtk_entry_new ();
9907 gtk_entry_set_text (GTK_ENTRY (entry), "Some Text");
9908 gtk_widget_modify_base (entry, GTK_STATE_NORMAL, &yellow);
9909 gtk_box_pack_start (GTK_BOX (vbox), entry, FALSE, FALSE, 0);
9911 label = gtk_label_new ("Cursor:");
9912 gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
9913 gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
9915 entry = gtk_entry_new ();
9916 gtk_entry_set_text (GTK_ENTRY (entry), "Some Text");
9917 gtk_widget_modify_cursor (entry, &red, &red);
9918 gtk_box_pack_start (GTK_BOX (vbox), entry, FALSE, FALSE, 0);
9920 label = gtk_label_new ("Multiple:");
9921 gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
9922 gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
9924 button = gtk_button_new_with_label ("Some Text");
9926 rc_style = gtk_rc_style_new ();
9928 rc_style->font_desc = pango_font_description_copy (font_desc);
9929 rc_style->color_flags[GTK_STATE_NORMAL] = GTK_RC_FG | GTK_RC_BG;
9930 rc_style->color_flags[GTK_STATE_PRELIGHT] = GTK_RC_FG | GTK_RC_BG;
9931 rc_style->color_flags[GTK_STATE_ACTIVE] = GTK_RC_FG | GTK_RC_BG;
9932 rc_style->fg[GTK_STATE_NORMAL] = yellow;
9933 rc_style->bg[GTK_STATE_NORMAL] = blue;
9934 rc_style->fg[GTK_STATE_PRELIGHT] = blue;
9935 rc_style->bg[GTK_STATE_PRELIGHT] = yellow;
9936 rc_style->fg[GTK_STATE_ACTIVE] = red;
9937 rc_style->bg[GTK_STATE_ACTIVE] = cyan;
9938 rc_style->xthickness = 5;
9939 rc_style->ythickness = 5;
9941 gtk_widget_modify_style (button, rc_style);
9942 gtk_widget_modify_style (gtk_bin_get_child (GTK_BIN (button)), rc_style);
9944 g_object_unref (rc_style);
9946 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
9949 if (!gtk_widget_get_visible (window))
9950 gtk_widget_show_all (window);
9952 gtk_widget_destroy (window);
9956 * Main Window and Exit
9960 do_exit (GtkWidget *widget, GtkWidget *window)
9962 gtk_widget_destroy (window);
9968 void (*func) (GtkWidget *widget);
9969 gboolean do_not_benchmark;
9972 { "alpha window", create_alpha_window },
9973 { "big windows", create_big_windows },
9974 { "button box", create_button_box },
9975 { "buttons", create_buttons },
9976 { "check buttons", create_check_buttons },
9977 { "color selection", create_color_selection },
9978 { "composited window", create_composited_window },
9979 { "cursors", create_cursors },
9980 { "dialog", create_dialog },
9981 { "display & screen", create_display_screen, TRUE },
9982 { "entry", create_entry },
9983 { "event box", create_event_box },
9984 { "event watcher", create_event_watcher },
9985 { "expander", create_expander },
9986 { "flipping", create_flipping },
9987 { "focus", create_focus },
9988 { "font selection", create_font_selection },
9989 { "gridded geometry", create_gridded_geometry },
9990 { "handle box", create_handle_box },
9991 { "image", create_image },
9992 { "key lookup", create_key_lookup },
9993 { "labels", create_labels },
9994 { "layout", create_layout },
9995 { "menus", create_menus },
9996 { "message dialog", create_message_dialog },
9997 { "modal window", create_modal_window, TRUE },
9998 { "notebook", create_notebook },
9999 { "panes", create_panes },
10000 { "paned keyboard", create_paned_keyboard_navigation },
10001 { "pixbuf", create_pixbuf },
10002 { "progress bar", create_progress_bar },
10003 { "properties", create_properties },
10004 { "radio buttons", create_radio_buttons },
10005 { "range controls", create_range_controls },
10006 { "rc file", create_rc_file },
10007 { "reparent", create_reparent },
10008 { "resize grips", create_resize_grips },
10009 { "rotated label", create_rotated_label },
10010 { "rotated text", create_rotated_text },
10011 { "rulers", create_rulers },
10012 { "saved position", create_saved_position },
10013 { "scrolled windows", create_scrolled_windows },
10014 { "shapes", create_shapes },
10015 { "size groups", create_size_groups },
10016 { "spinbutton", create_spins },
10017 { "statusbar", create_statusbar },
10018 { "styles", create_styles },
10019 { "test idle", create_idle_test },
10020 { "test mainloop", create_mainloop, TRUE },
10021 { "test scrolling", create_scroll_test },
10022 { "test selection", create_selection_test },
10023 { "test timeout", create_timeout_test },
10024 { "toggle buttons", create_toggle_buttons },
10025 { "toolbar", create_toolbar },
10026 { "tooltips", create_tooltips },
10027 { "WM hints", create_wmhints },
10028 { "window sizing", create_window_sizing },
10029 { "window states", create_window_states }
10031 int nbuttons = sizeof (buttons) / sizeof (buttons[0]);
10034 create_main_window (void)
10039 GtkWidget *scrolled_window;
10043 GtkWidget *separator;
10044 GdkGeometry geometry;
10047 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
10048 gtk_widget_set_name (window, "main window");
10049 gtk_window_move (GTK_WINDOW (window), 50, 20);
10050 gtk_window_set_default_size (GTK_WINDOW (window), -1, 400);
10052 geometry.min_width = -1;
10053 geometry.min_height = -1;
10054 geometry.max_width = -1;
10055 geometry.max_height = G_MAXSHORT;
10056 gtk_window_set_geometry_hints (GTK_WINDOW (window), NULL,
10058 GDK_HINT_MIN_SIZE | GDK_HINT_MAX_SIZE);
10060 g_signal_connect (window, "destroy",
10061 G_CALLBACK (gtk_main_quit),
10063 g_signal_connect (window, "delete-event",
10064 G_CALLBACK (gtk_false),
10067 box1 = gtk_vbox_new (FALSE, 0);
10068 gtk_container_add (GTK_CONTAINER (window), box1);
10070 if (gtk_micro_version > 0)
10073 gtk_get_major_version (),
10074 gtk_get_minor_version (),
10075 gtk_get_micro_version ());
10079 gtk_get_major_version (),
10080 gtk_get_minor_version ());
10082 label = gtk_label_new (buffer);
10083 gtk_box_pack_start (GTK_BOX (box1), label, FALSE, FALSE, 0);
10084 gtk_widget_set_name (label, "testgtk-version-label");
10086 scrolled_window = gtk_scrolled_window_new (NULL, NULL);
10087 gtk_container_set_border_width (GTK_CONTAINER (scrolled_window), 10);
10088 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
10090 GTK_POLICY_AUTOMATIC);
10091 gtk_box_pack_start (GTK_BOX (box1), scrolled_window, TRUE, TRUE, 0);
10093 box2 = gtk_vbox_new (FALSE, 0);
10094 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
10095 gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scrolled_window), box2);
10096 gtk_container_set_focus_vadjustment (GTK_CONTAINER (box2),
10097 gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (scrolled_window)));
10098 gtk_widget_show (box2);
10100 for (i = 0; i < nbuttons; i++)
10102 button = gtk_button_new_with_label (buttons[i].label);
10103 if (buttons[i].func)
10104 g_signal_connect (button,
10106 G_CALLBACK(buttons[i].func),
10109 gtk_widget_set_sensitive (button, FALSE);
10110 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
10113 separator = gtk_hseparator_new ();
10114 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
10116 box2 = gtk_vbox_new (FALSE, 10);
10117 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
10118 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
10120 button = gtk_button_new_with_mnemonic ("_Close");
10121 g_signal_connect (button, "clicked",
10122 G_CALLBACK (do_exit),
10124 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
10125 gtk_widget_set_can_default (button, TRUE);
10126 gtk_widget_grab_default (button);
10128 gtk_widget_show_all (window);
10134 if (g_file_test ("../gdk-pixbuf/libpixbufloader-pnm.la",
10135 G_FILE_TEST_EXISTS))
10137 g_setenv ("GDK_PIXBUF_MODULE_FILE", "../gdk-pixbuf/loaders.cache", TRUE);
10138 g_setenv ("GTK_IM_MODULE_FILE", "../modules/input/immodules.cache", TRUE);
10143 pad (const char *str, int to)
10145 static char buf[256];
10146 int len = strlen (str);
10149 for (i = 0; i < to; i++)
10154 memcpy (buf, str, len);
10160 bench_iteration (GtkWidget *widget, void (* fn) (GtkWidget *widget))
10162 fn (widget); /* on */
10163 while (g_main_context_iteration (NULL, FALSE));
10164 fn (widget); /* off */
10165 while (g_main_context_iteration (NULL, FALSE));
10169 do_real_bench (GtkWidget *widget, void (* fn) (GtkWidget *widget), char *name, int num)
10175 static gboolean printed_headers = FALSE;
10177 if (!printed_headers) {
10178 g_print ("Test Iters First Other\n");
10179 g_print ("-------------------- ----- ---------- ----------\n");
10180 printed_headers = TRUE;
10183 g_get_current_time (&tv0);
10184 bench_iteration (widget, fn);
10185 g_get_current_time (&tv1);
10187 dt_first = ((double)tv1.tv_sec - tv0.tv_sec) * 1000.0
10188 + (tv1.tv_usec - tv0.tv_usec) / 1000.0;
10190 g_get_current_time (&tv0);
10191 for (n = 0; n < num - 1; n++)
10192 bench_iteration (widget, fn);
10193 g_get_current_time (&tv1);
10194 dt = ((double)tv1.tv_sec - tv0.tv_sec) * 1000.0
10195 + (tv1.tv_usec - tv0.tv_usec) / 1000.0;
10197 g_print ("%s %5d ", pad (name, 20), num);
10199 g_print ("%10.1f %10.1f\n", dt_first, dt/(num-1));
10201 g_print ("%10.1f\n", dt_first);
10205 do_bench (char* what, int num)
10209 void (* fn) (GtkWidget *widget);
10211 widget = gtk_window_new (GTK_WINDOW_TOPLEVEL);
10213 if (g_ascii_strcasecmp (what, "ALL") == 0)
10215 for (i = 0; i < nbuttons; i++)
10217 if (!buttons[i].do_not_benchmark)
10218 do_real_bench (widget, buttons[i].func, buttons[i].label, num);
10225 for (i = 0; i < nbuttons; i++)
10227 if (strcmp (buttons[i].label, what) == 0)
10229 fn = buttons[i].func;
10235 g_print ("Can't bench: \"%s\" not found.\n", what);
10237 do_real_bench (widget, fn, buttons[i].label, num);
10244 fprintf (stderr, "Usage: testgtk [--bench ALL|<bench>[:<count>]]\n");
10249 main (int argc, char *argv[])
10251 GtkBindingSet *binding_set;
10253 gboolean done_benchmarks = FALSE;
10255 srand (time (NULL));
10259 /* Check to see if we are being run from the correct
10262 if (file_exists ("testgtkrc"))
10263 gtk_rc_add_default_file ("testgtkrc");
10264 else if (file_exists ("tests/testgtkrc"))
10265 gtk_rc_add_default_file ("tests/testgtkrc");
10267 g_warning ("Couldn't find file \"testgtkrc\".");
10269 g_set_application_name ("GTK+ Test Program");
10271 gtk_init (&argc, &argv);
10273 gtk_accelerator_set_default_mod_mask (GDK_SHIFT_MASK |
10282 for (i = 1; i < argc; i++)
10284 if (strncmp (argv[i], "--bench", strlen("--bench")) == 0)
10291 nextarg = strchr (argv[i], '=');
10302 count = strchr (nextarg, ':');
10305 what = g_strndup (nextarg, count - nextarg);
10307 num = atoi (count);
10312 what = g_strdup (nextarg);
10314 do_bench (what, num ? num : 1);
10315 done_benchmarks = TRUE;
10320 if (done_benchmarks)
10325 binding_set = gtk_binding_set_by_class (g_type_class_ref (GTK_TYPE_WIDGET));
10326 gtk_binding_entry_add_signal (binding_set,
10327 '9', GDK_CONTROL_MASK | GDK_RELEASE_MASK,
10330 G_TYPE_STRING, "GtkWidgetClass <ctrl><release>9 test");
10332 /* We use gtk_rc_parse_string() here so we can make sure it works across theme
10336 gtk_rc_parse_string ("style \"testgtk-version-label\" { "
10337 " fg[NORMAL] = \"#ff0000\"\n"
10338 " font = \"Sans 18\"\n"
10340 "widget \"*.testgtk-version-label\" style \"testgtk-version-label\"");
10342 create_main_window ();
10348 while (g_main_context_pending (NULL))
10349 g_main_context_iteration (NULL, FALSE);
10352 while (g_main_context_pending (NULL))
10353 g_main_context_iteration (NULL, FALSE);