1 | /* -*- Mode: C; c-basic-offset: 4 -*- |
---|
2 | * libglade - a library for building interfaces from XML files at runtime |
---|
3 | * Copyright (C) 1998-2001 James Henstridge <james@daa.com.au> |
---|
4 | * |
---|
5 | * glade-gnome.c: support for libgnomeui widgets in libglade. |
---|
6 | * |
---|
7 | * This library is free software; you can redistribute it and/or |
---|
8 | * modify it under the terms of the GNU Library General Public |
---|
9 | * License as published by the Free Software Foundation; either |
---|
10 | * version 2 of the License, or (at your option) any later version. |
---|
11 | * |
---|
12 | * This library is distributed in the hope that it will be useful, |
---|
13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
---|
14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
---|
15 | * Library General Public License for more details. |
---|
16 | * |
---|
17 | * You should have received a copy of the GNU Library General Public |
---|
18 | * License along with this library; if not, write to the |
---|
19 | * Free Software Foundation, Inc., 59 Temple Place - Suite 330, |
---|
20 | * Boston, MA 02111-1307, USA. |
---|
21 | */ |
---|
22 | |
---|
23 | /* this file is only built if GNOME support is enabled */ |
---|
24 | |
---|
25 | #ifdef HAVE_CONFIG_H |
---|
26 | #include "config.h" |
---|
27 | #endif |
---|
28 | |
---|
29 | #include <stdlib.h> |
---|
30 | #include <string.h> |
---|
31 | #include <glade/glade-init.h> |
---|
32 | #include <glade/glade-build.h> |
---|
33 | #include <libgnomeui/libgnomeui.h> |
---|
34 | |
---|
35 | #include <libbonoboui.h> |
---|
36 | |
---|
37 | /* following function is not public, so we define the prototype here ... */ |
---|
38 | void bonobo_dock_item_set_behavior (BonoboDockItem *dock_item, |
---|
39 | BonoboDockItemBehavior behavior); |
---|
40 | |
---|
41 | |
---|
42 | #define INT(s) (strtol ((s), NULL, 0)) |
---|
43 | #define BOOL(s) (g_ascii_tolower (*(s)) == 't' || g_ascii_tolower (*(s)) == 'y' || INT (s)) |
---|
44 | #define FLOAT(s) (g_strtod ((s), NULL)) |
---|
45 | |
---|
46 | typedef struct { |
---|
47 | const char *extension; |
---|
48 | GnomeUIInfo data; |
---|
49 | } gnomeuiinfo_map_t; |
---|
50 | |
---|
51 | static GnomeUIInfo tmptree[] = { |
---|
52 | GNOMEUIINFO_END |
---|
53 | }; |
---|
54 | |
---|
55 | static const gnomeuiinfo_map_t gnome_uiinfo_mapping[] = { |
---|
56 | { "ABOUT_ITEM", GNOMEUIINFO_MENU_ABOUT_ITEM(NULL, NULL) }, |
---|
57 | { "CLEAR_ITEM", GNOMEUIINFO_MENU_CLEAR_ITEM(NULL, NULL) }, |
---|
58 | { "CLOSE_ITEM", GNOMEUIINFO_MENU_CLOSE_ITEM(NULL, NULL) }, |
---|
59 | { "CLOSE_WINDOW_ITEM", GNOMEUIINFO_MENU_CLOSE_WINDOW_ITEM(NULL,NULL) }, |
---|
60 | { "COPY_ITEM", GNOMEUIINFO_MENU_COPY_ITEM(NULL, NULL) }, |
---|
61 | { "CUT_ITEM", GNOMEUIINFO_MENU_CUT_ITEM(NULL, NULL) }, |
---|
62 | { "EDIT_TREE", GNOMEUIINFO_MENU_EDIT_TREE(tmptree) }, |
---|
63 | { "END_GAME_ITEM", GNOMEUIINFO_MENU_END_GAME_ITEM(NULL, NULL) }, |
---|
64 | { "EXIT_ITEM", GNOMEUIINFO_MENU_EXIT_ITEM(NULL, NULL) }, |
---|
65 | { "FILES_TREE", GNOMEUIINFO_MENU_FILES_TREE(tmptree) }, |
---|
66 | { "FILE_TREE", GNOMEUIINFO_MENU_FILE_TREE(tmptree) }, |
---|
67 | { "FIND_AGAIN_ITEM", GNOMEUIINFO_MENU_FIND_AGAIN_ITEM(NULL, NULL) }, |
---|
68 | { "FIND_ITEM", GNOMEUIINFO_MENU_FIND_ITEM(NULL, NULL) }, |
---|
69 | { "GAME_TREE", GNOMEUIINFO_MENU_GAME_TREE(tmptree) }, |
---|
70 | { "HELP_TREE", GNOMEUIINFO_MENU_HELP_TREE(tmptree) }, |
---|
71 | { "HINT_ITEM", GNOMEUIINFO_MENU_HINT_ITEM(NULL, NULL) }, |
---|
72 | { "NEW_GAME_ITEM", GNOMEUIINFO_MENU_NEW_GAME_ITEM(NULL, NULL) }, |
---|
73 | { "NEW_ITEM", GNOMEUIINFO_MENU_NEW_ITEM(NULL, NULL, NULL, NULL) }, |
---|
74 | { "NEW_SUBTREE", GNOMEUIINFO_MENU_NEW_SUBTREE(tmptree) }, |
---|
75 | { "NEW_WINDOW_ITEM", GNOMEUIINFO_MENU_NEW_WINDOW_ITEM(NULL, NULL) }, |
---|
76 | { "OPEN_ITEM", GNOMEUIINFO_MENU_OPEN_ITEM(NULL, NULL) }, |
---|
77 | { "PASTE_ITEM", GNOMEUIINFO_MENU_PASTE_ITEM(NULL, NULL) }, |
---|
78 | { "PAUSE_GAME_ITEM", GNOMEUIINFO_MENU_PAUSE_GAME_ITEM(NULL, NULL) }, |
---|
79 | { "PREFERENCES_ITEM", GNOMEUIINFO_MENU_PREFERENCES_ITEM(NULL, NULL) }, |
---|
80 | { "PRINT_ITEM", GNOMEUIINFO_MENU_PRINT_ITEM(NULL, NULL) }, |
---|
81 | { "PRINT_SETUP_ITEM", GNOMEUIINFO_MENU_PRINT_SETUP_ITEM(NULL, NULL) }, |
---|
82 | { "PROPERTIES_ITEM", GNOMEUIINFO_MENU_PROPERTIES_ITEM(NULL, NULL) }, |
---|
83 | { "REDO_ITEM", GNOMEUIINFO_MENU_REDO_ITEM(NULL, NULL) }, |
---|
84 | { "REDO_MOVE_ITEM", GNOMEUIINFO_MENU_REDO_MOVE_ITEM(NULL, NULL) }, |
---|
85 | { "REPLACE_ITEM", GNOMEUIINFO_MENU_REPLACE_ITEM(NULL, NULL) }, |
---|
86 | { "RESTART_GAME_ITEM", GNOMEUIINFO_MENU_RESTART_GAME_ITEM(NULL,NULL) }, |
---|
87 | { "REVERT_ITEM", GNOMEUIINFO_MENU_REVERT_ITEM(NULL, NULL) }, |
---|
88 | { "SAVE_AS_ITEM", GNOMEUIINFO_MENU_SAVE_AS_ITEM(NULL, NULL) }, |
---|
89 | { "SAVE_ITEM", GNOMEUIINFO_MENU_SAVE_ITEM(NULL, NULL) }, |
---|
90 | { "SCORES_ITEM", GNOMEUIINFO_MENU_SCORES_ITEM(NULL, NULL) }, |
---|
91 | { "SELECT_ALL_ITEM", GNOMEUIINFO_MENU_SELECT_ALL_ITEM(NULL, NULL) }, |
---|
92 | { "SETTINGS_TREE", GNOMEUIINFO_MENU_SETTINGS_TREE(tmptree) }, |
---|
93 | { "UNDO_ITEM", GNOMEUIINFO_MENU_UNDO_ITEM(NULL, NULL) }, |
---|
94 | { "UNDO_MOVE_ITEM", GNOMEUIINFO_MENU_UNDO_MOVE_ITEM(NULL, NULL) }, |
---|
95 | { "VIEW_TREE", GNOMEUIINFO_MENU_VIEW_TREE(tmptree) }, |
---|
96 | { "WINDOWS_TREE", GNOMEUIINFO_MENU_WINDOWS_TREE(tmptree) }, |
---|
97 | }; |
---|
98 | |
---|
99 | static int |
---|
100 | stock_compare (const void *a, const void *b) |
---|
101 | { |
---|
102 | const gnomeuiinfo_map_t *ga = a; |
---|
103 | const gnomeuiinfo_map_t *gb = b; |
---|
104 | |
---|
105 | return strcmp (ga->extension, gb->extension); |
---|
106 | } |
---|
107 | |
---|
108 | static gboolean |
---|
109 | get_stock_uiinfo (const char *stock_name, GnomeUIInfo *info) |
---|
110 | { |
---|
111 | const int len = strlen ("GNOMEUIINFO_MENU_"); |
---|
112 | gnomeuiinfo_map_t *v; |
---|
113 | gnomeuiinfo_map_t base; |
---|
114 | |
---|
115 | /* If an error happens, return this */ |
---|
116 | if (!strncmp (stock_name, "GNOMEUIINFO_MENU_", len)) { |
---|
117 | base.extension = stock_name + len; |
---|
118 | v = bsearch ( |
---|
119 | &base, |
---|
120 | gnome_uiinfo_mapping, |
---|
121 | sizeof(gnome_uiinfo_mapping) / |
---|
122 | sizeof(gnomeuiinfo_map_t), |
---|
123 | sizeof (gnome_uiinfo_mapping [0]), |
---|
124 | stock_compare); |
---|
125 | if (v) { |
---|
126 | *info = v->data; |
---|
127 | return TRUE; |
---|
128 | } else |
---|
129 | return FALSE; |
---|
130 | } |
---|
131 | return FALSE; |
---|
132 | } |
---|
133 | |
---|
134 | static void |
---|
135 | menushell_build_children (GladeXML *xml, GtkWidget *w, |
---|
136 | GladeWidgetInfo *info) |
---|
137 | { |
---|
138 | int i, j; |
---|
139 | GnomeUIInfo infos[2] = { |
---|
140 | { GNOME_APP_UI_ITEM }, |
---|
141 | GNOMEUIINFO_END |
---|
142 | }; |
---|
143 | |
---|
144 | for (i = 0; i < info->n_children; i++) { |
---|
145 | GladeChildInfo *cinfo = &info->children[i]; |
---|
146 | GladeWidgetInfo *cwinfo = cinfo->child; |
---|
147 | GtkWidget *child; |
---|
148 | gchar *stock_name = NULL; |
---|
149 | |
---|
150 | for (j = 0; j < cwinfo->n_properties; j++) { |
---|
151 | if (!strcmp (cwinfo->properties[j].name, "stock_item")) { |
---|
152 | stock_name = cwinfo->properties[j].value; |
---|
153 | break; |
---|
154 | } |
---|
155 | } |
---|
156 | if (!stock_name) { |
---|
157 | /* this is a normal menu item */ |
---|
158 | child = glade_xml_build_widget (xml, cwinfo); |
---|
159 | gtk_menu_shell_append (GTK_MENU_SHELL (w), child); |
---|
160 | continue; |
---|
161 | } |
---|
162 | /* load the template GnomeUIInfo for this item */ |
---|
163 | if (!get_stock_uiinfo (stock_name, &infos[0])) { |
---|
164 | /* failure ... */ |
---|
165 | if (!strncmp (stock_name, "GNOMEUIINFO_", 12)) |
---|
166 | stock_name += 12; |
---|
167 | child = gtk_menu_item_new_with_label (stock_name); |
---|
168 | glade_xml_set_common_params (xml, child, cwinfo); |
---|
169 | gtk_menu_shell_append (GTK_MENU_SHELL(w), child); |
---|
170 | continue; |
---|
171 | } |
---|
172 | /* we now have the template for this item. Now fill it in */ |
---|
173 | for (j = 0; j < cwinfo->n_properties; j++) { |
---|
174 | const char *name = cwinfo->properties[j].name; |
---|
175 | const char *value = cwinfo->properties[j].value; |
---|
176 | if (!strcmp (name, "label")) |
---|
177 | infos[0].label = _(value); |
---|
178 | else if (!strcmp (name, "tooltip")) |
---|
179 | infos[0].hint = _(value); |
---|
180 | } |
---|
181 | gnome_app_fill_menu (GTK_MENU_SHELL(w), infos, |
---|
182 | glade_xml_ensure_accel(xml), TRUE, |
---|
183 | i); |
---|
184 | child = infos[0].widget; |
---|
185 | gtk_menu_item_remove_submenu(GTK_MENU_ITEM(child)); |
---|
186 | glade_xml_set_common_params(xml, child, cwinfo); |
---|
187 | } |
---|
188 | |
---|
189 | #if 0 |
---|
190 | if (uline) |
---|
191 | glade_xml_pop_uline_accel(xml); |
---|
192 | #endif |
---|
193 | #if 0 |
---|
194 | if (strcmp(info->classname, "GtkMenuBar") != 0 && |
---|
195 | gnome_preferences_get_menus_have_tearoff()) { |
---|
196 | GtkWidget *tearoff = gtk_tearoff_menu_item_new(); |
---|
197 | |
---|
198 | gtk_menu_prepend(GTK_MENU(w), tearoff); |
---|
199 | gtk_widget_show(tearoff); |
---|
200 | } |
---|
201 | #endif |
---|
202 | } |
---|
203 | |
---|
204 | static void |
---|
205 | gnome_add_dock_item (GladeXML *xml, |
---|
206 | GtkWidget *parent, |
---|
207 | GladeWidgetInfo *info, |
---|
208 | GladeChildInfo *childinfo) |
---|
209 | { |
---|
210 | BonoboDockPlacement placement; |
---|
211 | guint band, offset; |
---|
212 | int position; |
---|
213 | BonoboDockItemBehavior behavior; |
---|
214 | int i; |
---|
215 | GtkWidget *child; |
---|
216 | GtkWidget *toplevel; |
---|
217 | |
---|
218 | band = offset = position = 0; |
---|
219 | placement = BONOBO_DOCK_TOP; |
---|
220 | behavior = BONOBO_DOCK_ITEM_BEH_NORMAL; |
---|
221 | |
---|
222 | for (i = 0; i < childinfo->n_properties; i++) { |
---|
223 | const char *name = childinfo->properties[i].name; |
---|
224 | const char *value = childinfo->properties[i].value; |
---|
225 | |
---|
226 | if (!strcmp (name, "placement")) |
---|
227 | placement = glade_enum_from_string ( |
---|
228 | BONOBO_TYPE_DOCK_PLACEMENT, |
---|
229 | value); |
---|
230 | else if (!strcmp (name, "band")) |
---|
231 | band = strtoul (value, NULL, 10); |
---|
232 | else if (!strcmp (name, "position")) |
---|
233 | position = strtol (value, NULL, 10); |
---|
234 | else if (!strcmp (name, "offset")) |
---|
235 | offset = strtoul (value, NULL, 10); |
---|
236 | else if (!strcmp (name, "behavior")) |
---|
237 | behavior = glade_flags_from_string ( |
---|
238 | BONOBO_TYPE_DOCK_ITEM_BEHAVIOR, |
---|
239 | value); |
---|
240 | } |
---|
241 | |
---|
242 | child = glade_xml_build_widget (xml, childinfo->child); |
---|
243 | |
---|
244 | toplevel = gtk_widget_get_ancestor (parent, GNOME_TYPE_APP); |
---|
245 | |
---|
246 | bonobo_dock_item_set_behavior (BONOBO_DOCK_ITEM (child), behavior); |
---|
247 | |
---|
248 | if (toplevel != NULL) { |
---|
249 | gnome_app_add_dock_item ( |
---|
250 | GNOME_APP (toplevel), |
---|
251 | BONOBO_DOCK_ITEM (child), |
---|
252 | placement, |
---|
253 | band, |
---|
254 | position, |
---|
255 | offset); |
---|
256 | } else { |
---|
257 | bonobo_dock_add_item (BONOBO_DOCK (parent), |
---|
258 | BONOBO_DOCK_ITEM (child), |
---|
259 | placement, band, position, offset, |
---|
260 | FALSE); |
---|
261 | } |
---|
262 | } |
---|
263 | |
---|
264 | |
---|
265 | static void |
---|
266 | gnome_dock_build_children (GladeXML *xml, GtkWidget *w, GladeWidgetInfo *info) |
---|
267 | { |
---|
268 | int i; |
---|
269 | GtkWidget *child; |
---|
270 | GtkWidget *toplevel; |
---|
271 | GladeChildInfo *childinfo; |
---|
272 | |
---|
273 | toplevel = gtk_widget_get_ancestor (w, GNOME_TYPE_APP); |
---|
274 | |
---|
275 | for (i = 0; i < info->n_children; i++) { |
---|
276 | childinfo = &info->children[i]; |
---|
277 | |
---|
278 | if (!strcmp (childinfo->child->classname, "BonoboDockItem")) { |
---|
279 | gnome_add_dock_item (xml, w, info, childinfo); |
---|
280 | continue; |
---|
281 | } |
---|
282 | |
---|
283 | if (bonobo_dock_get_client_area (BONOBO_DOCK (w))) |
---|
284 | g_warning ("Multiple client areas for BonoboDock found."); |
---|
285 | |
---|
286 | child = glade_xml_build_widget (xml, childinfo->child); |
---|
287 | |
---|
288 | if (toplevel != NULL) |
---|
289 | gnome_app_set_contents (GNOME_APP (toplevel), child); |
---|
290 | else |
---|
291 | bonobo_dock_set_client_area (BONOBO_DOCK (w), child); |
---|
292 | } |
---|
293 | } |
---|
294 | |
---|
295 | static void |
---|
296 | dialog_build_children(GladeXML *self, GtkWidget *w, |
---|
297 | GladeWidgetInfo *info) |
---|
298 | |
---|
299 | { |
---|
300 | GnomeDialog *dialog = GNOME_DIALOG (w); |
---|
301 | GtkWidget *aa; |
---|
302 | GList *children, *list; |
---|
303 | char *label; |
---|
304 | |
---|
305 | glade_standard_build_children (self, w, info); |
---|
306 | |
---|
307 | aa = dialog->action_area; |
---|
308 | if (!aa) |
---|
309 | return; |
---|
310 | |
---|
311 | children = gtk_container_get_children (GTK_CONTAINER (aa)); |
---|
312 | for (list = children; list; list = list->next) { |
---|
313 | gtk_widget_ref (GTK_WIDGET (list->data)); |
---|
314 | gtk_container_remove (GTK_CONTAINER (aa), GTK_WIDGET (list->data)); |
---|
315 | } |
---|
316 | |
---|
317 | for (list = children; list; list = list->next) { |
---|
318 | g_object_get (G_OBJECT (list->data), "label", &label, NULL); |
---|
319 | if (label) { |
---|
320 | gnome_dialog_append_button (dialog, label); |
---|
321 | g_free (label); |
---|
322 | } |
---|
323 | } |
---|
324 | |
---|
325 | g_list_foreach (children, (GFunc)gtk_widget_unref, NULL); |
---|
326 | g_list_free (children); |
---|
327 | } |
---|
328 | |
---|
329 | static void |
---|
330 | app_build_children (GladeXML *xml, GtkWidget *parent, |
---|
331 | GladeWidgetInfo *info) |
---|
332 | { |
---|
333 | int i; |
---|
334 | |
---|
335 | for (i = 0; i < info->n_children; i++) { |
---|
336 | GladeChildInfo *cinfo; |
---|
337 | GtkWidget *child; |
---|
338 | |
---|
339 | cinfo = &info->children[i]; |
---|
340 | |
---|
341 | if (cinfo->internal_child) { |
---|
342 | /* not quite proper handling of appbar, but ... */ |
---|
343 | if (!strcmp (cinfo->internal_child, "appbar")) { |
---|
344 | child = glade_xml_build_widget (xml, cinfo->child); |
---|
345 | gnome_app_set_statusbar (GNOME_APP (parent), child); |
---|
346 | } else { |
---|
347 | glade_xml_handle_internal_child (xml, parent, cinfo); |
---|
348 | } |
---|
349 | } else { |
---|
350 | child = glade_xml_build_widget (xml, cinfo->child); |
---|
351 | |
---|
352 | #if 0 |
---|
353 | g_object_ref (G_OBJECT (child)); |
---|
354 | gtk_widget_freeze_child_notify (child); |
---|
355 | for (j = 0; j < info->children[i].n_properties; j++) |
---|
356 | glade_xml_set_packing_property ( |
---|
357 | xml, GNOME_APP (parent)->vbox, child, |
---|
358 | cinfo->properties[j].name, |
---|
359 | cinfo->properties[j].value); |
---|
360 | gtk_widget_thaw_child_notify(child); |
---|
361 | g_object_unref(G_OBJECT(child)); |
---|
362 | #endif |
---|
363 | } |
---|
364 | } |
---|
365 | } |
---|
366 | |
---|
367 | static GtkWidget * |
---|
368 | app_build (GladeXML *xml, GType widget_type, |
---|
369 | GladeWidgetInfo *info) |
---|
370 | { |
---|
371 | GtkWidget *app; |
---|
372 | char *s; |
---|
373 | |
---|
374 | app = glade_standard_build_widget (xml, widget_type, info); |
---|
375 | |
---|
376 | g_object_get (G_OBJECT (gnome_program_get ()), |
---|
377 | GNOME_PARAM_APP_ID, &s, |
---|
378 | NULL); |
---|
379 | |
---|
380 | g_object_set (G_OBJECT (app), "app_id", s, NULL); |
---|
381 | |
---|
382 | g_free (s); |
---|
383 | |
---|
384 | return app; |
---|
385 | } |
---|
386 | |
---|
387 | static GtkWidget * |
---|
388 | dialog_new (GladeXML *xml, GType widget_type, |
---|
389 | GladeWidgetInfo *info) |
---|
390 | { |
---|
391 | GtkWidget *dialog; |
---|
392 | const char *buttons[] = { NULL }; |
---|
393 | |
---|
394 | dialog = glade_standard_build_widget (xml, widget_type, info); |
---|
395 | |
---|
396 | gnome_dialog_constructv (GNOME_DIALOG (dialog), NULL, buttons); |
---|
397 | |
---|
398 | return dialog; |
---|
399 | } |
---|
400 | |
---|
401 | /* GnomeDruidPageEdge really sucks. */ |
---|
402 | #if 0 |
---|
403 | #define DRUID_SET_STRING(pos, POS, var) \ |
---|
404 | static void \ |
---|
405 | druid_page_##pos##_set_##var (GladeXML *xml, GtkWidget *w, \ |
---|
406 | const char *name, const char *value) \ |
---|
407 | { \ |
---|
408 | gnome_druid_page_##pos##_set_##var (GNOME_DRUID_PAGE_##POS (w), value); \ |
---|
409 | } |
---|
410 | |
---|
411 | #define DRUID_SET_COLOR(pos, POS, var) \ |
---|
412 | static void \ |
---|
413 | druid_page_##pos##_set_##var##_color (GladeXML *xml, GtkWidget *w, \ |
---|
414 | const char *name, const char *value) \ |
---|
415 | { \ |
---|
416 | GdkColor colour = { 0 }; \ |
---|
417 | if (gdk_color_parse(value, &colour) && \ |
---|
418 | gdk_colormap_alloc_color (gtk_widget_get_default_colormap(), \ |
---|
419 | &colour, FALSE, TRUE)) { \ |
---|
420 | } else { \ |
---|
421 | g_warning ("could not parse colour name `%s'", value); \ |
---|
422 | return; \ |
---|
423 | } \ |
---|
424 | gnome_druid_page_##pos##_set_##var##_color (GNOME_DRUID_PAGE_##POS (w), &colour); \ |
---|
425 | } |
---|
426 | |
---|
427 | |
---|
428 | DRUID_SET_STRING (edge, EDGE, title) |
---|
429 | DRUID_SET_STRING (edge, EDGE, text) |
---|
430 | DRUID_SET_COLOR (edge, EDGE, title) |
---|
431 | DRUID_SET_COLOR (edge, EDGE, text) |
---|
432 | DRUID_SET_COLOR (edge, EDGE, bg) |
---|
433 | DRUID_SET_COLOR (edge, EDGE, logo_bg) |
---|
434 | DRUID_SET_COLOR (edge, EDGE, textbox) |
---|
435 | #endif |
---|
436 | |
---|
437 | /* this is a huge hack */ |
---|
438 | static GtkWidget * |
---|
439 | druid_page_edge_new (GladeXML *xml, GType widget_type, |
---|
440 | GladeWidgetInfo *info) |
---|
441 | { |
---|
442 | GtkWidget *druid; |
---|
443 | GnomeEdgePosition position = GNOME_EDGE_OTHER; |
---|
444 | int i; |
---|
445 | |
---|
446 | const char *title, *text; |
---|
447 | const char *title_color, *text_color; |
---|
448 | const char *bg_color, *logo_bg_color, *textbox_color; |
---|
449 | char *filename; |
---|
450 | GdkPixbuf *logo, *watermark, *top_watermark; |
---|
451 | |
---|
452 | title = text = title_color = text_color = bg_color = logo_bg_color = textbox_color = NULL; |
---|
453 | logo = watermark = top_watermark = NULL; |
---|
454 | |
---|
455 | for (i = 0; i < info->n_properties; i++) { |
---|
456 | const char *name = info->properties[i].name; |
---|
457 | const char *value = info->properties[i].value; |
---|
458 | |
---|
459 | if (!strcmp (name, "position")) |
---|
460 | position = glade_enum_from_string ( |
---|
461 | GNOME_TYPE_EDGE_POSITION, value); |
---|
462 | else if (!strcmp (name, "textbox_color")) |
---|
463 | textbox_color = value; |
---|
464 | else if (!strcmp (name, "logo_background_color")) |
---|
465 | logo_bg_color = value; |
---|
466 | else if (!strcmp (name, "background_color")) |
---|
467 | bg_color = value; |
---|
468 | else if (!strcmp (name, "text_color")) |
---|
469 | text_color = value; |
---|
470 | else if (!strcmp (name, "title_color")) |
---|
471 | title_color = value; |
---|
472 | else if (!strcmp (name, "text")) |
---|
473 | text = value; |
---|
474 | else if (!strcmp (name, "title")) |
---|
475 | title = value; |
---|
476 | else if (!strcmp (name, "logo_image")) { |
---|
477 | if (logo) |
---|
478 | g_object_unref (G_OBJECT (logo)); |
---|
479 | filename = glade_xml_relative_file (xml, value); |
---|
480 | logo = gdk_pixbuf_new_from_file (filename, NULL); |
---|
481 | g_free (filename); |
---|
482 | } else if (!strcmp (name, "watermark_image")) { |
---|
483 | if (watermark) |
---|
484 | g_object_unref (G_OBJECT (watermark)); |
---|
485 | filename = glade_xml_relative_file (xml, value); |
---|
486 | watermark = gdk_pixbuf_new_from_file (filename, NULL); |
---|
487 | g_free (filename); |
---|
488 | } |
---|
489 | |
---|
490 | } |
---|
491 | |
---|
492 | druid = gnome_druid_page_edge_new_with_vals ( |
---|
493 | position, TRUE, title, text, |
---|
494 | logo, watermark, top_watermark); |
---|
495 | |
---|
496 | |
---|
497 | |
---|
498 | if (logo) |
---|
499 | g_object_unref (G_OBJECT (logo)); |
---|
500 | if (watermark) |
---|
501 | g_object_unref (G_OBJECT (watermark)); |
---|
502 | if (top_watermark) |
---|
503 | g_object_unref (G_OBJECT (top_watermark)); |
---|
504 | |
---|
505 | return druid; |
---|
506 | } |
---|
507 | |
---|
508 | static GtkWidget * |
---|
509 | message_box_new (GladeXML *xml, GType widget_type, |
---|
510 | GladeWidgetInfo *info) |
---|
511 | { |
---|
512 | GtkWidget *dialog; |
---|
513 | const char *buttons[] = { NULL }; |
---|
514 | const char *type = "generic", *message = NULL; |
---|
515 | int i; |
---|
516 | |
---|
517 | for (i = 0; i < info->n_properties; i++) { |
---|
518 | const char *name = info->properties[i].name; |
---|
519 | const char *value = info->properties[i].value; |
---|
520 | |
---|
521 | if (!strcmp (name, "message")) |
---|
522 | message = value; |
---|
523 | if (!strcmp (name, "message_box_type")) |
---|
524 | type = value; |
---|
525 | } |
---|
526 | |
---|
527 | dialog = glade_standard_build_widget (xml, widget_type, info); |
---|
528 | |
---|
529 | gnome_message_box_construct (GNOME_MESSAGE_BOX (dialog), message, type, buttons); |
---|
530 | |
---|
531 | return dialog; |
---|
532 | } |
---|
533 | |
---|
534 | static GtkWidget * |
---|
535 | date_edit_new (GladeXML *xml, GType widget_type, |
---|
536 | GladeWidgetInfo *info) |
---|
537 | { |
---|
538 | GtkWidget *de; |
---|
539 | |
---|
540 | de = glade_standard_build_widget (xml, widget_type, info); |
---|
541 | |
---|
542 | g_object_set (G_OBJECT (de), "time", time (NULL), NULL); |
---|
543 | |
---|
544 | return de; |
---|
545 | } |
---|
546 | |
---|
547 | static GtkWidget * |
---|
548 | icon_list_new (GladeXML *xml, GType widget_type, |
---|
549 | GladeWidgetInfo *info) |
---|
550 | { |
---|
551 | GtkWidget *gil; |
---|
552 | int flags = 0; |
---|
553 | int icon_width = 0; |
---|
554 | int i; |
---|
555 | |
---|
556 | for (i = 0; i < info->n_properties; i++) { |
---|
557 | const char *name = info->properties[i].name; |
---|
558 | const char *value = info->properties[i].value; |
---|
559 | |
---|
560 | if (!strcmp (name, "text_editable")) { |
---|
561 | if (BOOL (value)) |
---|
562 | flags |= GNOME_ICON_LIST_IS_EDITABLE; |
---|
563 | } else if (!strcmp (name, "text_static")) { |
---|
564 | if (BOOL (value)) |
---|
565 | flags |= GNOME_ICON_LIST_STATIC_TEXT; |
---|
566 | } else if (!strcmp (name, "icon_width")) { |
---|
567 | icon_width = INT (value); |
---|
568 | } |
---|
569 | } |
---|
570 | |
---|
571 | gil = glade_standard_build_widget (xml, widget_type, info); |
---|
572 | |
---|
573 | gnome_icon_list_construct (GNOME_ICON_LIST (gil), |
---|
574 | icon_width, NULL, flags); |
---|
575 | |
---|
576 | return gil; |
---|
577 | } |
---|
578 | |
---|
579 | static GtkWidget * |
---|
580 | druidpagestandard_find_internal_child(GladeXML *xml, GtkWidget *parent, |
---|
581 | const gchar *childname) |
---|
582 | { |
---|
583 | if (!strcmp(childname, "vbox")) |
---|
584 | return GNOME_DRUID_PAGE_STANDARD(parent)->vbox; |
---|
585 | return NULL; |
---|
586 | } |
---|
587 | |
---|
588 | static GtkWidget * |
---|
589 | dialog_find_internal_child(GladeXML *xml, GtkWidget *parent, |
---|
590 | const gchar *childname) |
---|
591 | { |
---|
592 | if (!strcmp(childname, "vbox")) |
---|
593 | return GNOME_DIALOG(parent)->vbox; |
---|
594 | else if (!strcmp (childname, "action_area")) |
---|
595 | return GNOME_DIALOG (parent)->action_area; |
---|
596 | |
---|
597 | return NULL; |
---|
598 | } |
---|
599 | |
---|
600 | static GtkWidget * |
---|
601 | entry_find_internal_child(GladeXML *xml, GtkWidget *parent, |
---|
602 | const gchar *childname) |
---|
603 | { |
---|
604 | if (!strcmp (childname, "entry")) |
---|
605 | return gnome_entry_gtk_entry (GNOME_ENTRY (parent)); |
---|
606 | |
---|
607 | return NULL; |
---|
608 | } |
---|
609 | |
---|
610 | static GtkWidget * |
---|
611 | file_entry_find_internal_child(GladeXML *xml, GtkWidget *parent, |
---|
612 | const gchar *childname) |
---|
613 | { |
---|
614 | if (!strcmp (childname, "entry")) |
---|
615 | return gnome_file_entry_gtk_entry (GNOME_FILE_ENTRY (parent)); |
---|
616 | |
---|
617 | return NULL; |
---|
618 | } |
---|
619 | |
---|
620 | static GtkWidget * |
---|
621 | propertybox_find_internal_child(GladeXML *xml, GtkWidget *parent, |
---|
622 | const gchar *childname) |
---|
623 | { |
---|
624 | if (!strcmp(childname, "vbox")) |
---|
625 | return GNOME_DIALOG(parent)->vbox; |
---|
626 | else if (!strcmp(childname, "action_area")) |
---|
627 | return GNOME_DIALOG(parent)->action_area; |
---|
628 | else if (!strcmp(childname, "notebook")) |
---|
629 | return GNOME_PROPERTY_BOX(parent)->notebook; |
---|
630 | else if (!strcmp(childname, "ok_button")) |
---|
631 | return GNOME_PROPERTY_BOX(parent)->ok_button; |
---|
632 | else if (!strcmp(childname, "apply_button")) |
---|
633 | return GNOME_PROPERTY_BOX(parent)->apply_button; |
---|
634 | else if (!strcmp(childname, "cancel_button")) |
---|
635 | return GNOME_PROPERTY_BOX(parent)->cancel_button; |
---|
636 | else if (!strcmp(childname, "help_button")) |
---|
637 | return GNOME_PROPERTY_BOX(parent)->help_button; |
---|
638 | return NULL; |
---|
639 | } |
---|
640 | |
---|
641 | static GtkWidget * |
---|
642 | app_find_internal_child (GladeXML *xml, GtkWidget *parent, |
---|
643 | const char *childname) |
---|
644 | { |
---|
645 | if (!strcmp (childname, "dock")) |
---|
646 | return GNOME_APP (parent)->dock; |
---|
647 | #if 0 |
---|
648 | else if (!strcmp (childname, "appbar")) |
---|
649 | return GNOME_APP (parent)->statusbar; |
---|
650 | #endif |
---|
651 | |
---|
652 | return NULL; |
---|
653 | } |
---|
654 | |
---|
655 | static void |
---|
656 | app_enable_layout_config (GladeXML *xml, GtkWidget *w, |
---|
657 | const char *name, const char *value) |
---|
658 | { |
---|
659 | gnome_app_enable_layout_config (GNOME_APP (w), BOOL (value)); |
---|
660 | } |
---|
661 | |
---|
662 | static void |
---|
663 | pixmap_entry_set_preview (GladeXML *xml, GtkWidget *w, |
---|
664 | const char *name, const char *value) |
---|
665 | { |
---|
666 | gnome_pixmap_entry_set_preview (GNOME_PIXMAP_ENTRY (w), BOOL (value)); |
---|
667 | } |
---|
668 | |
---|
669 | static void |
---|
670 | icon_list_set_selection_mode (GladeXML *xml, GtkWidget *w, |
---|
671 | const char *name, const char *value) |
---|
672 | { |
---|
673 | gnome_icon_list_set_selection_mode ( |
---|
674 | GNOME_ICON_LIST (w), |
---|
675 | glade_enum_from_string (GTK_TYPE_SELECTION_MODE, |
---|
676 | value)); |
---|
677 | } |
---|
678 | |
---|
679 | static void |
---|
680 | entry_set_max_saved (GladeXML *xml, GtkWidget *w, |
---|
681 | const char *name, const char *value) |
---|
682 | { |
---|
683 | gnome_entry_set_max_saved (GNOME_ENTRY (w), INT (value)); |
---|
684 | } |
---|
685 | |
---|
686 | static void |
---|
687 | file_entry_set_max_saved (GladeXML *xml, GtkWidget *w, |
---|
688 | const char *name, const char *value) |
---|
689 | { |
---|
690 | entry_set_max_saved (xml, |
---|
691 | gnome_file_entry_gnome_entry (GNOME_FILE_ENTRY (w)), |
---|
692 | name, value); |
---|
693 | } |
---|
694 | |
---|
695 | static void |
---|
696 | file_entry_set_use_filechooser (GladeXML *xml, GtkWidget *w, |
---|
697 | const char *name, const char *value) |
---|
698 | { |
---|
699 | g_object_set (G_OBJECT (w), "use_filechooser", BOOL (value), NULL); |
---|
700 | } |
---|
701 | |
---|
702 | static void |
---|
703 | icon_entry_set_max_saved (GladeXML *xml, GtkWidget *w, |
---|
704 | const char *name, const char *value) |
---|
705 | { |
---|
706 | gnome_icon_entry_set_max_saved (GNOME_ICON_ENTRY (w), INT (value)); |
---|
707 | } |
---|
708 | |
---|
709 | static void |
---|
710 | icon_list_set_row_spacing (GladeXML *xml, GtkWidget *w, |
---|
711 | const char *name, const char *value) |
---|
712 | { |
---|
713 | gnome_icon_list_set_row_spacing (GNOME_ICON_LIST (w), INT (value)); |
---|
714 | } |
---|
715 | |
---|
716 | static void |
---|
717 | icon_list_set_col_spacing (GladeXML *xml, GtkWidget *w, |
---|
718 | const char *name, const char *value) |
---|
719 | { |
---|
720 | gnome_icon_list_set_col_spacing (GNOME_ICON_LIST (w), INT (value)); |
---|
721 | } |
---|
722 | |
---|
723 | static void |
---|
724 | icon_list_set_text_spacing (GladeXML *xml, GtkWidget *w, |
---|
725 | const char *name, const char *value) |
---|
726 | { |
---|
727 | gnome_icon_list_set_text_spacing (GNOME_ICON_LIST (w), INT (value)); |
---|
728 | } |
---|
729 | |
---|
730 | static void |
---|
731 | custom_noop (GladeXML *xml, GtkWidget *w, |
---|
732 | const char *name, const char *value) |
---|
733 | { |
---|
734 | ; |
---|
735 | } |
---|
736 | |
---|
737 | static void |
---|
738 | dialog_set_auto_close (GladeXML *xml, GtkWidget *w, |
---|
739 | const char *name, const char *value) |
---|
740 | { |
---|
741 | gnome_dialog_set_close (GNOME_DIALOG (w), BOOL (value)); |
---|
742 | } |
---|
743 | |
---|
744 | static void |
---|
745 | dialog_set_hide_on_close (GladeXML *xml, GtkWidget *w, |
---|
746 | const char *name, const char *value) |
---|
747 | { |
---|
748 | gnome_dialog_close_hides (GNOME_DIALOG (w), BOOL (value)); |
---|
749 | } |
---|
750 | |
---|
751 | static void |
---|
752 | about_set_authors (GladeXML *xml, GtkWidget *w, |
---|
753 | const char *name, const char *value) |
---|
754 | { |
---|
755 | char **authors; |
---|
756 | GValueArray *authors_array; |
---|
757 | int i; |
---|
758 | |
---|
759 | authors = g_strsplit (value, "\n", 0); |
---|
760 | authors_array = g_value_array_new (0); |
---|
761 | |
---|
762 | for (i = 0; authors[i] != NULL; i++) { |
---|
763 | GValue value = { 0 }; |
---|
764 | g_value_init (&value, G_TYPE_STRING); |
---|
765 | g_value_set_static_string (&value, authors[i]); |
---|
766 | authors_array = g_value_array_append (authors_array, &value); |
---|
767 | } |
---|
768 | |
---|
769 | g_object_set (G_OBJECT (w), "authors", authors_array, NULL); |
---|
770 | |
---|
771 | g_value_array_free (authors_array); |
---|
772 | |
---|
773 | g_strfreev (authors); |
---|
774 | } |
---|
775 | |
---|
776 | static void |
---|
777 | about_set_translator_credits (GladeXML *xml, GtkWidget *w, |
---|
778 | const char *name, const char *value) |
---|
779 | { |
---|
780 | /* only set this if the translator actually translated the string. */ |
---|
781 | if (strcmp(value, "translator_credits") != 0) { |
---|
782 | g_object_set (G_OBJECT (w), "translator_credits", value, NULL); |
---|
783 | } |
---|
784 | } |
---|
785 | |
---|
786 | static void |
---|
787 | about_set_documentors (GladeXML *xml, GtkWidget *w, |
---|
788 | const char *name, const char *value) |
---|
789 | { |
---|
790 | char **documentors; |
---|
791 | GValueArray *documentors_array; |
---|
792 | int i; |
---|
793 | |
---|
794 | documentors = g_strsplit (value, "\n", 0); |
---|
795 | documentors_array = g_value_array_new (0); |
---|
796 | |
---|
797 | for (i = 0; documentors[i] != NULL; i++) { |
---|
798 | GValue value = { 0 }; |
---|
799 | g_value_init (&value, G_TYPE_STRING); |
---|
800 | g_value_set_static_string (&value, documentors[i]); |
---|
801 | documentors_array = g_value_array_append (documentors_array, &value); |
---|
802 | } |
---|
803 | |
---|
804 | g_object_set (G_OBJECT (w), "documenters", documentors_array, NULL); |
---|
805 | |
---|
806 | g_value_array_free (documentors_array); |
---|
807 | |
---|
808 | g_strfreev (documentors); |
---|
809 | } |
---|
810 | |
---|
811 | static void |
---|
812 | pixmap_set_filename (GladeXML *xml, GtkWidget *w, |
---|
813 | const char *name, const char *value) |
---|
814 | { |
---|
815 | char *filename; |
---|
816 | |
---|
817 | filename = glade_xml_relative_file (xml, value); |
---|
818 | gnome_pixmap_load_file (GNOME_PIXMAP (w), filename); |
---|
819 | g_free (filename); |
---|
820 | } |
---|
821 | |
---|
822 | /* this macro puts a version check function into the module */ |
---|
823 | GLADE_MODULE_CHECK_INIT |
---|
824 | |
---|
825 | void |
---|
826 | glade_module_register_widgets (void) |
---|
827 | { |
---|
828 | glade_require ("bonobo"); |
---|
829 | |
---|
830 | glade_register_custom_prop (GNOME_TYPE_APP, "enable_layout_config", app_enable_layout_config); |
---|
831 | glade_register_custom_prop (GNOME_TYPE_PIXMAP_ENTRY, "preview", pixmap_entry_set_preview); |
---|
832 | glade_register_custom_prop (GNOME_TYPE_ICON_LIST, "selection_mode", icon_list_set_selection_mode); |
---|
833 | glade_register_custom_prop (GNOME_TYPE_ICON_LIST, "icon_width", custom_noop); |
---|
834 | glade_register_custom_prop (GNOME_TYPE_ICON_LIST, "row_spacing", icon_list_set_row_spacing); |
---|
835 | glade_register_custom_prop (GNOME_TYPE_ICON_LIST, "column_spacing", icon_list_set_col_spacing); |
---|
836 | glade_register_custom_prop (GNOME_TYPE_ICON_LIST, "text_spacing", icon_list_set_text_spacing); |
---|
837 | glade_register_custom_prop (GNOME_TYPE_ICON_LIST, "text_editable", custom_noop); |
---|
838 | glade_register_custom_prop (GNOME_TYPE_ICON_LIST, "text_static", custom_noop); |
---|
839 | glade_register_custom_prop (GNOME_TYPE_DIALOG, "auto_close", dialog_set_auto_close); |
---|
840 | glade_register_custom_prop (GNOME_TYPE_DIALOG, "hide_on_close", dialog_set_hide_on_close); |
---|
841 | glade_register_custom_prop (GNOME_TYPE_MESSAGE_BOX, "message", custom_noop); |
---|
842 | glade_register_custom_prop (GNOME_TYPE_MESSAGE_BOX, "message_box_type", custom_noop); |
---|
843 | glade_register_custom_prop (GNOME_TYPE_ABOUT, "authors", about_set_authors); |
---|
844 | glade_register_custom_prop (GNOME_TYPE_ABOUT, "translator_credits", about_set_translator_credits); |
---|
845 | glade_register_custom_prop (GNOME_TYPE_ABOUT, "documenters", about_set_documentors); |
---|
846 | glade_register_custom_prop (GNOME_TYPE_DRUID_PAGE_EDGE, "title", custom_noop); |
---|
847 | glade_register_custom_prop (GNOME_TYPE_DRUID_PAGE_EDGE, "text", custom_noop); |
---|
848 | glade_register_custom_prop (GNOME_TYPE_DRUID_PAGE_EDGE, "title_color", custom_noop); |
---|
849 | glade_register_custom_prop (GNOME_TYPE_DRUID_PAGE_EDGE, "text_color", custom_noop); |
---|
850 | glade_register_custom_prop (GNOME_TYPE_DRUID_PAGE_EDGE, "background_color", custom_noop); |
---|
851 | glade_register_custom_prop (GNOME_TYPE_DRUID_PAGE_EDGE, "logo_background_color", custom_noop); |
---|
852 | glade_register_custom_prop (GNOME_TYPE_DRUID_PAGE_EDGE, "textbox_color", custom_noop); |
---|
853 | glade_register_custom_prop (GNOME_TYPE_DRUID_PAGE_EDGE, "position", custom_noop); |
---|
854 | glade_register_custom_prop (GTK_TYPE_IMAGE_MENU_ITEM, "stock_item", custom_noop); |
---|
855 | glade_register_custom_prop (GTK_TYPE_MENU_ITEM, "stock_item", custom_noop); |
---|
856 | glade_register_custom_prop (GNOME_TYPE_PIXMAP, "filename", pixmap_set_filename); |
---|
857 | glade_register_custom_prop (GNOME_TYPE_ENTRY, "max_saved", entry_set_max_saved); |
---|
858 | glade_register_custom_prop (GNOME_TYPE_FILE_ENTRY, "max_saved", file_entry_set_max_saved); |
---|
859 | glade_register_custom_prop (GNOME_TYPE_FILE_ENTRY, "use_filechooser", file_entry_set_use_filechooser); |
---|
860 | glade_register_custom_prop (GNOME_TYPE_ICON_ENTRY, "max_saved", icon_entry_set_max_saved); |
---|
861 | |
---|
862 | glade_register_widget (GNOME_TYPE_ABOUT, NULL, NULL, NULL); |
---|
863 | glade_register_widget (GNOME_TYPE_APP, app_build, app_build_children, |
---|
864 | app_find_internal_child); |
---|
865 | glade_register_widget (GNOME_TYPE_APPBAR, glade_standard_build_widget, |
---|
866 | NULL, NULL); |
---|
867 | glade_register_widget (GNOME_TYPE_COLOR_PICKER,glade_standard_build_widget, |
---|
868 | NULL, NULL); |
---|
869 | glade_register_widget (GNOME_TYPE_DATE_EDIT, date_edit_new, |
---|
870 | NULL, NULL); |
---|
871 | glade_register_widget (GNOME_TYPE_DIALOG, dialog_new, |
---|
872 | dialog_build_children, dialog_find_internal_child); |
---|
873 | glade_register_widget (GNOME_TYPE_DRUID, glade_standard_build_widget, |
---|
874 | glade_standard_build_children, NULL); |
---|
875 | glade_register_widget (GNOME_TYPE_DRUID_PAGE, glade_standard_build_widget, |
---|
876 | glade_standard_build_children, NULL); |
---|
877 | glade_register_widget (GNOME_TYPE_DRUID_PAGE_EDGE, druid_page_edge_new, |
---|
878 | NULL, NULL); |
---|
879 | glade_register_widget (GNOME_TYPE_DRUID_PAGE_STANDARD, glade_standard_build_widget, |
---|
880 | glade_standard_build_children, druidpagestandard_find_internal_child); |
---|
881 | glade_register_widget (GNOME_TYPE_ENTRY, glade_standard_build_widget, |
---|
882 | glade_standard_build_children, entry_find_internal_child); |
---|
883 | glade_register_widget (GNOME_TYPE_FILE_ENTRY, glade_standard_build_widget, |
---|
884 | glade_standard_build_children, file_entry_find_internal_child); |
---|
885 | glade_register_widget (GNOME_TYPE_HREF, glade_standard_build_widget, |
---|
886 | NULL, NULL); |
---|
887 | glade_register_widget (GNOME_TYPE_ICON_ENTRY, glade_standard_build_widget, |
---|
888 | NULL, NULL); |
---|
889 | glade_register_widget (GNOME_TYPE_ICON_LIST, icon_list_new, |
---|
890 | NULL, NULL); |
---|
891 | glade_register_widget (GNOME_TYPE_ICON_SELECTION, glade_standard_build_widget, |
---|
892 | NULL, NULL); |
---|
893 | glade_register_widget (GNOME_TYPE_MESSAGE_BOX, message_box_new, |
---|
894 | glade_standard_build_children, dialog_find_internal_child); |
---|
895 | glade_register_widget (GNOME_TYPE_PIXMAP_ENTRY, glade_standard_build_widget, |
---|
896 | NULL, NULL); |
---|
897 | glade_register_widget (GNOME_TYPE_PROPERTY_BOX, glade_standard_build_widget, |
---|
898 | glade_standard_build_children, propertybox_find_internal_child); |
---|
899 | glade_register_widget (GNOME_TYPE_SCORES, glade_standard_build_widget, |
---|
900 | NULL, NULL); |
---|
901 | glade_register_widget (GNOME_TYPE_PIXMAP, glade_standard_build_widget, NULL, NULL); |
---|
902 | glade_register_widget (GNOME_TYPE_FONT_PICKER, NULL, NULL, NULL); |
---|
903 | |
---|
904 | /* things we need to override */ |
---|
905 | glade_register_widget (BONOBO_TYPE_DOCK, NULL, gnome_dock_build_children, NULL); |
---|
906 | glade_register_widget (GTK_TYPE_MENU_BAR, NULL, menushell_build_children, NULL); |
---|
907 | glade_register_widget (GTK_TYPE_MENU, NULL, menushell_build_children, NULL); |
---|
908 | |
---|
909 | glade_provide ("gnome"); |
---|
910 | } |
---|