diff --git a/flake.nix b/flake.nix index 955f86a..25885e8 100644 --- a/flake.nix +++ b/flake.nix @@ -79,11 +79,7 @@ }); libadwaita = super.libadwaita.overrideAttrs (old: { patches = (old.patches or []) ++ [ - (super.fetchpatch { - name = "adwaita-theming-support.diff"; - url = "https://aur.archlinux.org/cgit/aur.git/plain/theming_patch.diff?h=libadwaita-without-adwaita-git"; - hash = ""; - }) + ./patches/adwaita-theming-support.patch ]; }); discord = super.discord.overrideAttrs (old: { diff --git a/patches/adwaita-theming-support.patch b/patches/adwaita-theming-support.patch new file mode 100644 index 0000000..790c9d4 --- /dev/null +++ b/patches/adwaita-theming-support.patch @@ -0,0 +1,55 @@ +diff --git a/src/adw-style-manager.c b/src/adw-style-manager.c +index d27ebda5..f9e725d3 100644 +--- a/src/adw-style-manager.c ++++ b/src/adw-style-manager.c +@@ -230,6 +230,22 @@ notify_high_contrast_cb (AdwStyleManager *self) + static void + adw_style_manager_constructed (GObject *object) + { ++adw_style_manager_theme_changed(GSettings *settings, const char *key, GdkDisplay *display) ++{ ++ char *theme = g_settings_get_string(settings, "gtk-theme"); ++ if (!theme) { ++ theme = "Adwaita-empty"; ++ } ++ gboolean is_dark_variant = NULL != strstr(theme, "-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 + AdwStyleManager *self = ADW_STYLE_MANAGER (object); + + G_OBJECT_CLASS (adw_style_manager_parent_class)->constructed (object); +@@ -252,19 +268,14 @@ adw_style_manager_constructed (GObject *object) + 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); ++ 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); + } + + self->animations_provider = gtk_css_provider_new ();