aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--hardinfo2/hardinfo.c42
-rw-r--r--modules/benchmark/guibench.c22
-rw-r--r--shell/shell.c123
3 files changed, 116 insertions, 71 deletions
diff --git a/hardinfo2/hardinfo.c b/hardinfo2/hardinfo.c
index 2e273646..6b463c9f 100644
--- a/hardinfo2/hardinfo.c
+++ b/hardinfo2/hardinfo.c
@@ -34,26 +34,6 @@
ProgramParameters params = { 0 };
-#if GTK_CHECK_VERSION(3,0,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);
-}
-#endif
-
int main(int argc, char **argv)
{
int exit_code = 0;
@@ -122,25 +102,6 @@ int main(int argc, char **argv)
}
}
- //Get DarkMode state from system
- if(params.gui_running) {
- //get darkmode via gtk-theme has (d/D)ark as part of theme name from gsettings
- params.darkmode=0;
-#if GTK_CHECK_VERSION(3,0,0)
- 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");
- if(strstr(theme,"Dark")||strstr(theme,"dark")) params.darkmode=1;
- g_free(theme);
-#endif
- //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");
modules = modules_load_all();
@@ -202,9 +163,6 @@ int main(int argc, char **argv)
vendor_cleanup();
dmidecode_cache_free();
free_auto_free_final();
-#if GTK_CHECK_VERSION(3,0,0)
- g_object_unref(settings);
-#endif
DEBUG("finished");
return exit_code;
}
diff --git a/modules/benchmark/guibench.c b/modules/benchmark/guibench.c
index 09dba879..8db38ffa 100644
--- a/modules/benchmark/guibench.c
+++ b/modules/benchmark/guibench.c
@@ -132,21 +132,6 @@ double guibench(double *frameTime, int *frameCount)
{
GtkWindow * window;
- //Get DarkMode state from system
- //get darkmode via gtk-theme has (d/D)ark as part of theme name from gsettings
-#if GTK_CHECK_VERSION(3,0,0)
- GSettings *settings=g_settings_new("org.gnome.desktop.interface");
- char *theme=g_settings_get_string(settings,"gtk-theme");
- darkmode=0;
- if(strstr(theme,"Dark")||strstr(theme,"dark")) darkmode=1;
- g_free(theme);
- g_object_unref(settings);
-#endif
- //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) darkmode=1;
- //if(dark==0) darkmode=0;
frametime=frameTime;
framecount=frameCount;
@@ -165,6 +150,13 @@ double guibench(double *frameTime, int *frameCount)
gtk_window_set_title (window, "GPU Benchmarking...");
g_signal_connect(window, "destroy", gtk_main_quit, NULL);
+ //Get DarkMode state from system
+ GtkStyleContext *sctx=gtk_widget_get_style_context(GTK_WIDGET(window));
+ GdkRGBA color;
+ gtk_style_context_lookup_color(sctx, "theme_bg_color", &color);
+ darkmode=0;
+ if((color.red+color.green+color.blue)<=1.5) darkmode=1;
+
// create the are we can draw in
GtkDrawingArea* drawingArea;
drawingArea = (GtkDrawingArea*) gtk_drawing_area_new();
diff --git a/shell/shell.c b/shell/shell.c
index 91190021..2705449a 100644
--- a/shell/shell.c
+++ b/shell/shell.c
@@ -60,7 +60,7 @@ static void info_selected_show_extra(const gchar *tag);
static gboolean reload_section(gpointer data);
static gboolean rescan_section(gpointer data);
static gboolean update_field(gpointer data);
-
+static GSettings *settings=NULL;
/*
* Globals ********************************************************************
*/
@@ -352,6 +352,107 @@ static void destroy_me(void)
cb_quit();
}
+int update=0;
+int schemeDark=0;
+int changed2dark=0;
+int newgnome=0;
+static void stylechange2_me(void)
+{
+#if GTK_CHECK_VERSION(3, 20, 0)
+ GtkCssProvider *provider;
+ provider = gtk_css_provider_new();
+#endif
+ if(update==1){
+ GtkStyleContext *sctx=gtk_widget_get_style_context(GTK_WIDGET(shell->window));
+ GdkRGBA color;
+ gtk_style_context_lookup_color(sctx, "theme_bg_color", &color);
+ gint darkmode=0;
+ if((color.red+color.green+color.blue)<=1.5) darkmode=1;
+ //
+ if(schemeDark & !darkmode) {
+ if(newgnome){
+ darkmode=1;
+ g_print("We need to change GTK_THEME to dark\n");
+ GtkSettings *set;
+ set=gtk_settings_get_default();
+ g_object_set(set,"gtk-theme-name","HighContrastInverse", NULL);
+ changed2dark=1;
+ }
+ }
+ if(!schemeDark & darkmode & changed2dark) {
+ if(newgnome){
+ darkmode=0;
+ g_print("We need to change GTK_THEME to light\n");
+ GtkSettings *set;
+ set=gtk_settings_get_default();
+ g_object_set(set,"gtk-theme-name","Adwaita", NULL);
+ changed2dark=0;
+ }
+ }
+ //
+ if(darkmode!=params.darkmode){
+ params.darkmode=darkmode;
+ g_print("COLOR %f %f %f, schemeDark=%i -> DARKMODE=%d\n",color.red,color.green,color.blue,schemeDark, params.darkmode);
+ //update theme
+ cb_disable_theme();
+ }
+ }
+ update=0;
+}
+
+//gsettings
+static void stylechange3_me(void)
+{
+ gchar *theme=NULL;
+ int newDark=0,i=0;
+ gchar **keys;
+ if(!newgnome) keys=g_settings_list_keys(settings);
+ while(!newgnome && (keys[i]!=NULL)){
+ if(strcmp(keys[i],"color-scheme")==0) newgnome=1;
+ g_free(keys[i]);
+ i++;
+ }
+ //check Adwaita as new gnome uses it
+ theme = g_settings_get_string(settings, "gtk-theme");
+ if(!strstr(theme,"Adwaita")) newgnome=0;
+
+ //new gnome using only normal/dark mode
+ if(newgnome){
+ theme = g_settings_get_string(settings, "color-scheme");
+ if(strstr(theme,"Dark")||strstr(theme,"dark")) {
+ newDark=1;
+ }
+ } else {//older gnome using themes with dark in theme-name
+ theme = g_settings_get_string(settings, "gtk-theme");//normal
+ if(strstr(theme,"Dark")||strstr(theme,"dark")) {
+ newDark=1;
+ }
+ g_free(theme);
+ theme = g_settings_get_string(settings, "icon-theme");//alternative
+ if(strstr(theme,"Dark")||strstr(theme,"dark")) {
+ newDark=1;
+ }
+ }
+ g_free(theme);
+ //
+ if(newDark){
+ if(schemeDark!=1) if(!update) update=1;
+ schemeDark=1;
+ }else{
+ if(schemeDark!=0) if(!update) update=1;
+ schemeDark=0;
+ }
+ g_print("schemeDark=%i -> Update=%d\n",schemeDark,update);
+ stylechange2_me();
+}
+
+//GTK-signal
+static void stylechange_me(void)
+{
+ update=1;
+ g_print("GTK style signal -> Update=%d\n",update);
+}
+
static void close_note(GtkWidget * widget, gpointer user_data)
{
gtk_widget_hide(shell->note->event_box);
@@ -443,6 +544,13 @@ static void create_window(void)
shell_set_title(shell, NULL);
gtk_window_set_default_size(GTK_WINDOW(shell->window), 1280, 800);
g_signal_connect(G_OBJECT(shell->window), "destroy", destroy_me, NULL);
+ g_signal_connect(G_OBJECT(shell->window), "style-updated", stylechange_me, NULL);
+ g_signal_connect_after(G_OBJECT(shell->window), "draw", stylechange2_me, NULL);
+ update=-1;
+ settings=g_settings_new("org.gnome.desktop.interface");
+ g_signal_connect_after(settings,"changed",stylechange3_me,NULL);
+ stylechange3_me();
+ update=0;
#if GTK_CHECK_VERSION(3, 0, 0)
vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
@@ -530,19 +638,6 @@ static void create_window(void)
if(params.theme==4) shell_action_set_active("Theme4Action", TRUE);
if(params.theme==5) shell_action_set_active("Theme5Action", TRUE);
if(params.theme==6) shell_action_set_active("Theme6Action", TRUE);
-
- if(params.theme>0){
- if(params.darkmode){
- sprintf(theme_st,"window.background {background-image: url(\"/usr/share/hardinfo2/pixmaps/bg%d_dark.jpg\"); background-repeat: no-repeat; background-size:100%% 100%%; }",params.theme);
- }else{
- sprintf(theme_st,"window.background {background-image: url(\"/usr/share/hardinfo2/pixmaps/bg%d_light.jpg\"); background-repeat: no-repeat; background-size:100%% 100%%; }",params.theme);
- }
- gtk_css_provider_load_from_data(provider, theme_st, -1, NULL);
- gtk_style_context_add_provider(gtk_widget_get_style_context(shell->window), GTK_STYLE_PROVIDER(provider), GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
-
- gtk_css_provider_load_from_data(provider2, "* { background-color: rgba(0x60, 0x60, 0x60, 0.1); } * text { background-color: rgba(1, 1, 1, 1); }", -1, NULL);
- gtk_style_context_add_provider(gtk_widget_get_style_context(gtk_ui_manager_get_widget(shell->ui_manager,"/MainMenuBarAction")), GTK_STYLE_PROVIDER(provider2), GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
- }
#endif
gtk_widget_show(shell->window);