summaryrefslogtreecommitdiffstats
path: root/src/detection/theme/theme_linux.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/detection/theme/theme_linux.c')
-rw-r--r--src/detection/theme/theme_linux.c60
1 files changed, 60 insertions, 0 deletions
diff --git a/src/detection/theme/theme_linux.c b/src/detection/theme/theme_linux.c
new file mode 100644
index 0000000..1de7db8
--- /dev/null
+++ b/src/detection/theme/theme_linux.c
@@ -0,0 +1,60 @@
+#include "theme.h"
+#include "common/parsing.h"
+#include "detection/gtk_qt/gtk_qt.h"
+#include "detection/displayserver/displayserver.h"
+
+const char* ffDetectTheme(FFThemeResult* result) {
+ const FFDisplayServerResult* wmde = ffConnectDisplayServer();
+
+ if (ffStrbufIgnCaseEqualS(&wmde->wmProtocolName, FF_WM_PROTOCOL_TTY)) {
+ return "Theme isn't supported in TTY";
+ }
+
+ const FFQtResult* plasma = ffDetectQt();
+ const FFstrbuf* gtk2 = &ffDetectGTK2()->theme;
+ const FFstrbuf* gtk3 = &ffDetectGTK3()->theme;
+ const FFstrbuf* gtk4 = &ffDetectGTK4()->theme;
+
+ if (plasma->widgetStyle.length == 0 && plasma->colorScheme.length == 0 && gtk2->length == 0 && gtk3->length == 0 && gtk4->length == 0) {
+ return "No themes found";
+ }
+
+ ffParseGTK(&result->theme2, gtk2, gtk3, gtk4);
+
+ FF_STRBUF_AUTO_DESTROY plasmaColorPretty = ffStrbufCreate();
+ if (ffStrbufStartsWithIgnCase(&plasma->colorScheme, &plasma->widgetStyle)) {
+ ffStrbufAppendNS(&plasmaColorPretty, plasma->colorScheme.length - plasma->widgetStyle.length, &plasma->colorScheme.chars[plasma->widgetStyle.length]);
+ } else {
+ ffStrbufAppend(&plasmaColorPretty, &plasma->colorScheme);
+ }
+
+ ffStrbufTrim(&plasmaColorPretty, ' ');
+
+ if (plasma->widgetStyle.length > 0) {
+ ffStrbufAppend(&result->theme1, &plasma->widgetStyle);
+
+ if (plasma->colorScheme.length > 0) {
+ ffStrbufAppendS(&result->theme1, " (");
+
+ if (plasmaColorPretty.length > 0) {
+ ffStrbufAppend(&result->theme1, &plasmaColorPretty);
+ } else {
+ ffStrbufAppend(&result->theme1, &plasma->colorScheme);
+ }
+
+ ffStrbufAppendC(&result->theme1, ')');
+ }
+ } else if (plasma->colorScheme.length > 0) {
+ if (plasmaColorPretty.length > 0) {
+ ffStrbufAppend(&result->theme1, &plasmaColorPretty);
+ } else {
+ ffStrbufAppend(&result->theme1, &plasma->colorScheme);
+ }
+ }
+
+ if (plasma->widgetStyle.length > 0 || plasma->colorScheme.length > 0) {
+ ffStrbufAppendS(&result->theme1, " [Qt]");
+ }
+
+ return NULL;
+}