]> Pileus Git - ~andy/gtk/blob - tests/testtreefocus.c
123a88b376601aaaf24da79da9a9a9e17030f70f
[~andy/gtk] / tests / testtreefocus.c
1 #include <config.h>
2 #include <gtk/gtk.h>
3
4 typedef struct _TreeStruct TreeStruct;
5 struct _TreeStruct
6 {
7   const gchar *label;
8   gboolean alex;
9   gboolean havoc;
10   gboolean tim;
11   gboolean owen;
12   gboolean dave;
13   gboolean world_holiday; /* shared by the european hackers */
14   TreeStruct *children;
15 };
16
17
18 static TreeStruct january[] =
19 {
20   {"New Years Day", TRUE, TRUE, TRUE, TRUE, FALSE, TRUE, NULL },
21   {"Presidential Inauguration", FALSE, TRUE, FALSE, TRUE, FALSE, FALSE, NULL },
22   {"Martin Luther King Jr. day", FALSE, TRUE, FALSE, TRUE, FALSE, FALSE, NULL },
23   { NULL }
24 };
25
26 static TreeStruct february[] =
27 {
28   { "Presidents' Day", FALSE, TRUE, FALSE, TRUE, FALSE, FALSE, NULL },
29   { "Groundhog Day", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
30   { "Valentine's Day", FALSE, FALSE, FALSE, FALSE, TRUE, TRUE, NULL },
31   { NULL }
32 };
33
34 static TreeStruct march[] =
35 {
36   { "National Tree Planting Day", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
37   { "St Patrick's Day", FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, NULL },
38   { NULL }
39 };
40
41 static TreeStruct april[] =
42 {
43   { "April Fools' Day", FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, NULL },
44   { "Army Day", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
45   { "Earth Day", FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, NULL },
46   { "Administrative Professionals' Day", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
47   { NULL }
48 };
49
50 static TreeStruct may[] =
51 {
52   { "Nurses' Day", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
53   { "National Day of Prayer", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
54   { "Mothers' Day", FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, NULL },
55   { "Armed Forces Day", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
56   { "Memorial Day", TRUE, TRUE, TRUE, TRUE, FALSE, TRUE, NULL },
57   { NULL }
58 };
59
60 static TreeStruct june[] =
61 {
62   { "June Fathers' Day", FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, NULL },
63   { "Juneteenth (Liberation of Slaves)", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
64   { "Flag Day", FALSE, TRUE, FALSE, TRUE, FALSE, FALSE, NULL },
65   { NULL }
66 };
67
68 static TreeStruct july[] =
69 {
70   { "Parents' Day", FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, NULL },
71   { "Independence Day", FALSE, TRUE, FALSE, TRUE, FALSE, FALSE, NULL },
72   { NULL }
73 };
74
75 static TreeStruct august[] =
76 {
77   { "Air Force Day", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
78   { "Coast Guard Day", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
79   { "Friendship Day", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
80   { NULL }
81 };
82
83 static TreeStruct september[] =
84 {
85   { "Grandparents' Day", FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, NULL },
86   { "Citizenship Day or Constitution Day", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
87   { "Labor Day", TRUE, TRUE, TRUE, TRUE, FALSE, TRUE, NULL },
88   { NULL }
89 };
90
91 static TreeStruct october[] =
92 {
93   { "National Children's Day", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
94   { "Bosses' Day", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
95   { "Sweetest Day", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
96   { "Mother-in-Law's Day", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
97   { "Navy Day", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
98   { "Columbus Day", FALSE, TRUE, FALSE, TRUE, FALSE, FALSE, NULL },
99   { "Halloween", FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, NULL },
100   { NULL }
101 };
102
103 static TreeStruct november[] =
104 {
105   { "Marine Corps Day", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
106   { "Veterans' Day", TRUE, TRUE, TRUE, TRUE, FALSE, TRUE, NULL },
107   { "Thanksgiving", FALSE, TRUE, FALSE, TRUE, FALSE, FALSE, NULL },
108   { NULL }
109 };
110
111 static TreeStruct december[] =
112 {
113   { "Pearl Harbor Remembrance Day", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
114   { "Christmas", TRUE, TRUE, TRUE, TRUE, FALSE, TRUE, NULL },
115   { "Kwanzaa", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
116   { NULL }
117 };
118
119
120 static TreeStruct toplevel[] =
121 {
122   {"January", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, january},
123   {"February", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, february},
124   {"March", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, march},
125   {"April", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, april},
126   {"May", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, may},
127   {"June", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, june},
128   {"July", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, july},
129   {"August", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, august},
130   {"September", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, september},
131   {"October", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, october},
132   {"November", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, november},
133   {"December", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, december},
134   {NULL}
135 };
136
137
138 enum
139 {
140   HOLIDAY_COLUMN = 0,
141   ALEX_COLUMN,
142   HAVOC_COLUMN,
143   TIM_COLUMN,
144   OWEN_COLUMN,
145   DAVE_COLUMN,
146   VISIBLE_COLUMN,
147   WORLD_COLUMN,
148   NUM_COLUMNS
149 };
150
151 static GtkTreeModel *
152 make_model (void)
153 {
154   GtkTreeStore *model;
155   TreeStruct *month = toplevel;
156   GtkTreeIter iter;
157
158   model = gtk_tree_store_new (NUM_COLUMNS,
159                               G_TYPE_STRING,
160                               G_TYPE_BOOLEAN,
161                               G_TYPE_BOOLEAN,
162                               G_TYPE_BOOLEAN,
163                               G_TYPE_BOOLEAN,
164                               G_TYPE_BOOLEAN,
165                               G_TYPE_BOOLEAN,
166                               G_TYPE_BOOLEAN);
167
168   while (month->label)
169     {
170       TreeStruct *holiday = month->children;
171
172       gtk_tree_store_append (model, &iter, NULL);
173       gtk_tree_store_set (model, &iter,
174                           HOLIDAY_COLUMN, month->label,
175                           ALEX_COLUMN, FALSE,
176                           HAVOC_COLUMN, FALSE,
177                           TIM_COLUMN, FALSE,
178                           OWEN_COLUMN, FALSE,
179                           DAVE_COLUMN, FALSE,
180                           VISIBLE_COLUMN, FALSE,
181                           WORLD_COLUMN, FALSE,
182                           -1);
183       while (holiday->label)
184         {
185           GtkTreeIter child_iter;
186
187           gtk_tree_store_append (model, &child_iter, &iter);
188           gtk_tree_store_set (model, &child_iter,
189                               HOLIDAY_COLUMN, holiday->label,
190                               ALEX_COLUMN, holiday->alex,
191                               HAVOC_COLUMN, holiday->havoc,
192                               TIM_COLUMN, holiday->tim,
193                               OWEN_COLUMN, holiday->owen,
194                               DAVE_COLUMN, holiday->dave,
195                               VISIBLE_COLUMN, TRUE,
196                               WORLD_COLUMN, holiday->world_holiday,
197                               -1);
198
199           holiday ++;
200         }
201       month ++;
202     }
203
204   return GTK_TREE_MODEL (model);
205 }
206
207 static void
208 alex_toggled (GtkCellRendererToggle *cell,
209               gchar                 *path_str,
210               gpointer               data)
211 {
212   GtkTreeModel *model = (GtkTreeModel *) data;
213   GtkTreeIter iter;
214   GtkTreePath *path = gtk_tree_path_new_from_string (path_str);
215   gboolean alex;
216
217   gtk_tree_model_get_iter (model, &iter, path);
218   gtk_tree_model_get (model, &iter, ALEX_COLUMN, &alex, -1);
219
220   alex = !alex;
221   gtk_tree_store_set (GTK_TREE_STORE (model), &iter, ALEX_COLUMN, alex, -1);
222
223   gtk_tree_path_free (path);
224 }
225
226 static void
227 havoc_toggled (GtkCellRendererToggle *cell,
228                gchar                 *path_str,
229                gpointer               data)
230 {
231   GtkTreeModel *model = (GtkTreeModel *) data;
232   GtkTreeIter iter;
233   GtkTreePath *path = gtk_tree_path_new_from_string (path_str);
234   gboolean havoc;
235
236   gtk_tree_model_get_iter (model, &iter, path);
237   gtk_tree_model_get (model, &iter, HAVOC_COLUMN, &havoc, -1);
238
239   havoc = !havoc;
240   gtk_tree_store_set (GTK_TREE_STORE (model), &iter, HAVOC_COLUMN, havoc, -1);
241
242   gtk_tree_path_free (path);
243 }
244
245 static void
246 owen_toggled (GtkCellRendererToggle *cell,
247               gchar                 *path_str,
248               gpointer               data)
249 {
250   GtkTreeModel *model = (GtkTreeModel *) data;
251   GtkTreeIter iter;
252   GtkTreePath *path = gtk_tree_path_new_from_string (path_str);
253   gboolean owen;
254
255   gtk_tree_model_get_iter (model, &iter, path);
256   gtk_tree_model_get (model, &iter, OWEN_COLUMN, &owen, -1);
257
258   owen = !owen;
259   gtk_tree_store_set (GTK_TREE_STORE (model), &iter, OWEN_COLUMN, owen, -1);
260
261   gtk_tree_path_free (path);
262 }
263
264 static void
265 tim_toggled (GtkCellRendererToggle *cell,
266              gchar                 *path_str,
267              gpointer               data)
268 {
269   GtkTreeModel *model = (GtkTreeModel *) data;
270   GtkTreeIter iter;
271   GtkTreePath *path = gtk_tree_path_new_from_string (path_str);
272   gboolean tim;
273
274   gtk_tree_model_get_iter (model, &iter, path);
275   gtk_tree_model_get (model, &iter, TIM_COLUMN, &tim, -1);
276
277   tim = !tim;
278   gtk_tree_store_set (GTK_TREE_STORE (model), &iter, TIM_COLUMN, tim, -1);
279
280   gtk_tree_path_free (path);
281 }
282
283 static void
284 dave_toggled (GtkCellRendererToggle *cell,
285               gchar                 *path_str,
286               gpointer               data)
287 {
288   GtkTreeModel *model = (GtkTreeModel *) data;
289   GtkTreeIter iter;
290   GtkTreePath *path = gtk_tree_path_new_from_string (path_str);
291   gboolean dave;
292
293   gtk_tree_model_get_iter (model, &iter, path);
294   gtk_tree_model_get (model, &iter, DAVE_COLUMN, &dave, -1);
295
296   dave = !dave;
297   gtk_tree_store_set (GTK_TREE_STORE (model), &iter, DAVE_COLUMN, dave, -1);
298
299   gtk_tree_path_free (path);
300 }
301
302 int
303 main (int argc, char *argv[])
304 {
305   GtkWidget *window;
306   GtkWidget *vbox;
307   GtkWidget *scrolled_window;
308   GtkWidget *tree_view;
309   GtkTreeModel *model;
310   GtkCellRenderer *renderer;
311   gint col_offset;
312   GtkTreeViewColumn *column;
313
314   gtk_init (&argc, &argv);
315
316   window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
317   gtk_window_set_title (GTK_WINDOW (window), "Card planning sheet");
318   g_signal_connect (window, "destroy", gtk_main_quit, NULL);
319   vbox = gtk_vbox_new (FALSE, 8);
320   gtk_container_set_border_width (GTK_CONTAINER (vbox), 8);
321   gtk_box_pack_start (GTK_BOX (vbox), gtk_label_new ("Jonathan's Holiday Card Planning Sheet"), FALSE, FALSE, 0);
322   gtk_container_add (GTK_CONTAINER (window), vbox);
323
324   scrolled_window = gtk_scrolled_window_new (NULL, NULL);
325   gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolled_window), GTK_SHADOW_ETCHED_IN);
326   gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
327   gtk_box_pack_start (GTK_BOX (vbox), scrolled_window, TRUE, TRUE, 0);
328
329   model = make_model ();
330   tree_view = gtk_tree_view_new_with_model (model);
331   gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (tree_view), TRUE);
332   gtk_tree_selection_set_mode (gtk_tree_view_get_selection (GTK_TREE_VIEW (tree_view)),
333                                GTK_SELECTION_MULTIPLE);
334   renderer = gtk_cell_renderer_text_new ();
335   col_offset = gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
336                                                             -1, "Holiday",
337                                                             renderer,
338                                                             "text", HOLIDAY_COLUMN, NULL);
339   column = gtk_tree_view_get_column (GTK_TREE_VIEW (tree_view), col_offset - 1);
340   gtk_tree_view_column_set_clickable (GTK_TREE_VIEW_COLUMN (column), TRUE);
341
342   /* Alex Column */
343   renderer = gtk_cell_renderer_toggle_new ();
344   g_signal_connect (renderer, "toggled", G_CALLBACK (alex_toggled), model);
345
346   g_object_set (renderer, "xalign", 0.0, NULL);
347   col_offset = gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
348                                                             -1, "Alex",
349                                                             renderer,
350                                                             "active", ALEX_COLUMN,
351                                                             "visible", VISIBLE_COLUMN,
352                                                             "activatable", WORLD_COLUMN,
353                                                             NULL);
354   column = gtk_tree_view_get_column (GTK_TREE_VIEW (tree_view), col_offset - 1);
355   gtk_tree_view_column_set_sizing (GTK_TREE_VIEW_COLUMN (column), GTK_TREE_VIEW_COLUMN_FIXED);
356   gtk_tree_view_column_set_fixed_width (GTK_TREE_VIEW_COLUMN (column), 50);
357   gtk_tree_view_column_set_clickable (GTK_TREE_VIEW_COLUMN (column), TRUE);
358
359   /* Havoc Column */
360   renderer = gtk_cell_renderer_toggle_new ();
361   g_signal_connect (renderer, "toggled", G_CALLBACK (havoc_toggled), model);
362
363   g_object_set (renderer, "xalign", 0.0, NULL);
364   col_offset = gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
365                                                             -1, "Havoc",
366                                                             renderer,
367                                                             "active", HAVOC_COLUMN,
368                                                             "visible", VISIBLE_COLUMN,
369                                                             NULL);
370   column = gtk_tree_view_get_column (GTK_TREE_VIEW (tree_view), col_offset - 1);
371   gtk_tree_view_column_set_sizing (GTK_TREE_VIEW_COLUMN (column), GTK_TREE_VIEW_COLUMN_FIXED);
372   gtk_tree_view_column_set_fixed_width (GTK_TREE_VIEW_COLUMN (column), 50);
373   gtk_tree_view_column_set_clickable (GTK_TREE_VIEW_COLUMN (column), TRUE);
374
375   /* Tim Column */
376   renderer = gtk_cell_renderer_toggle_new ();
377   g_signal_connect (renderer, "toggled", G_CALLBACK (tim_toggled), model);
378
379   g_object_set (renderer, "xalign", 0.0, NULL);
380   col_offset = gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
381                                                -1, "Tim",
382                                                renderer,
383                                                "active", TIM_COLUMN,
384                                                "visible", VISIBLE_COLUMN,
385                                                "activatable", WORLD_COLUMN,
386                                                NULL);
387   column = gtk_tree_view_get_column (GTK_TREE_VIEW (tree_view), col_offset - 1);
388   gtk_tree_view_column_set_sizing (GTK_TREE_VIEW_COLUMN (column), GTK_TREE_VIEW_COLUMN_FIXED);
389   gtk_tree_view_column_set_clickable (GTK_TREE_VIEW_COLUMN (column), TRUE);
390   gtk_tree_view_column_set_fixed_width (GTK_TREE_VIEW_COLUMN (column), 50);
391
392   /* Owen Column */
393   renderer = gtk_cell_renderer_toggle_new ();
394   g_signal_connect (renderer, "toggled", G_CALLBACK (owen_toggled), model);
395   g_object_set (renderer, "xalign", 0.0, NULL);
396   col_offset = gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
397                                                -1, "Owen",
398                                                renderer,
399                                                "active", OWEN_COLUMN,
400                                                "visible", VISIBLE_COLUMN,
401                                                NULL);
402   column = gtk_tree_view_get_column (GTK_TREE_VIEW (tree_view), col_offset - 1);
403   gtk_tree_view_column_set_sizing (GTK_TREE_VIEW_COLUMN (column), GTK_TREE_VIEW_COLUMN_FIXED);
404   gtk_tree_view_column_set_clickable (GTK_TREE_VIEW_COLUMN (column), TRUE);
405   gtk_tree_view_column_set_fixed_width (GTK_TREE_VIEW_COLUMN (column), 50);
406
407   /* Owen Column */
408   renderer = gtk_cell_renderer_toggle_new ();
409   g_signal_connect (renderer, "toggled", G_CALLBACK (dave_toggled), model);
410   g_object_set (renderer, "xalign", 0.0, NULL);
411   col_offset = gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
412                                                -1, "Dave",
413                                                renderer,
414                                                "active", DAVE_COLUMN,
415                                                "visible", VISIBLE_COLUMN,
416                                                NULL);
417   column = gtk_tree_view_get_column (GTK_TREE_VIEW (tree_view), col_offset - 1);
418   gtk_tree_view_column_set_sizing (GTK_TREE_VIEW_COLUMN (column), GTK_TREE_VIEW_COLUMN_FIXED);
419   gtk_tree_view_column_set_fixed_width (GTK_TREE_VIEW_COLUMN (column), 50);
420   gtk_tree_view_column_set_clickable (GTK_TREE_VIEW_COLUMN (column), TRUE);
421
422   gtk_container_add (GTK_CONTAINER (scrolled_window), tree_view);
423
424   g_signal_connect (tree_view, "realize",
425                     G_CALLBACK (gtk_tree_view_expand_all),
426                     NULL);
427   gtk_window_set_default_size (GTK_WINDOW (window),
428                                650, 400);
429   gtk_widget_show_all (window);
430
431   window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
432   gtk_window_set_title (GTK_WINDOW (window), "Model");
433   g_signal_connect (window, "destroy", gtk_main_quit, NULL);
434   vbox = gtk_vbox_new (FALSE, 8);
435   gtk_container_set_border_width (GTK_CONTAINER (vbox), 8);
436   gtk_box_pack_start (GTK_BOX (vbox), gtk_label_new ("The model revealed"), FALSE, FALSE, 0);
437   gtk_container_add (GTK_CONTAINER (window), vbox);
438
439   scrolled_window = gtk_scrolled_window_new (NULL, NULL);
440   gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolled_window), GTK_SHADOW_ETCHED_IN);
441   gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
442   gtk_box_pack_start (GTK_BOX (vbox), scrolled_window, TRUE, TRUE, 0);
443
444
445   tree_view = gtk_tree_view_new_with_model (model);
446   g_object_unref (model);
447   gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (tree_view), TRUE);
448
449   gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
450                                                -1, "Holiday Column",
451                                                gtk_cell_renderer_text_new (),
452                                                "text", 0, NULL);
453
454   gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
455                                                -1, "Alex Column",
456                                                gtk_cell_renderer_text_new (),
457                                                "text", 1, NULL);
458
459   gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
460                                                -1, "Havoc Column",
461                                                gtk_cell_renderer_text_new (),
462                                                "text", 2, NULL);
463
464   gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
465                                                -1, "Tim Column",
466                                                gtk_cell_renderer_text_new (),
467                                                "text", 3, NULL);
468
469   gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
470                                                -1, "Owen Column",
471                                                gtk_cell_renderer_text_new (),
472                                                "text", 4, NULL);
473
474   gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
475                                                -1, "Dave Column",
476                                                gtk_cell_renderer_text_new (),
477                                                "text", 5, NULL);
478
479   gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
480                                                -1, "Visible Column",
481                                                gtk_cell_renderer_text_new (),
482                                                "text", 6, NULL);
483
484   gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
485                                                -1, "World Holiday",
486                                                gtk_cell_renderer_text_new (),
487                                                "text", 7, NULL);
488
489   g_signal_connect (tree_view, "realize",
490                     G_CALLBACK (gtk_tree_view_expand_all),
491                     NULL);
492                            
493   gtk_container_add (GTK_CONTAINER (scrolled_window), tree_view);
494
495
496   gtk_window_set_default_size (GTK_WINDOW (window),
497                                650, 400);
498
499   gtk_widget_show_all (window);
500   gtk_main ();
501
502   return 0;
503 }
504