diff --git a/panels/background/gnome-background-panel.desktop.in.in b/panels/background/gnome-background-panel.desktop.in.in index 67b540d5d..2aef88460 100644 --- a/panels/background/gnome-background-panel.desktop.in.in +++ b/panels/background/gnome-background-panel.desktop.in.in @@ -6,6 +6,6 @@ Icon=preferences-desktop-wallpaper Terminal=false Type=Application StartupNotify=true -Categories=GNOME;GTK;Settings;DesktopSettings; +Categories=GNOME;GTK;Settings;DesktopSettings;X-GNOME-Settings-Panel; OnlyShowIn=GNOME; X-GNOME-Settings-Panel=background diff --git a/panels/datetime/gnome-datetime-panel.desktop.in.in b/panels/datetime/gnome-datetime-panel.desktop.in.in index 26b43d7c9..17ca53ef6 100644 --- a/panels/datetime/gnome-datetime-panel.desktop.in.in +++ b/panels/datetime/gnome-datetime-panel.desktop.in.in @@ -6,6 +6,6 @@ Icon=preferences-system-time Terminal=false Type=Application StartupNotify=true -Categories=GNOME;GTK;Settings;DesktopSettings; +Categories=GNOME;GTK;Settings;DesktopSettings;X-GNOME-Settings-Panel; OnlyShowIn=GNOME; X-GNOME-Settings-Panel=datetime diff --git a/panels/default-applications/gnome-default-applications-panel.desktop.in.in b/panels/default-applications/gnome-default-applications-panel.desktop.in.in index bcdaf9ce4..75e487088 100644 --- a/panels/default-applications/gnome-default-applications-panel.desktop.in.in +++ b/panels/default-applications/gnome-default-applications-panel.desktop.in.in @@ -6,7 +6,7 @@ Icon=gnome-settings-default-applications Terminal=false Type=Application StartupNotify=true -Categories=GNOME;GTK;Settings;X-GNOME-PersonalSettings; +Categories=GNOME;GTK;Settings;X-GNOME-PersonalSettings;X-GNOME-Settings-Panel; OnlyShowIn=GNOME; X-GNOME-Bugzilla-Bugzilla=GNOME X-GNOME-Bugzilla-Product=gnome-control-center diff --git a/panels/display/gnome-display-panel.desktop.in.in b/panels/display/gnome-display-panel.desktop.in.in index 5073f88d9..bc1e13344 100644 --- a/panels/display/gnome-display-panel.desktop.in.in +++ b/panels/display/gnome-display-panel.desktop.in.in @@ -6,7 +6,7 @@ Icon=preferences-desktop-display Terminal=false Type=Application StartupNotify=true -Categories=GNOME;GTK;Settings;HardwareSettings; +Categories=GNOME;GTK;Settings;HardwareSettings;X-GNOME-Settings-Panel; OnlyShowIn=GNOME; X-GNOME-Bugzilla-Bugzilla=GNOME X-GNOME-Bugzilla-Product=gnome-control-center diff --git a/panels/keybindings/gnome-keybindings-panel.desktop.in.in b/panels/keybindings/gnome-keybindings-panel.desktop.in.in index 679c4eef0..4191507b2 100644 --- a/panels/keybindings/gnome-keybindings-panel.desktop.in.in +++ b/panels/keybindings/gnome-keybindings-panel.desktop.in.in @@ -6,7 +6,7 @@ Icon=preferences-desktop-keyboard-shortcuts Terminal=false Type=Application StartupNotify=true -Categories=GNOME;GTK;Settings;X-GNOME-PersonalSettings; +Categories=GNOME;GTK;Settings;X-GNOME-PersonalSettings;X-GNOME-Settings-Panel; OnlyShowIn=GNOME; X-GNOME-Bugzilla-Bugzilla=GNOME X-GNOME-Bugzilla-Product=gnome-control-center diff --git a/panels/keyboard/gnome-keyboard-panel.desktop.in.in b/panels/keyboard/gnome-keyboard-panel.desktop.in.in index ce26ecb59..8494e6af8 100644 --- a/panels/keyboard/gnome-keyboard-panel.desktop.in.in +++ b/panels/keyboard/gnome-keyboard-panel.desktop.in.in @@ -6,7 +6,7 @@ Icon=preferences-desktop-keyboard Terminal=false Type=Application StartupNotify=true -Categories=GNOME;GTK;Settings;HardwareSettings; +Categories=GNOME;GTK;Settings;HardwareSettings;X-GNOME-Settings-Panel; OnlyShowIn=GNOME; X-GNOME-Bugzilla-Bugzilla=GNOME X-GNOME-Bugzilla-Product=gnome-control-center diff --git a/panels/mouse/gnome-mouse-panel.desktop.in.in b/panels/mouse/gnome-mouse-panel.desktop.in.in index dde4debf0..44554849b 100644 --- a/panels/mouse/gnome-mouse-panel.desktop.in.in +++ b/panels/mouse/gnome-mouse-panel.desktop.in.in @@ -6,7 +6,7 @@ Icon=input-mouse Terminal=false Type=Application StartupNotify=true -Categories=GNOME;GTK;Settings;HardwareSettings; +Categories=GNOME;GTK;Settings;HardwareSettings;X-GNOME-Settings-Panel; OnlyShowIn=GNOME; X-GNOME-Bugzilla-Bugzilla=GNOME X-GNOME-Bugzilla-Product=gnome-control-center diff --git a/panels/network/gnome-network-panel.desktop.in.in b/panels/network/gnome-network-panel.desktop.in.in index a56549804..b52a1b44b 100644 --- a/panels/network/gnome-network-panel.desktop.in.in +++ b/panels/network/gnome-network-panel.desktop.in.in @@ -6,7 +6,7 @@ Icon=gnome-network-properties Terminal=false Type=Application StartupNotify=true -Categories=GNOME;GTK;Settings;X-GNOME-NetworkSettings; +Categories=GNOME;GTK;Settings;X-GNOME-NetworkSettings;X-GNOME-Settings-Panel; OnlyShowIn=GNOME; X-GNOME-Bugzilla-Bugzilla=GNOME X-GNOME-Bugzilla-Product=gnome-control-center diff --git a/panels/universal-access/gnome-universal-access-panel.desktop.in.in b/panels/universal-access/gnome-universal-access-panel.desktop.in.in index e969d1967..068b04c1e 100644 --- a/panels/universal-access/gnome-universal-access-panel.desktop.in.in +++ b/panels/universal-access/gnome-universal-access-panel.desktop.in.in @@ -6,7 +6,7 @@ Icon=preferences-desktop-accessibility Terminal=false Type=Application StartupNotify=true -Categories=GNOME;GTK;Settings;DesktopSettings; +Categories=GNOME;GTK;Settings;DesktopSettings;X-GNOME-Settings-Panel; OnlyShowIn=GNOME; X-GNOME-Bugzilla-Bugzilla=GNOME X-GNOME-Bugzilla-Product=gnome-control-center diff --git a/shell/cc-shell-model.c b/shell/cc-shell-model.c index 741007e27..4ed559b3b 100644 --- a/shell/cc-shell-model.c +++ b/shell/cc-shell-model.c @@ -23,6 +23,7 @@ #include #define GNOME_SETTINGS_PANEL_ID_KEY "X-GNOME-Settings-Panel" +#define GNOME_SETTINGS_PANEL_CATEGORY GNOME_SETTINGS_PANEL_ID_KEY G_DEFINE_TYPE (CcShellModel, cc_shell_model, GTK_TYPE_LIST_STORE) @@ -49,6 +50,36 @@ cc_shell_model_new (void) return g_object_new (CC_TYPE_SHELL_MODEL, NULL); } +static gboolean +desktop_entry_has_panel_category (GKeyFile *key_file) +{ + char **strv; + gsize len; + int i; + + strv = g_key_file_get_string_list (key_file, + "Desktop Entry", + "Categories", + &len, + NULL); + if (!strv) + return FALSE; + + for (i = 0; strv[i]; i++) + { + if (g_str_equal (strv[i], GNOME_SETTINGS_PANEL_CATEGORY)) + { + g_strfreev (strv); + return TRUE; + } + } + + g_strfreev (strv); + + return FALSE; + +} + void cc_shell_model_add_item (CcShellModel *model, const gchar *category_name, @@ -73,11 +104,25 @@ cc_shell_model_add_item (CcShellModel *model, 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)); + { + /* Refuse to load desktop files without a panel ID, but + * with the X-GNOME-Control-Center-Panel category */ + if (desktop_entry_has_panel_category (key_file)) + { + g_warning ("Not loading desktop file '%s' because it uses the " + GNOME_SETTINGS_PANEL_CATEGORY + " category but isn't a panel.", + desktop); + g_key_file_free (key_file); + return; + } + id = g_strdup (gmenu_tree_entry_get_desktop_file_id (item)); + } + + g_key_file_free (key_file); + key_file = NULL; /* find the icon */ if (icon != NULL && *icon == '/') diff --git a/shell/gnomecc.menu b/shell/gnomecc.menu index 206429d82..1496ff3b8 100644 --- a/shell/gnomecc.menu +++ b/shell/gnomecc.menu @@ -18,6 +18,7 @@ Internet and Network Hardware System + Other @@ -51,10 +52,12 @@ Settings X-GNOME-PersonalSettings + X-GNOME-Settings-Panel Settings - DesktopSettings + DesktopSettings + X-GNOME-Settings-Panel @@ -67,10 +70,11 @@ Settings X-GNOME-NetworkSettings + X-GNOME-Settings-Panel - + Hardware @@ -79,6 +83,7 @@ Settings HardwareSettings + X-GNOME-Settings-Panel @@ -90,6 +95,7 @@ Settings + X-GNOME-Settings-Panel X-GNOME-SystemSettings @@ -99,7 +105,7 @@ X-GNOME-PersonalSettings DesktopSettings HardwareSettings - X-GNOME-NetworkSettings + X-GNOME-NetworkSettings @@ -108,4 +114,18 @@ + + + Other + X-GNOME-Other.directory + + + Settings + + X-GNOME-Settings-Panel + + + + +