]> Pileus Git - ~andy/gtk/blob - docs/tools/widgets.c
GtkPlug: fix handling of key events for different layouts
[~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 #define G_TYPE_TEST_PERMISSION      (g_test_permission_get_type ())
228 #define G_TEST_PERMISSION(inst)     (G_TYPE_CHECK_INSTANCE_CAST ((inst), \
229                                      G_TYPE_TEST_PERMISSION,             \
230                                      GTestPermission))
231 #define G_IS_TEST_PERMISSION(inst)  (G_TYPE_CHECK_INSTANCE_TYPE ((inst), \
232                                      G_TYPE_TEST_PERMISSION))
233
234 typedef struct _GTestPermission GTestPermission;
235 typedef struct _GTestPermissionClass GTestPermissionClass;
236
237 struct _GTestPermission
238 {
239   GPermission parent;
240
241   gboolean success;
242 };
243
244 struct _GTestPermissionClass
245 {
246   GPermissionClass parent_class;
247 };
248
249 G_DEFINE_TYPE (GTestPermission, g_test_permission, G_TYPE_PERMISSION)
250
251 static void
252 g_test_permission_init (GTestPermission *test)
253 {
254   g_permission_impl_update (G_PERMISSION (test), FALSE, TRUE, TRUE);
255 }
256
257 static void
258 g_test_permission_class_init (GTestPermissionClass *class)
259 {
260 }
261
262 static WidgetInfo *
263 create_lockbutton (void)
264 {
265   GtkWidget *widget;
266   GtkWidget *align;
267
268   widget = gtk_lock_button_new (g_object_new (G_TYPE_TEST_PERMISSION, NULL));
269   align = gtk_alignment_new (0.5, 0.5, 0.0, 0.0);
270   gtk_container_add (GTK_CONTAINER (align), widget);
271
272   return new_widget_info ("lock-button", align, SMALL);
273 }
274
275 static WidgetInfo *
276 create_entry (void)
277 {
278   GtkWidget *widget;
279   GtkWidget *align;
280
281   widget = gtk_entry_new ();
282   gtk_entry_set_text (GTK_ENTRY (widget), "Entry");
283   gtk_editable_set_position (GTK_EDITABLE (widget), -1);
284   align = gtk_alignment_new (0.5, 0.5, 0.0, 0.0);
285   gtk_container_add (GTK_CONTAINER (align), widget);
286
287   return  new_widget_info ("entry", align, SMALL);
288 }
289
290 static WidgetInfo *
291 create_radio (void)
292 {
293   GtkWidget *widget;
294   GtkWidget *radio;
295   GtkWidget *align;
296
297   widget = gtk_box_new (GTK_ORIENTATION_VERTICAL, 3);
298   radio = gtk_radio_button_new_with_mnemonic (NULL, "Radio Button _One");
299   gtk_box_pack_start (GTK_BOX (widget), radio, FALSE, FALSE, 0);
300   radio = gtk_radio_button_new_with_mnemonic_from_widget (GTK_RADIO_BUTTON (radio), "Radio Button _Two");
301   gtk_box_pack_start (GTK_BOX (widget), radio, FALSE, FALSE, 0);
302   radio = gtk_radio_button_new_with_mnemonic_from_widget (GTK_RADIO_BUTTON (radio), "Radio Button T_hree");
303   gtk_box_pack_start (GTK_BOX (widget), radio, FALSE, FALSE, 0);
304   align = gtk_alignment_new (0.5, 0.5, 0.0, 0.0);
305   gtk_container_add (GTK_CONTAINER (align), widget);
306
307   return new_widget_info ("radio-group", align, MEDIUM);
308 }
309
310 static WidgetInfo *
311 create_label (void)
312 {
313   GtkWidget *widget;
314   GtkWidget *align;
315
316   widget = gtk_label_new ("Label");
317   align = gtk_alignment_new (0.5, 0.5, 0.0, 0.0);
318   gtk_container_add (GTK_CONTAINER (align), widget);
319
320   return new_widget_info ("label", align, SMALL);
321 }
322
323 static WidgetInfo *
324 create_accel_label (void)
325 {
326   WidgetInfo *info;
327   GtkWidget *widget, *button, *box;
328   GtkAccelGroup *accel_group;
329
330   widget = gtk_accel_label_new ("Accel Label");
331
332   button = gtk_button_new_with_label ("Quit");
333   gtk_accel_label_set_accel_widget (GTK_ACCEL_LABEL (widget), button);
334   gtk_widget_set_no_show_all (button, TRUE);
335
336   box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
337   gtk_container_add (GTK_CONTAINER (box), widget);
338   gtk_container_add (GTK_CONTAINER (box), button);
339
340   gtk_accel_label_set_accel_widget (GTK_ACCEL_LABEL (widget), button);
341   accel_group = gtk_accel_group_new();
342
343   info = new_widget_info ("accel-label", box, SMALL);
344
345   gtk_widget_add_accelerator (button, "activate", accel_group, GDK_KEY_Q, GDK_CONTROL_MASK,
346                               GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
347
348   return info;
349 }
350
351 static WidgetInfo *
352 create_combo_box_entry (void)
353 {
354   GtkWidget *widget;
355   GtkWidget *align;
356   GtkWidget *child;
357   GtkTreeModel *model;
358   
359   gtk_rc_parse_string ("style \"combo-box-entry-style\" {\n"
360                        "  GtkComboBox::appears-as-list = 1\n"
361                        "}\n"
362                        "widget_class \"GtkComboBoxEntry\" style \"combo-box-entry-style\"\n" );
363
364   model = (GtkTreeModel *)gtk_list_store_new (1, G_TYPE_STRING);
365   widget = g_object_new (GTK_TYPE_COMBO_BOX,
366                          "has-entry", TRUE,
367                          "model", model,
368                          "entry-text-column", 0,
369                          NULL);
370   g_object_unref (model);
371
372   child = gtk_bin_get_child (GTK_BIN (widget));
373   gtk_entry_set_text (GTK_ENTRY (child), "Combo Box Entry");
374   align = gtk_alignment_new (0.5, 0.5, 0.0, 0.0);
375   gtk_container_add (GTK_CONTAINER (align), widget);
376
377   return new_widget_info ("combo-box-entry", align, SMALL);
378 }
379
380 static WidgetInfo *
381 create_combo_box (void)
382 {
383   GtkWidget *widget;
384   GtkWidget *align;
385   
386   gtk_rc_parse_string ("style \"combo-box-style\" {\n"
387                        "  GtkComboBox::appears-as-list = 0\n"
388                        "}\n"
389                        "widget_class \"GtkComboBox\" style \"combo-box-style\"\n" );
390
391   widget = gtk_combo_box_text_new ();
392   gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (widget), "Combo Box");
393   gtk_combo_box_set_active (GTK_COMBO_BOX (widget), 0);
394   align = gtk_alignment_new (0.5, 0.5, 0.0, 0.0);
395   gtk_container_add (GTK_CONTAINER (align), widget);
396
397   return new_widget_info ("combo-box", align, SMALL);
398 }
399
400 static WidgetInfo *
401 create_recent_chooser_dialog (void)
402 {
403   WidgetInfo *info;
404   GtkWidget *widget;
405
406   widget = gtk_recent_chooser_dialog_new ("Recent Chooser Dialog",
407                                           NULL,
408                                           GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
409                                           GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT,
410                                           NULL); 
411   gtk_window_set_default_size (GTK_WINDOW (widget), 505, 305);
412   
413   info = new_widget_info ("recentchooserdialog", widget, ASIS);
414   info->include_decorations = TRUE;
415
416   return info;
417 }
418
419 static WidgetInfo *
420 create_text_view (void)
421 {
422   GtkWidget *widget;
423   GtkWidget *text_view;
424
425   widget = gtk_frame_new (NULL);
426   gtk_frame_set_shadow_type (GTK_FRAME (widget), GTK_SHADOW_IN);
427   text_view = gtk_text_view_new ();
428   gtk_container_add (GTK_CONTAINER (widget), text_view);
429   /* Bad hack to add some size to the widget */
430   gtk_text_buffer_set_text (gtk_text_view_get_buffer (GTK_TEXT_VIEW (text_view)),
431                             "Multiline\nText\n\n", -1);
432   gtk_text_view_set_cursor_visible (GTK_TEXT_VIEW (text_view), FALSE);
433
434   return new_widget_info ("multiline-text", widget, MEDIUM);
435 }
436
437 static WidgetInfo *
438 create_tree_view (void)
439 {
440   GtkWidget *widget;
441   GtkWidget *tree_view;
442   GtkListStore *list_store;
443   GtkTreeIter iter;
444   WidgetInfo *info;
445
446   widget = gtk_frame_new (NULL);
447   gtk_frame_set_shadow_type (GTK_FRAME (widget), GTK_SHADOW_IN);
448   list_store = gtk_list_store_new (1, G_TYPE_STRING);
449   gtk_list_store_append (list_store, &iter);
450   gtk_list_store_set (list_store, &iter, 0, "Line One", -1);
451   gtk_list_store_append (list_store, &iter);
452   gtk_list_store_set (list_store, &iter, 0, "Line Two", -1);
453   gtk_list_store_append (list_store, &iter);
454   gtk_list_store_set (list_store, &iter, 0, "Line Three", -1);
455
456   tree_view = gtk_tree_view_new_with_model (GTK_TREE_MODEL (list_store));
457   gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
458                                                0, "List and Tree",
459                                                gtk_cell_renderer_text_new (),
460                                                "text", 0, NULL);
461   gtk_container_add (GTK_CONTAINER (widget), tree_view);
462
463   info = new_widget_info ("list-and-tree", widget, MEDIUM);
464   info->no_focus = FALSE;
465
466   return info;
467 }
468
469 static WidgetInfo *
470 create_icon_view (void)
471 {
472   GtkWidget *widget;
473   GtkWidget *vbox;
474   GtkWidget *align;
475   GtkWidget *icon_view;
476   GtkListStore *list_store;
477   GtkTreeIter iter;
478   GdkPixbuf *pixbuf;
479   WidgetInfo *info;
480
481   widget = gtk_frame_new (NULL);
482   gtk_frame_set_shadow_type (GTK_FRAME (widget), GTK_SHADOW_IN);
483   list_store = gtk_list_store_new (2, G_TYPE_STRING, GDK_TYPE_PIXBUF);
484   gtk_list_store_append (list_store, &iter);
485   pixbuf = gdk_pixbuf_new_from_file ("folder.png", NULL);
486   gtk_list_store_set (list_store, &iter, 0, "One", 1, pixbuf, -1);
487   gtk_list_store_append (list_store, &iter);
488   pixbuf = gdk_pixbuf_new_from_file ("gnome.png", NULL);
489   gtk_list_store_set (list_store, &iter, 0, "Two", 1, pixbuf, -1);
490
491   icon_view = gtk_icon_view_new();
492
493   gtk_icon_view_set_model (GTK_ICON_VIEW (icon_view), GTK_TREE_MODEL (list_store));
494   gtk_icon_view_set_text_column (GTK_ICON_VIEW (icon_view), 0);
495   gtk_icon_view_set_pixbuf_column (GTK_ICON_VIEW (icon_view), 1);
496
497   gtk_container_add (GTK_CONTAINER (widget), icon_view);
498
499   vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 3);
500   align = gtk_alignment_new (0.5, 0.5, 1.0, 1.0);
501   gtk_container_add (GTK_CONTAINER (align), widget);
502   gtk_box_pack_start (GTK_BOX (vbox), align, TRUE, TRUE, 0);
503   gtk_box_pack_start (GTK_BOX (vbox),
504                       gtk_label_new ("Icon View"),
505                       FALSE, FALSE, 0);
506
507   info = new_widget_info ("icon-view", vbox, MEDIUM);
508   info->no_focus = FALSE;
509
510   return info;
511 }
512
513 static WidgetInfo *
514 create_color_button (void)
515 {
516   GtkWidget *vbox;
517   GtkWidget *picker;
518   GtkWidget *align;
519   GdkColor color;
520
521   vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 3);
522   align = gtk_alignment_new (0.5, 0.5, 0.0, 0.0);
523   color.red = 0x1e<<8;  /* Go Gagne! */
524   color.green = 0x90<<8;
525   color.blue = 0xff<<8;
526   picker = gtk_color_button_new_with_color (&color);
527   gtk_container_add (GTK_CONTAINER (align), picker);
528   gtk_box_pack_start (GTK_BOX (vbox), align, FALSE, FALSE, 0);
529   gtk_box_pack_start (GTK_BOX (vbox),
530                       gtk_label_new ("Color Button"),
531                       FALSE, FALSE, 0);
532
533   return new_widget_info ("color-button", vbox, SMALL);
534 }
535
536 static WidgetInfo *
537 create_font_button (void)
538 {
539   GtkWidget *vbox;
540   GtkWidget *picker;
541   GtkWidget *align;
542
543   vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 3);
544   align = gtk_alignment_new (0.5, 0.5, 0.0, 0.0);
545   picker = gtk_font_button_new_with_font ("Sans Serif 10");
546   gtk_container_add (GTK_CONTAINER (align), picker);
547   gtk_box_pack_start (GTK_BOX (vbox), align, FALSE, FALSE, 0);
548   gtk_box_pack_start (GTK_BOX (vbox),
549                       gtk_label_new ("Font Button"),
550                       FALSE, FALSE, 0);
551
552   return new_widget_info ("font-button", vbox, SMALL);
553 }
554
555 static WidgetInfo *
556 create_file_button (void)
557 {
558   GtkWidget *vbox;
559   GtkWidget *vbox2;
560   GtkWidget *picker;
561   GtkWidget *align;
562
563   vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 12);
564   vbox2 = gtk_box_new (GTK_ORIENTATION_VERTICAL, 3);
565   align = gtk_alignment_new (0.5, 0.5, 0.0, 0.0);
566   picker = gtk_file_chooser_button_new ("File Chooser Button",
567                                         GTK_FILE_CHOOSER_ACTION_OPEN);
568   gtk_widget_set_size_request (picker, 150, -1);
569   gtk_file_chooser_set_filename (GTK_FILE_CHOOSER (picker), "/etc/yum.conf");
570   gtk_container_add (GTK_CONTAINER (align), picker);
571   gtk_box_pack_start (GTK_BOX (vbox2), align, FALSE, FALSE, 0);
572   gtk_box_pack_start (GTK_BOX (vbox2),
573                       gtk_label_new ("File Button (Files)"),
574                       FALSE, FALSE, 0);
575
576   gtk_box_pack_start (GTK_BOX (vbox),
577                       vbox2, TRUE, TRUE, 0);
578   gtk_box_pack_start (GTK_BOX (vbox),
579                       gtk_separator_new (GTK_ORIENTATION_HORIZONTAL),
580                       FALSE, FALSE, 0);
581
582   vbox2 = gtk_box_new (GTK_ORIENTATION_VERTICAL, 3);
583   align = gtk_alignment_new (0.5, 0.5, 0.0, 0.0);
584   picker = gtk_file_chooser_button_new ("File Chooser Button",
585                                         GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER);
586   gtk_widget_set_size_request (picker, 150, -1);
587   gtk_file_chooser_set_filename (GTK_FILE_CHOOSER (picker), "/");
588   gtk_container_add (GTK_CONTAINER (align), picker);
589   gtk_box_pack_start (GTK_BOX (vbox2), align, FALSE, FALSE, 0);
590   gtk_box_pack_start (GTK_BOX (vbox2),
591                       gtk_label_new ("File Button (Select Folder)"),
592                       FALSE, FALSE, 0);
593   gtk_box_pack_start (GTK_BOX (vbox),
594                       vbox2, TRUE, TRUE, 0);
595
596   return new_widget_info ("file-button", vbox, MEDIUM);
597 }
598
599 static WidgetInfo *
600 create_separator (void)
601 {
602   GtkWidget *hbox;
603   GtkWidget *vbox;
604
605   vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 3);
606   hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
607   gtk_box_set_homogeneous (GTK_BOX (hbox), TRUE);
608   gtk_box_pack_start (GTK_BOX (hbox),
609                       gtk_separator_new (GTK_ORIENTATION_HORIZONTAL),
610                       TRUE, TRUE, 0);
611   gtk_box_pack_start (GTK_BOX (hbox),
612                       gtk_separator_new (GTK_ORIENTATION_VERTICAL),
613                       TRUE, TRUE, 0);
614   gtk_box_pack_start (GTK_BOX (vbox), hbox, TRUE, TRUE, 0);
615   gtk_box_pack_start (GTK_BOX (vbox),
616                       g_object_new (GTK_TYPE_LABEL,
617                                     "label", "Horizontal and Vertical\nSeparators",
618                                     "justify", GTK_JUSTIFY_CENTER,
619                                     NULL),
620                       FALSE, FALSE, 0);
621   return new_widget_info ("separator", vbox, MEDIUM);
622 }
623
624 static WidgetInfo *
625 create_panes (void)
626 {
627   GtkWidget *hbox;
628   GtkWidget *vbox;
629   GtkWidget *pane;
630
631   vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 3);
632   hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 12);
633   gtk_box_set_homogeneous (GTK_BOX (hbox), TRUE);
634   pane = gtk_paned_new (GTK_ORIENTATION_HORIZONTAL);
635   gtk_paned_pack1 (GTK_PANED (pane),
636                    g_object_new (GTK_TYPE_FRAME,
637                                  "shadow", GTK_SHADOW_IN,
638                                  NULL),
639                    FALSE, FALSE);
640   gtk_paned_pack2 (GTK_PANED (pane),
641                    g_object_new (GTK_TYPE_FRAME,
642                                  "shadow", GTK_SHADOW_IN,
643                                  NULL),
644                    FALSE, FALSE);
645   gtk_box_pack_start (GTK_BOX (hbox),
646                       pane,
647                       TRUE, TRUE, 0);
648   pane = gtk_paned_new (GTK_ORIENTATION_VERTICAL);
649   gtk_paned_pack1 (GTK_PANED (pane),
650                    g_object_new (GTK_TYPE_FRAME,
651                                  "shadow", GTK_SHADOW_IN,
652                                  NULL),
653                    FALSE, FALSE);
654   gtk_paned_pack2 (GTK_PANED (pane),
655                    g_object_new (GTK_TYPE_FRAME,
656                                  "shadow", GTK_SHADOW_IN,
657                                  NULL),
658                    FALSE, FALSE);
659   gtk_box_pack_start (GTK_BOX (hbox),
660                       pane,
661                       TRUE, TRUE, 0);
662   gtk_box_pack_start (GTK_BOX (vbox), hbox, TRUE, TRUE, 0);
663   gtk_box_pack_start (GTK_BOX (vbox),
664                       g_object_new (GTK_TYPE_LABEL,
665                                     "label", "Horizontal and Vertical\nPanes",
666                                     "justify", GTK_JUSTIFY_CENTER,
667                                     NULL),
668                       FALSE, FALSE, 0);
669   return new_widget_info ("panes", vbox, MEDIUM);
670 }
671
672 static WidgetInfo *
673 create_frame (void)
674 {
675   GtkWidget *widget;
676
677   widget = gtk_frame_new ("Frame");
678
679   return new_widget_info ("frame", widget, MEDIUM);
680 }
681
682 static WidgetInfo *
683 create_window (void)
684 {
685   WidgetInfo *info;
686   GtkWidget *widget;
687
688   widget = gtk_window_new (GTK_WINDOW_TOPLEVEL);
689   info = new_widget_info ("window", widget, MEDIUM);
690   info->include_decorations = TRUE;
691   gtk_window_set_title (GTK_WINDOW (info->window), "Window");
692
693   return info;
694 }
695
696 static WidgetInfo *
697 create_colorsel (void)
698 {
699   WidgetInfo *info;
700   GtkWidget *widget;
701   GtkColorSelection *colorsel;
702   GtkColorSelectionDialog *selection_dialog;
703   GdkRGBA rgba;
704
705   widget = gtk_color_selection_dialog_new ("Color Selection Dialog");
706   selection_dialog = GTK_COLOR_SELECTION_DIALOG (widget);
707   colorsel = GTK_COLOR_SELECTION (gtk_color_selection_dialog_get_color_selection (selection_dialog));
708
709   rgba.red   = 0.4745;
710   rgba.green = 0.8588;
711   rgba.blue  = 0.5843;
712
713   gtk_color_selection_set_previous_rgba (colorsel, &rgba);
714
715   rgba.red   = 0.4902;
716   rgba.green = 0.5764;
717   rgba.blue  = 0.7647;
718
719   gtk_color_selection_set_current_rgba (colorsel, &rgba);
720
721   info = new_widget_info ("colorsel", widget, ASIS);
722   info->include_decorations = TRUE;
723
724   return info;
725 }
726
727 static WidgetInfo *
728 create_fontsel (void)
729 {
730   WidgetInfo *info;
731   GtkWidget *widget;
732
733   widget = gtk_font_selection_dialog_new ("Font Selection Dialog");
734   info = new_widget_info ("fontsel", widget, ASIS);
735   info->include_decorations = TRUE;
736
737   return info;
738 }
739
740 static WidgetInfo *
741 create_filesel (void)
742 {
743   WidgetInfo *info;
744   GtkWidget *widget;
745
746   widget = gtk_file_chooser_dialog_new ("File Chooser Dialog",
747                                         NULL,
748                                         GTK_FILE_CHOOSER_ACTION_OPEN,
749                                         GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
750                                         GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT,
751                                         NULL); 
752   gtk_window_set_default_size (GTK_WINDOW (widget), 505, 305);
753   
754   info = new_widget_info ("filechooser", widget, ASIS);
755   info->include_decorations = TRUE;
756
757   return info;
758 }
759
760 static WidgetInfo *
761 create_print_dialog (void)
762 {
763   WidgetInfo *info;
764   GtkWidget *widget;
765
766   widget = gtk_print_unix_dialog_new ("Print Dialog", NULL);   
767   gtk_widget_set_size_request (widget, 505, 350);
768   info = new_widget_info ("printdialog", widget, ASIS);
769   info->include_decorations = TRUE;
770
771   return info;
772 }
773
774 static WidgetInfo *
775 create_page_setup_dialog (void)
776 {
777   WidgetInfo *info;
778   GtkWidget *widget;
779   GtkPageSetup *page_setup;
780   GtkPrintSettings *settings;
781
782   page_setup = gtk_page_setup_new ();
783   settings = gtk_print_settings_new ();
784   widget = gtk_page_setup_unix_dialog_new ("Page Setup Dialog", NULL);   
785   gtk_page_setup_unix_dialog_set_page_setup (GTK_PAGE_SETUP_UNIX_DIALOG (widget),
786                                              page_setup);
787   gtk_page_setup_unix_dialog_set_print_settings (GTK_PAGE_SETUP_UNIX_DIALOG (widget),
788                                                  settings);
789
790   info = new_widget_info ("pagesetupdialog", widget, ASIS);
791   gtk_widget_set_app_paintable (info->window, FALSE);
792   info->include_decorations = TRUE;
793
794   return info;
795 }
796
797 static WidgetInfo *
798 create_toolbar (void)
799 {
800   GtkWidget *widget, *menu;
801   GtkToolItem *item;
802
803   widget = gtk_toolbar_new ();
804
805   item = gtk_tool_button_new_from_stock (GTK_STOCK_NEW);
806   gtk_toolbar_insert (GTK_TOOLBAR (widget), item, -1);
807
808   item = gtk_menu_tool_button_new_from_stock (GTK_STOCK_OPEN);
809   menu = gtk_menu_new ();
810   gtk_menu_tool_button_set_menu (GTK_MENU_TOOL_BUTTON (item), menu);
811   gtk_toolbar_insert (GTK_TOOLBAR (widget), item, -1);
812
813   item = gtk_tool_button_new_from_stock (GTK_STOCK_REFRESH);
814   gtk_toolbar_insert (GTK_TOOLBAR (widget), item, -1);
815
816   gtk_toolbar_set_show_arrow (GTK_TOOLBAR (widget), FALSE);
817
818   return new_widget_info ("toolbar", widget, SMALL);
819 }
820
821 static WidgetInfo *
822 create_toolpalette (void)
823 {
824   GtkWidget *widget, *group;
825   GtkToolItem *item;
826
827   widget = gtk_tool_palette_new ();
828   group = gtk_tool_item_group_new ("Tools");
829   gtk_container_add (GTK_CONTAINER (widget), group);
830   item = gtk_tool_button_new_from_stock (GTK_STOCK_ABOUT);
831   gtk_tool_item_group_insert (GTK_TOOL_ITEM_GROUP (group), item, -1);
832   item = gtk_tool_button_new_from_stock (GTK_STOCK_FILE);
833   gtk_tool_item_group_insert (GTK_TOOL_ITEM_GROUP (group), item, -1);
834   item = gtk_tool_button_new_from_stock (GTK_STOCK_CONNECT);
835   gtk_tool_item_group_insert (GTK_TOOL_ITEM_GROUP (group), item, -1);
836
837   group = gtk_tool_item_group_new ("More tools");
838   gtk_container_add (GTK_CONTAINER (widget), group);
839   item = gtk_tool_button_new_from_stock (GTK_STOCK_CUT);
840   gtk_tool_item_group_insert (GTK_TOOL_ITEM_GROUP (group), item, -1);
841   item = gtk_tool_button_new_from_stock (GTK_STOCK_EXECUTE);
842   gtk_tool_item_group_insert (GTK_TOOL_ITEM_GROUP (group), item, -1);
843   item = gtk_tool_button_new_from_stock (GTK_STOCK_CANCEL);
844   gtk_tool_item_group_insert (GTK_TOOL_ITEM_GROUP (group), item, -1);
845
846   return new_widget_info ("toolpalette", widget, MEDIUM);
847 }
848
849 static WidgetInfo *
850 create_menubar (void)
851 {
852   GtkWidget *widget, *vbox, *align, *item;
853
854   widget = gtk_menu_bar_new ();
855
856   item = gtk_menu_item_new_with_mnemonic ("_File");
857   gtk_menu_shell_append (GTK_MENU_SHELL (widget), item);
858
859   item = gtk_menu_item_new_with_mnemonic ("_Edit");
860   gtk_menu_shell_append (GTK_MENU_SHELL (widget), item);
861
862   item = gtk_menu_item_new_with_mnemonic ("_Help");
863   gtk_menu_shell_append (GTK_MENU_SHELL (widget), item);
864
865   vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 3);
866   align = gtk_alignment_new (0.5, 0.5, 0.0, 0.0);
867   gtk_container_add (GTK_CONTAINER (align), widget);
868   gtk_box_pack_start (GTK_BOX (vbox), align, FALSE, FALSE, 0);
869   gtk_box_pack_start (GTK_BOX (vbox),
870                       gtk_label_new ("Menu Bar"),
871                       FALSE, FALSE, 0);
872
873   return new_widget_info ("menubar", vbox, SMALL);
874 }
875
876 static WidgetInfo *
877 create_message_dialog (void)
878 {
879   GtkWidget *widget;
880
881   widget = gtk_message_dialog_new (NULL,
882                                    0,
883                                    GTK_MESSAGE_INFO,
884                                    GTK_BUTTONS_OK,
885                                    NULL);
886   gtk_window_set_icon_name (GTK_WINDOW (widget), "edit-copy");
887   gtk_message_dialog_set_markup (GTK_MESSAGE_DIALOG (widget),
888                                  "<b>Message Dialog</b>\n\nWith secondary text");
889   return new_widget_info ("messagedialog", widget, ASIS);
890 }
891
892 static WidgetInfo *
893 create_about_dialog (void)
894 {
895   GtkWidget *widget;
896   const gchar *authors[] = {
897     "Peter Mattis",
898     "Spencer Kimball",
899     "Josh MacDonald",
900     "and many more...",
901     NULL
902   };
903
904   widget = gtk_about_dialog_new ();
905   g_object_set (widget,
906                 "program-name", "GTK+ Code Demos",
907                 "version", PACKAGE_VERSION,
908                 "copyright", "(C) 1997-2009 The GTK+ Team",
909                 "website", "http://www.gtk.org",
910                 "comments", "Program to demonstrate GTK+ functions.",
911                 "logo-icon-name", "help-about",
912                 "title", "About GTK+ Code Demos",
913                 "authors", authors,
914                 NULL);
915   gtk_window_set_icon_name (GTK_WINDOW (widget), "help-about");
916   return new_widget_info ("aboutdialog", widget, ASIS);
917 }
918
919 static WidgetInfo *
920 create_notebook (void)
921 {
922   GtkWidget *widget;
923
924   widget = gtk_notebook_new ();
925
926   gtk_notebook_append_page (GTK_NOTEBOOK (widget), 
927                             gtk_label_new ("Notebook"),
928                             NULL);
929   gtk_notebook_append_page (GTK_NOTEBOOK (widget), gtk_event_box_new (), NULL);
930   gtk_notebook_append_page (GTK_NOTEBOOK (widget), gtk_event_box_new (), NULL);
931
932   return new_widget_info ("notebook", widget, MEDIUM);
933 }
934
935 static WidgetInfo *
936 create_progressbar (void)
937 {
938   GtkWidget *vbox;
939   GtkWidget *widget;
940   GtkWidget *align;
941
942   widget = gtk_progress_bar_new ();
943   gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (widget), 0.5);
944
945   vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 3);
946   align = gtk_alignment_new (0.5, 0.5, 0.0, 0.0);
947   gtk_container_add (GTK_CONTAINER (align), widget);
948   gtk_box_pack_start (GTK_BOX (vbox), align, FALSE, FALSE, 0);
949   gtk_box_pack_start (GTK_BOX (vbox),
950                       gtk_label_new ("Progress Bar"),
951                       FALSE, FALSE, 0);
952
953   return new_widget_info ("progressbar", vbox, SMALL);
954 }
955
956 static WidgetInfo *
957 create_scrolledwindow (void)
958 {
959   GtkWidget *scrolledwin, *label;
960
961   scrolledwin = gtk_scrolled_window_new (NULL, NULL);
962   label = gtk_label_new ("Scrolled Window");
963
964   gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scrolledwin), 
965                                          label);
966
967   return new_widget_info ("scrolledwindow", scrolledwin, MEDIUM);
968 }
969
970 static WidgetInfo *
971 create_spinbutton (void)
972 {
973   GtkWidget *widget;
974   GtkWidget *vbox, *align;
975
976   widget = gtk_spin_button_new_with_range (0.0, 100.0, 1.0);
977
978   vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 3);
979   align = gtk_alignment_new (0.5, 0.5, 0.0, 0.0);
980   gtk_container_add (GTK_CONTAINER (align), widget);
981   gtk_box_pack_start (GTK_BOX (vbox), align, FALSE, FALSE, 0);
982   gtk_box_pack_start (GTK_BOX (vbox),
983                       gtk_label_new ("Spin Button"),
984                       FALSE, FALSE, 0);
985
986   return new_widget_info ("spinbutton", vbox, SMALL);
987 }
988
989 static WidgetInfo *
990 create_statusbar (void)
991 {
992   WidgetInfo *info;
993   GtkWidget *widget;
994   GtkWidget *vbox, *align;
995
996   vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
997   align = gtk_alignment_new (0.5, 0.5, 0.0, 0.0);
998   gtk_container_add (GTK_CONTAINER (align), gtk_label_new ("Status Bar"));
999   gtk_box_pack_start (GTK_BOX (vbox),
1000                       align,
1001                       TRUE, TRUE, 0);
1002   widget = gtk_statusbar_new ();
1003   align = gtk_alignment_new (0.5, 1.0, 1.0, 0.0);
1004   gtk_container_add (GTK_CONTAINER (align), widget);
1005   gtk_statusbar_push (GTK_STATUSBAR (widget), 0, "Hold on...");
1006
1007   gtk_box_pack_end (GTK_BOX (vbox), align, FALSE, FALSE, 0);
1008
1009   info = new_widget_info ("statusbar", vbox, SMALL);
1010   gtk_container_set_border_width (GTK_CONTAINER (info->window), 0);
1011
1012   return info;
1013 }
1014
1015 static WidgetInfo *
1016 create_scales (void)
1017 {
1018   GtkWidget *hbox;
1019   GtkWidget *vbox;
1020
1021   vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 3);
1022   hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
1023   gtk_box_set_homogeneous (GTK_BOX (hbox), TRUE);
1024   gtk_box_pack_start (GTK_BOX (hbox),
1025                       gtk_scale_new_with_range (GTK_ORIENTATION_HORIZONTAL,
1026                                                 0.0, 100.0, 1.0),
1027                       TRUE, TRUE, 0);
1028   gtk_box_pack_start (GTK_BOX (hbox),
1029                       gtk_scale_new_with_range (GTK_ORIENTATION_VERTICAL,
1030                                                 0.0, 100.0, 1.0),
1031                       TRUE, TRUE, 0);
1032   gtk_box_pack_start (GTK_BOX (vbox), hbox, TRUE, TRUE, 0);
1033   gtk_box_pack_start (GTK_BOX (vbox),
1034                       g_object_new (GTK_TYPE_LABEL,
1035                                     "label", "Horizontal and Vertical\nScales",
1036                                     "justify", GTK_JUSTIFY_CENTER,
1037                                     NULL),
1038                       FALSE, FALSE, 0);
1039   return new_widget_info ("scales", vbox, MEDIUM);}
1040
1041 static WidgetInfo *
1042 create_image (void)
1043 {
1044   GtkWidget *widget;
1045   GtkWidget *align, *vbox;
1046
1047   widget = gtk_image_new_from_stock (GTK_STOCK_DIALOG_WARNING, 
1048                                      GTK_ICON_SIZE_DND);
1049
1050   vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 3);
1051   align = gtk_alignment_new (0.5, 0.5, 0.0, 0.0);
1052   gtk_container_add (GTK_CONTAINER (align), widget);
1053   gtk_box_pack_start (GTK_BOX (vbox), align, FALSE, FALSE, 0);
1054   gtk_box_pack_start (GTK_BOX (vbox),
1055                       gtk_label_new ("Image"),
1056                       FALSE, FALSE, 0);
1057
1058   return new_widget_info ("image", vbox, SMALL);
1059 }
1060
1061 static WidgetInfo *
1062 create_spinner (void)
1063 {
1064   GtkWidget *widget;
1065   GtkWidget *align, *vbox;
1066
1067   widget = gtk_spinner_new ();
1068   gtk_widget_set_size_request (widget, 24, 24);
1069
1070   vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 3);
1071   align = gtk_alignment_new (0.5, 0.5, 0.0, 0.0);
1072   gtk_container_add (GTK_CONTAINER (align), widget);
1073   gtk_box_pack_start (GTK_BOX (vbox), align, FALSE, FALSE, 0);
1074   gtk_box_pack_start (GTK_BOX (vbox),
1075                       gtk_label_new ("Spinner"),
1076                       FALSE, FALSE, 0);
1077
1078   return new_widget_info ("spinner", vbox, SMALL);
1079 }
1080
1081 static WidgetInfo *
1082 create_volume_button (void)
1083 {
1084   GtkWidget *button, *widget;
1085   GtkWidget *plus_button;
1086
1087   button = gtk_volume_button_new ();
1088   gtk_scale_button_set_value (GTK_SCALE_BUTTON (button), 33);
1089   /* Hack: get the private dock */
1090   plus_button = gtk_scale_button_get_plus_button (GTK_SCALE_BUTTON (button));
1091   widget = gtk_widget_get_parent (gtk_widget_get_parent (gtk_widget_get_parent (plus_button)));
1092   gtk_widget_show_all (widget);
1093   return new_widget_info ("volumebutton", widget, ASIS);
1094 }
1095
1096 static WidgetInfo *
1097 create_assistant (void)
1098 {
1099   GtkWidget *widget;
1100   GtkWidget *page1, *page2;
1101   WidgetInfo *info;
1102
1103   widget = gtk_assistant_new ();
1104   gtk_window_set_title (GTK_WINDOW (widget), "Assistant");
1105
1106   page1 = gtk_label_new ("Assistant");
1107   gtk_widget_show (page1);
1108   gtk_widget_set_size_request (page1, 300, 140);
1109   gtk_assistant_prepend_page (GTK_ASSISTANT (widget), page1);
1110   gtk_assistant_set_page_title (GTK_ASSISTANT (widget), page1, "Assistant page");
1111   gtk_assistant_set_page_complete (GTK_ASSISTANT (widget), page1, TRUE);
1112
1113   page2 = gtk_label_new (NULL);
1114   gtk_widget_show (page2);
1115   gtk_assistant_append_page (GTK_ASSISTANT (widget), page2);
1116   gtk_assistant_set_page_type (GTK_ASSISTANT (widget), page2, GTK_ASSISTANT_PAGE_CONFIRM);
1117
1118   info = new_widget_info ("assistant", widget, ASIS);
1119   info->include_decorations = TRUE;
1120
1121   return info;
1122 }
1123
1124 static WidgetInfo *
1125 create_appchooserbutton (void)
1126 {
1127   GtkWidget *picker;
1128   GtkWidget *align, *vbox;
1129
1130   vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 3);
1131   align = gtk_alignment_new (0.5, 0.5, 0.0, 0.0);
1132   picker = gtk_app_chooser_button_new ("text/plain");
1133   gtk_container_add (GTK_CONTAINER (align), picker);
1134   gtk_box_pack_start (GTK_BOX (vbox), align, FALSE, FALSE, 0);
1135   gtk_box_pack_start (GTK_BOX (vbox),
1136                       gtk_label_new ("Application Button"),
1137                       FALSE, FALSE, 0);
1138
1139   return new_widget_info ("appchooserbutton", vbox, SMALL);
1140 }
1141
1142 static WidgetInfo *
1143 create_appchooserdialog (void)
1144 {
1145   WidgetInfo *info;
1146   GtkWidget *widget;
1147
1148   widget = gtk_app_chooser_dialog_new_for_content_type (NULL, 0, "image/png");
1149   gtk_window_set_default_size (GTK_WINDOW (widget), 200, 300);
1150
1151   info = new_widget_info ("appchooserdialog", widget, ASIS);
1152   info->include_decorations = TRUE;
1153
1154   return info;
1155 }
1156
1157 static WidgetInfo *
1158 create_fontchooserdialog (void)
1159 {
1160   WidgetInfo *info;
1161   GtkWidget *widget;
1162
1163   widget = gtk_font_chooser_dialog_new ("Font Chooser Dialog", NULL);
1164   gtk_window_set_default_size (GTK_WINDOW (widget), 200, 300);
1165   info = new_widget_info ("fontchooser", widget, ASIS);
1166   info->include_decorations = TRUE;
1167
1168   return info;
1169 }
1170
1171 static WidgetInfo *
1172 create_colorchooserdialog (void)
1173 {
1174   WidgetInfo *info;
1175   GtkWidget *widget;
1176
1177   widget = gtk_color_chooser_dialog_new ("Color Chooser Dialog", NULL);
1178   info = new_widget_info ("colorchooser", widget, ASIS);
1179   info->include_decorations = TRUE;
1180
1181   return info;
1182 }
1183
1184 GList *
1185 get_all_widgets (void)
1186 {
1187   GList *retval = NULL;
1188
1189   retval = g_list_prepend (retval, create_toolpalette ());
1190   retval = g_list_prepend (retval, create_spinner ());
1191   retval = g_list_prepend (retval, create_about_dialog ());
1192   retval = g_list_prepend (retval, create_accel_label ());
1193   retval = g_list_prepend (retval, create_button ());
1194   retval = g_list_prepend (retval, create_check_button ());
1195   retval = g_list_prepend (retval, create_color_button ());
1196   retval = g_list_prepend (retval, create_combo_box ());
1197   retval = g_list_prepend (retval, create_combo_box_entry ());
1198   retval = g_list_prepend (retval, create_entry ());
1199   retval = g_list_prepend (retval, create_file_button ());
1200   retval = g_list_prepend (retval, create_font_button ());
1201   retval = g_list_prepend (retval, create_frame ());
1202   retval = g_list_prepend (retval, create_icon_view ());
1203   retval = g_list_prepend (retval, create_image ());
1204   retval = g_list_prepend (retval, create_label ());
1205   retval = g_list_prepend (retval, create_link_button ());
1206   retval = g_list_prepend (retval, create_menubar ());
1207   retval = g_list_prepend (retval, create_message_dialog ());
1208   retval = g_list_prepend (retval, create_notebook ());
1209   retval = g_list_prepend (retval, create_panes ());
1210   retval = g_list_prepend (retval, create_progressbar ());
1211   retval = g_list_prepend (retval, create_radio ());
1212   retval = g_list_prepend (retval, create_scales ());
1213   retval = g_list_prepend (retval, create_scrolledwindow ());
1214   retval = g_list_prepend (retval, create_separator ());
1215   retval = g_list_prepend (retval, create_spinbutton ());
1216   retval = g_list_prepend (retval, create_statusbar ());
1217   retval = g_list_prepend (retval, create_text_view ());
1218   retval = g_list_prepend (retval, create_toggle_button ());
1219   retval = g_list_prepend (retval, create_toolbar ());
1220   retval = g_list_prepend (retval, create_tree_view ());
1221   retval = g_list_prepend (retval, create_window ());
1222   retval = g_list_prepend (retval, create_colorsel ());
1223   retval = g_list_prepend (retval, create_filesel ());
1224   retval = g_list_prepend (retval, create_fontsel ());
1225   retval = g_list_prepend (retval, create_assistant ());
1226   retval = g_list_prepend (retval, create_recent_chooser_dialog ());
1227   retval = g_list_prepend (retval, create_page_setup_dialog ());
1228   retval = g_list_prepend (retval, create_print_dialog ());
1229   retval = g_list_prepend (retval, create_volume_button ());
1230   retval = g_list_prepend (retval, create_switch ());
1231   retval = g_list_prepend (retval, create_appchooserbutton ());
1232   retval = g_list_prepend (retval, create_appchooserdialog ());
1233   retval = g_list_prepend (retval, create_lockbutton ());
1234   retval = g_list_prepend (retval, create_fontchooserdialog ());
1235   retval = g_list_prepend (retval, create_colorchooserdialog ());
1236
1237   return retval;
1238 }