shell: Use the X-GNOME-Settings-Panel value to identify panels

Use the custom .desktop file field to identify panels and make sure the
panel implementations use the name to identify themselves.
This commit is contained in:
Thomas Wood 2010-06-02 16:20:45 +01:00
parent 8aa419dabc
commit d91e466f93
7 changed files with 70 additions and 55 deletions

View file

@ -106,6 +106,6 @@ cc_example_panel_register (GIOModule *module)
cc_example_panel_register_type (G_TYPE_MODULE (module)); cc_example_panel_register_type (G_TYPE_MODULE (module));
g_io_extension_point_implement (CC_SHELL_PANEL_EXTENSION_POINT, g_io_extension_point_implement (CC_SHELL_PANEL_EXTENSION_POINT,
CC_TYPE_EXAMPLE_PANEL, CC_TYPE_EXAMPLE_PANEL,
"gnome-example-panel.desktop", 0); "example-panel", 0);
} }

View file

@ -127,6 +127,6 @@ cc_default_applications_panel_register (GIOModule *module)
cc_default_applications_panel_register_type (G_TYPE_MODULE (module)); cc_default_applications_panel_register_type (G_TYPE_MODULE (module));
g_io_extension_point_implement (CC_SHELL_PANEL_EXTENSION_POINT, g_io_extension_point_implement (CC_SHELL_PANEL_EXTENSION_POINT,
CC_TYPE_DEFAULT_APPLICATIONS_PANEL, CC_TYPE_DEFAULT_APPLICATIONS_PANEL,
"default-applications.desktop", 0); "default-applications", 0);
} }

View file

@ -125,6 +125,6 @@ cc_keybindings_panel_register (GIOModule *module)
cc_keybindings_panel_register_type (G_TYPE_MODULE (module)); cc_keybindings_panel_register_type (G_TYPE_MODULE (module));
g_io_extension_point_implement (CC_SHELL_PANEL_EXTENSION_POINT, g_io_extension_point_implement (CC_SHELL_PANEL_EXTENSION_POINT,
CC_TYPE_KEYBINDINGS_PANEL, CC_TYPE_KEYBINDINGS_PANEL,
"keybinding.desktop", 0); "keybinding", 0);
} }

View file

@ -135,5 +135,5 @@ cc_keyboard_panel_register (GIOModule * module)
cc_keyboard_panel_register_type (G_TYPE_MODULE (module)); cc_keyboard_panel_register_type (G_TYPE_MODULE (module));
g_io_extension_point_implement (CC_SHELL_PANEL_EXTENSION_POINT, g_io_extension_point_implement (CC_SHELL_PANEL_EXTENSION_POINT,
CC_TYPE_KEYBOARD_PANEL, CC_TYPE_KEYBOARD_PANEL,
"keyboard.desktop", 0); "keyboard", 0);
} }

View file

@ -142,6 +142,6 @@ cc_mouse_panel_register (GIOModule *module)
cc_mouse_panel_register_type (G_TYPE_MODULE (module)); cc_mouse_panel_register_type (G_TYPE_MODULE (module));
g_io_extension_point_implement (CC_SHELL_PANEL_EXTENSION_POINT, g_io_extension_point_implement (CC_SHELL_PANEL_EXTENSION_POINT,
CC_TYPE_MOUSE_PANEL, CC_TYPE_MOUSE_PANEL,
"gnome-settings-mouse.desktop", 0); "mouse", 0);
} }

View file

@ -132,6 +132,6 @@ cc_network_panel_register (GIOModule *module)
cc_network_panel_register_type (G_TYPE_MODULE (module)); cc_network_panel_register_type (G_TYPE_MODULE (module));
g_io_extension_point_implement (CC_SHELL_PANEL_EXTENSION_POINT, g_io_extension_point_implement (CC_SHELL_PANEL_EXTENSION_POINT,
CC_TYPE_NETWORK_PANEL, CC_TYPE_NETWORK_PANEL,
"gnome-network-properties.desktop", 0); "network", 0);
} }

View file

@ -77,7 +77,7 @@ struct _GnomeControlCenterPrivate
static void static void
activate_panel (GnomeControlCenter *shell, activate_panel (GnomeControlCenter *shell,
const gchar *id, const gchar *nid,
const gchar *desktop_file, const gchar *desktop_file,
const gchar *name, const gchar *name,
const gchar *icon_name) const gchar *icon_name)
@ -89,10 +89,23 @@ activate_panel (GnomeControlCenter *shell,
GKeyFile *key_file; GKeyFile *key_file;
GType panel_type = G_TYPE_INVALID; GType panel_type = G_TYPE_INVALID;
GList *panels, *l; GList *panels, *l;
gchar *panel_id;
/* check if there is an plugin that implements this panel */ /* check if there is an plugin that implements this panel */
panels = g_io_extension_point_get_extensions (priv->extension_point); panels = g_io_extension_point_get_extensions (priv->extension_point);
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",
"X-GNOME-Settings-Panel", NULL);
if (panel_id)
{
for (l = panels; l != NULL; l = l->next) for (l = panels; l != NULL; l = l->next)
{ {
GIOExtension *extension; GIOExtension *extension;
@ -102,7 +115,7 @@ activate_panel (GnomeControlCenter *shell,
name = g_io_extension_get_name (extension); name = g_io_extension_get_name (extension);
if (!g_strcmp0 (name, id)) if (!g_strcmp0 (name, panel_id))
{ {
panel_type = g_io_extension_get_type (extension); panel_type = g_io_extension_get_type (extension);
break; break;
@ -132,29 +145,33 @@ activate_panel (GnomeControlCenter *shell,
gtk_window_set_title (GTK_WINDOW (priv->window), name); gtk_window_set_title (GTK_WINDOW (priv->window), name);
gtk_window_set_icon_name (GTK_WINDOW (priv->window), icon_name); gtk_window_set_icon_name (GTK_WINDOW (priv->window), icon_name);
g_key_file_free (key_file);
key_file = NULL;
return; return;
} }
}
/* if a plugin was not found, then start app directly */ /* if a plugin was not found, then start app directly */
if (!desktop_file)
return;
key_file = g_key_file_new ();
g_key_file_load_from_file (key_file, desktop_file, 0, &err);
if (err) if (err)
{ {
g_warning ("Error starting \"%s\": %s", id, err->message); g_warning ("Error starting \"%s\": %s", desktop_file, err->message);
g_error_free (err); g_error_free (err);
err = NULL; err = NULL;
g_key_file_free (key_file);
key_file = NULL;
return; return;
} }
appinfo = (GAppInfo*) g_desktop_app_info_new_from_keyfile (key_file); appinfo = (GAppInfo*) g_desktop_app_info_new_from_keyfile (key_file);
g_key_file_free (key_file); g_key_file_free (key_file);
key_file = NULL;
ctx = gdk_app_launch_context_new (); ctx = gdk_app_launch_context_new ();
@ -168,7 +185,7 @@ activate_panel (GnomeControlCenter *shell,
if (err) if (err)
{ {
g_warning ("Error starting \"%s\": %s", id, err->message); g_warning ("Error starting \"%s\": %s", desktop_file, err->message);
g_error_free (err); g_error_free (err);
err = NULL; err = NULL;
} }
@ -191,8 +208,6 @@ shell_show_overview_page (GnomeControlCenterPrivate *priv)
gtk_window_set_title (GTK_WINDOW (priv->window), priv->default_window_title); gtk_window_set_title (GTK_WINDOW (priv->window), priv->default_window_title);
gtk_window_set_icon_name (GTK_WINDOW (priv->window), gtk_window_set_icon_name (GTK_WINDOW (priv->window),
priv->default_window_icon); priv->default_window_icon);
g_debug ("%s %s", priv->default_window_title, priv->default_window_icon);
} }