[gnome-control-center/extensible-shell] shell: start the panel specified on the command line



commit 23b6c8e7c77c5f0dae60c8d84abd38ec319193a9
Author: Thomas Wood <thomas wood intel com>
Date:   Wed Feb 24 21:27:36 2010 +0000

    shell: start the panel specified on the command line
    
    Start the panel specified by the .desktop file.

 shell/control-center.c |  105 +++++++++++++++++++++++++++++++++++++-----------
 1 files changed, 81 insertions(+), 24 deletions(-)
---
diff --git a/shell/control-center.c b/shell/control-center.c
index 059c212..fd79b5e 100644
--- a/shell/control-center.c
+++ b/shell/control-center.c
@@ -431,29 +431,12 @@ fill_model (ShellData *data)
 }
 
 static void
-item_activated_cb (GtkIconView *icon_view,
-                   GtkTreePath *path,
-                   ShellData   *data)
+activate_panel (const gchar *id,
+                const gchar *exec,
+                ShellData   *data)
 {
-  GtkTreeModel *model;
-  GtkTreeIter iter;
-  gchar *name, *exec, *id;
   CcPanel *panel;
 
-  /* get exec */
-  model = gtk_icon_view_get_model (icon_view);
-
-  /* get the iter and ensure it is valid */
-  if (!gtk_tree_model_get_iter (model, &iter, path))
-    return;
-
-  gtk_tree_model_get (model, &iter, COL_NAME, &name, COL_EXEC, &exec, COL_ID, &id, -1);
-
-  g_debug ("activated id: '%s'", id);
-
-  g_free (data->current_title);
-  data->current_title = name;
-
   /* first look for a panel module */
   panel = g_hash_table_lookup (data->panels, id);
   if (panel != NULL)
@@ -463,14 +446,17 @@ item_activated_cb (GtkIconView *icon_view,
       gtk_widget_show_all (GTK_WIDGET (panel));
       cc_panel_set_active (panel, TRUE);
 
-      gtk_notebook_insert_page (GTK_NOTEBOOK (data->notebook), GTK_WIDGET (panel), NULL,
-                                CAPPLET_PAGE);
+      gtk_notebook_insert_page (GTK_NOTEBOOK (data->notebook), GTK_WIDGET (panel),
+                                NULL, CAPPLET_PAGE);
 
       gtk_notebook_set_current_page (GTK_NOTEBOOK (data->notebook), CAPPLET_PAGE);
 
-      gtk_label_set_text (GTK_LABEL (gtk_builder_get_object (data->builder, "label-title")),
+      gtk_label_set_text (GTK_LABEL (gtk_builder_get_object (data->builder,
+                                                             "label-title")),
                           data->current_title);
-      gtk_widget_show (GTK_WIDGET (gtk_builder_get_object (data->builder, "title-alignment")));
+
+      gtk_widget_show (GTK_WIDGET (gtk_builder_get_object (data->builder,
+                                                           "title-alignment")));
     }
   else
     {
@@ -479,6 +465,33 @@ item_activated_cb (GtkIconView *icon_view,
       g_spawn_command_line_async (exec, NULL);
     }
 
+}
+
+static void
+item_activated_cb (GtkIconView *icon_view,
+                   GtkTreePath *path,
+                   ShellData   *data)
+{
+  GtkTreeModel *model;
+  GtkTreeIter iter;
+  gchar *name, *exec, *id;
+
+  /* get exec */
+  model = gtk_icon_view_get_model (icon_view);
+
+  /* get the iter and ensure it is valid */
+  if (!gtk_tree_model_get_iter (model, &iter, path))
+    return;
+
+  gtk_tree_model_get (model, &iter, COL_NAME, &name, COL_EXEC, &exec, COL_ID, &id, -1);
+
+  g_debug ("activated id: '%s'", id);
+
+  g_free (data->current_title);
+  data->current_title = name;
+
+  activate_panel (id, exec, data);
+
   g_free (id);
   g_free (exec);
 }
@@ -636,6 +649,50 @@ main (int argc, char **argv)
 
   gtk_widget_show_all (data->window);
 
+  if (argc == 2)
+    {
+      GtkTreeIter iter;
+      gboolean iter_valid;
+      gchar *start_id;
+      gchar *name;
+
+      start_id = argv[1];
+
+      iter_valid = gtk_tree_model_get_iter_first (data->store, &iter);
+
+      while (iter_valid)
+        {
+          gchar *id;
+
+          /* find the details for this item */
+          gtk_tree_model_get (data->store, &iter,
+                              COL_NAME, &name,
+                              COL_ID, &id,
+                              -1);
+          if (id && !strcmp (id, start_id))
+            {
+              g_free (id);
+              break;
+            }
+          else
+            {
+              g_free (id);
+              g_free (name);
+
+              name = NULL;
+              id = NULL;
+            }
+
+
+          iter_valid = gtk_tree_model_iter_next (data->store, &iter);
+        }
+
+      g_free (data->current_title);
+      data->current_title = name;
+
+      activate_panel (start_id, start_id, data);
+    }
+
   gtk_main ();
 
   g_free (data->filter_string);



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]