summaryrefslogtreecommitdiff
path: root/shell
diff options
context:
space:
mode:
authorBastien Nocera <hadess@hadess.net>2020-04-08 13:52:48 +0200
committerFelipe Borges <felipeborges@gnome.org>2023-02-10 13:16:19 +0000
commitfbf8886b91b597b7bacfa93623d0c6c176ae3e9a (patch)
treeb7e02051e098394363021042313ec5224f145e08 /shell
parentd08fe40bb64a685733999f0c52529b9616f55c3d (diff)
downloadgnome-control-center-fbf8886b91b597b7bacfa93623d0c6c176ae3e9a.tar.gz
shell: Refuse to run under unsupported desktops
Closes: #945
Diffstat (limited to 'shell')
-rw-r--r--shell/main.c36
-rw-r--r--shell/org.gnome.Settings.desktop.in3
2 files changed, 38 insertions, 1 deletions
diff --git a/shell/main.c b/shell/main.c
index 5a30382be..b8c0cc76a 100644
--- a/shell/main.c
+++ b/shell/main.c
@@ -33,6 +33,36 @@
#include "cc-log.h"
#include "cc-application.h"
+static char **
+get_current_desktops (void)
+{
+ const char *envvar;
+
+ envvar = g_getenv ("XDG_CURRENT_DESKTOP");
+
+ if (!envvar)
+ return g_new0 (char *, 0 + 1);
+
+ return g_strsplit (envvar, G_SEARCHPATH_SEPARATOR_S, 0);
+}
+
+static gboolean
+is_supported_desktop (void)
+{
+ g_auto(GStrv) desktops = NULL;
+ guint i;
+
+ desktops = get_current_desktops ();
+ for (i = 0; desktops[i] != NULL; i++)
+ {
+ /* This matches OnlyShowIn in gnome-control-center.desktop.in.in */
+ if (g_ascii_strcasecmp (desktops[i], "GNOME") == 0)
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
int
main (gint argc,
gchar **argv)
@@ -46,6 +76,12 @@ main (gint argc,
setlocale (LC_ALL, "");
cc_log_init ();
+ if (!is_supported_desktop ())
+ {
+ g_message ("Running gnome-control-center is only supported under GNOME and Unity, exiting");
+ return 1;
+ }
+
application = cc_application_new ();
return g_application_run (G_APPLICATION (application), argc, argv);
diff --git a/shell/org.gnome.Settings.desktop.in b/shell/org.gnome.Settings.desktop.in
index 5eb6055a8..1af2cd1d8 100644
--- a/shell/org.gnome.Settings.desktop.in
+++ b/shell/org.gnome.Settings.desktop.in
@@ -7,7 +7,8 @@ Terminal=false
Type=Application
StartupNotify=true
Categories=GNOME;GTK;Settings;
-OnlyShowIn=GNOME;Unity;
+# See also is_supported_desktop() in main.c
+OnlyShowIn=GNOME;
# Translators: Search terms to find this app. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon!
Keywords=Preferences;Settings;
# Translators: Do NOT translate or transliterate this text (these are enum types)!