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:
parent
8aa419dabc
commit
d91e466f93
7 changed files with 70 additions and 55 deletions
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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,72 +89,89 @@ 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);
|
||||||
|
|
||||||
for (l = panels; l != NULL; l = l->next)
|
|
||||||
{
|
|
||||||
GIOExtension *extension;
|
|
||||||
const gchar *name;
|
|
||||||
|
|
||||||
extension = l->data;
|
|
||||||
|
|
||||||
name = g_io_extension_get_name (extension);
|
|
||||||
|
|
||||||
if (!g_strcmp0 (name, id))
|
|
||||||
{
|
|
||||||
panel_type = g_io_extension_get_type (extension);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (panel_type != G_TYPE_INVALID)
|
|
||||||
{
|
|
||||||
GtkWidget *panel;
|
|
||||||
GtkWidget *box;
|
|
||||||
gint i;
|
|
||||||
|
|
||||||
/* create the panel plugin */
|
|
||||||
panel = g_object_new (panel_type, "shell", shell, NULL);
|
|
||||||
|
|
||||||
box = gtk_alignment_new (0, 0, 1, 1);
|
|
||||||
gtk_alignment_set_padding (GTK_ALIGNMENT (box), 6, 6, 6, 6);
|
|
||||||
|
|
||||||
gtk_container_add (GTK_CONTAINER (box), panel);
|
|
||||||
|
|
||||||
/* switch to the new panel */
|
|
||||||
i = gtk_notebook_append_page (GTK_NOTEBOOK (priv->notebook), box, NULL);
|
|
||||||
gtk_widget_show_all (box);
|
|
||||||
gtk_notebook_set_current_page (GTK_NOTEBOOK (priv->notebook), i);
|
|
||||||
|
|
||||||
/* set the title of the window */
|
|
||||||
gtk_window_set_title (GTK_WINDOW (priv->window), name);
|
|
||||||
gtk_window_set_icon_name (GTK_WINDOW (priv->window), icon_name);
|
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* if a plugin was not found, then start app directly */
|
|
||||||
if (!desktop_file)
|
if (!desktop_file)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
key_file = g_key_file_new ();
|
key_file = g_key_file_new ();
|
||||||
g_key_file_load_from_file (key_file, desktop_file, 0, &err);
|
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)
|
||||||
|
{
|
||||||
|
GIOExtension *extension;
|
||||||
|
const gchar *name;
|
||||||
|
|
||||||
|
extension = l->data;
|
||||||
|
|
||||||
|
name = g_io_extension_get_name (extension);
|
||||||
|
|
||||||
|
if (!g_strcmp0 (name, panel_id))
|
||||||
|
{
|
||||||
|
panel_type = g_io_extension_get_type (extension);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (panel_type != G_TYPE_INVALID)
|
||||||
|
{
|
||||||
|
GtkWidget *panel;
|
||||||
|
GtkWidget *box;
|
||||||
|
gint i;
|
||||||
|
|
||||||
|
/* create the panel plugin */
|
||||||
|
panel = g_object_new (panel_type, "shell", shell, NULL);
|
||||||
|
|
||||||
|
box = gtk_alignment_new (0, 0, 1, 1);
|
||||||
|
gtk_alignment_set_padding (GTK_ALIGNMENT (box), 6, 6, 6, 6);
|
||||||
|
|
||||||
|
gtk_container_add (GTK_CONTAINER (box), panel);
|
||||||
|
|
||||||
|
/* switch to the new panel */
|
||||||
|
i = gtk_notebook_append_page (GTK_NOTEBOOK (priv->notebook), box, NULL);
|
||||||
|
gtk_widget_show_all (box);
|
||||||
|
gtk_notebook_set_current_page (GTK_NOTEBOOK (priv->notebook), i);
|
||||||
|
|
||||||
|
/* set the title of the window */
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* if a plugin was not found, then start app directly */
|
||||||
|
|
||||||
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);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue