aboutsummaryrefslogtreecommitdiff
path: root/hardinfo2
diff options
context:
space:
mode:
authorhwspeedy <ns@bigbear.dk>2024-05-26 23:36:18 +0200
committerhwspeedy <ns@bigbear.dk>2024-05-26 23:36:18 +0200
commit81fddb36fd60f19da182e8255316cebca2692938 (patch)
tree4e147779fd4ce0c304fdc456143602d862a2b161 /hardinfo2
parentd972d2bc47cfa69f175ba446b89848dc8a4dc8d8 (diff)
FIX Dark mode detection from gsettings+gtksettings - Fixes #44
Diffstat (limited to 'hardinfo2')
-rw-r--r--hardinfo2/hardinfo.c37
1 files changed, 36 insertions, 1 deletions
diff --git a/hardinfo2/hardinfo.c b/hardinfo2/hardinfo.c
index 5da28488..a663341d 100644
--- a/hardinfo2/hardinfo.c
+++ b/hardinfo2/hardinfo.c
@@ -26,12 +26,32 @@
#include <stock.h>
#include <vendor.h>
#include <syncmanager.h>
+#include "callbacks.h"
#include <binreloc.h>
#include "dmi_util.h"
ProgramParameters params = { 0 };
+gulong interface_changed_sh;
+GSettings *settings=NULL;
+
+void interface_changed_cb(GSettings *settings, gchar *name, gpointer user_data) {
+ gchar *theme = g_settings_get_string(settings, name);
+ //g_print("theme_changed: %s:%s\n", name, theme);
+ params.darkmode=0;
+ if(strstr(theme,"Dark")||strstr(theme,"dark")) params.darkmode=1;
+ if(params.theme==-1) cb_disable_theme();
+ if(params.theme==1) cb_theme1();
+ if(params.theme==2) cb_theme2();
+ if(params.theme==3) cb_theme3();
+ if(params.theme==4) cb_theme4();
+ if(params.theme==5) cb_theme5();
+ if(params.theme==6) cb_theme6();
+ g_free(theme);
+}
+
+
int main(int argc, char **argv)
{
int exit_code = 0;
@@ -101,7 +121,21 @@ int main(int argc, char **argv)
}
//Get DarkMode state from system
- if(params.gui_running) g_object_get(gtk_settings_get_default(), "gtk-application-prefer-dark-theme", &params.darkmode, NULL);
+ if(params.gui_running) {
+ //get darkmode via gtk-theme has (d/D)ark as part of theme name from gsettings
+ settings=g_settings_new("org.gnome.desktop.interface");
+ interface_changed_sh = g_signal_connect(settings, "changed", G_CALLBACK(interface_changed_cb), NULL);
+ char *theme=g_settings_get_string(settings,"gtk-theme");
+ params.darkmode=0;
+ if(strstr(theme,"Dark")||strstr(theme,"dark")) params.darkmode=1;
+ g_free(theme);
+ //get darkmode override from gtk-3.0/settings.ini - gtksettings
+ gint dark=-1;
+ g_object_get(gtk_settings_get_default(), "gtk-application-prefer-dark-theme", &dark, NULL);
+ if(dark==1) params.darkmode=1;
+ //if(dark==0) params.darkmode=0;
+
+ }
/* load all modules */
DEBUG("loading all modules");
@@ -164,6 +198,7 @@ int main(int argc, char **argv)
vendor_cleanup();
dmidecode_cache_free();
free_auto_free_final();
+ g_object_unref(settings);
DEBUG("finished");
return exit_code;