summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorJose Antonio Ortega Ruiz <jao@gnu.org>2006-08-08 22:10:24 +0000
committerJose Antonio Ortega Ruiz <jao@gnu.org>2006-08-08 22:10:24 +0000
commit4d0f7706aebe3f1a3fd8623fc819ea637e6ef6b7 (patch)
tree842cf2c4d32d67723425e0d1b3996c5691ae12e8
parentb6bb52be0bd67e29fd6419ca096966c7b8dd034f (diff)
downloadmdk-4d0f7706aebe3f1a3fd8623fc819ea637e6ef6b7.tar.gz
mdk-4d0f7706aebe3f1a3fd8623fc819ea637e6ef6b7.tar.bz2
Attach/detach buttons in main toolbar are only active when meaningful.
E.g., if all windows are detached, no 'detach' button appears. git-archimport-id: mdk@sv.gnu.org/mdk--devel--1--patch-35
-rw-r--r--mixgtk/mixgtk.glade2
-rw-r--r--mixgtk/mixgtk_widgets.c1
-rw-r--r--mixgtk/mixgtk_widgets.h1
-rw-r--r--mixgtk/mixgtk_wm.c40
4 files changed, 41 insertions, 3 deletions
diff --git a/mixgtk/mixgtk.glade b/mixgtk/mixgtk.glade
index 8664f96..1de46eb 100644
--- a/mixgtk/mixgtk.glade
+++ b/mixgtk/mixgtk.glade
@@ -798,7 +798,7 @@
</child>
<child>
- <widget class="GtkToolButton" id="dettach_button">
+ <widget class="GtkToolButton" id="detach_button">
<property name="visible">True</property>
<property name="tooltip" translatable="yes">Detach window</property>
<property name="label" translatable="yes">Detach</property>
diff --git a/mixgtk/mixgtk_widgets.c b/mixgtk/mixgtk_widgets.c
index ee6dc69..98e335c 100644
--- a/mixgtk/mixgtk_widgets.c
+++ b/mixgtk/mixgtk_widgets.c
@@ -49,6 +49,7 @@ static const gchar * dnames_[] = {
static const gchar *names_[] = {
"main_statusbar",
"attach_button",
+ "detach_button",
"main_notebook",
"mixvm_widget",
"mixvm_container",
diff --git a/mixgtk/mixgtk_widgets.h b/mixgtk/mixgtk_widgets.h
index d34f819..f89d8e1 100644
--- a/mixgtk/mixgtk_widgets.h
+++ b/mixgtk/mixgtk_widgets.h
@@ -47,6 +47,7 @@ typedef enum {
typedef enum {
MIXGTK_WIDGET_STATUSBAR,
MIXGTK_WIDGET_ATTACH_BUTTON,
+ MIXGTK_WIDGET_DETACH_BUTTON,
MIXGTK_WIDGET_NOTEBOOK, /* the notebook */
MIXGTK_WIDGET_MIXVM, /* virtual machine */
MIXGTK_WIDGET_MIXVM_CONTAINER,
diff --git a/mixgtk/mixgtk_wm.c b/mixgtk/mixgtk_wm.c
index 59f3a7d..6bf691e 100644
--- a/mixgtk/mixgtk_wm.c
+++ b/mixgtk/mixgtk_wm.c
@@ -23,7 +23,6 @@
#include "mixgtk_wm.h"
-#include "mixgtk_widgets.h"
#include "mixgtk_config.h"
#include "mixgtk_device.h"
#include "mixgtk_mixvm.h"
@@ -53,6 +52,9 @@ static GtkContainer *mixvm_container_ = NULL;
static GtkContainer *mixal_container_ = NULL;
static GtkContainer *dev_container_ = NULL;
+static GtkToolItem *attach_button_ = NULL;
+static GtkToolItem *detach_button_ = NULL;
+
static const gchar *TB_MENU_NAME_ = "show_toolbars";
static GtkCheckMenuItem *tb_menu_ = NULL;
static GtkNotebook *notebook_ = NULL;
@@ -78,6 +80,7 @@ static void mixal_attach_ (void);
static void mixal_detach_ (void);
static void dev_attach_ (void);
static void dev_detach_ (void);
+static void update_attach_buttons_ (void);
static void on_nb_switch_ (GtkNotebook *notebook, GtkWidget *page,
guint page_num, gpointer user_data);
@@ -104,6 +107,7 @@ mixgtk_wm_init (void)
init_mixvm_ ();
init_mixal_ ();
init_dev_ ();
+ init_tb_ ();
for (k = 0; k < INF_NO_; ++k)
{
@@ -113,7 +117,6 @@ mixgtk_wm_init (void)
mixgtk_wm_attach_window (k);
}
- init_tb_ ();
init_about_ ();
init_autosave_ ();
init_visibility_ ();
@@ -135,6 +138,7 @@ mixgtk_wm_detach_window (mixgtk_window_id_t w)
if (gtk_notebook_get_n_pages (notebook_) < 1)
gtk_widget_hide (GTK_WIDGET (notebook_));
gtk_widget_show (mixgtk_widget_factory_get_dialog (infos_[w].dialog));
+ update_attach_buttons_ ();
}
}
@@ -154,6 +158,7 @@ mixgtk_wm_attach_window (mixgtk_window_id_t w)
mixgtk_config_update (infos_[w].config_key, DETACH_NO_);
if (gtk_notebook_get_n_pages (notebook_) == 1)
gtk_widget_show (GTK_WIDGET (notebook_));
+ update_attach_buttons_ ();
}
}
@@ -443,6 +448,14 @@ init_tb_ (void)
g_signal_connect (G_OBJECT (tb_menu_), "toggled",
G_CALLBACK (on_show_toolbars_toggled), NULL);
+
+ attach_button_ = GTK_TOOL_ITEM
+ (mixgtk_widget_factory_get (MIXGTK_MAIN, MIXGTK_WIDGET_ATTACH_BUTTON));
+ detach_button_ = GTK_TOOL_ITEM
+ (mixgtk_widget_factory_get (MIXGTK_MAIN, MIXGTK_WIDGET_DETACH_BUTTON));
+
+ g_assert (attach_button_);
+ g_assert (detach_button_);
}
static void
@@ -575,4 +588,27 @@ on_nb_switch_ (GtkNotebook *notebook, GtkWidget *page,
mixgtk_mixal_pop_status ();
}
+static void
+update_attach_buttons_ (void)
+{
+ gint k;
+ gboolean wants_attach = FALSE;
+ gboolean wants_detach = FALSE;
+
+ g_assert (attach_button_);
+ g_assert (detach_button_);
+
+ for (k = 0; k < INF_NO_; ++k)
+ {
+ wants_attach = wants_attach || infos_[k].detached;
+ wants_detach = wants_detach || !infos_[k].detached;
+ }
+
+ gtk_tool_item_set_visible_horizontal (attach_button_, wants_attach);
+ gtk_tool_item_set_visible_vertical (attach_button_, wants_attach);
+ gtk_tool_item_set_visible_horizontal (detach_button_, wants_detach);
+ gtk_tool_item_set_visible_vertical (detach_button_, wants_detach);
+}
+
+