Frosted glass shell, driven by gsettings - #4
Open
wayne-tbl wants to merge 12 commits into
Open
Conversation
The blur request needs somewhere to live. Adding it to zphoc_layer_shell_effects_v1 would mean editing a protocol phoc owns: our version 4 and any version 4 phoc later defines would be two different things under one name, and a client could not tell them apart. So define zphoc_furios_layer_shell_effects_v1 instead, in a file of our own. Identical to the copy in phoc's tree, which is where the compositor side of it lives; the two must stay in sync. Signed-off-by: wayne <wayne@furilabs.com>
Binds zphoc_furios_layer_shell_effects_v1 when the compositor offers it and leaves zphoc_layer_shell_effects_v1 bound at version 3, as before. Unlike the phoc globals above it this one is optional and deliberately absent from the "lacks needed globals" check: phosh has to keep running against a compositor without it, just without blur. Signed-off-by: wayne <wayne@furilabs.com>
phosh_layer_surface_set_blur() requests a blur radius for the surface's backdrop. The radius is remembered before map and applied once the surface exists, mirroring how alpha is handled. The request goes to zphoc_furios_layer_shell_effects_v1, our own global, so a compositor that does not offer it simply leaves blur_surface NULL and set_blur() does nothing. Signed-off-by: wayne <wayne@furilabs.com>
The io.furios.phosh.shell keys the look is built from, shared between the style manager that turns them into colours and the surfaces that ask the compositor for blur. Signed-off-by: wayne <wayne@furilabs.com>
A switch for the glass theme itself, off by default, so phosh keeps its own look until it is asked for. Then blur radius, glass opacity, lightness and accent wash, the text and shadow colours, and a free-form accent that overrides the nine swatches. The look is retuned with gsettings rather than by rebuilding a stylesheet. Signed-off-by: wayne <wayne@furilabs.com>
Translucent surfaces, soft shadows and inset hairline highlights on the drawer, notifications, media player and OSD, with the radii normalised. The panel is a single glass sheet: stacking translucent layers on top of each other is what made the drawer read as solid. Kept as whole stylesheets of their own -- common-furios.css and adwaita-dark-furios.css -- rather than as edits to phosh's, so nothing about the shell's own look changes until the glass theme is switched on and these are loaded in their place. Signed-off-by: wayne <wayne@furilabs.com>
phosh has no light stylesheet of its own, so this one has no upstream counterpart to leave alone; it follows the -furios naming of the others and is loaded when the colour scheme is light and the glass theme is on. Signed-off-by: wayne <wayne@furilabs.com>
Glass is the opposite of what the high contrast variant is for, so the -furios copy of it overrides the translucent surfaces back to opaque ones. phosh's own adwaita-hc-light.css is left as it is. Signed-off-by: wayne <wayne@furilabs.com>
Loads the -furios stylesheets in place of phosh's own when glass-theme is set, and follows org.gnome.desktop.interface color-scheme while it is -- prefer-dark loads the dark variant, anything else the light one -- so the dark mode quick setting swaps the look live. The glass colours are computed from the keys rather than hard-coded. With the key unset none of this runs: phosh's stylesheet is chosen exactly as it is without us, and only the accent, which is phosh's own setting, is still generated. Text is pure black on light and pure white on dark: what sits behind it is a wallpaper the theme knows nothing about. The shadow takes the opposite of the text colour actually in use rather than of the scheme. Signed-off-by: wayne <wayne@furilabs.com>
Writes ~/.config/gtk-4.0/gtk.css so applications carry the shell's glass, which makes the theme phone-wide rather than shell-only. It refuses to touch a file it did not write, and applications pick changes up when they next start -- GTK4 reads the user stylesheet once and does not watch it. Switching the glass theme off takes the file away again, so applications do not keep a look that is no longer in use. Signed-off-by: wayne <wayne@furilabs.com>
Only while the glass theme is on: behind an opaque panel the blur would not show, and the compositor would still pay for it. Signed-off-by: wayne <wayne@furilabs.com>
Only once the user has swiped up to the keypad, and only with the glass theme on. The info page is a wallpaper with a clock on it and there is nothing behind it worth hiding: the lock screen sits above its own background surface, not above the running apps. Blurring it only makes the picture worse. Signed-off-by: wayne <wayne@furilabs.com>
This was referenced Aug 18, 2026
Author
|
The thirteen feature branches build merged. Three conflicts, all the same shape: two branches appending a key at the same spot in a gschema, and the paired signal handlers in phoc Installed and booted on an FLX1 and an FLX1s. With |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The frosted-glass look for the shell, built from gsettings keys rather than compiled into a stylesheet, and the client side of phoc's background blur.
Updated at review request: phosh's own stylesheets are no longer touched.
common.css,adwaita-dark.cssandadwaita-hc-light.cssare byte-identical toforkyon this branch. The glass is a set of whole stylesheets of its own —common-furios.css,adwaita-dark-furios.css,adwaita-hc-light-furios.css,adwaita-light-furios.css— loaded in their place only when the user asks for the theme.The switch
glass-themeis a new boolean, off by default. With it off, phosh is left exactly as it is:phosh_style_manager_get_stylesheet()picks the sheet the way it does today, the generated CSS contains only the two accent colours phosh generates itself,gtk-application-prefer-dark-themeis not touched, no surface asks the compositor for blur, and the generated~/.config/gtk-4.0/gtk.cssis removed so applications do not keep a look that is no longer in use. Turning it on and off again returns the shell to stock without a restart.The one FuriOS behaviour that stays live either way is the free-form accent colour: it widens phosh's own accent setting rather than being part of the glass.
protocol: add the blur request to layer-shell-effects— version 4 ofzphoc_layer_shell_effects_v1, in sync with phoc.phosh-wayland: bind layer-shell-effects version 4layersurface: ask the compositor to blur the background— mirrors the alpha surface. The FuriOS global is bound only if the compositor offers it, and is deliberately left out of the "lacks needed globals" fatal check, so the shell still starts against a stock phoc and simply gets no blur.util: add the glass gsettings keys/data: add the glass gsettings keys— theio.furios.phosh.shellkeys: the glass-theme switch itself, blur radius, glass opacity, lightness and accent wash, text and shadow colours, and a free-form accent that overrides the nine swatches. The look is retuned with gsettings rather than by rebuilding a stylesheet.stylesheet: add a frosted glass variant— translucent surfaces, soft shadows and inset hairline highlights on the drawer, notifications, media player and OSD, radii normalised. The panel is a single glass sheet: stacking translucent layers on each other is what made the drawer read as solid.stylesheet: add a light glass variant— phosh has no light stylesheet of its own, so this one has no upstream counterpart to leave alone.stylesheet: keep high contrast solid— glass is the opposite of what the high contrast variant is for, so its-furioscopy puts the translucent surfaces back to opaque.style-manager: build the shell's glass from the gsettings keys— loads the-furiossheets when the theme is on and followsorg.gnome.desktop.interface color-schemewhile it is, so the dark mode quick setting swaps the look live. Text is pure black on light and pure white on dark, because what sits behind it is a wallpaper the theme knows nothing about; the shadow takes the opposite of the text colour actually in use rather than of the scheme.style-manager: generate a GTK4 stylesheet from the same keystop-panel: ask for background blur— only while the theme is on: behind an opaque panel the blur would not show and the compositor would still pay for it.lockscreen: frost the keypad page— only once the user has swiped up. The info page is a wallpaper with a clock on it and the lock screen sits above its own background surface, not above the running apps, so blurring it only makes the picture worse.Two things worth a reviewer's eye. The
-furiossheets are whole stylesheets rather than overlays on phosh's: it costs some duplication incommon-furios.css, and buys a guarantee that with the theme off nothing of ours is in the cascade at all. And generating~/.config/gtk-4.0/gtk.cssis deliberately its own commit: it makes the theme phone-wide rather than shell-only, which is a decision worth taking separately from the shell theme. It refuses to touch a file it did not write, and applications pick changes up when they next start, since GTK4 reads the user stylesheet once and does not watch it.Pairs with FuriLabs/phoc
glass-theme, which implements the blur. Because of the version guard the two can land in either order — against a stock phoc the panels are translucent and simply not frosted.Switched on from FuriLabs/gnome-control-center#6, which carries the toggle.
12 commits, off
forky. Tested on an FLX1 across many boots, including rotation, dark/light switching and the accent swatches.