diff options
author | Leandro Pereira <leandro@hardinfo.org> | 2017-07-29 07:43:51 -0700 |
---|---|---|
committer | Leandro Pereira <leandro@hardinfo.org> | 2017-07-29 07:43:51 -0700 |
commit | 44e5e8bd6d12a0f20636c9f27c240e35a3499b58 (patch) | |
tree | 50bf2499bad02fec7aa173633a3c2b06bfd44972 | |
parent | c17bead8e1b1ff73d250ad1e7bea953d6d06db12 (diff) |
Improve desktop environment detection when reading XDG env vars
-rw-r--r-- | modules/computer/os.c | 48 |
1 files changed, 27 insertions, 21 deletions
diff --git a/modules/computer/os.c b/modules/computer/os.c index acd0e21d..f521a4d3 100644 --- a/modules/computer/os.c +++ b/modules/computer/os.c @@ -78,7 +78,6 @@ get_libc_version(void) return g_strdup(_("Unknown")); } - static gchar *detect_kde_version(void) { const gchar *cmd; @@ -173,34 +172,42 @@ desktop_with_session_type(const gchar *desktop_env) } static gchar * -detect_desktop_environment(void) +detect_xdg_environment(const gchar *env_var) { const gchar *tmp; - gchar *windowman; - tmp = g_getenv("XDG_CURRENT_DESKTOP"); - if (tmp) { - if (g_str_equal(tmp, "GNOME")) { - gchar *maybe_gnome = detect_gnome_version(); + tmp = g_getenv(env_var); + if (!tmp) + return NULL; - if (maybe_gnome) - return maybe_gnome; - } + if (g_str_equal(tmp, "GNOME") || g_str_equal(tmp, "gnome")) { + gchar *maybe_gnome = detect_gnome_version(); - return g_strdup(tmp); + if (maybe_gnome) + return maybe_gnome; } + if (g_str_equal(tmp, "KDE") || g_str_equal(tmp, "kde")) { + gchar *maybe_kde = detect_kde_version(); - tmp = g_getenv("XDG_SESSION_DESKTOP"); - if (tmp) { - if (g_str_equal(tmp, "gnome")) { - gchar *maybe_gnome = detect_gnome_version(); + if (maybe_kde) + return maybe_kde; + } - if (maybe_gnome) - return maybe_gnome; - } + return g_strdup(tmp); +} - return g_strdup(tmp); - } +static gchar * +detect_desktop_environment(void) +{ + const gchar *tmp; + gchar *windowman; + + windowman = detect_xdg_environment("XDG_CURRENT_DESKTOP"); + if (windowman) + return windowman; + windowman = detect_xdg_environment("XDG_SESSION_DESKTOP"); + if (windowman) + return windowman; tmp = g_getenv("KDE_FULL_SESSION"); if (tmp) { @@ -209,7 +216,6 @@ detect_desktop_environment(void) if (maybe_kde) return maybe_kde; } - tmp = g_getenv("GNOME_DESKTOP_SESSION_ID"); if (tmp) { gchar *maybe_gnome = detect_gnome_version(); |