From 83cc41c0600232d2d9385f84533d80d2adb20106 Mon Sep 17 00:00:00 2001 From: Jose Antonio Ortega Ruiz Date: Wed, 27 Jun 2001 22:50:00 +0000 Subject: hot split swap --- mixgtk/mixgtk_wm.c | 41 ++++++++++++++++++++++++++--------------- 1 file changed, 26 insertions(+), 15 deletions(-) (limited to 'mixgtk/mixgtk_wm.c') diff --git a/mixgtk/mixgtk_wm.c b/mixgtk/mixgtk_wm.c index 0804cc3..ce6a6c5 100644 --- a/mixgtk/mixgtk_wm.c +++ b/mixgtk/mixgtk_wm.c @@ -50,14 +50,17 @@ static GtkCheckMenuItem *split_menu_ = NULL; static const gchar *VIEW_YES_ = "Yes"; static const gchar *VIEW_NO_ = "No"; +/* flag marking that we are inside a restart process */ +static gboolean restart_ = FALSE; + gboolean mixgtk_wm_init (void) { + static gboolean restart = FALSE; split_ = mixgtk_config_is_split (); if (split_) { gint i; - const gchar *view; split_menu_ = GTK_CHECK_MENU_ITEM (mixgtk_widget_factory_get_child_by_name (MIXGTK_MAIN, SPLIT_MENU_NAME_)); @@ -72,12 +75,16 @@ mixgtk_wm_init (void) (mixgtk_widget_factory_get_child_by_name (MIXGTK_MAIN, infos_[i].menu_name)); g_return_val_if_fail (infos_[i].menu, FALSE); - view = mixgtk_config_get (infos_[i].config_key); - infos_[i].visible = !view || !strcmp (VIEW_YES_, view); + if (!restart) + { + const gchar *view = mixgtk_config_get (infos_[i].config_key); + infos_[i].visible = !view || !strcmp (VIEW_YES_, view); + } if (infos_[i].visible) gtk_widget_show (infos_[i].widget); gtk_check_menu_item_set_active (infos_[i].menu, infos_[i].visible); } } + restart = TRUE; return TRUE; } @@ -98,7 +105,7 @@ void mixgtk_wm_hide_window (mixgtk_window_id_t w) { g_return_if_fail (w < INF_NO_); - if (infos_[w].visible) + if (infos_[w].visible && !restart_) { infos_[w].visible = FALSE; gtk_check_menu_item_set_active (infos_[w].menu, FALSE); @@ -111,18 +118,22 @@ mixgtk_wm_hide_window (mixgtk_window_id_t w) void on_view_toggled (GtkCheckMenuItem *item) { - gint k; - for (k = 0; k < INF_NO_; ++k) - if (item == infos_[k].menu) break; - g_return_if_fail (k < INF_NO_); - if (item->active) - mixgtk_wm_show_window (k); - else - mixgtk_wm_hide_window (k); + if (!restart_) + { + gint k; + for (k = 0; k < INF_NO_; ++k) + if (item == infos_[k].menu) break; + g_return_if_fail (k < INF_NO_); + if (item->active) + mixgtk_wm_show_window (k); + else + mixgtk_wm_hide_window (k); + mixgtk_config_update (infos_[k].config_key, + (item->active)? VIEW_YES_ : VIEW_NO_); + infos_[k].visible = item->active; + } } -static gboolean restart_ = FALSE; - void on_split_windows_toggled (GtkCheckMenuItem *item) { @@ -146,8 +157,8 @@ on_main_window_destroy (GtkWidget *w, gpointer data) { if (restart_) { + mixgtk_restart (); restart_ = FALSE; - mixgtk_restart (mixgtk_config_is_split ()); } else gtk_main_quit (); } -- cgit v1.2.3