[rhythmbox] status-icon: sync gconf and action status for config items (bug #584248)
- From: Jonathan Matthew <jmatthew src gnome org>
- To: svn-commits-list gnome org
- Subject: [rhythmbox] status-icon: sync gconf and action status for config items (bug #584248)
- Date: Mon, 1 Jun 2009 09:00:44 -0400 (EDT)
commit 1bb4271da855100a3bbaf7383beb82e2648115a9
Author: Jonathan Matthew <jonathan d14n org>
Date: Mon Jun 1 22:58:07 2009 +1000
status-icon: sync gconf and action status for config items (bug #584248)
---
plugins/status-icon/rb-status-icon-plugin.c | 44 ++++++++++++++++++++++-----
1 files changed, 36 insertions(+), 8 deletions(-)
diff --git a/plugins/status-icon/rb-status-icon-plugin.c b/plugins/status-icon/rb-status-icon-plugin.c
index 0f5bbb0..86c97e4 100644
--- a/plugins/status-icon/rb-status-icon-plugin.c
+++ b/plugins/status-icon/rb-status-icon-plugin.c
@@ -88,6 +88,8 @@ struct _RBStatusIconPluginPrivate
guint gconf_notify_id;
/* configuration */
+ gboolean syncing_actions;
+ gboolean syncing_config_widgets;
enum {
ICON_NEVER = 0,
ICON_WITH_NOTIFY,
@@ -118,6 +120,8 @@ struct _RBStatusIconPluginPrivate
#endif
GtkWidget *config_dialog;
+ GtkWidget *notify_combo;
+ GtkWidget *icon_combo;
RBShellPlayer *shell_player;
RBShell *shell;
@@ -187,6 +191,9 @@ toggle_window_cmd (GtkAction *action, RBStatusIconPlugin *plugin)
static void
show_window_cmd (GtkAction *action, RBStatusIconPlugin *plugin)
{
+ if (plugin->priv->syncing_actions)
+ return;
+
g_object_set (plugin->priv->shell,
"visibility", gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action)),
NULL);
@@ -198,6 +205,9 @@ show_notifications_cmd (GtkAction *action, RBStatusIconPlugin *plugin)
gboolean active;
int new_mode;
+ if (plugin->priv->syncing_actions)
+ return;
+
/* we've only got on/off here, so map that to 'never' or 'only when hidden' */
active = gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action));
new_mode = active ? NOTIFY_HIDDEN : NOTIFY_NEVER;
@@ -260,6 +270,8 @@ sync_actions (RBStatusIconPlugin *plugin)
GtkAction *action;
gboolean visible;
+ plugin->priv->syncing_actions = TRUE;
+
action = gtk_action_group_get_action (plugin->priv->action_group,
"TrayShowWindow");
g_object_get (plugin->priv->shell, "visibility", &visible, NULL);
@@ -278,6 +290,8 @@ sync_actions (RBStatusIconPlugin *plugin)
action = gtk_action_group_get_action (plugin->priv->action_group,
"MusicClose");
gtk_action_set_visible (action, plugin->priv->icon_mode == ICON_OWNS_WINDOW);
+
+ plugin->priv->syncing_actions = FALSE;
}
static void
@@ -1064,12 +1078,18 @@ cleanup_status_icon (RBStatusIconPlugin *plugin)
static void
notification_config_changed_cb (GtkComboBox *widget, RBStatusIconPlugin *plugin)
{
+ if (plugin->priv->syncing_config_widgets)
+ return;
+
eel_gconf_set_integer (CONF_NOTIFICATION_MODE, gtk_combo_box_get_active (widget));
}
static void
status_icon_config_changed_cb (GtkComboBox *widget, RBStatusIconPlugin *plugin)
{
+ if (plugin->priv->syncing_config_widgets)
+ return;
+
eel_gconf_set_integer (CONF_STATUS_ICON_MODE, gtk_combo_box_get_active (widget));
}
@@ -1121,9 +1141,19 @@ config_notify_cb (GConfClient *client, guint connection_id, GConfEntry *entry, R
update_status_icon_visibility (plugin, FALSE); /* maybe should remember if we're notifying.. */
sync_actions (plugin);
+ plugin->priv->syncing_config_widgets = TRUE;
+ gtk_combo_box_set_active (GTK_COMBO_BOX (plugin->priv->icon_combo), plugin->priv->icon_mode);
+ plugin->priv->syncing_config_widgets = FALSE;
+
} else if (g_str_equal (gconf_entry_get_key (entry), CONF_NOTIFICATION_MODE)) {
plugin->priv->notify_mode = gconf_value_get_int (gconf_entry_get_value (entry));
rb_debug ("notify mode changed to %d", plugin->priv->notify_mode);
+
+ sync_actions (plugin);
+
+ plugin->priv->syncing_config_widgets = TRUE;
+ gtk_combo_box_set_active (GTK_COMBO_BOX (plugin->priv->notify_combo), plugin->priv->notify_mode);
+ plugin->priv->syncing_config_widgets = FALSE;
}
}
@@ -1135,8 +1165,6 @@ impl_get_config_widget (RBPlugin *bplugin)
{
RBStatusIconPlugin *plugin;
GtkBuilder *builder;
- GtkComboBox *icon_combo;
- GtkComboBox *notify_combo;
char *builderfile;
plugin = RB_STATUS_ICON_PLUGIN (bplugin);
@@ -1162,18 +1190,18 @@ impl_get_config_widget (RBPlugin *bplugin)
/* connect signals and stuff */
g_signal_connect_object (plugin->priv->config_dialog, "response", G_CALLBACK (config_response_cb), plugin, 0);
- icon_combo = GTK_COMBO_BOX (gtk_builder_get_object (builder, "statusiconmode"));
- notify_combo = GTK_COMBO_BOX (gtk_builder_get_object (builder, "notificationmode"));
- g_signal_connect_object (notify_combo,
+ plugin->priv->icon_combo = GTK_WIDGET (gtk_builder_get_object (builder, "statusiconmode"));
+ plugin->priv->notify_combo = GTK_WIDGET (gtk_builder_get_object (builder, "notificationmode"));
+ g_signal_connect_object (plugin->priv->notify_combo,
"changed",
G_CALLBACK (notification_config_changed_cb),
plugin, 0);
- g_signal_connect_object (icon_combo,
+ g_signal_connect_object (plugin->priv->icon_combo,
"changed",
G_CALLBACK (status_icon_config_changed_cb),
plugin, 0);
- gtk_combo_box_set_active (notify_combo, plugin->priv->notify_mode);
- gtk_combo_box_set_active (icon_combo, plugin->priv->icon_mode);
+ gtk_combo_box_set_active (GTK_COMBO_BOX (plugin->priv->notify_combo), plugin->priv->notify_mode);
+ gtk_combo_box_set_active (GTK_COMBO_BOX (plugin->priv->icon_combo), plugin->priv->icon_mode);
g_object_unref (builder);
return plugin->priv->config_dialog;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]