From 507c018cf5d5b4b157efcc33685e1444edaf9215 Mon Sep 17 00:00:00 2001 From: Jason Perlow Date: Wed, 14 Oct 2026 12:20:37 -0400 Subject: [PATCH 1/3] style(background): draw the wallpaper attribution as plain text Drop the rounded scrim behind the attribution label and keep the luminance-based text colour with a soft shadow for legibility. Assisted-by: Claude Code:claude-sonnet-5-5 AI-Scope: Wrote the CSS change and removed the comment that described the scrim, tested on hardware by the author. --- src/components/background/background.vala | 33 +++-------------------- 1 file changed, 4 insertions(+), 29 deletions(-) diff --git a/src/components/background/background.vala b/src/components/background/background.vala index 8ea0c75..b0c3f15 100644 --- a/src/components/background/background.vala +++ b/src/components/background/background.vala @@ -205,43 +205,18 @@ namespace Singularity { Singularity.Motion.Duration.SCENE, Singularity.Motion.Curve.EMPHASIZED); } - // Wallpaper attribution overlay (Background.vala). - // - // as a single Gtk.Label over the wallpaper cross-fade. The scrim - // is a semi-transparent rounded rectangle so the text reads - // against both bright and dark wallpapers without an aggressive - // box, and the light-bg / non-light-bg pair matches the - // convention panel.vala already uses for the top band -- same - // colour tokens, same threshold (ATTRIBUTION_LUM_THRESHOLD = 0.72, - // defined above). - // - // The luminance class selects an opposing scrim/text pair - // independently of the active application theme, since wallpaper - // contrast cannot be inferred from the theme's text colour. - // - // Moved here from libsingularity's style.css (review on - // libsingularity#13: that stylesheet should stay limited to - // reusable widget styling, and this rule only exists for the - // wallpaper attribution overlay singularity-shell owns) -- rules - // and rationale unchanged, just relocated to the actual consumer. private const string ATTRIBUTION_CSS = """ .background-window .attribution-label { - border-radius: 8px; - padding: 6px 12px; font-size: 13px; font-weight: 400; } .background-window.light-bg .attribution-label { - /* Bright wallpaper: dark scrim with light foreground. */ - background-color: alpha(black, 0.65); - color: white; - text-shadow: 0 1px 2px alpha(black, 0.45); + color: black; + text-shadow: 0 1px 3px alpha(white, 0.55), 0 1px 1px alpha(white, 0.75); } .background-window:not(.light-bg) .attribution-label { - /* Dark wallpaper: light scrim with dark foreground. */ - background-color: alpha(white, 0.72); - color: black; - text-shadow: 0 1px 2px alpha(white, 0.35); + color: white; + text-shadow: 0 1px 3px alpha(black, 0.55), 0 1px 1px alpha(black, 0.75); } """; From 65190576954fae7045556f26ef6695c9851191ca Mon Sep 17 00:00:00 2001 From: Jason Perlow Date: Wed, 14 Oct 2026 12:20:44 -0400 Subject: [PATCH 2/3] fix(background): move the attribution when the corner changes Gtk.Overlay places a child in its own size_allocate, which a child's queue_allocate() with an unchanged size does not re-run. Queue the overlay too so a live position change takes effect at once. Assisted-by: Claude Code:claude-sonnet-5-5 AI-Scope: Root-caused the frozen label and wrote the one-line fix, confirmed on hardware by the author. --- src/components/background/background.vala | 1 + 1 file changed, 1 insertion(+) diff --git a/src/components/background/background.vala b/src/components/background/background.vala index b0c3f15..d9bad40 100644 --- a/src/components/background/background.vala +++ b/src/components/background/background.vala @@ -343,6 +343,7 @@ namespace Singularity { break; } attribution_label.queue_allocate(); + if (wp_overlay != null) wp_overlay.queue_allocate(); } private void update_wallpaper(WallpaperManager manager) { From 660749096a07a786de546b95b76cbe7274f6fe6a Mon Sep 17 00:00:00 2001 From: Jason Perlow Date: Wed, 14 Oct 2026 12:20:44 -0400 Subject: [PATCH 3/3] fix(background): wrap a long attribution to two lines A long title and author line could run under the dock or the panel controls. Wrap it to two lines, ellipsize past that, and justify it toward the side of the active corner. Assisted-by: Claude Code:claude-sonnet-5-5 AI-Scope: Found the overlap on a long wallpaper title and wrote the wrapping and justification, checked on hardware by the author. --- src/components/background/background.vala | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/components/background/background.vala b/src/components/background/background.vala index d9bad40..9f60877 100644 --- a/src/components/background/background.vala +++ b/src/components/background/background.vala @@ -125,6 +125,11 @@ namespace Singularity { attribution_label.visible = false; attribution_label.can_focus = false; attribution_label.can_target = false; + attribution_label.wrap = true; + attribution_label.wrap_mode = Pango.WrapMode.WORD_CHAR; + attribution_label.lines = 2; + attribution_label.ellipsize = Pango.EllipsizeMode.END; + attribution_label.max_width_chars = 40; wp_overlay = new Gtk.Overlay(); wp_motion = new Singularity.Animation.MotionBin(wp_stack); wp_overlay.set_child(wp_motion); @@ -322,24 +327,28 @@ namespace Singularity { attribution_label.valign = Align.START; attribution_label.xalign = 0.0f; attribution_label.yalign = 0.0f; + attribution_label.justify = Justification.LEFT; break; case "top-right": attribution_label.halign = Align.END; attribution_label.valign = Align.START; attribution_label.xalign = 1.0f; attribution_label.yalign = 0.0f; + attribution_label.justify = Justification.RIGHT; break; case "bottom-right": attribution_label.halign = Align.END; attribution_label.valign = Align.END; attribution_label.xalign = 1.0f; attribution_label.yalign = 1.0f; + attribution_label.justify = Justification.RIGHT; break; default: attribution_label.halign = Align.START; attribution_label.valign = Align.END; attribution_label.xalign = 0.0f; attribution_label.yalign = 1.0f; + attribution_label.justify = Justification.LEFT; break; } attribution_label.queue_allocate();