Back to news

The look matters

Most of today wasn’t about features. It was about the moment before you do anything, when you’ve just logged in and the desktop is sitting there, and it either looks like one coherent thing or like a few programs that happen to share a screen. I spent the day closing that gap.

The clearest example is the top bar. People kept seeing its text and icons go black, unreadable, over their wallpaper. The old logic averaged the whole image to decide whether to use light or dark text, which is the wrong question: the bar only sits over a thin strip at the very top, and that strip can be bright while the rest of the picture is dark. Now it samples just the band of wallpaper actually behind it, mapped through the same cover-crop the background uses, and picks the text colour from that. I also built a little inspector into the dev tools so I can see exactly which pixels it’s reading and tune the threshold against real images instead of guessing (github.com/…/issues/26).

Then there was the structural stuff that breaks the illusion the instant it happens: the dock and top bar duplicating themselves when you toggled Panel Fusion or left fullscreen, and the top bar vanishing for good after you closed a fullscreen window and never coming back. These all turned out to be the same family of problem I’ve been chasing for a while, a layer-shell surface that the compositor stops presenting once it’s idle or slid off-screen. The cure is the same: when the surface needs to reappear or change shape, remap it so it comes back with a fresh frame instead of a stale one (github.com/…/issues/24, github.com/…/issues/57, github.com/…/issues/61).

The part I’m most pleased with is a small shift in philosophy about window decorations. For a while I’d been telling each toolkit to draw its own titlebar, and the result was a patchwork: a GTK app looked one way, a Qt app another, a Flatpak app brought its own Adwaita theme from inside its sandbox and ignored the system entirely. You can’t reach into another program and repaint its window, that’s not how Wayland works, so I’d accepted the mess. But there’s another answer: let the compositor draw the decorations, and make the compositor wear our theme. So now labwc’s server-side titlebars follow the Singularity look, accent colour and all, and they’re the default for any app that doesn’t insist on drawing its own. Our apps and libadwaita ones keep their integrated headerbars; everything else, including Flatpaks and X11 windows, finally gets a titlebar that matches the rest of the desktop. One look, drawn from one place, instead of asking every toolkit to agree.

Icons got the same treatment. There’s now a proper icon-theme picker in settings, and crucially it applies to everything at once, the shell, our own apps, and third-party ones. Before, our apps were pinned to the brand icon set and quietly ignored whatever you chose, which is exactly the kind of inconsistency that makes a desktop feel unfinished (github.com/…/issues/14).

A few smaller things landed in the same spirit of polish: the app drawer now shows the same right-click menu on search results that it shows everywhere else, and it reopens on the first Super press instead of needing two (github.com/…/issues/37, github.com/…/issues/47); Super plus the arrow keys now snaps the focused window to halves of the screen like every other desktop, and the mouse wheel switches workspaces in the overview (github.com/…/issues/62, github.com/…/issues/49); and there are finally settings to turn off mouse acceleration and enable natural scrolling (github.com/…/issues/6, github.com/…/issues/25).

Not everything today was cosmetic. A nasty one took the desktop down in a loop whenever a media player updated its track info, a double-free in the media-controls plugin, now fixed, along with the reason some people couldn’t find the plugins installed at all (github.com/…/issues/69). And there’s still one open crash on launch tied to a specific wallpaper that I’m working through with the person who hit it.

If today had a lesson, it’s that “looks” isn’t a layer you paint on at the end. Whether the text is readable, whether two windows from two toolkits feel like the same system, whether the thing you picked in settings actually applies, that is the product. Get it wrong and no feature saves you.

If you try Singularity and something looks off, please tell me: open an issue on GitHub or come find me on Discord. The reports from machines that aren’t mine are what make this real.