]> git.0d.be Git - empathy.git/commitdiff
DebugWindow: add function to change the service to show
authorEmilio Pozuelo Monfort <emilio.pozuelo@collabora.co.uk>
Wed, 3 Aug 2011 11:15:28 +0000 (12:15 +0100)
committerEmilio Pozuelo Monfort <emilio.pozuelo@collabora.co.uk>
Thu, 4 Aug 2011 09:10:20 +0000 (10:10 +0100)
https://bugzilla.gnome.org/show_bug.cgi?id=655884

src/empathy-debug-window.c
src/empathy-debug-window.h

index 3ce41760f2c100f369516164b2567aac4bce0a90..294c6afe089fbee321c81b848b1c515da6948e8e 100644 (file)
@@ -115,6 +115,9 @@ typedef struct
   /* Service (CM, Client) chooser store */
   GtkListStore *service_store;
 
+  /* Debug to show upon creation */
+  gchar *select_name;
+
   /* Misc. */
   gboolean dispose_run;
   TpAccountManager *am;
@@ -697,6 +700,13 @@ debug_window_get_name_owner_cb (TpDBusDaemon *proxy,
           COL_UNIQUE_NAME, out,
           -1);
 
+      if (priv->select_name != NULL &&
+          !tp_strdiff (name, priv->select_name))
+        {
+          gtk_combo_box_set_active_iter (GTK_COMBO_BOX (priv->chooser), &iter);
+          tp_clear_pointer (&priv->select_name, g_free);
+        }
+
       g_free (name);
     }
 
@@ -1368,6 +1378,37 @@ tree_view_search_equal_func_cb (GtkTreeModel *model,
   return ret;
 }
 
+static void
+empathy_debug_window_select_name (EmpathyDebugWindow *self,
+    const gchar *name)
+{
+  EmpathyDebugWindowPriv *priv = GET_PRIV (self);
+  GtkTreeModel *model = GTK_TREE_MODEL (priv->service_store);
+  GtkTreeIter iter;
+  gchar *iter_name;
+  gboolean valid, found = FALSE;
+
+  for (valid = gtk_tree_model_get_iter_first (model, &iter);
+       valid;
+       valid = gtk_tree_model_iter_next (model, &iter))
+    {
+      gtk_tree_model_get (model, &iter,
+          COL_NAME, &iter_name,
+          -1);
+
+      if (!tp_strdiff (name, iter_name))
+        found = TRUE;
+
+      g_free (iter_name);
+
+      if (found)
+        break;
+    }
+
+  if (found)
+    gtk_combo_box_set_active_iter (GTK_COMBO_BOX (priv->chooser), &iter);
+}
+
 static void
 am_prepared_cb (GObject *am,
     GAsyncResult *res,
@@ -1670,6 +1711,8 @@ debug_window_finalize (GObject *object)
   char *key;
   GList *values;
 
+  g_free (priv->select_name);
+
   g_hash_table_iter_init (&iter, priv->cache);
 
   while (g_hash_table_iter_next (&iter, (gpointer *) &key,
@@ -1747,3 +1790,20 @@ empathy_debug_window_new (GtkWindow *parent)
   return GTK_WIDGET (g_object_new (EMPATHY_TYPE_DEBUG_WINDOW,
       "transient-for", parent, NULL));
 }
+
+void
+empathy_debug_window_show (EmpathyDebugWindow *self,
+    const gchar *name)
+{
+  EmpathyDebugWindowPriv *priv = GET_PRIV (self);
+
+  if (priv->service_store != NULL)
+    {
+      empathy_debug_window_select_name (self, name);
+    }
+  else
+    {
+      g_free (priv->select_name);
+      priv->select_name = g_strdup (name);
+    }
+}
index 22eec3f6fd3e495058489c3fc4c40b17308c2b04..9815c85dec66c184770ed4b06782b9636e386907 100644 (file)
@@ -58,6 +58,9 @@ GType empathy_debug_window_get_type (void) G_GNUC_CONST;
 
 GtkWidget * empathy_debug_window_new (GtkWindow *parent);
 
+void empathy_debug_window_show (EmpathyDebugWindow *self,
+  const gchar *name);
+
 G_END_DECLS
 
 #endif /* __EMPATHY_DEBUG_WINDOW_H__ */