From 6ebb92c6b9aa0d5afe160f9398d8cc661738d5ea Mon Sep 17 00:00:00 2001 From: KockaAdmiralac <1405223@gmail.com> Date: Wed, 19 Dec 2018 22:19:18 +0100 Subject: [PATCH] Fix crash when XDG_CURRENT_DESKTOP isn't defined --- src/oneshot.cpp | 51 +++++++++++++++++++++++++++---------------------- 1 file changed, 28 insertions(+), 23 deletions(-) diff --git a/src/oneshot.cpp b/src/oneshot.cpp index 44eeb8a..ca70a38 100644 --- a/src/oneshot.cpp +++ b/src/oneshot.cpp @@ -281,29 +281,34 @@ Oneshot::Oneshot(RGSSThreadData &threadData) : #endif #ifdef OS_LINUX - std::string desktop(getenv("XDG_CURRENT_DESKTOP")); - std::transform(desktop.begin(), desktop.end(), desktop.begin(), ::tolower); - if (desktop.find("cinnamon") != std::string::npos) { - desktopEnv = "cinnamon"; - gtk_init(0, 0); - } else if ( - desktop.find("gnome") != std::string::npos || - desktop.find("unity") != std::string::npos - ) { - desktopEnv = "gnome"; - gtk_init(0, 0); - } else if (desktop.find("mate") != std::string::npos) { - desktopEnv = "mate"; - gtk_init(0, 0); - } else if (desktop.find("xfce") != std::string::npos) { - desktopEnv = "xfce"; - gtk_init(0, 0); - } else if (desktop.find("kde") != std::string::npos) { - desktopEnv = "kde"; - } else if (desktop.find("lxde") != std::string::npos) { - desktopEnv = "lxde"; - } else if (desktop.find("deepin") != std::string::npos) { - desktopEnv = "deepin"; + char const* xdg_current_desktop = getenv("XDG_CURRENT_DESKTOP"); + if (xdg_current_desktop == NULL) { + desktopEnv = "nope"; + } else { + std::string desktop(xdg_current_desktop); + std::transform(desktop.begin(), desktop.end(), desktop.begin(), ::tolower); + if (desktop.find("cinnamon") != std::string::npos) { + desktopEnv = "cinnamon"; + gtk_init(0, 0); + } else if ( + desktop.find("gnome") != std::string::npos || + desktop.find("unity") != std::string::npos + ) { + desktopEnv = "gnome"; + gtk_init(0, 0); + } else if (desktop.find("mate") != std::string::npos) { + desktopEnv = "mate"; + gtk_init(0, 0); + } else if (desktop.find("xfce") != std::string::npos) { + desktopEnv = "xfce"; + gtk_init(0, 0); + } else if (desktop.find("kde") != std::string::npos) { + desktopEnv = "kde"; + } else if (desktop.find("lxde") != std::string::npos) { + desktopEnv = "lxde"; + } else if (desktop.find("deepin") != std::string::npos) { + desktopEnv = "deepin"; + } } #endif