Merge pull request #30 from ZoiteChat/auto-dark-mode-on-windows-fix

fix auto dark/light mode on windows.
This commit is contained in:
deepend-tildeclub
2026-01-18 15:53:02 -07:00
committed by GitHub
3 changed files with 49 additions and 0 deletions

View File

@@ -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)
{

View File

@@ -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)

View File

@@ -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;