From b21ee3c2ea317e4ac503330ac195f0be1cbfad1a Mon Sep 17 00:00:00 2001 From: Jose Antonio Ortega Ruiz Date: Thu, 24 May 2001 00:38:38 +0000 Subject: deferred dialog creation --- mixgtk/mixgtk_widgets.c | 84 ++++++++++++++++++++++++++++++++++--------------- 1 file changed, 58 insertions(+), 26 deletions(-) (limited to 'mixgtk/mixgtk_widgets.c') diff --git a/mixgtk/mixgtk_widgets.c b/mixgtk/mixgtk_widgets.c index 61f973f..18d60e1 100644 --- a/mixgtk/mixgtk_widgets.c +++ b/mixgtk/mixgtk_widgets.c @@ -28,18 +28,22 @@ #include "mixgtk_config.h" #include "mixgtk_widgets.h" -/* the glade spec */ -static GladeXML *xml_ = NULL; - -/* widget names */ -static const gchar *names_[] = { +/* dialog names */ +static const gchar * dnames_[] = { "main_window", - "main_statusbar", "word_dialog", "about_dialog", "goto_dialog", "color_dialog", + "colorsel_dialog", "fontsel_dialog", +}; + +#define DLG_NO_ (sizeof (dnames_) / sizeof(dnames_[0])) + +/* widget names */ +static const gchar *names_[] = { + "main_statusbar", "mixvm_widget", "command_prompt", "command_log", @@ -73,39 +77,54 @@ static const gchar *names_[] = { #define GPL_TEXT_ "gpl_text" #define AUTOSAVE_ITEM_ "save_on_exit" -GtkWidget *about_; +/* the glade specs */ +static GladeXML *xml_[DLG_NO_] = {NULL}; +/* the about dialog */ +static GtkWidget *about_ = NULL; + +/* the xml file name */ +static const gchar *file_ = NULL; + +static void init_xml_ (mixgtk_dialog_id_t dlg) +{ + xml_[dlg] = glade_xml_new (file_, dnames_[dlg]); + glade_xml_signal_autoconnect (xml_[dlg]); + g_assert (xml_[dlg] != NULL); +} static void init_autosave_ (void) { GtkCheckMenuItem *item = GTK_CHECK_MENU_ITEM - (mixgtk_widget_factory_get_by_name (AUTOSAVE_ITEM_)); + (mixgtk_widget_factory_get_child_by_name + (MIXGTK_MAIN, AUTOSAVE_ITEM_)); if (item) { gtk_check_menu_item_set_active (item, mixgtk_config_is_autosave ()); } } +static void +init_about_ (void) +{ + GtkWidget *label; + about_ = mixgtk_widget_factory_get_dialog (MIXGTK_ABOUT_DIALOG); + g_assert (about_ != NULL); + label = mixgtk_widget_factory_get_child_by_name (MIXGTK_ABOUT_DIALOG, + VERSION_LABEL_); + g_assert (label != NULL); + gtk_label_set_text (GTK_LABEL(label), VERSION); + gtk_widget_show (label); +} + /* create a new factory from an xml glade file */ gboolean mixgtk_widget_factory_init (const char *glade_file) { - GtkWidget *label; - glade_init (); - xml_ = glade_xml_new (glade_file, NULL); - if (!xml_) return FALSE; - glade_xml_signal_autoconnect (xml_); - - about_ = mixgtk_widget_factory_get (MIXGTK_WIDGET_ABOUT_DIALOG); - g_return_val_if_fail (about_ != NULL, FALSE); - label = mixgtk_widget_factory_get_by_name (VERSION_LABEL_); - g_return_val_if_fail (label != NULL, FALSE); - gtk_label_set_text (GTK_LABEL(label), VERSION); - gtk_widget_show (label); - + file_ = g_strdup (glade_file); + init_xml_ (MIXGTK_MAIN); init_autosave_ (); - return TRUE; } @@ -114,19 +133,32 @@ GtkWidget * mixgtk_widget_factory_get (mixgtk_widget_id_t widget) { g_return_val_if_fail (widget < WIDGET_NO_, NULL); - return glade_xml_get_widget (xml_, names_[widget]); + return glade_xml_get_widget (xml_[MIXGTK_MAIN], names_[widget]); } -/* Get a widget by name */ + GtkWidget * -mixgtk_widget_factory_get_by_name (const gchar *name) +mixgtk_widget_factory_get_dialog (mixgtk_dialog_id_t dlg) { - return glade_xml_get_widget (xml_, name); + if (!xml_[dlg]) init_xml_ (dlg); + return glade_xml_get_widget (xml_[dlg], dnames_[dlg]); } +GtkWidget * +mixgtk_widget_factory_get_child_by_name (mixgtk_dialog_id_t dlg, + const gchar *name) +{ + g_return_val_if_fail (dlg < DLG_NO_, NULL); + g_return_val_if_fail (name != NULL, NULL); + if (!xml_[dlg]) init_xml_ (dlg); + return glade_xml_get_widget (xml_[dlg], name); +} + + /* about box */ void on_about_activate (GtkWidget *w, gpointer data) { + if (!about_) init_about_ (); gtk_widget_show (about_); } -- cgit v1.2.3