* services: add LabwcService with quit
labwc has a minimal IPC surface (no socket, no queries) but it does
expose `labwc --exit` as a clean shutdown path. Wrap that in a small
Singleton service following the same shape as DwlService/NiriService
so the compositor-specific dispatch in callers can stay uniform.
* session: dispatch labwc logout via LabwcService
CompositorService.isLabwc was detected but never dispatched in
_logout(); labwc sessions therefore fell through to the Hyprland
exit call, which silently no-ops under labwc. Users had to set
customPowerActionLogout to 'labwc --exit' as a workaround.
Add a labwc branch alongside the existing niri/dwl/sway branches
so the power menu logout works out of the box.
Screen sharing was not detected by PrivacyService on Niri because:
1. Niri creates the screencast as a Stream/Output/Video node, but
screensharingActive only checked PwNodeType.VideoSource nodes.
2. looksLikeScreencast() only inspected application.name and
node.name, missing Niri's node which has an empty application.name
but identifies itself via media.name (niri-screen-cast-src).
Add Stream/Output/Video to the checked media classes and include
media.name in the screencast heuristic. Also add a forward-compatible
check for NiriService.hasActiveCast for when Niri gains cast tracking
in its IPC.
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Fixed a QML property binding timing issue where dynamically created timers
and processes for per-monitor wallpaper cycling were being assigned to
properties and then immediately read back, which could return undefined
or stale values.
The fix stores the created object in a local variable before assigning
to the property map, ensuring a valid reference is always used.
Affected functions:
- startMonitorCycling() - timer creation
- cycleToNextWallpaper() - process creation
- cycleToPrevWallpaper() - process creation
After unlocking the screen (startup lock or wake from sleep), the desktop
showed Hyprland's background color instead of the wallpaper.
WallpaperBackground disables QML updates via updatesEnabled after a 1-second
settle timer. While WlSessionLock is active, Hyprland does not composite the
background layer, so when the lock is released it needs a fresh Wayland buffer
— but none is committed because the render loop is already paused.
The previous attempt used SessionService.sessionUnlocked, which is unreliable
for the startup lock case: DMSService is not yet connected when lock() is
called at startup, so notifyLoginctl is a no-op and the loginctl state never
transitions, meaning sessionUnlocked never fires.
Fix by tracking the shell lock state directly from Lock.qml's shouldLock via
a new IdleService.isShellLocked property. WallpaperBackground watches this and
re-enables rendering for 1 second on unlock, ensuring a fresh buffer is
committed to Wayland before the compositor resumes displaying the layer.
* Not everyone uses paru or yay on Arch: Support pacman command
* Handle sudo properly when using pacman
* Move pacman to bottom per Purian23
* Remote duplicate which -- thanks Purian23!
This fixes the problem that the system update terminal closes when the package manager encounters a problem (exit code != 0), allowing the user to understand the problem.
Signed-off-by: Jan Phillip Greimann <jan.greimann@ionos.com>
- Implement deep search icon resolution in DesktopService with runtime caching.
- Update Paths.getAppIcon to utilize enhanced resolution for mismatched app IDs.
- Align Workspace Switcher fallback icons with AppsDock visual style.
- Synchronize fallback text logic between Switcher and Dock using app names.
* fix(launcher): release DankLauncherV2 resources after close
* launcher: make unload on close optional
---------
Co-authored-by: bbedward <bbedward@gmail.com>
* feat: decouple track art downloads into new TrackArtService
* feat: beautify media playback osd with track art
* fix: bug when switching from art to no art