mirror of
https://github.com/ZoiteChat/zoitechat.git
synced 2026-03-10 07:50:19 +00:00
fix auto dark/light mode on windows.
This commit is contained in:
@@ -276,10 +276,46 @@ fe_system_prefers_dark (void)
|
|||||||
GtkSettings *settings = gtk_settings_get_default ();
|
GtkSettings *settings = gtk_settings_get_default ();
|
||||||
gboolean prefer_dark = FALSE;
|
gboolean prefer_dark = FALSE;
|
||||||
char *theme_name = NULL;
|
char *theme_name = NULL;
|
||||||
|
#ifdef G_OS_WIN32
|
||||||
|
gboolean have_win_pref = FALSE;
|
||||||
|
#endif
|
||||||
|
|
||||||
if (!settings)
|
if (!settings)
|
||||||
return FALSE;
|
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),
|
if (g_object_class_find_property (G_OBJECT_GET_CLASS (settings),
|
||||||
"gtk-application-prefer-dark-theme"))
|
"gtk-application-prefer-dark-theme"))
|
||||||
{
|
{
|
||||||
@@ -331,6 +367,12 @@ fe_set_auto_dark_mode_state (gboolean enabled)
|
|||||||
auto_dark_mode_enabled = enabled;
|
auto_dark_mode_enabled = enabled;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
fe_refresh_auto_dark_mode (void)
|
||||||
|
{
|
||||||
|
fe_auto_dark_mode_changed (NULL, NULL, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
gboolean
|
gboolean
|
||||||
fe_dark_mode_is_enabled_for (unsigned int mode)
|
fe_dark_mode_is_enabled_for (unsigned int mode)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -185,6 +185,7 @@ extern cairo_surface_t *dialogwin_pix;
|
|||||||
gboolean fe_dark_mode_is_enabled (void);
|
gboolean fe_dark_mode_is_enabled (void);
|
||||||
gboolean fe_dark_mode_is_enabled_for (unsigned int mode);
|
gboolean fe_dark_mode_is_enabled_for (unsigned int mode);
|
||||||
void fe_set_auto_dark_mode_state (gboolean enabled);
|
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_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)
|
#define SPELL_ENTRY_SET_TEXT(e,txt) gtk_entry_set_text(GTK_ENTRY(e),txt)
|
||||||
|
|||||||
@@ -3634,6 +3634,12 @@ mg_win32_filter (GdkXEvent *xevent, GdkEvent *event, gpointer data)
|
|||||||
return GDK_FILTER_CONTINUE;
|
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)
|
if (msg->message == WM_COPYDATA)
|
||||||
{
|
{
|
||||||
COPYDATASTRUCT *copy_data = (COPYDATASTRUCT *)msg->lParam;
|
COPYDATASTRUCT *copy_data = (COPYDATASTRUCT *)msg->lParam;
|
||||||
|
|||||||
Reference in New Issue
Block a user