]> git.0d.be Git - empathy.git/commitdiff
Remove balance from menu when account is disconnected
authorDanielle Madeley <danielle.madeley@collabora.co.uk>
Fri, 15 Apr 2011 04:33:20 +0000 (14:33 +1000)
committerDanielle Madeley <danielle.madeley@collabora.co.uk>
Thu, 5 May 2011 07:05:09 +0000 (17:05 +1000)
src/empathy-main-window.c

index 8d031385a7ee27651d9f608ad65e963089c36cd1..03386a01a1f023f0f9066164be6f6ad3065bd65f 100644 (file)
@@ -880,6 +880,7 @@ main_window_setup_balance_conn_ready (GObject      *conn,
        TpAccount *account = g_object_get_data (conn, "account");
        GtkAction *action;
        char *name, *ui;
+       guint merge_id;
        GError *error = NULL;
 
        if (!tp_proxy_prepare_finish (conn, result, &error)) {
@@ -932,9 +933,10 @@ main_window_setup_balance_conn_ready (GObject      *conn,
                "</ui>",
                name);
 
-       /* FIXME: do we want the merge id, can use it to unmerge the UI */
-       gtk_ui_manager_add_ui_from_string (priv->ui_manager, ui, -1,
-               &error);
+       merge_id = gtk_ui_manager_add_ui_from_string (priv->ui_manager,
+               ui, -1, &error);
+       g_object_set_data (G_OBJECT (action),
+               "merge-id", GUINT_TO_POINTER (merge_id));
 
        g_free (name);
        g_free (ui);
@@ -997,7 +999,33 @@ main_window_connection_changed_cb (TpAccount  *account,
                empathy_sound_manager_play (priv->sound_mgr, GTK_WIDGET (window),
                                    EMPATHY_SOUND_ACCOUNT_DISCONNECTED);
 
-               /* FIXME: remove balance */
+               /* remove balance action if required */
+               if (priv->balance_action_group != NULL) {
+                       GtkAction *action;
+                       char *name;
+
+                       name = main_window_account_to_action_name (account);
+
+                       action = gtk_action_group_get_action (
+                               priv->balance_action_group, name);
+
+                       if (action != NULL) {
+                               guint merge_id;
+
+                               DEBUG ("Removing action");
+
+                               merge_id = GPOINTER_TO_UINT (g_object_get_data (
+                                       G_OBJECT (action),
+                                       "merge-id"));
+
+                               gtk_ui_manager_remove_ui (priv->ui_manager,
+                                       merge_id);
+                               gtk_action_group_remove_action (
+                                       priv->balance_action_group, action);
+                       }
+
+                       g_free (name);
+               }
        }
 
        if (current == TP_CONNECTION_STATUS_CONNECTED) {