Mate support

This commit is contained in:
Linus Dierheimer
2021-05-14 12:43:54 +02:00
parent ae01d28094
commit 225bcbe89a
4 changed files with 73 additions and 5 deletions
+6
View File
@@ -52,6 +52,12 @@ static void detectGTKFromDConf(FFinstance* instance, FFGTKResult* result)
iconsName = ffSettingsGet(instance, "/org/cinnamon/desktop/interface/icon-theme", "org.cinnamon.desktop.interface", NULL, "icon-theme", FF_VARIANT_TYPE_STRING).strValue;
fontName = ffSettingsGet(instance, "/org/cinnamon/desktop/interface/font-name", "org.cinnamon.desktop.interface", NULL, "font-name", FF_VARIANT_TYPE_STRING).strValue;
}
else if(ffStrbufIgnCaseCompS(&wmde->dePrettyName, "Mate") == 0)
{
themeName = ffSettingsGet(instance, "/org/mate/interface/gtk-theme", "org.mate.interface", NULL, "gtk-theme", FF_VARIANT_TYPE_STRING).strValue;
iconsName = ffSettingsGet(instance, "/org/mate/interface/icon-theme", "org.mate.interface", NULL, "icon-theme", FF_VARIANT_TYPE_STRING).strValue;
fontName = ffSettingsGet(instance, "/org/mate/interface/font-name", "org.mate.interface", NULL, "font-name", FF_VARIANT_TYPE_STRING).strValue;
}
//Fallback + Gnome impl
if(themeName == NULL)
+7
View File
@@ -78,6 +78,13 @@ const FFPlasmaResult* ffDetectPlasma(FFinstance* instance)
ffStrbufInit(&result.icons);
ffStrbufInit(&result.font);
const FFWMDEResult* wmde = ffDetectWMDE(instance);
if(ffStrbufIgnCaseCompS(&wmde->deProcessName, "plasmashell") != 0)
{
pthread_mutex_unlock(&mutex);
return &result;
}
bool foundAFile = false;
//We need to do this because we use multiple threads on configDirs
+41 -1
View File
@@ -18,7 +18,8 @@ typedef enum DEHint
FF_DE_HINT_PLASMA,
FF_DE_HINT_GNOME,
FF_DE_HINT_CINNAMON,
FF_DE_HINT_XFCE4
FF_DE_HINT_XFCE4,
FF_DE_HINT_MATE
} DEHint;
typedef struct ProcData
@@ -118,6 +119,11 @@ static bool applyPrettyNameIfWM(FFWMDEResult* result, const FFstrbuf* processNam
ffStrbufSetS(&result->wmPrettyName, "Xfwm4");
*protocolHint = FF_PROTOCOL_HINT_X11;
}
else if(ffStrbufIgnCaseCompS(processName, "Marco") == 0)
{
ffStrbufSetS(&result->wmPrettyName, "Marco");
*protocolHint = FF_PROTOCOL_HINT_X11;
}
else if(ffStrbufIgnCaseCompS(processName, "gnome-session-binary") == 0)
ffStrbufSetS(&result->wmPrettyName, "Mutter");
else if(ffStrbufIgnCaseCompS(processName, "cinnamon-session") == 0)
@@ -142,6 +148,8 @@ static bool applyDEHintIfDE(const FFstrbuf* processName, DEHint* deHint)
*deHint = FF_DE_HINT_CINNAMON;
else if(ffStrbufIgnCaseCompS(processName, "xfce4-session") == 0)
*deHint = FF_DE_HINT_XFCE4;
else if(ffStrbufIgnCaseCompS(processName, "mate-session") == 0)
*deHint = FF_DE_HINT_MATE;
return *deHint != FF_DE_HINT_UNKNOWN;
}
@@ -221,6 +229,34 @@ static void getCinnamon(FFWMDEResult* result)
ffParsePropFile("/usr/share/applications/cinnamon.desktop", "X-GNOME-Bugzilla-Version=", &result->deVersion);
}
static void getMate(FFinstance* instance, FFWMDEResult* result)
{
ffStrbufSetS(&result->deProcessName, "mate-session");
ffStrbufSetS(&result->dePrettyName, "MATE");
//I parse the file 3 times by purpose, because the properties are not guaranteed to be in order
ffParsePropFile("/usr/share/mate-about/mate-version.xml", "<platform>", &result->deVersion);
ffStrbufSubstrBeforeFirstC(&result->deVersion, '<');
ffStrbufAppendC(&result->deVersion, '.');
ffParsePropFile("/usr/share/mate-about/mate-version.xml", "<minor>", &result->deVersion);
ffStrbufSubstrBeforeFirstC(&result->deVersion, '<');
ffStrbufAppendC(&result->deVersion, '.');
ffParsePropFile("/usr/share/mate-about/mate-version.xml", "<micro>", &result->deVersion);
ffStrbufSubstrBeforeFirstC(&result->deVersion, '<');
if(result->deVersion.length == 0 && instance->config.allowSlowOperations)
{
ffProcessAppendStdOut(&result->deVersion, (char* const[]){
"mate-session",
"--version",
NULL
});
ffStrbufSubstrAfterFirstC(&result->deVersion, ' ');
ffStrbufTrim(&result->deVersion, ' ');
}
}
static void getXFCE4(FFinstance* instance, FFWMDEResult* result)
{
ffStrbufSetS(&result->deProcessName, "xfce4-session");
@@ -257,6 +293,8 @@ static inline void getDEFromHint(FFinstance* instance, FFWMDEResult* result, Pro
getCinnamon(result);
else if(procData->deHint == FF_DE_HINT_XFCE4)
getXFCE4(instance, result);
else if(procData->deHint == FF_DE_HINT_MATE)
getMate(instance, result);
}
static inline void getDE(FFinstance* instance, FFWMDEResult* result, ProcData* procData)
@@ -280,6 +318,8 @@ static inline void getDE(FFinstance* instance, FFWMDEResult* result, ProcData* p
getCinnamon(result);
else if(strcasecmp(result->sessionDesktop, "XFCE") == 0 || strcasecmp(result->sessionDesktop, "X-XFCE") == 0 || strcasecmp(result->sessionDesktop, "XFCE4") == 0 || strcasecmp(result->sessionDesktop, "X-XFCE4") == 0)
getXFCE4(instance, result);
else if(strcasecmp(result->sessionDesktop, "MATE") == 0 || strcasecmp(result->sessionDesktop, "X-MATE") == 0)
getMate(instance, result);
else
{
ffStrbufSetS(&result->deProcessName, result->sessionDesktop);
+19 -4
View File
@@ -37,7 +37,7 @@ static void printWMThemeFromConfigFile(FFinstance* instance, const char* configF
if(defaultValue == NULL)
{
ffPrintError(instance, FF_WMTHEME_MODULE_NAME, 0, &instance->config.wmThemeKey, &instance->config.wmThemeFormat, FF_WMTHEME_NUM_FORMAT_ARGS, "Couldn't find theme in %s", configFile);
ffPrintError(instance, FF_WMTHEME_MODULE_NAME, 0, &instance->config.wmThemeKey, &instance->config.wmThemeFormat, FF_WMTHEME_NUM_FORMAT_ARGS, "Couldn't find WM theme in %s", configFile);
return;
}
@@ -49,14 +49,27 @@ static void printWMThemeFromConfigFile(FFinstance* instance, const char* configF
ffStrbufDestroy(&theme);
}
static void printWMThemeFromSettings(FFinstance* instance, const char* dconfKey, const char* gsettingsSchemaName, const char* gsettingsPath, const char* gsettingsKey)
{
const char* theme = ffSettingsGet(instance, dconfKey, gsettingsSchemaName, gsettingsPath, gsettingsKey, FF_VARIANT_TYPE_STRING).strValue;
if(theme == NULL || *theme == '\0')
{
ffPrintError(instance, FF_WMTHEME_MODULE_NAME, 0, &instance->config.wmThemeKey, &instance->config.wmThemeFormat, FF_WMTHEME_NUM_FORMAT_ARGS, "Couldn't find WM theme in DConf or GSettings");
return;
}
printWMTheme(instance, theme);
}
static void printMutter(FFinstance* instance)
{
const char* theme = ffSettingsGet(instance, "/org/gnome/shell/extensions/user-theme/name", "org.gnome.shell.extensions.user-theme", NULL, "name", FF_VARIANT_TYPE_STRING).strValue;
if(theme == NULL)
if(theme == NULL || *theme == '\0')
theme = ffSettingsGet(instance, "/org/gnome/desktop/wm/preferences/theme", "org.gnome.desktop.wm.preferences", NULL, "theme", FF_VARIANT_TYPE_STRING).strValue;
if(theme == NULL)
if(theme == NULL || *theme == '\0')
{
ffPrintError(instance, FF_WMTHEME_MODULE_NAME, 0, &instance->config.wmThemeKey, &instance->config.wmThemeFormat, FF_WMTHEME_NUM_FORMAT_ARGS, "Couldn't found mutter theme in GSettings / DConf");
return;
@@ -190,8 +203,10 @@ void ffPrintWMTheme(FFinstance* instance)
printMutter(instance);
else if(ffStrbufIgnCaseCompS(&result->wmPrettyName, "Muffin") == 0)
printMuffin(instance);
else if(ffStrbufIgnCaseCompS(&result->wmPrettyName, "Marco") == 0)
printWMThemeFromSettings(instance, "/org/mate/Marco/general/theme", "org.mate.Marco.general", NULL, "theme");
else if(ffStrbufIgnCaseCompS(&result->wmPrettyName, "Openbox") == 0)
printOpenbox(instance, &result->dePrettyName);
else
ffPrintError(instance, FF_WMTHEME_MODULE_NAME, 0, &instance->config.wmThemeKey, &instance->config.wmThemeFormat, FF_WMTHEME_NUM_FORMAT_ARGS, "Unknown WM: %s", result->dePrettyName.chars);
ffPrintError(instance, FF_WMTHEME_MODULE_NAME, 0, &instance->config.wmThemeKey, &instance->config.wmThemeFormat, FF_WMTHEME_NUM_FORMAT_ARGS, "Unknown WM: %s", result->wmPrettyName.chars);
}