]> git.0d.be Git - empathy.git/blobdiff - src/empathy-debug-dialog.c
Merge branch 'debugger'
[empathy.git] / src / empathy-debug-dialog.c
index 93edfc740d6cb131d5d33b48906008c45fe28698..cd0d925f9447be22af68f68212cfa32354073471 100644 (file)
@@ -75,12 +75,16 @@ typedef struct
   GtkToolItem *copy_button;
   GtkToolItem *clear_button;
   GtkToolItem *pause_button;
+  GtkToolItem *level_label;
   GtkWidget *level_filter;
 
   /* TreeView */
   GtkListStore *store;
   GtkTreeModel *store_filter;
   GtkWidget *view;
+  GtkWidget *scrolled_win;
+  GtkWidget *not_supported_label;
+  gboolean view_visible;
 
   /* Connection */
   TpDBusDaemon *dbus;
@@ -203,6 +207,38 @@ debug_dialog_set_enabled (EmpathyDebugDialog *debug_dialog,
   tp_g_value_slice_free (val);
 }
 
+static void
+debug_dialog_set_toolbar_sensitivity (EmpathyDebugDialog *debug_dialog,
+    gboolean sensitive)
+{
+  EmpathyDebugDialogPriv *priv = GET_PRIV (debug_dialog);
+  GtkWidget *vbox = GTK_DIALOG (debug_dialog)->vbox;
+
+  gtk_widget_set_sensitive (GTK_WIDGET (priv->save_button), sensitive);
+  gtk_widget_set_sensitive (GTK_WIDGET (priv->copy_button), sensitive);
+  gtk_widget_set_sensitive (GTK_WIDGET (priv->clear_button), sensitive);
+  gtk_widget_set_sensitive (GTK_WIDGET (priv->pause_button), sensitive);
+  gtk_widget_set_sensitive (GTK_WIDGET (priv->level_label), sensitive);
+  gtk_widget_set_sensitive (GTK_WIDGET (priv->level_filter), sensitive);
+  gtk_widget_set_sensitive (GTK_WIDGET (priv->view), sensitive);
+
+  if (sensitive && !priv->view_visible)
+    {
+      /* Add view and remove label */
+      gtk_container_remove (GTK_CONTAINER (vbox), priv->not_supported_label);
+      gtk_box_pack_start (GTK_BOX (vbox), priv->scrolled_win, TRUE, TRUE, 0);
+      priv->view_visible = TRUE;
+    }
+  else if (!sensitive && priv->view_visible)
+    {
+      /* Add label and remove view */
+      gtk_container_remove (GTK_CONTAINER (vbox), priv->scrolled_win);
+      gtk_box_pack_start (GTK_BOX (vbox), priv->not_supported_label,
+          TRUE, TRUE, 0);
+      priv->view_visible = FALSE;
+    }
+}
+
 static void
 debug_dialog_get_messages_cb (TpProxy *proxy,
     const GPtrArray *messages,
@@ -217,9 +253,12 @@ debug_dialog_get_messages_cb (TpProxy *proxy,
   if (error != NULL)
     {
       DEBUG ("GetMessages failed: %s", error->message);
+      debug_dialog_set_toolbar_sensitivity (debug_dialog, FALSE);
       return;
     }
 
+  debug_dialog_set_toolbar_sensitivity (debug_dialog, TRUE);
+
   for (i = 0; i < messages->len; i++)
     {
       GValueArray *values = g_ptr_array_index (messages, i);
@@ -391,8 +430,6 @@ debug_dialog_get_name_owner_cb (TpDBusDaemon *proxy,
           COL_CM_NAME, data->cm_name,
           COL_CM_UNIQUE_NAME, out,
           -1);
-
-      gtk_combo_box_set_active (GTK_COMBO_BOX (priv->cm_chooser), 0);
     }
 
 OUT:
@@ -425,6 +462,7 @@ debug_dialog_list_connection_names_cb (const gchar * const *names,
   if (error2 != NULL)
     {
       DEBUG ("Failed to dup TpDBusDaemon.");
+      g_error_free (error2);
       return;
     }
 
@@ -528,6 +566,7 @@ debug_dialog_fill_cm_chooser (EmpathyDebugDialog *debug_dialog)
 {
   EmpathyDebugDialogPriv *priv = GET_PRIV (debug_dialog);
   GError *error = NULL;
+  GtkTreeIter iter;
 
   priv->dbus = tp_dbus_daemon_dup (&error);
 
@@ -538,6 +577,15 @@ debug_dialog_fill_cm_chooser (EmpathyDebugDialog *debug_dialog)
       return;
     }
 
+  /* Add empathy */
+  gtk_list_store_append (priv->cms, &iter);
+  gtk_list_store_set (priv->cms, &iter,
+      COL_CM_NAME, "empathy",
+      COL_CM_UNIQUE_NAME, "org.gnome.Empathy",
+      -1);
+  gtk_combo_box_set_active (GTK_COMBO_BOX (priv->cm_chooser), 0);
+
+  /* Add CMs to list */
   tp_list_connection_names (priv->dbus, debug_dialog_list_connection_names_cb,
       debug_dialog, NULL, NULL);
 
@@ -890,7 +938,6 @@ debug_dialog_constructor (GType type,
   GtkWidget *label;
   GtkToolItem *item;
   GtkCellRenderer *renderer;
-  GtkWidget *scrolled_win;
   GtkListStore *level_store;
   GtkTreeIter iter;
 
@@ -923,7 +970,6 @@ debug_dialog_constructor (GType type,
   gtk_widget_show (GTK_WIDGET (item));
   gtk_container_add (GTK_CONTAINER (item), priv->cm_chooser);
   gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, -1);
-  debug_dialog_fill_cm_chooser (EMPATHY_DEBUG_DIALOG (object));
   g_signal_connect (priv->cm_chooser, "changed",
       G_CALLBACK (debug_dialog_cm_chooser_changed_cb), object);
   gtk_widget_show (GTK_WIDGET (priv->cm_chooser));
@@ -982,12 +1028,12 @@ debug_dialog_constructor (GType type,
   gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, -1);
 
   /* Level */
-  item = gtk_tool_item_new ();
-  gtk_widget_show (GTK_WIDGET (item));
+  priv->level_label = gtk_tool_item_new ();
+  gtk_widget_show (GTK_WIDGET (priv->level_label));
   label = gtk_label_new (_("Level "));
   gtk_widget_show (label);
-  gtk_container_add (GTK_CONTAINER (item), label);
-  gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, -1);
+  gtk_container_add (GTK_CONTAINER (priv->level_label), label);
+  gtk_toolbar_insert (GTK_TOOLBAR (toolbar), priv->level_label, -1);
 
   priv->level_filter = gtk_combo_box_new_text ();
   gtk_widget_show (priv->level_filter);
@@ -1080,16 +1126,26 @@ debug_dialog_constructor (GType type,
   gtk_tree_view_set_model (GTK_TREE_VIEW (priv->view), priv->store_filter);
 
   /* Scrolled window */
-  scrolled_win = gtk_scrolled_window_new (NULL, NULL);
-  gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win),
+  priv->scrolled_win = g_object_ref (gtk_scrolled_window_new (NULL, NULL));
+  gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (priv->scrolled_win),
       GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
 
   gtk_widget_show (priv->view);
-  gtk_container_add (GTK_CONTAINER (scrolled_win), priv->view);
+  gtk_container_add (GTK_CONTAINER (priv->scrolled_win), priv->view);
 
-  gtk_widget_show (scrolled_win);
-  gtk_box_pack_start (GTK_BOX (vbox), scrolled_win, TRUE, TRUE, 0);
+  gtk_widget_show (priv->scrolled_win);
 
+  /* Not supported label */
+  priv->not_supported_label = g_object_ref (gtk_label_new (
+          _("The selected connection manager does not support the remote "
+              "debugging extension.")));
+  gtk_widget_show (priv->not_supported_label);
+  gtk_box_pack_start (GTK_BOX (vbox), priv->not_supported_label, TRUE, TRUE, 0);
+
+  priv->view_visible = FALSE;
+
+  debug_dialog_set_toolbar_sensitivity (EMPATHY_DEBUG_DIALOG (object), FALSE);
+  debug_dialog_fill_cm_chooser (EMPATHY_DEBUG_DIALOG (object));
   gtk_widget_show (GTK_WIDGET (object));
 
   return object;