diff --git a/src/fe-gtk/fe-gtk.c b/src/fe-gtk/fe-gtk.c index 04d0d265..a6d00991 100644 --- a/src/fe-gtk/fe-gtk.c +++ b/src/fe-gtk/fe-gtk.c @@ -276,10 +276,46 @@ fe_system_prefers_dark (void) GtkSettings *settings = gtk_settings_get_default (); gboolean prefer_dark = FALSE; char *theme_name = NULL; +#ifdef G_OS_WIN32 + gboolean have_win_pref = FALSE; +#endif if (!settings) return FALSE; +#ifdef G_OS_WIN32 + { + DWORD value = 1; + DWORD value_size = sizeof (value); + LSTATUS status; + + status = RegGetValueW (HKEY_CURRENT_USER, + L"Software\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize", + L"AppsUseLightTheme", + RRF_RT_REG_DWORD, + NULL, + &value, + &value_size); + if (status != ERROR_SUCCESS) + status = RegGetValueW (HKEY_CURRENT_USER, + L"Software\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize", + L"SystemUsesLightTheme", + RRF_RT_REG_DWORD, + NULL, + &value, + &value_size); + + if (status == ERROR_SUCCESS) + { + prefer_dark = (value == 0); + have_win_pref = TRUE; + } + } +#endif + +#ifdef G_OS_WIN32 + if (!have_win_pref) +#endif if (g_object_class_find_property (G_OBJECT_GET_CLASS (settings), "gtk-application-prefer-dark-theme")) { @@ -331,6 +367,12 @@ fe_set_auto_dark_mode_state (gboolean enabled) auto_dark_mode_enabled = enabled; } +void +fe_refresh_auto_dark_mode (void) +{ + fe_auto_dark_mode_changed (NULL, NULL, NULL); +} + gboolean fe_dark_mode_is_enabled_for (unsigned int mode) { diff --git a/src/fe-gtk/fe-gtk.h b/src/fe-gtk/fe-gtk.h index 12cc5d19..de060fd5 100644 --- a/src/fe-gtk/fe-gtk.h +++ b/src/fe-gtk/fe-gtk.h @@ -185,6 +185,7 @@ extern cairo_surface_t *dialogwin_pix; gboolean fe_dark_mode_is_enabled (void); gboolean fe_dark_mode_is_enabled_for (unsigned int mode); void fe_set_auto_dark_mode_state (gboolean enabled); +void fe_refresh_auto_dark_mode (void); #define SPELL_ENTRY_GET_TEXT(e) ((char *)(gtk_entry_get_text (GTK_ENTRY(e)))) #define SPELL_ENTRY_SET_TEXT(e,txt) gtk_entry_set_text(GTK_ENTRY(e),txt) diff --git a/src/fe-gtk/maingui.c b/src/fe-gtk/maingui.c index d410a940..b7d77df7 100644 --- a/src/fe-gtk/maingui.c +++ b/src/fe-gtk/maingui.c @@ -3634,6 +3634,12 @@ mg_win32_filter (GdkXEvent *xevent, GdkEvent *event, gpointer data) return GDK_FILTER_CONTINUE; } + if (msg->message == WM_SETTINGCHANGE || msg->message == WM_THEMECHANGED) + { + fe_refresh_auto_dark_mode (); + return GDK_FILTER_CONTINUE; + } + if (msg->message == WM_COPYDATA) { COPYDATASTRUCT *copy_data = (COPYDATASTRUCT *)msg->lParam;