summaryrefslogtreecommitdiffhomepage
path: root/mixgtk/mixgtk_wm.c
diff options
context:
space:
mode:
Diffstat (limited to 'mixgtk/mixgtk_wm.c')
-rw-r--r--mixgtk/mixgtk_wm.c41
1 files changed, 26 insertions, 15 deletions
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 ();
}