diff options
-rw-r--r-- | hardinfo2/hardinfo.c | 42 | ||||
-rw-r--r-- | modules/benchmark/guibench.c | 22 | ||||
-rw-r--r-- | shell/shell.c | 123 |
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); |