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.
This commit is contained in:
Thomas Wood 2010-06-03 11:47:36 +01:00
parent 3f06cc6fbb
commit b8d094cad7
2 changed files with 29 additions and 36 deletions

View file

@ -22,6 +22,9 @@
#include "cc-shell-model.h"
#include <string.h>
#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);
}

View file

@ -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);