summaryrefslogtreecommitdiff
path: root/src/trg-menu-bar.c
diff options
context:
space:
mode:
authorGravatar Alan Fitton <ajf@eth0.org.uk>2011-09-12 17:52:51 +0000
committerGravatar Alan Fitton <ajf@eth0.org.uk>2011-09-12 17:52:51 +0000
commit12c9db45149b9bbd926913bb0db2769cacca5e35 (patch)
tree659c7aa6e8066fce7b79feefabd3242fbac8dde7 /src/trg-menu-bar.c
parent1ec4eb81c9bb4f6d720e0f77e504b1ca01d408b5 (diff)
issue 91 - seems to work for me, but looks like changing state in GtkCheckMenuItem inside expose-event causes it to be blank for some. add a pref-changed signal and use this to trigger an update.
Diffstat (limited to 'src/trg-menu-bar.c')
-rw-r--r--src/trg-menu-bar.c21
1 files changed, 12 insertions, 9 deletions
diff --git a/src/trg-menu-bar.c b/src/trg-menu-bar.c
index a206179..2d955d8 100644
--- a/src/trg-menu-bar.c
+++ b/src/trg-menu-bar.c
@@ -57,6 +57,8 @@ enum {
PROP_START_NOW
};
+#define G_DATAKEY_CONF_KEY "conf-key"
+
G_DEFINE_TYPE(TrgMenuBar, trg_menu_bar, GTK_TYPE_MENU_BAR)
#define TRG_MENU_BAR_GET_PRIVATE(o) \
(G_TYPE_INSTANCE_GET_PRIVATE ((o), TRG_TYPE_MENU_BAR, TrgMenuBarPrivate))
@@ -293,7 +295,7 @@ GtkWidget *trg_menu_bar_item_new(GtkMenuShell * shell, char *text,
static void view_menu_item_toggled_cb(GtkCheckMenuItem * w, gpointer data)
{
TrgPrefs *p = TRG_PREFS(data);
- gchar *key = (gchar*)g_object_get_data(G_OBJECT(w), "conf-key");
+ gchar *key = (gchar*)g_object_get_data(G_OBJECT(w), G_DATAKEY_CONF_KEY);
trg_prefs_set_bool(p, key, gtk_check_menu_item_get_active(w), TRG_PREFS_GLOBAL);
}
@@ -302,21 +304,22 @@ static void view_menu_bar_toggled_dependency_cb(GtkCheckMenuItem *w, gpointer da
gtk_widget_set_sensitive(GTK_WIDGET(data), gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(w)));
}
-static void trg_menu_bar_view_item_exposed(GtkWidget *w, GdkEvent *event G_GNUC_UNUSED, gpointer data)
+static void trg_menu_bar_view_item_update(TrgPrefs *p, gchar *updatedKey, gpointer data)
{
- TrgPrefs *prefs = TRG_PREFS(data);
- gchar *key = (gchar*)g_object_get_data(G_OBJECT(w), "conf-key");
- gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM
- (w), trg_prefs_get_bool(prefs, key, TRG_PREFS_GLOBAL));
+ gchar *key = (gchar*)g_object_get_data(G_OBJECT(data), G_DATAKEY_CONF_KEY);
+ if (!g_strcmp0(updatedKey, key))
+ gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(data) , trg_prefs_get_bool(p, key, TRG_PREFS_GLOBAL));
}
static GtkWidget *trg_menu_bar_view_item_new(TrgPrefs *prefs, gchar *key,
gchar *label, GtkWidget *dependency)
{
GtkWidget *w = gtk_check_menu_item_new_with_label(label);
- g_object_set_data_full(G_OBJECT(w), "conf-key", g_strdup(key),
+ g_object_set_data_full(G_OBJECT(w), G_DATAKEY_CONF_KEY, g_strdup(key),
g_free);
+ gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(w) , trg_prefs_get_bool(prefs, key, TRG_PREFS_GLOBAL));
+
if (dependency) {
gtk_widget_set_sensitive(w, gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(dependency)));
g_signal_connect(dependency, "toggled",
@@ -325,8 +328,8 @@ static GtkWidget *trg_menu_bar_view_item_new(TrgPrefs *prefs, gchar *key,
g_signal_connect(w, "toggled",
G_CALLBACK(view_menu_item_toggled_cb), prefs);
- g_signal_connect(w, "expose-event",
- G_CALLBACK(trg_menu_bar_view_item_exposed), prefs);
+ g_signal_connect(prefs, "pref-changed",
+ G_CALLBACK(trg_menu_bar_view_item_update), w);
return w;
}