From b8d094cad7ace3b1750cd37c9332923896d36567 Mon Sep 17 00:00:00 2001 From: Thomas Wood Date: Thu, 3 Jun 2010 11:47:36 +0100 Subject: [PATCH] shell: load the X-GNOME-Settings-Panel ID into the data model Load the panel id from the .desktop file into the model so that it does not need to be loaded again later. --- shell/cc-shell-model.c | 23 ++++++++++++++++++-- shell/gnome-control-center.c | 42 +++++++----------------------------- 2 files changed, 29 insertions(+), 36 deletions(-) diff --git a/shell/cc-shell-model.c b/shell/cc-shell-model.c index 6c5ac3421..741007e27 100644 --- a/shell/cc-shell-model.c +++ b/shell/cc-shell-model.c @@ -22,6 +22,9 @@ #include "cc-shell-model.h" #include +#define GNOME_SETTINGS_PANEL_ID_KEY "X-GNOME-Settings-Panel" + + G_DEFINE_TYPE (CcShellModel, cc_shell_model, GTK_TYPE_LIST_STORE) static void @@ -53,14 +56,30 @@ cc_shell_model_add_item (CcShellModel *model, { const gchar *icon = gmenu_tree_entry_get_icon (item); const gchar *name = gmenu_tree_entry_get_name (item); - const gchar *id = gmenu_tree_entry_get_desktop_file_id (item); const gchar *desktop = gmenu_tree_entry_get_desktop_file_path (item); const gchar *comment = gmenu_tree_entry_get_comment (item); + gchar *id; GdkPixbuf *pixbuf = NULL; gchar *icon2 = NULL; GError *err = NULL; gchar *search_target; + GKeyFile *key_file; + /* load the .desktop file since gnome-menus doesn't have a way to read + * custom properties from desktop files */ + + key_file = g_key_file_new (); + g_key_file_load_from_file (key_file, desktop, 0, NULL); + + id = g_key_file_get_string (key_file, "Desktop Entry", + GNOME_SETTINGS_PANEL_ID_KEY, NULL); + g_key_file_free (key_file); + key_file = NULL; + + if (!id) + id = g_strdup (gmenu_tree_entry_get_desktop_file_id (item)); + + /* find the icon */ if (icon != NULL && *icon == '/') { pixbuf = gdk_pixbuf_new_from_file_at_scale (icon, 32, 32, TRUE, &err); @@ -97,6 +116,6 @@ cc_shell_model_add_item (CcShellModel *model, COL_ICON_NAME, icon, -1); + g_free (id); g_free (search_target); - } diff --git a/shell/gnome-control-center.c b/shell/gnome-control-center.c index fcf925f1a..554f1e6da 100644 --- a/shell/gnome-control-center.c +++ b/shell/gnome-control-center.c @@ -44,8 +44,6 @@ G_DEFINE_TYPE (GnomeControlCenter, gnome_control_center, CC_TYPE_SHELL) #define W(b,x) GTK_WIDGET (gtk_builder_get_object (b, x)) -#define GNOME_SETTINGS_PANEL_ID_KEY "X-GNOME-Settings-Panel" - enum { OVERVIEW_PAGE, @@ -79,7 +77,7 @@ struct _GnomeControlCenterPrivate static void activate_panel (GnomeControlCenter *shell, - const gchar *nid, + const gchar *id, const gchar *desktop_file, const gchar *name, const gchar *icon_name) @@ -88,10 +86,9 @@ activate_panel (GnomeControlCenter *shell, GAppInfo *appinfo; GError *err = NULL; GdkAppLaunchContext *ctx; - GKeyFile *key_file; GType panel_type = G_TYPE_INVALID; GList *panels, *l; - gchar *panel_id; + GKeyFile *key_file; /* check if there is an plugin that implements this panel */ panels = g_io_extension_point_get_extensions (priv->extension_point); @@ -99,13 +96,7 @@ activate_panel (GnomeControlCenter *shell, if (!desktop_file) return; - key_file = g_key_file_new (); - g_key_file_load_from_file (key_file, desktop_file, 0, &err); - - panel_id = g_key_file_get_string (key_file, "Desktop Entry", - GNOME_SETTINGS_PANEL_ID_KEY, NULL); - - if (panel_id) + if (id) { for (l = panels; l != NULL; l = l->next) @@ -117,16 +108,13 @@ activate_panel (GnomeControlCenter *shell, name = g_io_extension_get_name (extension); - if (!g_strcmp0 (name, panel_id)) + if (!g_strcmp0 (name, id)) { panel_type = g_io_extension_get_type (extension); break; } } - g_free (panel_id); - panel_id = NULL; - if (panel_type != G_TYPE_INVALID) { GtkWidget *panel; @@ -150,9 +138,6 @@ activate_panel (GnomeControlCenter *shell, gtk_window_set_title (GTK_WINDOW (priv->window), name); gtk_window_set_icon_name (GTK_WINDOW (priv->window), icon_name); - g_key_file_free (key_file); - key_file = NULL; - return; } } @@ -167,12 +152,12 @@ activate_panel (GnomeControlCenter *shell, g_error_free (err); err = NULL; - g_key_file_free (key_file); - key_file = NULL; - return; } + key_file = g_key_file_new (); + g_key_file_load_from_file (key_file, desktop_file, 0, &err); + appinfo = (GAppInfo*) g_desktop_app_info_new_from_keyfile (key_file); g_key_file_free (key_file); @@ -717,26 +702,15 @@ _shell_set_active_panel_from_id (CcShell *shell, /* find the details for this item */ while (iter_valid) { - GKeyFile *key_file; gchar *id; gtk_tree_model_get (GTK_TREE_MODEL (priv->store), &iter, COL_NAME, &name, COL_DESKTOP_FILE, &desktop, COL_ICON_NAME, &icon_name, + COL_ID, &id, -1); - /* load the .desktop file since gnome-menus doesn't have a way to read - * custom properties from desktop files */ - - key_file = g_key_file_new (); - g_key_file_load_from_file (key_file, desktop, 0, NULL); - - id = g_key_file_get_string (key_file, "Desktop Entry", - GNOME_SETTINGS_PANEL_ID_KEY, NULL); - g_key_file_free (key_file); - key_file = NULL; - if (id && !strcmp (id, start_id)) { g_free (id);