https://bugs.kde.org/show_bug.cgi?id=527150

[email protected] changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |[email protected]
           Platform|CachyOS                     |Arch Linux

--- Comment #2 from [email protected] ---
Confirming on a second setup. The reload is not specific to fractional scaling.

Setup: Arch Linux, Plasma 6.8.0 (plasma-workspace 6.8.0-1, kscreenlocker
6.8.0-1, kwin 6.8.0-1), Qt 6.12.0, Wayland, NVIDIA RTX 5060 Ti (nvidia-open
615.78.08). Two outputs, both at scale 1.0: 2560x1440 and 1440x2560 (rotated).
Lock screen wallpaper: Image=file:///usr/share/wallpapers/Horos/. The real lock
screen showed Next (dark) on the primary screen.

Reproducer that needs no special hardware (nested virtual KWin, two identical
outputs, scale 1):

    dbus-run-session -- kwin_wayland --virtual --output-count 2 --width 1280
--height 720 \
        --socket wl-lktest --no-lockscreen \
        --exit-with-session '/usr/lib/kscreenlocker_greet --testing'

5 of 6 runs showed Next on both screens instead of the configured package.

Why replace() restarts loading: the wallpaper item is first laid out at
LockScreen.qml's implicit size (800x600), before the root item is resized to
the view. TransientImage finishes loading at 800x600, then StackView.replace()
resizes it to the screen size, and TransientImage::geometryChange() ->
refresh() -> load() starts a new reader and sets the status back to Loading.
Logging in replaceWhenLoaded():

    before replace status= 1 size= 800x600 view= 1280x720
    after replace status= 2 size= 1280x720
    -> loadImage src= file:///usr/share/wallpapers/Next/ model=
.../Next/contents/images_dark/5120x2880.png

So any size change between load completion and replace() triggers it.
Fractional scaling is one way to get there. Whether it shows depends on whether
the decode finishes before the root item is resized, which is why it varies per
screen and per run.

Not treating Loading as a failure (status !== Image.Ready && status !==
Image.Loading; the loadSucceeded change suggested above should behave the same)
fixed it here: 5/5 runs of the reproducer, and the real lock screen, showed the
configured wallpaper on both screens.

-- 
You are receiving this mail because:
You are watching all bug changes.

Reply via email to