]> Pileus Git - ~andy/gtk/blob - docs/tools/widgets.c
notebook: consolidate code to remove the switch tab timer
[~andy/gtk] / docs / tools / widgets.c
1 #include "config.h"
2
3 #define GDK_DISABLE_DEPRECATION_WARNINGS
4 #undef GTK_DISABLE_DEPRECATED
5
6 #include <gtk/gtkunixprint.h>
7 #include <gdk/gdkkeysyms.h>
8 #include <X11/Xatom.h>
9 #include <gdkx.h>
10 #include "widgets.h"
11
12 #define SMALL_WIDTH  240
13 #define SMALL_HEIGHT 75
14 #define MEDIUM_WIDTH 240
15 #define MEDIUM_HEIGHT 165
16 #define LARGE_WIDTH 240
17 #define LARGE_HEIGHT 240
18
19 static Window
20 find_toplevel_window (Window xid)
21 {
22   Window root, parent, *children;
23   guint nchildren;
24
25   do
26     {
27       if (XQueryTree (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), xid, &root,
28                       &parent, &children, &nchildren) == 0)
29         {
30           g_warning ("Couldn't find window manager window");
31           return None;
32         }
33
34       if (root == parent)
35         return xid;
36
37       xid = parent;
38     }
39   while (TRUE);
40 }
41
42
43 static gboolean
44 adjust_size_callback (WidgetInfo *info)
45 {
46   Window toplevel;
47   Window root;
48   GdkWindow *window;
49   gint tx;
50   gint ty;
51   guint twidth;
52   guint theight;
53   guint tborder_width;
54   guint tdepth;
55   gint target_width = 0;
56   gint target_height = 0;
57
58   window = gtk_widget_get_window (info->window);
59   toplevel = find_toplevel_window (GDK_WINDOW_XID (window));
60   XGetGeometry (GDK_WINDOW_XDISPLAY (window),
61                 toplevel,
62                 &root, &tx, &ty, &twidth, &theight, &tborder_width, &tdepth);
63
64   switch (info->size)
65     {
66     case SMALL:
67       target_width = SMALL_WIDTH;
68       target_height = SMALL_HEIGHT;
69       break;
70     case MEDIUM:
71       target_width = MEDIUM_WIDTH;
72       target_height = MEDIUM_HEIGHT;
73       break;
74     case LARGE:
75       target_width = LARGE_WIDTH;
76       target_height = LARGE_HEIGHT;
77       break;
78     case ASIS:
79       target_width = twidth;
80       target_height = theight;
81       break;
82     }
83
84   if (twidth > target_width ||
85       theight > target_height)
86     {
87       gtk_widget_set_size_request (info->window,
88                                    2 + target_width - (twidth - target_width), /* Dunno why I need the +2 fudge factor; */
89                                    2 + target_height - (theight - target_height));
90     }
91   return FALSE;
92 }
93
94 static void
95 realize_callback (GtkWidget  *widget,
96                   WidgetInfo *info)
97 {
98   gdk_threads_add_timeout (500, (GSourceFunc)adjust_size_callback, info);
99 }
100
101 static WidgetInfo *
102 new_widget_info (const char *name,
103                  GtkWidget  *widget,
104                  WidgetSize  size)
105 {
106   WidgetInfo *info;
107
108   info = g_new0 (WidgetInfo, 1);
109   info->name = g_strdup (name);
110   info->size = size;
111   if (GTK_IS_WINDOW (widget))
112     {
113       info->window = widget;
114       gtk_window_set_resizable (GTK_WINDOW (info->window), FALSE);
115       info->include_decorations = TRUE;
116       g_signal_connect (info->window, "realize", G_CALLBACK (realize_callback), info);
117     }
118   else
119     {
120       info->window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
121       gtk_window_set_has_resize_grip (GTK_WINDOW (info->window), FALSE);
122       info->include_decorations = FALSE;
123       gtk_widget_show_all (widget);
124       gtk_container_add (GTK_CONTAINER (info->window), widget);
125     }
126   info->no_focus = TRUE;
127
128   gtk_widget_set_app_paintable (info->window, TRUE);
129   g_signal_connect (info->window, "focus", G_CALLBACK (gtk_true), NULL);
130   gtk_container_set_border_width (GTK_CONTAINER (info->window), 12);
131
132   switch (size)
133     {
134     case SMALL:
135       gtk_widget_set_size_request (info->window,
136                                    240, 75);
137       break;
138     case MEDIUM:
139       gtk_widget_set_size_request (info->window,
140                                    240, 165);
141       break;
142     case LARGE:
143       gtk_widget_set_size_request (info->window,
144                                    240, 240);
145       break;
146     default:
147         break;
148     }
149
150   return info;
151 }
152
153 static WidgetInfo *
154 create_button (void)
155 {
156   GtkWidget *widget;
157   GtkWidget *align;
158
159   widget = gtk_button_new_with_mnemonic ("_Button");
160   align = gtk_alignment_new (0.5, 0.5, 0.0, 0.0);
161   gtk_container_add (GTK_CONTAINER (align), widget);
162
163   return new_widget_info ("button", align, SMALL);
164 }
165
166 static WidgetInfo *
167 create_switch (void)
168 {
169   GtkWidget *widget;
170   GtkWidget *align;
171   GtkWidget *sw;
172
173   widget = gtk_box_new (GTK_ORIENTATION_VERTICAL, 3);
174   sw = gtk_switch_new ();
175   gtk_switch_set_active (GTK_SWITCH (sw), TRUE);
176   gtk_box_pack_start (GTK_BOX (widget), sw, TRUE, TRUE, 0);
177   sw = gtk_switch_new ();
178   gtk_box_pack_start (GTK_BOX (widget), sw, TRUE, TRUE, 0);
179
180   align = gtk_alignment_new (0.5, 0.5, 0.0, 0.0);
181   gtk_container_add (GTK_CONTAINER (align), widget);
182
183   return new_widget_info ("switch", align, SMALL);
184 }
185
186 static WidgetInfo *
187 create_toggle_button (void)
188 {
189   GtkWidget *widget;
190   GtkWidget *align;
191
192   widget = gtk_toggle_button_new_with_mnemonic ("_Toggle Button");
193   gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), FALSE);
194   align = gtk_alignment_new (0.5, 0.5, 0.0, 0.0);
195   gtk_container_add (GTK_CONTAINER (align), widget);
196
197   return new_widget_info ("toggle-button", align, SMALL);
198 }
199
200 static WidgetInfo *
201 create_check_button (void)
202 {
203   GtkWidget *widget;
204   GtkWidget *align;
205
206   widget = gtk_check_button_new_with_mnemonic ("_Check Button");
207   gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), TRUE);
208   align = gtk_alignment_new (0.5, 0.5, 0.0, 0.0);
209   gtk_container_add (GTK_CONTAINER (align), widget);
210
211   return new_widget_info ("check-button", align, SMALL);
212 }
213
214 static WidgetInfo *
215 create_link_button (void)
216 {
217   GtkWidget *widget;
218   GtkWidget *align;
219
220   widget = gtk_link_button_new_with_label ("http://www.gtk.org", "Link Button");
221   align = gtk_alignment_new (0.5, 0.5, 0.0, 0.0);
222   gtk_container_add (GTK_CONTAINER (align), widget);
223
224   return new_widget_info ("link-button", align, SMALL);
225 }
226
227 static WidgetInfo *
228 create_menu_button (void)
229 {
230   GtkWidget *widget;
231   GtkWidget *image;
232   GtkWidget *menu;
233   GtkWidget *vbox;
234
235   widget = gtk_menu_button_new ();
236   image = gtk_image_new ();
237   gtk_image_set_from_icon_name (GTK_IMAGE (image), "emblem-system-symbolic", GTK_ICON_SIZE_MENU);
238   gtk_button_set_image (GTK_BUTTON (widget), image);
239   menu = gtk_menu_new ();
240   gtk_menu_button_set_popup (GTK_MENU_BUTTON (widget), menu);
241
242   vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 3);
243   gtk_box_pack_start (GTK_BOX (vbox), widget, FALSE, FALSE, 0);
244   gtk_widget_set_halign (widget, GTK_ALIGN_CENTER);
245   gtk_widget_set_valign (widget, GTK_ALIGN_CENTER);
246
247   gtk_box_pack_start (GTK_BOX (vbox), gtk_label_new ("Menu Button"), TRUE, TRUE, 0);
248
249   return new_widget_info ("menu-button", vbox, SMALL);
250 }
251
252 #define G_TYPE_TEST_PERMISSION      (g_test_permission_get_type ())
253 #define G_TEST_PERMISSION(inst)     (G_TYPE_CHECK_INSTANCE_CAST ((inst), \
254                                      G_TYPE_TEST_PERMISSION,             \
255                                      GTestPermission))
256 #define G_IS_TEST_PERMISSION(inst)  (G_TYPE_CHECK_INSTANCE_TYPE ((inst), \
257                                      G_TYPE_TEST_PERMISSION))
258
259 typedef struct _GTestPermission GTestPermission;
260 typedef struct _GTestPermissionClass GTestPermissionClass;
261
262 struct _GTestPermission
263 {
264   GPermission parent;
265
266   gboolean success;
267 };
268
269 struct _GTestPermissionClass
270 {
271   GPermissionClass parent_class;
272 };
273
274 G_DEFINE_TYPE (GTestPermission, g_test_permission, G_TYPE_PERMISSION)
275
276 static void
277 g_test_permission_init (GTestPermission *test)
278 {
279   g_permission_impl_update (G_PERMISSION (test), FALSE, TRUE, TRUE);
280 }
281
282 static void
283 g_test_permission_class_init (GTestPermissionClass *class)
284 {
285 }
286
287 static WidgetInfo *
288 create_lockbutton (void)
289 {
290   GtkWidget *vbox;
291   GtkWidget *widget;
292
293   widget = gtk_lock_button_new (g_object_new (G_TYPE_TEST_PERMISSION, NULL));
294
295   vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 3);
296   gtk_box_pack_start (GTK_BOX (vbox), widget, FALSE, FALSE, 0);
297   gtk_box_pack_start (GTK_BOX (vbox),
298                       gtk_label_new ("Lock Button"),
299                       FALSE, FALSE, 0);
300   gtk_widget_set_halign (vbox, GTK_ALIGN_CENTER);
301   gtk_widget_set_valign (vbox, GTK_ALIGN_CENTER);
302
303   return new_widget_info ("lock-button", vbox, SMALL);
304 }
305
306 static WidgetInfo *
307 create_entry (void)
308 {
309   GtkWidget *widget;
310   GtkWidget *align;
311
312   widget = gtk_entry_new ();
313   gtk_entry_set_text (GTK_ENTRY (widget), "Entry");
314   gtk_editable_set_position (GTK_EDITABLE (widget), -1);
315   align = gtk_alignment_new (0.5, 0.5, 0.0, 0.0);
316   gtk_container_add (GTK_CONTAINER (align), widget);
317
318   return  new_widget_info ("entry", align, SMALL);
319 }
320
321 static WidgetInfo *
322 create_search_entry (void)
323 {
324   GtkWidget *widget;
325   GtkWidget *align;
326
327   widget = gtk_search_entry_new ();
328   gtk_entry_set_placeholder_text (GTK_ENTRY (widget), "Search...");
329   align = gtk_alignment_new (0.5, 0.5, 0.0, 0.0);
330   gtk_container_add (GTK_CONTAINER (align), widget);
331
332   return  new_widget_info ("search-entry", align, SMALL);
333 }
334
335 static WidgetInfo *
336 create_radio (void)
337 {
338   GtkWidget *widget;
339   GtkWidget *radio;
340   GtkWidget *align;
341
342   widget = gtk_box_new (GTK_ORIENTATION_VERTICAL, 3);
343   radio = gtk_radio_button_new_with_mnemonic (NULL, "Radio Button _One");
344   gtk_box_pack_start (GTK_BOX (widget), radio, FALSE, FALSE, 0);
345   radio = gtk_radio_button_new_with_mnemonic_from_widget (GTK_RADIO_BUTTON (radio), "Radio Button _Two");
346   gtk_box_pack_start (GTK_BOX (widget), radio, FALSE, FALSE, 0);
347   radio = gtk_radio_button_new_with_mnemonic_from_widget (GTK_RADIO_BUTTON (radio), "Radio Button T_hree");
348   gtk_box_pack_start (GTK_BOX (widget), radio, FALSE, FALSE, 0);
349   align = gtk_alignment_new (0.5, 0.5, 0.0, 0.0);
350   gtk_container_add (GTK_CONTAINER (align), widget);
351
352   return new_widget_info ("radio-group", align, MEDIUM);
353 }
354
355 static WidgetInfo *
356 create_label (void)
357 {
358   GtkWidget *widget;
359   GtkWidget *align;
360
361   widget = gtk_label_new ("Label");
362   align = gtk_alignment_new (0.5, 0.5, 0.0, 0.0);
363   gtk_container_add (GTK_CONTAINER (align), widget);
364
365   return new_widget_info ("label", align, SMALL);
366 }
367
368 static WidgetInfo *
369 create_accel_label (void)
370 {
371   WidgetInfo *info;
372   GtkWidget *widget, *button, *box;
373   GtkAccelGroup *accel_group;
374
375   widget = gtk_accel_label_new ("Accel Label");
376
377   button = gtk_button_new_with_label ("Quit");
378   gtk_accel_label_set_accel_widget (GTK_ACCEL_LABEL (widget), button);
379   gtk_widget_set_no_show_all (button, TRUE);
380
381   box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
382   gtk_container_add (GTK_CONTAINER (box), widget);
383   gtk_container_add (GTK_CONTAINER (box), button);
384
385   gtk_accel_label_set_accel_widget (GTK_ACCEL_LABEL (widget), button);
386   accel_group = gtk_accel_group_new();
387
388   info = new_widget_info ("accel-label", box, SMALL);
389
390   gtk_widget_add_accelerator (button, "activate", accel_group, GDK_KEY_Q, GDK_CONTROL_MASK,
391                               GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
392
393   return info;
394 }
395
396 static WidgetInfo *
397 create_combo_box_entry (void)
398 {
399   GtkWidget *widget;
400   GtkWidget *align;
401   GtkWidget *child;
402   GtkTreeModel *model;
403   
404   gtk_rc_parse_string ("style \"combo-box-entry-style\" {\n"
405                        "  GtkComboBox::appears-as-list = 1\n"
406                        "}\n"
407                        "widget_class \"GtkComboBoxEntry\" style \"combo-box-entry-style\"\n" );
408
409   model = (GtkTreeModel *)gtk_list_store_new (1, G_TYPE_STRING);
410   widget = g_object_new (GTK_TYPE_COMBO_BOX,
411                          "has-entry", TRUE,
412                          "model", model,
413                          "entry-text-column", 0,
414                          NULL);
415   g_object_unref (model);
416
417   child = gtk_bin_get_child (GTK_BIN (widget));
418   gtk_entry_set_text (GTK_ENTRY (child), "Combo Box Entry");
419   align = gtk_alignment_new (0.5, 0.5, 0.0, 0.0);
420   gtk_container_add (GTK_CONTAINER (align), widget);
421
422   return new_widget_info ("combo-box-entry", align, SMALL);
423 }
424
425 static WidgetInfo *
426 create_combo_box (void)
427 {
428   GtkWidget *widget;
429   GtkWidget *align;
430   
431   gtk_rc_parse_string ("style \"combo-box-style\" {\n"
432                        "  GtkComboBox::appears-as-list = 0\n"
433                        "}\n"
434                        "widget_class \"GtkComboBox\" style \"combo-box-style\"\n" );
435
436   widget = gtk_combo_box_text_new ();
437   gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (widget), "Combo Box");
438   gtk_combo_box_set_active (GTK_COMBO_BOX (widget), 0);
439   align = gtk_alignment_new (0.5, 0.5, 0.0, 0.0);
440   gtk_container_add (GTK_CONTAINER (align), widget);
441
442   return new_widget_info ("combo-box", align, SMALL);
443 }
444
445 static WidgetInfo *
446 create_recent_chooser_dialog (void)
447 {
448   WidgetInfo *info;
449   GtkWidget *widget;
450
451   widget = gtk_recent_chooser_dialog_new ("Recent Chooser Dialog",
452                                           NULL,
453                                           GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
454                                           GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT,
455                                           NULL); 
456   gtk_window_set_default_size (GTK_WINDOW (widget), 505, 305);
457   
458   info = new_widget_info ("recentchooserdialog", widget, ASIS);
459   info->include_decorations = TRUE;
460
461   return info;
462 }
463
464 static WidgetInfo *
465 create_text_view (void)
466 {
467   GtkWidget *widget;
468   GtkWidget *text_view;
469
470   widget = gtk_frame_new (NULL);
471   gtk_frame_set_shadow_type (GTK_FRAME (widget), GTK_SHADOW_IN);
472   text_view = gtk_text_view_new ();
473   gtk_container_add (GTK_CONTAINER (widget), text_view);
474   /* Bad hack to add some size to the widget */
475   gtk_text_buffer_set_text (gtk_text_view_get_buffer (GTK_TEXT_VIEW (text_view)),
476                             "Multiline\nText\n\n", -1);
477   gtk_text_view_set_cursor_visible (GTK_TEXT_VIEW (text_view), FALSE);
478
479   return new_widget_info ("multiline-text", widget, MEDIUM);
480 }
481
482 static WidgetInfo *
483 create_tree_view (void)
484 {
485   GtkWidget *widget;
486   GtkWidget *tree_view;
487   GtkListStore *list_store;
488   GtkTreeIter iter;
489   WidgetInfo *info;
490
491   widget = gtk_frame_new (NULL);
492   gtk_frame_set_shadow_type (GTK_FRAME (widget), GTK_SHADOW_IN);
493   list_store = gtk_list_store_new (1, G_TYPE_STRING);
494   gtk_list_store_append (list_store, &iter);
495   gtk_list_store_set (list_store, &iter, 0, "Line One", -1);
496   gtk_list_store_append (list_store, &iter);
497   gtk_list_store_set (list_store, &iter, 0, "Line Two", -1);
498   gtk_list_store_append (list_store, &iter);
499   gtk_list_store_set (list_store, &iter, 0, "Line Three", -1);
500
501   tree_view = gtk_tree_view_new_with_model (GTK_TREE_MODEL (list_store));
502   gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
503                                                0, "List and Tree",
504                                                gtk_cell_renderer_text_new (),
505                                                "text", 0, NULL);
506   gtk_container_add (GTK_CONTAINER (widget), tree_view);
507
508   info = new_widget_info ("list-and-tree", widget, MEDIUM);
509   info->no_focus = FALSE;
510
511   return info;
512 }
513
514 static WidgetInfo *
515 create_icon_view (void)
516 {
517   GtkWidget *widget;
518   GtkWidget *vbox;
519   GtkWidget *align;
520   GtkWidget *icon_view;
521   GtkListStore *list_store;
522   GtkTreeIter iter;
523   GdkPixbuf *pixbuf;
524   WidgetInfo *info;
525
526   widget = gtk_frame_new (NULL);
527   gtk_frame_set_shadow_type (GTK_FRAME (widget), GTK_SHADOW_IN);
528   list_store = gtk_list_store_new (2, G_TYPE_STRING, GDK_TYPE_PIXBUF);
529   gtk_list_store_append (list_store, &iter);
530   pixbuf = gdk_pixbuf_new_from_file ("folder.png", NULL);
531   gtk_list_store_set (list_store, &iter, 0, "One", 1, pixbuf, -1);
532   gtk_list_store_append (list_store, &iter);
533   pixbuf = gdk_pixbuf_new_from_file ("gnome.png", NULL);
534   gtk_list_store_set (list_store, &iter, 0, "Two", 1, pixbuf, -1);
535
536   icon_view = gtk_icon_view_new();
537
538   gtk_icon_view_set_model (GTK_ICON_VIEW (icon_view), GTK_TREE_MODEL (list_store));
539   gtk_icon_view_set_text_column (GTK_ICON_VIEW (icon_view), 0);
540   gtk_icon_view_set_pixbuf_column (GTK_ICON_VIEW (icon_view), 1);
541
542   gtk_container_add (GTK_CONTAINER (widget), icon_view);
543
544   vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 3);
545   align = gtk_alignment_new (0.5, 0.5, 1.0, 1.0);
546   gtk_container_add (GTK_CONTAINER (align), widget);
547   gtk_box_pack_start (GTK_BOX (vbox), align, TRUE, TRUE, 0);
548   gtk_box_pack_start (GTK_BOX (vbox),
549                       gtk_label_new ("Icon View"),
550                       FALSE, FALSE, 0);
551
552   info = new_widget_info ("icon-view", vbox, MEDIUM);
553   info->no_focus = FALSE;
554
555   return info;
556 }
557
558 static WidgetInfo *
559 create_color_button (void)
560 {
561   GtkWidget *vbox;
562   GtkWidget *picker;
563   GtkWidget *align;
564   GdkColor color;
565
566   vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 3);
567   align = gtk_alignment_new (0.5, 0.5, 0.0, 0.0);
568   color.red = 0x1e<<8;  /* Go Gagne! */
569   color.green = 0x90<<8;
570   color.blue = 0xff<<8;
571   picker = gtk_color_button_new_with_color (&color);
572   gtk_container_add (GTK_CONTAINER (align), picker);
573   gtk_box_pack_start (GTK_BOX (vbox), align, FALSE, FALSE, 0);
574   gtk_box_pack_start (GTK_BOX (vbox),
575                       gtk_label_new ("Color Button"),
576                       FALSE, FALSE, 0);
577
578   return new_widget_info ("color-button", vbox, SMALL);
579 }
580
581 static WidgetInfo *
582 create_font_button (void)
583 {
584   GtkWidget *vbox;
585   GtkWidget *picker;
586   GtkWidget *align;
587
588   vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 3);
589   align = gtk_alignment_new (0.5, 0.5, 0.0, 0.0);
590   picker = gtk_font_button_new_with_font ("Sans Serif 10");
591   gtk_container_add (GTK_CONTAINER (align), picker);
592   gtk_box_pack_start (GTK_BOX (vbox), align, FALSE, FALSE, 0);
593   gtk_box_pack_start (GTK_BOX (vbox),
594                       gtk_label_new ("Font Button"),
595                       FALSE, FALSE, 0);
596
597   return new_widget_info ("font-button", vbox, SMALL);
598 }
599
600 static WidgetInfo *
601 create_file_button (void)
602 {
603   GtkWidget *vbox;
604   GtkWidget *vbox2;
605   GtkWidget *picker;
606   GtkWidget *align;
607
608   vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 12);
609   vbox2 = gtk_box_new (GTK_ORIENTATION_VERTICAL, 3);
610   align = gtk_alignment_new (0.5, 0.5, 0.0, 0.0);
611   picker = gtk_file_chooser_button_new ("File Chooser Button",
612                                         GTK_FILE_CHOOSER_ACTION_OPEN);
613   gtk_widget_set_size_request (picker, 150, -1);
614   gtk_file_chooser_set_filename (GTK_FILE_CHOOSER (picker), "/etc/yum.conf");
615   gtk_container_add (GTK_CONTAINER (align), picker);
616   gtk_box_pack_start (GTK_BOX (vbox2), align, FALSE, FALSE, 0);
617   gtk_box_pack_start (GTK_BOX (vbox2),
618                       gtk_label_new ("File Button (Files)"),
619                       FALSE, FALSE, 0);
620
621   gtk_box_pack_start (GTK_BOX (vbox),
622                       vbox2, TRUE, TRUE, 0);
623   gtk_box_pack_start (GTK_BOX (vbox),
624                       gtk_separator_new (GTK_ORIENTATION_HORIZONTAL),
625                       FALSE, FALSE, 0);
626
627   vbox2 = gtk_box_new (GTK_ORIENTATION_VERTICAL, 3);
628   align = gtk_alignment_new (0.5, 0.5, 0.0, 0.0);
629   picker = gtk_file_chooser_button_new ("File Chooser Button",
630                                         GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER);
631   gtk_widget_set_size_request (picker, 150, -1);
632   gtk_file_chooser_set_filename (GTK_FILE_CHOOSER (picker), "/");
633   gtk_container_add (GTK_CONTAINER (align), picker);
634   gtk_box_pack_start (GTK_BOX (vbox2), align, FALSE, FALSE, 0);
635   gtk_box_pack_start (GTK_BOX (vbox2),
636                       gtk_label_new ("File Button (Select Folder)"),
637                       FALSE, FALSE, 0);
638   gtk_box_pack_start (GTK_BOX (vbox),
639                       vbox2, TRUE, TRUE, 0);
640
641   return new_widget_info ("file-button", vbox, MEDIUM);
642 }
643
644 static WidgetInfo *
645 create_separator (void)
646 {
647   GtkWidget *hbox;
648   GtkWidget *vbox;
649
650   vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 3);
651   hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
652   gtk_box_set_homogeneous (GTK_BOX (hbox), TRUE);
653   gtk_box_pack_start (GTK_BOX (hbox),
654                       gtk_separator_new (GTK_ORIENTATION_HORIZONTAL),
655                       TRUE, TRUE, 0);
656   gtk_box_pack_start (GTK_BOX (hbox),
657                       gtk_separator_new (GTK_ORIENTATION_VERTICAL),
658                       TRUE, TRUE, 0);
659   gtk_box_pack_start (GTK_BOX (vbox), hbox, TRUE, TRUE, 0);
660   gtk_box_pack_start (GTK_BOX (vbox),
661                       g_object_new (GTK_TYPE_LABEL,
662                                     "label", "Horizontal and Vertical\nSeparators",
663                                     "justify", GTK_JUSTIFY_CENTER,
664                                     NULL),
665                       FALSE, FALSE, 0);
666   return new_widget_info ("separator", vbox, MEDIUM);
667 }
668
669 static WidgetInfo *
670 create_panes (void)
671 {
672   GtkWidget *hbox;
673   GtkWidget *vbox;
674   GtkWidget *pane;
675
676   vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 3);
677   hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 12);
678   gtk_box_set_homogeneous (GTK_BOX (hbox), TRUE);
679   pane = gtk_paned_new (GTK_ORIENTATION_HORIZONTAL);
680   gtk_paned_pack1 (GTK_PANED (pane),
681                    g_object_new (GTK_TYPE_FRAME,
682                                  "shadow", GTK_SHADOW_IN,
683                                  NULL),
684                    FALSE, FALSE);
685   gtk_paned_pack2 (GTK_PANED (pane),
686                    g_object_new (GTK_TYPE_FRAME,
687                                  "shadow", GTK_SHADOW_IN,
688                                  NULL),
689                    FALSE, FALSE);
690   gtk_box_pack_start (GTK_BOX (hbox),
691                       pane,
692                       TRUE, TRUE, 0);
693   pane = gtk_paned_new (GTK_ORIENTATION_VERTICAL);
694   gtk_paned_pack1 (GTK_PANED (pane),
695                    g_object_new (GTK_TYPE_FRAME,
696                                  "shadow", GTK_SHADOW_IN,
697                                  NULL),
698                    FALSE, FALSE);
699   gtk_paned_pack2 (GTK_PANED (pane),
700                    g_object_new (GTK_TYPE_FRAME,
701                                  "shadow", GTK_SHADOW_IN,
702                                  NULL),
703                    FALSE, FALSE);
704   gtk_box_pack_start (GTK_BOX (hbox),
705                       pane,
706                       TRUE, TRUE, 0);
707   gtk_box_pack_start (GTK_BOX (vbox), hbox, TRUE, TRUE, 0);
708   gtk_box_pack_start (GTK_BOX (vbox),
709                       g_object_new (GTK_TYPE_LABEL,
710                                     "label", "Horizontal and Vertical\nPanes",
711                                     "justify", GTK_JUSTIFY_CENTER,
712                                     NULL),
713                       FALSE, FALSE, 0);
714   return new_widget_info ("panes", vbox, MEDIUM);
715 }
716
717 static WidgetInfo *
718 create_frame (void)
719 {
720   GtkWidget *widget;
721
722   widget = gtk_frame_new ("Frame");
723
724   return new_widget_info ("frame", widget, MEDIUM);
725 }
726
727 static WidgetInfo *
728 create_window (void)
729 {
730   WidgetInfo *info;
731   GtkWidget *widget;
732
733   widget = gtk_window_new (GTK_WINDOW_TOPLEVEL);
734   info = new_widget_info ("window", widget, MEDIUM);
735   info->include_decorations = TRUE;
736   gtk_window_set_title (GTK_WINDOW (info->window), "Window");
737
738   return info;
739 }
740
741 static WidgetInfo *
742 create_colorsel (void)
743 {
744   WidgetInfo *info;
745   GtkWidget *widget;
746   GtkColorSelection *colorsel;
747   GtkColorSelectionDialog *selection_dialog;
748   GdkRGBA rgba;
749
750   widget = gtk_color_selection_dialog_new ("Color Selection Dialog");
751   selection_dialog = GTK_COLOR_SELECTION_DIALOG (widget);
752   colorsel = GTK_COLOR_SELECTION (gtk_color_selection_dialog_get_color_selection (selection_dialog));
753
754   rgba.red   = 0.4745;
755   rgba.green = 0.8588;
756   rgba.blue  = 0.5843;
757
758   gtk_color_selection_set_previous_rgba (colorsel, &rgba);
759
760   rgba.red   = 0.4902;
761   rgba.green = 0.5764;
762   rgba.blue  = 0.7647;
763
764   gtk_color_selection_set_current_rgba (colorsel, &rgba);
765
766   info = new_widget_info ("colorsel", widget, ASIS);
767   info->include_decorations = TRUE;
768
769   return info;
770 }
771
772 static WidgetInfo *
773 create_fontsel (void)
774 {
775   WidgetInfo *info;
776   GtkWidget *widget;
777
778   widget = gtk_font_selection_dialog_new ("Font Selection Dialog");
779   info = new_widget_info ("fontsel", widget, ASIS);
780   info->include_decorations = TRUE;
781
782   return info;
783 }
784
785 static WidgetInfo *
786 create_filesel (void)
787 {
788   WidgetInfo *info;
789   GtkWidget *widget;
790
791   widget = gtk_file_chooser_dialog_new ("File Chooser Dialog",
792                                         NULL,
793                                         GTK_FILE_CHOOSER_ACTION_OPEN,
794                                         GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
795                                         GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT,
796                                         NULL); 
797   gtk_window_set_default_size (GTK_WINDOW (widget), 505, 305);
798   
799   info = new_widget_info ("filechooser", widget, ASIS);
800   info->include_decorations = TRUE;
801
802   return info;
803 }
804
805 static WidgetInfo *
806 create_print_dialog (void)
807 {
808   WidgetInfo *info;
809   GtkWidget *widget;
810
811   widget = gtk_print_unix_dialog_new ("Print Dialog", NULL);   
812   gtk_widget_set_size_request (widget, 505, 350);
813   info = new_widget_info ("printdialog", widget, ASIS);
814   info->include_decorations = TRUE;
815
816   return info;
817 }
818
819 static WidgetInfo *
820 create_page_setup_dialog (void)
821 {
822   WidgetInfo *info;
823   GtkWidget *widget;
824   GtkPageSetup *page_setup;
825   GtkPrintSettings *settings;
826
827   page_setup = gtk_page_setup_new ();
828   settings = gtk_print_settings_new ();
829   widget = gtk_page_setup_unix_dialog_new ("Page Setup Dialog", NULL);   
830   gtk_page_setup_unix_dialog_set_page_setup (GTK_PAGE_SETUP_UNIX_DIALOG (widget),
831                                              page_setup);
832   gtk_page_setup_unix_dialog_set_print_settings (GTK_PAGE_SETUP_UNIX_DIALOG (widget),
833                                                  settings);
834
835   info = new_widget_info ("pagesetupdialog", widget, ASIS);
836   gtk_widget_set_app_paintable (info->window, FALSE);
837   info->include_decorations = TRUE;
838
839   return info;
840 }
841
842 static WidgetInfo *
843 create_toolbar (void)
844 {
845   GtkWidget *widget, *menu;
846   GtkToolItem *item;
847
848   widget = gtk_toolbar_new ();
849
850   item = gtk_tool_button_new_from_stock (GTK_STOCK_NEW);
851   gtk_toolbar_insert (GTK_TOOLBAR (widget), item, -1);
852
853   item = gtk_menu_tool_button_new_from_stock (GTK_STOCK_OPEN);
854   menu = gtk_menu_new ();
855   gtk_menu_tool_button_set_menu (GTK_MENU_TOOL_BUTTON (item), menu);
856   gtk_toolbar_insert (GTK_TOOLBAR (widget), item, -1);
857
858   item = gtk_tool_button_new_from_stock (GTK_STOCK_REFRESH);
859   gtk_toolbar_insert (GTK_TOOLBAR (widget), item, -1);
860
861   gtk_toolbar_set_show_arrow (GTK_TOOLBAR (widget), FALSE);
862
863   return new_widget_info ("toolbar", widget, SMALL);
864 }
865
866 static WidgetInfo *
867 create_toolpalette (void)
868 {
869   GtkWidget *widget, *group;
870   GtkToolItem *item;
871
872   widget = gtk_tool_palette_new ();
873   group = gtk_tool_item_group_new ("Tools");
874   gtk_container_add (GTK_CONTAINER (widget), group);
875   item = gtk_tool_button_new_from_stock (GTK_STOCK_ABOUT);
876   gtk_tool_item_group_insert (GTK_TOOL_ITEM_GROUP (group), item, -1);
877   item = gtk_tool_button_new_from_stock (GTK_STOCK_FILE);
878   gtk_tool_item_group_insert (GTK_TOOL_ITEM_GROUP (group), item, -1);
879   item = gtk_tool_button_new_from_stock (GTK_STOCK_CONNECT);
880   gtk_tool_item_group_insert (GTK_TOOL_ITEM_GROUP (group), item, -1);
881
882   group = gtk_tool_item_group_new ("More tools");
883   gtk_container_add (GTK_CONTAINER (widget), group);
884   item = gtk_tool_button_new_from_stock (GTK_STOCK_CUT);
885   gtk_tool_item_group_insert (GTK_TOOL_ITEM_GROUP (group), item, -1);
886   item = gtk_tool_button_new_from_stock (GTK_STOCK_EXECUTE);
887   gtk_tool_item_group_insert (GTK_TOOL_ITEM_GROUP (group), item, -1);
888   item = gtk_tool_button_new_from_stock (GTK_STOCK_CANCEL);
889   gtk_tool_item_group_insert (GTK_TOOL_ITEM_GROUP (group), item, -1);
890
891   return new_widget_info ("toolpalette", widget, MEDIUM);
892 }
893
894 static WidgetInfo *
895 create_menubar (void)
896 {
897   GtkWidget *widget, *vbox, *align, *item;
898
899   widget = gtk_menu_bar_new ();
900
901   item = gtk_menu_item_new_with_mnemonic ("_File");
902   gtk_menu_shell_append (GTK_MENU_SHELL (widget), item);
903
904   item = gtk_menu_item_new_with_mnemonic ("_Edit");
905   gtk_menu_shell_append (GTK_MENU_SHELL (widget), item);
906
907   item = gtk_menu_item_new_with_mnemonic ("_Help");
908   gtk_menu_shell_append (GTK_MENU_SHELL (widget), item);
909
910   vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 3);
911   align = gtk_alignment_new (0.5, 0.5, 0.0, 0.0);
912   gtk_container_add (GTK_CONTAINER (align), widget);
913   gtk_box_pack_start (GTK_BOX (vbox), align, FALSE, FALSE, 0);
914   gtk_box_pack_start (GTK_BOX (vbox),
915                       gtk_label_new ("Menu Bar"),
916                       FALSE, FALSE, 0);
917
918   return new_widget_info ("menubar", vbox, SMALL);
919 }
920
921 static WidgetInfo *
922 create_message_dialog (void)
923 {
924   GtkWidget *widget;
925
926   widget = gtk_message_dialog_new (NULL,
927                                    0,
928                                    GTK_MESSAGE_INFO,
929                                    GTK_BUTTONS_OK,
930                                    NULL);
931   gtk_window_set_icon_name (GTK_WINDOW (widget), "edit-copy");
932   gtk_message_dialog_set_markup (GTK_MESSAGE_DIALOG (widget),
933                                  "<b>Message Dialog</b>\n\nWith secondary text");
934   return new_widget_info ("messagedialog", widget, ASIS);
935 }
936
937 static WidgetInfo *
938 create_about_dialog (void)
939 {
940   GtkWidget *widget;
941   const gchar *authors[] = {
942     "Peter Mattis",
943     "Spencer Kimball",
944     "Josh MacDonald",
945     "and many more...",
946     NULL
947   };
948
949   widget = gtk_about_dialog_new ();
950   g_object_set (widget,
951                 "program-name", "GTK+ Code Demos",
952                 "version", PACKAGE_VERSION,
953                 "copyright", "(C) 1997-2009 The GTK+ Team",
954                 "website", "http://www.gtk.org",
955                 "comments", "Program to demonstrate GTK+ functions.",
956                 "logo-icon-name", "help-about",
957                 "title", "About GTK+ Code Demos",
958                 "authors", authors,
959                 NULL);
960   gtk_window_set_icon_name (GTK_WINDOW (widget), "help-about");
961   return new_widget_info ("aboutdialog", widget, ASIS);
962 }
963
964 static WidgetInfo *
965 create_notebook (void)
966 {
967   GtkWidget *widget;
968
969   widget = gtk_notebook_new ();
970
971   gtk_notebook_append_page (GTK_NOTEBOOK (widget), 
972                             gtk_label_new ("Notebook"),
973                             NULL);
974   gtk_notebook_append_page (GTK_NOTEBOOK (widget), gtk_event_box_new (), NULL);
975   gtk_notebook_append_page (GTK_NOTEBOOK (widget), gtk_event_box_new (), NULL);
976
977   return new_widget_info ("notebook", widget, MEDIUM);
978 }
979
980 static WidgetInfo *
981 create_progressbar (void)
982 {
983   GtkWidget *vbox;
984   GtkWidget *widget;
985   GtkWidget *align;
986
987   widget = gtk_progress_bar_new ();
988   gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (widget), 0.5);
989
990   vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 3);
991   align = gtk_alignment_new (0.5, 0.5, 0.0, 0.0);
992   gtk_container_add (GTK_CONTAINER (align), widget);
993   gtk_box_pack_start (GTK_BOX (vbox), align, FALSE, FALSE, 0);
994   gtk_box_pack_start (GTK_BOX (vbox),
995                       gtk_label_new ("Progress Bar"),
996                       FALSE, FALSE, 0);
997
998   return new_widget_info ("progressbar", vbox, SMALL);
999 }
1000
1001 static WidgetInfo *
1002 create_level_bar (void)
1003 {
1004   GtkWidget *vbox;
1005   GtkWidget *widget;
1006
1007   widget = gtk_level_bar_new ();
1008   gtk_level_bar_set_value (GTK_LEVEL_BAR (widget), 0.333);
1009
1010   vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 3);
1011   gtk_box_pack_start (GTK_BOX (vbox), widget, TRUE, FALSE, 0);
1012   gtk_box_pack_start (GTK_BOX (vbox),
1013                       gtk_label_new ("Level Bar"),
1014                       FALSE, FALSE, 0);
1015
1016   return new_widget_info ("levelbar", vbox, SMALL);
1017 }
1018
1019 static WidgetInfo *
1020 create_scrolledwindow (void)
1021 {
1022   GtkWidget *scrolledwin, *label;
1023
1024   scrolledwin = gtk_scrolled_window_new (NULL, NULL);
1025   label = gtk_label_new ("Scrolled Window");
1026
1027   gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scrolledwin), 
1028                                          label);
1029
1030   return new_widget_info ("scrolledwindow", scrolledwin, MEDIUM);
1031 }
1032
1033 static WidgetInfo *
1034 create_spinbutton (void)
1035 {
1036   GtkWidget *widget;
1037   GtkWidget *vbox, *align;
1038
1039   widget = gtk_spin_button_new_with_range (0.0, 100.0, 1.0);
1040
1041   vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 3);
1042   align = gtk_alignment_new (0.5, 0.5, 0.0, 0.0);
1043   gtk_container_add (GTK_CONTAINER (align), widget);
1044   gtk_box_pack_start (GTK_BOX (vbox), align, FALSE, FALSE, 0);
1045   gtk_box_pack_start (GTK_BOX (vbox),
1046                       gtk_label_new ("Spin Button"),
1047                       FALSE, FALSE, 0);
1048
1049   return new_widget_info ("spinbutton", vbox, SMALL);
1050 }
1051
1052 static WidgetInfo *
1053 create_statusbar (void)
1054 {
1055   WidgetInfo *info;
1056   GtkWidget *widget;
1057   GtkWidget *vbox, *align;
1058
1059   vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
1060   align = gtk_alignment_new (0.5, 0.5, 0.0, 0.0);
1061   gtk_container_add (GTK_CONTAINER (align), gtk_label_new ("Status Bar"));
1062   gtk_box_pack_start (GTK_BOX (vbox),
1063                       align,
1064                       TRUE, TRUE, 0);
1065   widget = gtk_statusbar_new ();
1066   align = gtk_alignment_new (0.5, 1.0, 1.0, 0.0);
1067   gtk_container_add (GTK_CONTAINER (align), widget);
1068   gtk_statusbar_push (GTK_STATUSBAR (widget), 0, "Hold on...");
1069
1070   gtk_box_pack_end (GTK_BOX (vbox), align, FALSE, FALSE, 0);
1071
1072   info = new_widget_info ("statusbar", vbox, SMALL);
1073   gtk_container_set_border_width (GTK_CONTAINER (info->window), 0);
1074
1075   return info;
1076 }
1077
1078 static WidgetInfo *
1079 create_scales (void)
1080 {
1081   GtkWidget *hbox;
1082   GtkWidget *vbox;
1083
1084   vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 3);
1085   hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
1086   gtk_box_set_homogeneous (GTK_BOX (hbox), TRUE);
1087   gtk_box_pack_start (GTK_BOX (hbox),
1088                       gtk_scale_new_with_range (GTK_ORIENTATION_HORIZONTAL,
1089                                                 0.0, 100.0, 1.0),
1090                       TRUE, TRUE, 0);
1091   gtk_box_pack_start (GTK_BOX (hbox),
1092                       gtk_scale_new_with_range (GTK_ORIENTATION_VERTICAL,
1093                                                 0.0, 100.0, 1.0),
1094                       TRUE, TRUE, 0);
1095   gtk_box_pack_start (GTK_BOX (vbox), hbox, TRUE, TRUE, 0);
1096   gtk_box_pack_start (GTK_BOX (vbox),
1097                       g_object_new (GTK_TYPE_LABEL,
1098                                     "label", "Horizontal and Vertical\nScales",
1099                                     "justify", GTK_JUSTIFY_CENTER,
1100                                     NULL),
1101                       FALSE, FALSE, 0);
1102   return new_widget_info ("scales", vbox, MEDIUM);}
1103
1104 static WidgetInfo *
1105 create_image (void)
1106 {
1107   GtkWidget *widget;
1108   GtkWidget *align, *vbox;
1109
1110   widget = gtk_image_new_from_stock (GTK_STOCK_DIALOG_WARNING, 
1111                                      GTK_ICON_SIZE_DND);
1112
1113   vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 3);
1114   align = gtk_alignment_new (0.5, 0.5, 0.0, 0.0);
1115   gtk_container_add (GTK_CONTAINER (align), widget);
1116   gtk_box_pack_start (GTK_BOX (vbox), align, FALSE, FALSE, 0);
1117   gtk_box_pack_start (GTK_BOX (vbox),
1118                       gtk_label_new ("Image"),
1119                       FALSE, FALSE, 0);
1120
1121   return new_widget_info ("image", vbox, SMALL);
1122 }
1123
1124 static WidgetInfo *
1125 create_spinner (void)
1126 {
1127   GtkWidget *widget;
1128   GtkWidget *align, *vbox;
1129
1130   widget = gtk_spinner_new ();
1131   gtk_widget_set_size_request (widget, 24, 24);
1132
1133   vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 3);
1134   align = gtk_alignment_new (0.5, 0.5, 0.0, 0.0);
1135   gtk_container_add (GTK_CONTAINER (align), widget);
1136   gtk_box_pack_start (GTK_BOX (vbox), align, FALSE, FALSE, 0);
1137   gtk_box_pack_start (GTK_BOX (vbox),
1138                       gtk_label_new ("Spinner"),
1139                       FALSE, FALSE, 0);
1140
1141   return new_widget_info ("spinner", vbox, SMALL);
1142 }
1143
1144 static WidgetInfo *
1145 create_volume_button (void)
1146 {
1147   GtkWidget *button, *widget;
1148   GtkWidget *plus_button;
1149
1150   button = gtk_volume_button_new ();
1151   gtk_scale_button_set_value (GTK_SCALE_BUTTON (button), 33);
1152   /* Hack: get the private dock */
1153   plus_button = gtk_scale_button_get_plus_button (GTK_SCALE_BUTTON (button));
1154   widget = gtk_widget_get_parent (gtk_widget_get_parent (gtk_widget_get_parent (plus_button)));
1155   gtk_widget_show_all (widget);
1156   return new_widget_info ("volumebutton", widget, ASIS);
1157 }
1158
1159 static WidgetInfo *
1160 create_assistant (void)
1161 {
1162   GtkWidget *widget;
1163   GtkWidget *page1, *page2;
1164   WidgetInfo *info;
1165
1166   widget = gtk_assistant_new ();
1167   gtk_window_set_title (GTK_WINDOW (widget), "Assistant");
1168
1169   page1 = gtk_label_new ("Assistant");
1170   gtk_widget_show (page1);
1171   gtk_widget_set_size_request (page1, 300, 140);
1172   gtk_assistant_prepend_page (GTK_ASSISTANT (widget), page1);
1173   gtk_assistant_set_page_title (GTK_ASSISTANT (widget), page1, "Assistant page");
1174   gtk_assistant_set_page_complete (GTK_ASSISTANT (widget), page1, TRUE);
1175
1176   page2 = gtk_label_new (NULL);
1177   gtk_widget_show (page2);
1178   gtk_assistant_append_page (GTK_ASSISTANT (widget), page2);
1179   gtk_assistant_set_page_type (GTK_ASSISTANT (widget), page2, GTK_ASSISTANT_PAGE_CONFIRM);
1180
1181   info = new_widget_info ("assistant", widget, ASIS);
1182   info->include_decorations = TRUE;
1183
1184   return info;
1185 }
1186
1187 static WidgetInfo *
1188 create_appchooserbutton (void)
1189 {
1190   GtkWidget *picker;
1191   GtkWidget *align, *vbox;
1192
1193   vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 3);
1194   align = gtk_alignment_new (0.5, 0.5, 0.0, 0.0);
1195   picker = gtk_app_chooser_button_new ("text/plain");
1196   gtk_container_add (GTK_CONTAINER (align), picker);
1197   gtk_box_pack_start (GTK_BOX (vbox), align, FALSE, FALSE, 0);
1198   gtk_box_pack_start (GTK_BOX (vbox),
1199                       gtk_label_new ("Application Button"),
1200                       FALSE, FALSE, 0);
1201
1202   return new_widget_info ("appchooserbutton", vbox, SMALL);
1203 }
1204
1205 static WidgetInfo *
1206 create_appchooserdialog (void)
1207 {
1208   WidgetInfo *info;
1209   GtkWidget *widget;
1210
1211   widget = gtk_app_chooser_dialog_new_for_content_type (NULL, 0, "image/png");
1212   gtk_window_set_default_size (GTK_WINDOW (widget), 200, 300);
1213
1214   info = new_widget_info ("appchooserdialog", widget, ASIS);
1215   info->include_decorations = TRUE;
1216
1217   return info;
1218 }
1219
1220 static WidgetInfo *
1221 create_fontchooserdialog (void)
1222 {
1223   WidgetInfo *info;
1224   GtkWidget *widget;
1225
1226   widget = gtk_font_chooser_dialog_new ("Font Chooser Dialog", NULL);
1227   gtk_window_set_default_size (GTK_WINDOW (widget), 200, 300);
1228   info = new_widget_info ("fontchooser", widget, ASIS);
1229   info->include_decorations = TRUE;
1230
1231   return info;
1232 }
1233
1234 static WidgetInfo *
1235 create_colorchooserdialog (void)
1236 {
1237   WidgetInfo *info;
1238   GtkWidget *widget;
1239
1240   widget = gtk_color_chooser_dialog_new ("Color Chooser Dialog", NULL);
1241   info = new_widget_info ("colorchooser", widget, ASIS);
1242   info->include_decorations = TRUE;
1243
1244   return info;
1245 }
1246
1247 GList *
1248 get_all_widgets (void)
1249 {
1250   GList *retval = NULL;
1251
1252   retval = g_list_prepend (retval, create_toolpalette ());
1253   retval = g_list_prepend (retval, create_spinner ());
1254   retval = g_list_prepend (retval, create_about_dialog ());
1255   retval = g_list_prepend (retval, create_accel_label ());
1256   retval = g_list_prepend (retval, create_button ());
1257   retval = g_list_prepend (retval, create_check_button ());
1258   retval = g_list_prepend (retval, create_color_button ());
1259   retval = g_list_prepend (retval, create_combo_box ());
1260   retval = g_list_prepend (retval, create_combo_box_entry ());
1261   retval = g_list_prepend (retval, create_entry ());
1262   retval = g_list_prepend (retval, create_file_button ());
1263   retval = g_list_prepend (retval, create_font_button ());
1264   retval = g_list_prepend (retval, create_frame ());
1265   retval = g_list_prepend (retval, create_icon_view ());
1266   retval = g_list_prepend (retval, create_image ());
1267   retval = g_list_prepend (retval, create_label ());
1268   retval = g_list_prepend (retval, create_link_button ());
1269   retval = g_list_prepend (retval, create_menubar ());
1270   retval = g_list_prepend (retval, create_message_dialog ());
1271   retval = g_list_prepend (retval, create_notebook ());
1272   retval = g_list_prepend (retval, create_panes ());
1273   retval = g_list_prepend (retval, create_progressbar ());
1274   retval = g_list_prepend (retval, create_radio ());
1275   retval = g_list_prepend (retval, create_scales ());
1276   retval = g_list_prepend (retval, create_scrolledwindow ());
1277   retval = g_list_prepend (retval, create_separator ());
1278   retval = g_list_prepend (retval, create_spinbutton ());
1279   retval = g_list_prepend (retval, create_statusbar ());
1280   retval = g_list_prepend (retval, create_text_view ());
1281   retval = g_list_prepend (retval, create_toggle_button ());
1282   retval = g_list_prepend (retval, create_toolbar ());
1283   retval = g_list_prepend (retval, create_tree_view ());
1284   retval = g_list_prepend (retval, create_window ());
1285   retval = g_list_prepend (retval, create_colorsel ());
1286   retval = g_list_prepend (retval, create_filesel ());
1287   retval = g_list_prepend (retval, create_fontsel ());
1288   retval = g_list_prepend (retval, create_assistant ());
1289   retval = g_list_prepend (retval, create_recent_chooser_dialog ());
1290   retval = g_list_prepend (retval, create_page_setup_dialog ());
1291   retval = g_list_prepend (retval, create_print_dialog ());
1292   retval = g_list_prepend (retval, create_volume_button ());
1293   retval = g_list_prepend (retval, create_switch ());
1294   retval = g_list_prepend (retval, create_appchooserbutton ());
1295   retval = g_list_prepend (retval, create_appchooserdialog ());
1296   retval = g_list_prepend (retval, create_lockbutton ());
1297   retval = g_list_prepend (retval, create_fontchooserdialog ());
1298   retval = g_list_prepend (retval, create_colorchooserdialog ());
1299   retval = g_list_prepend (retval, create_menu_button ());
1300   retval = g_list_prepend (retval, create_search_entry ());
1301   retval = g_list_prepend (retval, create_level_bar ());
1302
1303   return retval;
1304 }