75 lines
3.1 KiB
Diff
75 lines
3.1 KiB
Diff
|
diff --git a/src/adw-style-manager.c b/src/adw-style-manager.c
|
||
|
index 71f6915d..a90c0df1 100644
|
||
|
--- a/src/adw-style-manager.c
|
||
|
+++ b/src/adw-style-manager.c
|
||
|
@@ -284,6 +284,23 @@ notify_high_contrast_cb (AdwStyleManager *self)
|
||
|
g_object_notify_by_pspec (G_OBJECT (self), props[PROP_HIGH_CONTRAST]);
|
||
|
}
|
||
|
|
||
|
+static void
|
||
|
+adw_style_manager_theme_changed(GSettings *settings, const char *key, GdkDisplay *display)
|
||
|
+{
|
||
|
+ char* theme = g_settings_get_string(settings, "gtk-theme");
|
||
|
+ char* color_scheme = g_settings_get_string(settings, "color-scheme");
|
||
|
+
|
||
|
+ if(!theme) {
|
||
|
+ theme = "Adwaita-empty";
|
||
|
+ }
|
||
|
+
|
||
|
+ gboolean is_dark_variant = NULL != strstr(theme, "-dark") || NULL != strstr(theme, "-Dark") || 0 == strcmp(color_scheme, "prefer-dark");
|
||
|
+
|
||
|
+ g_object_set(gtk_settings_get_for_display(display),
|
||
|
+ "gtk-theme-name", theme,
|
||
|
+ "gtk-application-prefer-dark-theme", is_dark_variant, NULL);
|
||
|
+}
|
||
|
+
|
||
|
static void
|
||
|
adw_style_manager_constructed (GObject *object)
|
||
|
{
|
||
|
@@ -308,27 +325,6 @@ adw_style_manager_constructed (GObject *object)
|
||
|
self,
|
||
|
G_CONNECT_SWAPPED);
|
||
|
|
||
|
- if (!adw_is_granite_present () && !g_getenv ("GTK_THEME")) {
|
||
|
- g_object_set (gtk_settings_get_for_display (self->display),
|
||
|
- "gtk-theme-name", "Adwaita-empty",
|
||
|
- NULL);
|
||
|
-
|
||
|
- self->provider = gtk_css_provider_new ();
|
||
|
- gtk_style_context_add_provider_for_display (self->display,
|
||
|
- GTK_STYLE_PROVIDER (self->provider),
|
||
|
- GTK_STYLE_PROVIDER_PRIORITY_THEME);
|
||
|
-
|
||
|
- self->colors_provider = gtk_css_provider_new ();
|
||
|
- gtk_style_context_add_provider_for_display (self->display,
|
||
|
- GTK_STYLE_PROVIDER (self->colors_provider),
|
||
|
- GTK_STYLE_PROVIDER_PRIORITY_THEME);
|
||
|
-
|
||
|
- self->accent_provider = gtk_css_provider_new ();
|
||
|
- gtk_style_context_add_provider_for_display (self->display,
|
||
|
- GTK_STYLE_PROVIDER (self->accent_provider),
|
||
|
- GTK_STYLE_PROVIDER_PRIORITY_THEME);
|
||
|
- }
|
||
|
-
|
||
|
self->animations_provider = gtk_css_provider_new ();
|
||
|
gtk_css_provider_load_from_string (self->animations_provider,
|
||
|
"* { transition: none; }");
|
||
|
@@ -364,6 +360,17 @@ adw_style_manager_constructed (GObject *object)
|
||
|
|
||
|
update_dark (self);
|
||
|
update_stylesheet (self, UPDATE_ALL);
|
||
|
+
|
||
|
+ if (self->display && !adw_is_granite_present () && !g_getenv ("GTK_THEME")) {
|
||
|
+ GSettingsSchemaSource *schema_source =
|
||
|
+ g_settings_schema_source_get_default();
|
||
|
+ GSettingsSchema *schema = g_settings_schema_source_lookup(
|
||
|
+ schema_source, "org.gnome.desktop.interface", true);
|
||
|
+ GSettings *interface_settings = g_settings_new_full(schema, NULL, NULL);
|
||
|
+
|
||
|
+ adw_style_manager_theme_changed(interface_settings, "gtk-theme", self->display);
|
||
|
+ g_signal_connect (interface_settings, "changed", G_CALLBACK (adw_style_manager_theme_changed), self->display);
|
||
|
+ }
|
||
|
}
|
||
|
|
||
|
static void
|