diff options
Diffstat (limited to 'mixgtk/mixgtk_widgets.c')
-rw-r--r-- | mixgtk/mixgtk_widgets.c | 32 |
1 files changed, 29 insertions, 3 deletions
diff --git a/mixgtk/mixgtk_widgets.c b/mixgtk/mixgtk_widgets.c index d665cc6..243c6b3 100644 --- a/mixgtk/mixgtk_widgets.c +++ b/mixgtk/mixgtk_widgets.c @@ -31,6 +31,9 @@ /* dialog names */ static const gchar * dnames_[] = { "main_window", + "mixvm_window", + "mixal_window", + "devices_window", "word_dialog", "about_dialog", "goto_dialog", @@ -42,6 +45,8 @@ static const gchar * dnames_[] = { "symbols_dialog" }; +const gchar *SPLIT_MAIN_NAME_ = "split_main_window"; + #define DLG_NO_ (sizeof (dnames_) / sizeof(dnames_[0])) /* widget names */ @@ -80,6 +85,8 @@ static const gchar *names_[] = { #define GPL_TEXT_ "gpl_text" #define AUTOSAVE_ITEM_ "save_on_exit" +static gboolean split_; + /* the glade specs */ static GladeXML *xml_[DLG_NO_] = {NULL}; /* the about dialog */ @@ -122,10 +129,26 @@ init_about_ (void) /* create a new factory from an xml glade file */ gboolean -mixgtk_widget_factory_init (const char *glade_file) +mixgtk_widget_factory_init (gboolean split) { + const gchar *glade_file = GLADE_FILE; + const gchar *local_glade_file = LOCAL_GLADE_FILE; + FILE *f; + glade_init (); + split_ = split; + + f = fopen (glade_file, "r"); + if (!f) { + f = fopen (local_glade_file, "r"); + if (!f) return FALSE; + glade_file = local_glade_file; + } + fclose (f); file_ = g_strdup (glade_file); + + if (split_) dnames_[MIXGTK_MAIN] = SPLIT_MAIN_NAME_; + init_xml_ (MIXGTK_MAIN); init_autosave_ (); return TRUE; @@ -133,16 +156,18 @@ mixgtk_widget_factory_init (const char *glade_file) /* get a widget */ GtkWidget * -mixgtk_widget_factory_get (mixgtk_widget_id_t widget) +mixgtk_widget_factory_get (mixgtk_dialog_id_t dlg, mixgtk_widget_id_t widget) { g_return_val_if_fail (widget < WIDGET_NO_, NULL); - return glade_xml_get_widget (xml_[MIXGTK_MAIN], names_[widget]); + if (!split_ && dlg < MIXGTK_WORD_DIALOG) dlg = MIXGTK_MAIN; + return mixgtk_widget_factory_get_child_by_name (dlg, names_[widget]); } GtkWidget * mixgtk_widget_factory_get_dialog (mixgtk_dialog_id_t dlg) { + if (!split_ && dlg < MIXGTK_WORD_DIALOG) dlg = MIXGTK_MAIN; if (!xml_[dlg]) init_xml_ (dlg); return glade_xml_get_widget (xml_[dlg], dnames_[dlg]); } @@ -153,6 +178,7 @@ mixgtk_widget_factory_get_child_by_name (mixgtk_dialog_id_t dlg, { g_return_val_if_fail (dlg < DLG_NO_, NULL); g_return_val_if_fail (name != NULL, NULL); + if (!split_ && dlg < MIXGTK_WORD_DIALOG) dlg = MIXGTK_MAIN; if (!xml_[dlg]) init_xml_ (dlg); return glade_xml_get_widget (xml_[dlg], name); } |