Skip to content

Play the wallpaper during Show Desktop; apply pause-mode changes at once - #34

Merged
CaptSilver merged 2 commits into
CaptSilver:mainfrom
Makoi66:fix/pause-show-desktop
Oct 13, 2026
Merged

CaptSilver merged 2 commits into
CaptSilver:mainfrom
Makoi66:fix/pause-show-desktop

Conversation

@Makoi66

@Makoi66 Makoi66 commented Oct 2, 2026

Copy link
Copy Markdown
Contributor

Problem

KWin's Show Desktop (Meta+D, or the panel button) hides windows without minimizing them. The task model keeps reporting them as maximized, so with a maximized/fullscreen pause mode the wallpaper stayed paused while the user was looking straight at it.

A pause-mode change in the settings also only took effect at the next window event.

Change

  • WindowModel reads KWindowSystem.showingDesktop: while it is set the wallpaper plays, and toggling it re-runs the pause decision.

  • onModePlayChanged schedules a re-decision, so a new pause mode applies at once.

  • org.kde.kwindowsystem is a new QML import, and WindowModel is created unconditionally, so it is declared as a hard dependency in every manifest and in packaging-qml-imports.test.mjs. I checked each name against the distro's own metadata:

    distro package checked with
    Fedora kf6-kwindowsystem dnf repoquery --whatprovides on the module's qmldir
    openSUSE kf6-kwindowsystem-imports the Factory spec (%files imports)
    Mageia kwindowsystem file list of the cauldron rpm
    Debian qml6-module-org-kde-kwindowsystem trixie package page
    Arch kwindowsystem pacman -Ql

    Today it mostly arrives anyway: on Fedora and Arch the module ships in the same package as libKF6WindowSystem, which plasma-workspace links against, and Debian's plasma-workspace depends on the QML package directly. openSUSE is why it can't be left to that: there the module is in kf6-kwindowsystem-imports, and none of plasma6-workspace, plasma6-desktop, plasma6-session, kwin6, libplasma6, plasma6-integration or systemsettings6 requires it. On Mageia the module is a package of its own, kwindowsystem, separate from the library (lib64kf6windowsystem6).

Tests

  • KWindowSystem stub (showingDesktop only).
  • tst_windowmodel.qml covers: plays during Show Desktop, pauses again when it ends, and re-decides immediately on a mode change. All three fail without the change.

tools/scripts/preflight.sh passes (run inside a fedora-toolbox:latest container built from DEPS_FEDORA, WEK_IN_CI=1). One note: on this laptop the fuzz step times out on the checked-in seed tests/fuzz_corpus/WPShaderCompile/seed/58392d50… (~33 s per compile under ASAN+UBSAN, identical on clean main), so I ran preflight with --no-fuzz and then all fuzz targets with the same settings except -timeout=60: no findings.

Setup: Plasma 6 (Wayland), KWin, Intel Iris Xe (RPL-P), 2520x1680 @ 120 Hz laptop panel, Manjaro.

Makoi66 and others added 2 commits October 2, 2026 14:38
KWin's "Show Desktop" (Meta+D, the panel button) hides windows without
minimizing them.  The task model keeps reporting them as maximized, so
with a maximized/fullscreen pause mode the wallpaper stayed paused
while the user was looking straight at it.  WindowModel now reads
KWindowSystem.showingDesktop: while it is set the wallpaper plays, and
entering or leaving Show Desktop re-runs the decision.

Changing the pause mode in the settings also only took effect at the
next window event; onModePlayChanged now schedules a re-decision.

org.kde.kwindowsystem is a new QML import, declared as a hard
dependency in every manifest and in packaging-qml-imports.test.mjs:
kf6-kwindowsystem (Fedora), kf6-kwindowsystem-imports (openSUSE),
kwindowsystem (Mageia, Arch), qml6-module-org-kde-kwindowsystem
(Debian).  openSUSE is the reason it can't be left to plasma-workspace:
it splits the QML module into the -imports package, which no Plasma
package requires.  Tests get a KWindowSystem stub
(showingDesktop only), and tst_windowmodel.qml covers playing during
Show Desktop, pausing again when it ends, and an immediate re-decision
on a pause-mode change; all three fail without the change.
test_showDesktop_leavingItPausesAgain in tests/qml/tst_windowmodel.qml
passed even with the Connections { onShowingDesktopChanged } block
removed from WindowModel.qml, because triggerTimer was still running
from the preceding _runUpdate().

The test now stops triggerTimer and checks it is stopped before setting
KWindowSystem.showingDesktop = false, then checks the timer is running
again. Only the signal handler can restart it, so deleting the handler
now fails the test.
@CaptSilver

Copy link
Copy Markdown
Owner

First of all, thanks for all the PRs.. looking through them all right now. Going to be adding a couple of tests and some small changes to some.

@CaptSilver
CaptSilver merged commit 4c9b842 into CaptSilver:main Oct 13, 2026
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.

2 participants