From 8aff9939bcb644d5baa22c62752cb0eb0ddf5795 Mon Sep 17 00:00:00 2001 From: Linus Dierheimer Date: Fri, 22 Jul 2022 11:24:29 +0200 Subject: [PATCH] GTK: prefer dconf over config files on certain DEs #198 #199 --- src/detection/gtk.c | 33 ++++++++++++++++++++------------- 1 file changed, 20 insertions(+), 13 deletions(-) diff --git a/src/detection/gtk.c b/src/detection/gtk.c index 9ea79631a..70e559ce2 100644 --- a/src/detection/gtk.c +++ b/src/detection/gtk.c @@ -10,7 +10,7 @@ static inline bool allPropertiesSet(FFGTKResult* result) result->font.length > 0; } -static inline void applyGTKDConfSettings(FFGTKResult* result, const char* themeName, const char* iconsName, const char* fontName, const char* cursorTheme, int cursorSize) +static inline void applyGTKSettings(FFGTKResult* result, const char* themeName, const char* iconsName, const char* fontName, const char* cursorTheme, int cursorSize) { if(result->theme.length == 0) ffStrbufAppendS(&result->theme, themeName); @@ -28,7 +28,7 @@ static inline void applyGTKDConfSettings(FFGTKResult* result, const char* themeN ffStrbufAppendF(&result->cursorSize, "%i", cursorSize); } -static void detectGTKFromDConf(FFinstance* instance, FFGTKResult* result) +static void detectGTKFromSettings(FFinstance* instance, FFGTKResult* result) { static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; @@ -45,7 +45,7 @@ static void detectGTKFromDConf(FFinstance* instance, FFGTKResult* result) if(init) { pthread_mutex_unlock(&mutex); - applyGTKDConfSettings(result, themeName, iconsName, fontName, cursorTheme, cursorSize); + applyGTKSettings(result, themeName, iconsName, fontName, cursorTheme, cursorSize); return; } @@ -53,7 +53,15 @@ static void detectGTKFromDConf(FFinstance* instance, FFGTKResult* result) const FFDisplayServerResult* wmde = ffConnectDisplayServer(instance); - if(ffStrbufIgnCaseCompS(&wmde->dePrettyName, "Cinnamon") == 0) + if(ffStrbufIgnCaseCompS(&wmde->dePrettyName, "XFCE") == 0) + { + themeName = ffSettingsGetXFConf(instance, "xsettings", "/Net/ThemeName", FF_VARIANT_TYPE_STRING).strValue; + iconsName = ffSettingsGetXFConf(instance, "xsettings", "/Net/IconThemeName", FF_VARIANT_TYPE_STRING).strValue; + fontName = ffSettingsGetXFConf(instance, "xsettings", "/Gtk/FontName", FF_VARIANT_TYPE_STRING).strValue; + cursorTheme = ffSettingsGetXFConf(instance, "xsettings", "/Gtk/CursorThemeName", FF_VARIANT_TYPE_STRING).strValue; + cursorSize = ffSettingsGetXFConf(instance, "xsettings", "/Gtk/CursorSize", FF_VARIANT_TYPE_INT).intValue; + } + else if(ffStrbufIgnCaseCompS(&wmde->dePrettyName, "Cinnamon") == 0) { themeName = ffSettingsGet(instance, "/org/cinnamon/desktop/interface/gtk-theme", "org.cinnamon.desktop.interface", NULL, "gtk-theme", FF_VARIANT_TYPE_STRING).strValue; iconsName = ffSettingsGet(instance, "/org/cinnamon/desktop/interface/icon-theme", "org.cinnamon.desktop.interface", NULL, "icon-theme", FF_VARIANT_TYPE_STRING).strValue; @@ -69,7 +77,7 @@ static void detectGTKFromDConf(FFinstance* instance, FFGTKResult* result) cursorTheme = ffSettingsGet(instance, "/org/mate/peripherals-mouse/cursor-theme", "org.mate.peripherals-mouse", NULL, "cursor-theme", FF_VARIANT_TYPE_STRING).strValue; cursorSize = ffSettingsGet(instance, "/org/mate/peripherals-mouse/cursor-size", "org.mate.peripherals-mouse", NULL, "cursor-size", FF_VARIANT_TYPE_INT).intValue; } - else if(ffStrbufIgnCaseCompS(&wmde->dePrettyName, "Gnome") == 0) + else if(ffStrbufIgnCaseCompS(&wmde->dePrettyName, "Gnome") == 0 || ffStrbufIgnCaseCompS(&wmde->dePrettyName, "Unity") == 0 || ffStrbufIgnCaseCompS(&wmde->dePrettyName, "Budgie") == 0) { themeName = ffSettingsGet(instance, "/org/gnome/desktop/interface/gtk-theme", "org.gnome.desktop.interface", NULL, "gtk-theme", FF_VARIANT_TYPE_STRING).strValue; iconsName = ffSettingsGet(instance, "/org/gnome/desktop/interface/icon-theme", "org.gnome.desktop.interface", NULL, "icon-theme", FF_VARIANT_TYPE_STRING).strValue; @@ -79,7 +87,7 @@ static void detectGTKFromDConf(FFinstance* instance, FFGTKResult* result) } pthread_mutex_unlock(&mutex); - applyGTKDConfSettings(result, themeName, iconsName, fontName, cursorTheme, cursorSize); + applyGTKSettings(result, themeName, iconsName, fontName, cursorTheme, cursorSize); } static void detectGTKFromConfigFile(const char* filename, FFGTKResult* result) @@ -139,6 +147,12 @@ static void detectGTKFromConfigDir(FFstrbuf* configDir, const char* version, FFG static void detectGTK(FFinstance* instance, const char* version, FFGTKResult* result) { + //Mate, Cinnamon and Gnome use dconf to save theme config + //On other DEs, this will do nothing + detectGTKFromSettings(instance, result); + if(allPropertiesSet(result)) + return; + //We need to do this because we use multiple threads on configDirs FFstrbuf baseDir; ffStrbufInitA(&baseDir, 64); @@ -152,13 +166,6 @@ static void detectGTK(FFinstance* instance, const char* version, FFGTKResult* re } ffStrbufDestroy(&baseDir); - - if(allPropertiesSet(result)) - return; - - //Mate, Cinnamon and Gnome use dconf to save theme config - //On other DEs, this will do nothing - detectGTKFromDConf(instance, result); } #define FF_DETECT_GTK_IMPL(version) \