]> Pileus Git - ~andy/gtk/blob - tests/testsocket_common.c
Fix many sparse warnings.
[~andy/gtk] / tests / testsocket_common.c
1 #undef GTK_DISABLE_DEPRECATED
2
3 #include <config.h>
4 #include "x11/gdkx.h"
5 #include <gtk/gtk.h>
6
7 enum
8 {
9   ACTION_FILE_NEW,
10   ACTION_FILE_OPEN,
11   ACTION_OK,
12   ACTION_HELP_ABOUT
13 };
14
15 static void
16 print_hello (GtkWidget *w,
17              guint      action)
18 {
19   switch (action)
20     {
21     case ACTION_FILE_NEW:
22       g_message ("File New activated");
23       break;
24     case ACTION_FILE_OPEN:
25       g_message ("File Open activated");
26       break;
27     case ACTION_OK:
28       g_message ("OK activated");
29       break;
30     case ACTION_HELP_ABOUT:
31       g_message ("Help About activated ");
32       break;
33     default:
34       g_assert_not_reached ();
35       break;
36     }
37 }
38
39 static GtkItemFactoryEntry menu_items[] = {
40   { "/_File",         NULL,         NULL,           0, "<Branch>" },
41   { "/File/_New",     "<control>N", print_hello,    ACTION_FILE_NEW, "<Item>" },
42   { "/File/_Open",    "<control>O", print_hello,    ACTION_FILE_OPEN, "<Item>" },
43   { "/File/sep1",     NULL,         NULL,           0, "<Separator>" },
44   { "/File/Quit",     "<control>Q", gtk_main_quit,  0, "<Item>" },
45   { "/O_K",            "<control>K",print_hello,    ACTION_OK, "<Item>" },
46   { "/_Help",         NULL,         NULL,           0, "<LastBranch>" },
47   { "/_Help/About",   NULL,         print_hello,    ACTION_HELP_ABOUT, "<Item>" },
48 };
49
50 static void
51 remove_buttons (GtkWidget *widget, GtkWidget *other_button)
52 {
53   gtk_widget_destroy (other_button);
54   gtk_widget_destroy (widget);
55 }
56
57 static gboolean
58 blink_cb (gpointer data)
59 {
60   GtkWidget *widget = data;
61
62   gtk_widget_show (widget);
63   g_object_set_data (G_OBJECT (widget), "blink", NULL);
64
65   return FALSE;
66 }
67
68 static void
69 blink (GtkWidget *widget,
70        GtkWidget *window)
71 {
72   guint blink_timeout = GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (window), "blink"));
73   
74   if (!blink_timeout)
75     {
76       blink_timeout = g_timeout_add (1000, blink_cb, window);
77       gtk_widget_hide (window);
78
79       g_object_set_data (G_OBJECT (window), "blink", GUINT_TO_POINTER (blink_timeout));
80     }
81 }
82
83 static void
84 local_destroy (GtkWidget *window)
85 {
86   guint blink_timeout = GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (window), "blink"));
87   if (blink_timeout)
88     g_source_remove (blink_timeout);
89 }
90
91 static void
92 remote_destroy (GtkWidget *window)
93 {
94   local_destroy (window);
95   gtk_main_quit ();
96 }
97
98 static void
99 add_buttons (GtkWidget *widget, GtkWidget *box)
100 {
101   GtkWidget *add_button;
102   GtkWidget *remove_button;
103
104   add_button = gtk_button_new_with_mnemonic ("_Add");
105   gtk_box_pack_start (GTK_BOX (box), add_button, TRUE, TRUE, 0);
106   gtk_widget_show (add_button);
107
108   g_signal_connect (add_button, "clicked",
109                     G_CALLBACK (add_buttons),
110                     box);
111
112   remove_button = gtk_button_new_with_mnemonic ("_Remove");
113   gtk_box_pack_start (GTK_BOX (box), remove_button, TRUE, TRUE, 0);
114   gtk_widget_show (remove_button);
115
116   g_signal_connect (remove_button, "clicked",
117                     G_CALLBACK (remove_buttons),
118                     add_button);
119 }
120
121 static GtkWidget *
122 create_combo (void)
123 {
124   GList *cbitems;
125   GtkCombo *combo;
126
127   cbitems = NULL;
128   cbitems = g_list_append (cbitems, "item0");
129   cbitems = g_list_append (cbitems, "item1 item1");
130   cbitems = g_list_append (cbitems, "item2 item2 item2");
131   cbitems = g_list_append (cbitems, "item3 item3 item3 item3");
132   cbitems = g_list_append (cbitems, "item4 item4 item4 item4 item4");
133   cbitems = g_list_append (cbitems, "item5 item5 item5 item5 item5 item5");
134   cbitems = g_list_append (cbitems, "item6 item6 item6 item6 item6");
135   cbitems = g_list_append (cbitems, "item7 item7 item7 item7");
136   cbitems = g_list_append (cbitems, "item8 item8 item8");
137   cbitems = g_list_append (cbitems, "item9 item9");
138
139   combo = GTK_COMBO (gtk_combo_new ());
140   gtk_combo_set_popdown_strings (combo, cbitems);
141   gtk_entry_set_text (GTK_ENTRY (combo->entry), "hello world");
142   gtk_editable_select_region (GTK_EDITABLE (combo->entry), 0, -1);
143
144   return GTK_WIDGET (combo);
145 }
146
147 static GtkWidget *
148 create_menubar (GtkWindow *window)
149 {
150   GtkItemFactory *item_factory;
151   GtkAccelGroup *accel_group=NULL;
152   GtkWidget *menubar;
153   
154   accel_group = gtk_accel_group_new ();
155   item_factory = gtk_item_factory_new (GTK_TYPE_MENU_BAR, "<main>",
156                                        accel_group);
157   gtk_item_factory_create_items (item_factory,
158                                  G_N_ELEMENTS (menu_items),
159                                  menu_items, NULL);
160   
161   gtk_window_add_accel_group (window, accel_group);
162   menubar = gtk_item_factory_get_widget (item_factory, "<main>");
163
164   return menubar;
165 }
166
167 static GtkWidget *
168 create_combo_box (void)
169 {
170   GtkComboBox *combo_box = GTK_COMBO_BOX (gtk_combo_box_new_text ());
171
172   gtk_combo_box_append_text (combo_box, "This");
173   gtk_combo_box_append_text (combo_box, "Is");
174   gtk_combo_box_append_text (combo_box, "A");
175   gtk_combo_box_append_text (combo_box, "ComboBox");
176   
177   return GTK_WIDGET (combo_box);
178 }
179
180 static GtkWidget *
181 create_content (GtkWindow *window, gboolean local)
182 {
183   GtkWidget *vbox;
184   GtkWidget *button;
185   GtkWidget *frame;
186
187   frame = gtk_frame_new (local? "Local" : "Remote");
188   gtk_container_set_border_width (GTK_CONTAINER (frame), 3);
189   vbox = gtk_vbox_new (TRUE, 0);
190   gtk_container_set_border_width (GTK_CONTAINER (vbox), 3);
191
192   gtk_container_add (GTK_CONTAINER (frame), vbox);
193   
194   /* Combo */
195   gtk_box_pack_start (GTK_BOX (vbox), create_combo(), TRUE, TRUE, 0);
196
197   /* Entry */
198   gtk_box_pack_start (GTK_BOX (vbox), gtk_entry_new(), TRUE, TRUE, 0);
199
200   /* Close Button */
201   button = gtk_button_new_with_mnemonic ("_Close");
202   gtk_box_pack_start (GTK_BOX (vbox), button, TRUE, TRUE, 0);
203   g_signal_connect_swapped (button, "clicked",
204                             G_CALLBACK (gtk_widget_destroy), window);
205
206   /* Blink Button */
207   button = gtk_button_new_with_mnemonic ("_Blink");
208   gtk_box_pack_start (GTK_BOX (vbox), button, TRUE, TRUE, 0);
209   g_signal_connect (button, "clicked",
210                     G_CALLBACK (blink),
211                     window);
212
213   /* Menubar */
214   gtk_box_pack_start (GTK_BOX (vbox), create_menubar (GTK_WINDOW (window)),
215                       TRUE, TRUE, 0);
216
217   /* Combo Box */
218   gtk_box_pack_start (GTK_BOX (vbox), create_combo_box (), TRUE, TRUE, 0);
219   
220   add_buttons (NULL, vbox);
221
222   return frame;
223 }
224
225 guint32
226 create_child_plug (guint32  xid,
227                    gboolean local)
228 {
229   GtkWidget *window;
230   GtkWidget *content;
231
232   window = gtk_plug_new (xid);
233
234   g_signal_connect (window, "destroy",
235                     local ? G_CALLBACK (local_destroy)
236                           : G_CALLBACK (remote_destroy),
237                     NULL);
238   gtk_container_set_border_width (GTK_CONTAINER (window), 0);
239
240   content = create_content (GTK_WINDOW (window), local);
241   
242   gtk_container_add (GTK_CONTAINER (window), content);
243
244   gtk_widget_show_all (window);
245
246   if (GTK_WIDGET_REALIZED (window))
247     return GDK_WINDOW_XID (window->window);
248   else
249     return 0;
250 }