Skip to content

All six picture options, lock screen fit and wallpaper folder rotation - #5

Open
wayne-tbl wants to merge 50 commits into
FuriLabs:forkyfrom
wayne-tbl:wallpaper
Open

All six picture options, lock screen fit and wallpaper folder rotation#5
wayne-tbl wants to merge 50 commits into
FuriLabs:forkyfrom
wayne-tbl:wallpaper

Conversation

@wayne-tbl

@wayne-tbl wayne-tbl commented Aug 16, 2026

Copy link
Copy Markdown
Contributor

All six picture options actually implemented, the lock screen fitted the same way as the home screen, and rotation through a folder of wallpapers.

Updated at review request (18 Aug): this no longer sits on glass-theme. It is now 5 commits straight off forky, so the diff is only the wallpaper work. The .gschema.override that was here has moved to FuriLabs/furios-default-settings#2.

  • util: add a picture-options aware pixbuf helper — fits an image to a target size by GDesktopBackgroundStyle, always returning a pixbuf of exactly that size, so callers can draw it at the origin without knowing which style was used.
  • background: implement all six picture options — only zoom, and to a degree scaled, were implemented; wallpaper, centered, spanned and none fell through to zoom behind a warning, so choosing them in Settings quietly did nothing.
  • lockscreen: fit the lock screen wallpaper the same way — it has a wallpaper of its own and was scaling it to fill whatever the picture option said.
  • data: add the wallpaper folder key
  • lockscreen-manager: rotate through a wallpaper folder — advance when the phone locks, and when the screen is woken while it is still locked; deliberately not on unlock, so what you unlock into is the wallpaper you were just looking at. The wake trigger watches both the primary monitor's power mode and the shell's blanked state: the shell's flag survives the primary monitor being replaced on output changes, the monitor's own power mode is the more direct signal when it is there, watching one and not the other has failed in both directions, and the duplicate costs nothing.

How it decoupled from the theme

There was less coupling than the stacking suggested. io.furios.phosh.shell already exists in forky — it carries appid and filtered-app-ids — so this branch simply adds its wallpaper-folder key to it and needs nothing from glass-theme.

The two schema defines it needs now live in lockscreen-manager.c, the one file that uses them, rather than in util.h. So this PR and #4 touch no common lines of any shared header and can merge in either order. All this one adds to util.h is the pixbuf helper it introduces.

IS_FURIOS

Updated at review request. src/background.c no longer rewrites upstream's
picture handling. #define IS_FURIOS 1 sits by the includes, following the same
pattern already used in src/wifi-manager.c: pb_scale_to_fit() and upstream's
image_background() stay in the file byte-identical to forky, built under
#else; ours builds under #if IS_FURIOS. Setting it to 0 restores upstream's
behaviour exactly.

That took src/background.c from +5/-61 to +27/-0 — it now touches no
upstream hunk at all.

Pairs with FuriLabs/gnome-control-center#7, the rows that set source and fit.

5 commits, off forky. Builds clean on an FLX1.

agx and others added 30 commits June 17, 2026 18:27
We need newer ashpd in Debian for that

This reverts commit 0b9b65a.
These architectures have too many exported symbols
This is can be used to get the pixel format of the image, as returned
by the compositor.

Signed-off-by: Eugenio Paolantonio (g7) <me@medesimo.eu>
This function can be used to ensure an eventual BGR format can be
converted to RGB so that cairo is happy.

Signed-off-by: Eugenio Paolantonio (g7) <me@medesimo.eu>
Signed-off-by: Bardia Moshiri <bardia@furilabs.com>
… it's in ARGB format

Signed-off-by: Eugenio Paolantonio (g7) <me@medesimo.eu>
Signed-off-by: Bardia Moshiri <bardia@furilabs.com>
for night light, we use PQ which is not the standard way gnome expects, this works either way. let this one slide

Signed-off-by: Bardia Moshiri <fakeshell@bardia.tech>
Signed-off-by: Eugenio Paolantonio (g7) <me@medesimo.eu>
…dw-gtk3 as well

Signed-off-by: Bardia Moshiri <bardia@furilabs.com>
on our device the frame is captured too quickly while the power menu is still open. wait a bit and try again

Signed-off-by: Bardia Moshiri <bardia@furilabs.com>
we run phoc 0.44.0 with a few patches to run with wlroots 0.17.4 before we rebase to 0.18.x and this option doesn't exist on that version. let it slide for now

Signed-off-by: Bardia Moshiri <bardia@furilabs.com>
Signed-off-by: Bardia Moshiri <bardia@furilabs.com>
Signed-off-by: Bardia Moshiri <bardia@furilabs.com>
Signed-off-by: Bardia Moshiri <bardia@furilabs.com>
Signed-off-by: Bardia Moshiri <bardia@furilabs.com>
Disables lock screen and non-app panels. Meant for first time setup
set default HWCOMPOSER-1 scale to the value used by g-c-c's "275%"
…se fails

it is very sad that we are resorting to this and i really dislike this piece of code.
lomiri apps (and potentially builds from e.g chum or open repos) are built against a set of toolkits we do not control. for the most part this is fine since most the dependencies are already packaged (or to be packaged) but we don't fork certain things like upstream maintainers do (such as qt)
this leads us down a very dark road. since upstream has essentially custom everything, we have to hack in support for certain things to work [1][2] and this change is yet another hack to make things compatible.
the issue we have here is that appid detection is not exactly standard in any toolkit and system. while gtk and lately qt6 are unifying this, for the most part old qt5 apps either never set the appid or set something that does not represent the app itself.
qmlscene in lomiri is a good example, any app using morph will spawn a process for webapp-container inside qmlscene which then sets its own title and appid, that is besides qmlscene also adding a .qmlscene to the end of appid
then we have cases where the desktop file has the format {developer}.{appname} but the appid says {appname}.{developer} and some even have extra prefixes. in general nothing in consistent
this change will allow the script we generate for each app to set a appid as the fallback for the spawning process using gsettings and phosh will respect that as a last resort if everything else fails (gsettings set io.furios.phosh.shell appid 'org.example.App.desktop').
this key is the reset by phosh itself to not conflict with future apps if they do not set any appid and they also reach a fallback state. this is the cleanest solution i can come up with, with other solutions involving us forking the toolkit and forcing some ugly behaviour that might break apps that are do not come from the open store

[1] https://github.com/FuriLabs/furios-lomiri-app-support
[2] https://github.com/FuriLabs/store-provider/blob/503cfe3850620d9788c833eb07f5525c849b6c85/open_store/click.py#L201

Signed-off-by: Bardia Moshiri <bardia@furilabs.com>
…-ids key

Signed-off-by: Bardia Moshiri <bardia@furilabs.com>
Signed-off-by: Bardia Moshiri <bardia@furilabs.com>
required for setting backlight brightness after DPM change

Signed-off-by: Bardia Moshiri <bardia@furilabs.com>
…anager

required for setting backlight brightness after DPM change

Signed-off-by: Bardia Moshiri <bardia@furilabs.com>
…mode changed

on some kernel drivers the screen does not turn off by setting DPM and it has to be done manually through sysfs.
set brightness to 0 on DPM off and restore to previously known good state on DPM on

Signed-off-by: Bardia Moshiri <bardia@furilabs.com>
Signed-off-by: Bardia Moshiri <bardia@furilabs.com>
Signed-off-by: Bardia Moshiri <bardia@furilabs.com>
Signed-off-by: Bardia Moshiri <bardia@furilabs.com>
FakeShell and others added 15 commits June 17, 2026 18:33
Signed-off-by: Bardia Moshiri <bardia@furilabs.com>
initialize the output stream binding during widget setup instead of waiting for the next active-output-update signal.
this keeps the volume slider synchronized with external volume changes even when no output device change happen after startup

Signed-off-by: Bardia Moshiri <bardia@furilabs.com>
some audio routes are exposed as ports on the current sink/source rather than separate audio devices.

when selecting such routes, change the stream port in addition to the selected device, allowing switching between ports on the same sink/source

Signed-off-by: Bardia Moshiri <bardia@furilabs.com>
audio routes exposed as ports on the same sink/source do not emit active-input-update or active-output-update when switching between ports.
store the port associated with each audio device and listen for notify::port on the current stream.
update the active device state based on the stream's active port so the selected audio route is reflected correctly in the UI.

Signed-off-by: Bardia Moshiri <bardia@furilabs.com>
in case user does not upgrade phosh and gnome session together, this saves the device from getting in an unbootable state

Signed-off-by: Bardia Moshiri <bardia@furilabs.com>
Signed-off-by: Bardia Moshiri <bardia@furilabs.com>
tests do not work nicely with our CI machines (or maybe wlroots?) so lets drop that for now

Signed-off-by: Bardia Moshiri <fakeshell@bardia.tech>
not the most nuclear option, but definitely up there next to `exec 2>/dev/null; command >/dev/null 2>&1; exec 2>&2` =)

Signed-off-by: Bardia Moshiri <bardia@furilabs.com>
Signed-off-by: Bardia Moshiri <bardia@furilabs.com>
Signed-off-by: Bardia Moshiri <bardia@furilabs.com>
Signed-off-by: Bardia Moshiri <bardia@furilabs.com>
as discussed: "its a stupid notification, its not actionable and if you start an app and it doesnt start well you know that cause it ain't there."

Signed-off-by: Bardia Moshiri <bardia@furilabs.com>
Signed-off-by: Bardia Moshiri <bardia@furilabs.com>
Signed-off-by: Bardia Moshiri <bardia@furilabs.com>
Signed-off-by: Bardia Moshiri <bardia@furilabs.com>
@wayne-tbl
wayne-tbl force-pushed the wallpaper branch 2 times, most recently from 5ee99a7 to be52cbb Compare August 17, 2026 14:36
Fits an image to a target size by GDesktopBackgroundStyle, always
returning a pixbuf of exactly that size so callers can draw it at the
origin without knowing which style was used.

Signed-off-by: wayne <wayne@furilabs.com>
Only zoom, and to a degree scaled, were implemented; wallpaper, centered,
spanned and none fell through to zoom behind a warning, so choosing them
in Settings quietly did nothing.

Signed-off-by: wayne <wayne@furilabs.com>
The lock screen has a wallpaper of its own, and was scaling it to fill
whatever the picture option said.

Signed-off-by: wayne <wayne@furilabs.com>
Signed-off-by: wayne <wayne@furilabs.com>
Advance when the phone locks, and when the screen is woken while it is
still locked -- deliberately not on unlock, so what you unlock into is the
wallpaper you were just looking at.

The wake trigger watches both the primary monitor's power mode and the
shell's blanked state. The shell's flag survives the primary monitor being
replaced, which happens on output changes; the monitor's own power-mode is
the more direct signal when it is there. Watching one and not the other
has failed in both directions, and a duplicate costs nothing.

Signed-off-by: wayne <wayne@furilabs.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants