From a3fba8fcb6d8fd88d303d2f2d66626a6b255e42e Mon Sep 17 00:00:00 2001 From: bbedward Date: Sat, 4 Jul 2026 22:38:20 -0400 Subject: [PATCH] matugen: make GTK4 live-refresh opt-in, off by default. Bump the settle timeout fixes #2552 --- core/internal/matugen/matugen.go | 9 ++++++++- quickshell/Services/PortalService.qml | 4 ++-- quickshell/matugen/gtk3-assets/README.md | 10 ++++++++++ 3 files changed, 20 insertions(+), 3 deletions(-) create mode 100644 quickshell/matugen/gtk3-assets/README.md diff --git a/core/internal/matugen/matugen.go b/core/internal/matugen/matugen.go index 08dfd8785..6f470624d 100644 --- a/core/internal/matugen/matugen.go +++ b/core/internal/matugen/matugen.go @@ -928,7 +928,14 @@ func expectColorSchemeEcho(scheme string) { } } +// The color-scheme round trip is the only mechanism that makes running GTK4 +// apps reload ~/.config/gtk-4.0 CSS (a gtk-theme flip does not). But apps +// following the portal color-scheme (Chromium) can drop the restore signal +// mid-repaint and latch the wrong mode, so this is opt-in. func refreshGTK4() { + if os.Getenv("DMS_ENABLE_GTK4_REFRESH") != "1" { + return + } output, err := utils.GsettingsGet("org.gnome.desktop.interface", "color-scheme") if err != nil { return @@ -947,7 +954,7 @@ func refreshGTK4() { log.Warnf("Failed to toggle color-scheme for GTK4 refresh: %v", err) return } - time.Sleep(50 * time.Millisecond) + time.Sleep(400 * time.Millisecond) expectColorSchemeEcho(current) if err := utils.GsettingsSet("org.gnome.desktop.interface", "color-scheme", current); err != nil { log.Warnf("Failed to restore color-scheme for GTK4 refresh: %v", err) diff --git a/quickshell/Services/PortalService.qml b/quickshell/Services/PortalService.qml index d302ebedb..71bcb3e2f 100644 --- a/quickshell/Services/PortalService.qml +++ b/quickshell/Services/PortalService.qml @@ -97,7 +97,7 @@ Singleton { return typeof Theme !== "undefined"; } - // Only follow values stable for the settle window — the GTK4-refresh toggle reverts within ~50ms and following it would loop. + // Only follow values stable for the settle window — the opt-in GTK4-refresh toggle reverts within ~400ms and following it would loop. function evaluateColorScheme() { if (!canSyncColorScheme()) return; @@ -111,7 +111,7 @@ Singleton { Timer { id: colorSchemeSettleTimer - interval: 750 + interval: 1000 onTriggered: { if (!root.canSyncColorScheme()) return; diff --git a/quickshell/matugen/gtk3-assets/README.md b/quickshell/matugen/gtk3-assets/README.md new file mode 100644 index 000000000..ce47c3cb6 --- /dev/null +++ b/quickshell/matugen/gtk3-assets/README.md @@ -0,0 +1,10 @@ +# adw-gtk3 assets + +Image assets vendored from [adw-gtk3](https://github.com/lassekongo83/adw-gtk3) +(`src/assets/`), used by the generated GTK3 light theme +(`quickshell/matugen/templates/gtk-light-colors.css`, itself derived from +adw-gtk3's `gtk.css`). + +adw-gtk3 is licensed under the GNU Lesser General Public License v2.1 — see +`LICENSE.adw-gtk3`. These files are covered by that license; the rest of this +repository remains under its own license.