]> cgit.babelmonkeys.de Git - jubjub.git/blobdiff - src/gui/gtk/JubGtkRosterUI.m
Make the PresenceComboBox's changed handler only fire when the user changed it
[jubjub.git] / src / gui / gtk / JubGtkRosterUI.m
index 90bad6fa50c53abd97a0c916afa7c816e5405610..ae0d54d778d78ab296d876413f93fe7e5d0f19be 100644 (file)
@@ -127,8 +127,9 @@ static gboolean filter_roster_by_presence(GtkTreeModel *model,
                presence_combo = GTK_COMBO_BOX(gtk_builder_get_object(builder,
                        "PresenceComboBox"));
 
-               g_signal_connect(presence_combo, "changed",
-                   G_CALLBACK(presence_changed), connection);
+               presence_combo_changed_handler_id =
+                   g_signal_connect(presence_combo, "changed",
+                       G_CALLBACK(presence_changed), connection);
 
                g_object_unref(G_OBJECT(builder));
        } @catch (id e) {
@@ -376,8 +377,12 @@ static gboolean filter_roster_by_presence(GtkTreeModel *model,
        if (status != nil)
                tooltip = [@"<b>Status:</b> " stringByAppendingString: status];
 
-       // FIXME: Changing the active id will send another presence
        g_idle_add_block(^{
+               // Block the PresenceComboBox's changed handler, so it doesn't
+               // fire and resend presence
+               g_signal_handler_block(presence_combo,
+                   presence_combo_changed_handler_id);
+
                if ([presence.type isEqual: @"unavailable"])
                        gtk_combo_box_set_active_id(presence_combo,
                            "unavailable");
@@ -388,6 +393,9 @@ static gboolean filter_roster_by_presence(GtkTreeModel *model,
                        gtk_combo_box_set_active_id(presence_combo,
                            [show UTF8String]);
 
+               // Unblock the changed handler
+               g_signal_handler_unblock(presence_combo,
+                   presence_combo_changed_handler_id);
 
                gtk_widget_set_tooltip_markup(GTK_WIDGET(presence_combo),
                    [tooltip UTF8String]);