gtk_list_store_set (self->priv->service_store, &iter,
COL_PROXY, NULL,
-1);
+
+ g_object_unref (stored_proxy);
}
/* Also, we refresh "All" selection's active buffer since it should not
* selected service is unable to fetch debug messages */
if (!tp_strdiff (active_service_name, proxy_service_name))
debug_window_set_toolbar_sensitivity (self, FALSE);
-
- /* We created the proxy for GetMessages call. Now destroy it. */
- tp_clear_object (&debug);
return;
}
DEBUG ("Proxy for service: %s was successful in fetching debug"
" messages. Saving it.", proxy_service_name);
+ /* The store will take its own ref on the proxy preventing it to be
+ * destroyed when leaving this callback. */
gtk_list_store_set (self->priv->service_store, &iter,
COL_PROXY, debug,
-1);
tp_debug_client_get_messages_async (TP_DEBUG_CLIENT (new_proxy),
debug_window_get_messages_cb, self);
+ g_object_unref (new_proxy);
+
finally:
g_free (name);
tp_clear_object (&stored_proxy);
(G_OBJECT_CLASS (empathy_debug_window_parent_class)->finalize) (object);
}
+static void
+disable_all_debug_clients (EmpathyDebugWindow *self)
+{
+ GtkTreeIter iter;
+ gboolean valid_iter;
+ GtkTreeModel *model;
+
+ if (self->priv->service_store == NULL)
+ return;
+ model = GTK_TREE_MODEL (self->priv->service_store);
+
+ /* Skipping the first service store iter which is reserved for "All" */
+ gtk_tree_model_get_iter_first (model, &iter);
+ for (valid_iter = gtk_tree_model_iter_next (model, &iter);
+ valid_iter;
+ valid_iter = gtk_tree_model_iter_next (model, &iter))
+ {
+ TpDebugClient *debug;
+
+ gtk_tree_model_get (model, &iter,
+ COL_PROXY, &debug,
+ -1);
+
+ debug_window_set_enabled (debug, FALSE);
+
+ g_object_unref (debug);
+ }
+}
+
static void
debug_window_dispose (GObject *object)
{
tp_proxy_signal_connection_disconnect (
self->priv->name_owner_changed_signal);
+ /* Disable Debug on all proxies */
+ disable_all_debug_clients (self);
+
g_clear_object (&self->priv->service_store);
g_clear_object (&self->priv->dbus);
g_clear_object (&self->priv->am);