The "power off monitors on lock" path relies on wake handlers
(MouseArea/Keys) at Lock.qml's root Scope, which sit outside the
WlSessionLock surface and never receive input while locked. The feature
only appeared to work on compositors that auto-restore output power on
input; compositors that fully tear down the output (e.g. MangoWC
disable_monitor) leave the screen off until blind-unlock.
Add a seat-level IdleMonitor (wlr idle-notify, surface-independent) in
IdleService that restores monitor power on any keyboard/pointer
activity. Gated on isShellLocked + monitorsOff + the setting, so it is
inert unless that path actually powered the monitors off.
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- Read and convert external compositor rules into editable DMS rules
- Preserve niri multi-match rules and add match editor
- niri background-effect (blur/xray/noise/saturation) support
* feat(control-center): add widget config overlay with showMountPath toggle for DiskUsage
Introduces WidgetConfigOverlay and DiskUsageWidgetConfigMenu components, allowing
users to toggle mount path visibility per DiskUsage widget in edit mode
* refactor(control-center): use Theme.iconSizeLarge and Theme.fontSizeLarge for small tiles
Standardize SmallDiskUsageButton and SmallBatteryButton sizing with Theme.iconSizeLarge
and Theme.fontSizeLarge, and unify font weight to Font.Bold on both tile widgets.
* fix(control-center): adjust SmallDiskUsageButton font size based on showMountPath
* refactor(control-center): simplify DiskUsage config menu i18n strings
Remove the redundant "Disk Usage Widget" title and the toggle description
to reduce translatable strings
Currently, when switching dark/light theme in DMS, pywalfox's mode does not get updated. This commit adds `pywalfox light/dark` to the matugen post_hook to fix that.
* Fix gaps and overlaps when filtering clipboard history
* feat(Clipboard-Bar-Hist): Add search/filter to saved clipboard entries as well. Change title on toggle between recent/saved.
* keep Pinned/Saved icon highlighted when selected
* add back filter animations
* Implement snap state for list views based on animation settings
---------
Co-authored-by: purian23 <purian23@gmail.com>
* feat: add native powerprofile IPC target for power profiles management
* feat: show centered PowerProfileModal with 3 square buttons for powerprofile IPC toggle
* style: enhance PowerProfileModal size, icons, description, and keyboard hints
* feat: add Space key binding to select highlighted power profile
* feat(WidgetsTabSection.qml): added dynamic width and static padding for DiskUsage
* feat(DiskUsage.qml):added functionality for dynamic width and static padding, also changed spacing to work like in cpu and ram monitor. Now they look complete and same
* fix(DiskUsage): restore display modes & formatting
---------
Co-authored-by: purian23 <purian23@gmail.com>
Add applyStoredIconTheme() calls alongside existing applyStoredTheme()
calls in loadSettings(), onLoaded, and onLoadFailed, ensuring the stored
icon theme is synced to GTK/Qt/Cosmic configs on every startup and reload.
The applyStoredIconTheme() function and its _hooks entry already existed
in the codebase but were never invoked during initial settings loading.
Co-authored-by: lingdiansr <2077258365@qq.com>
Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
* fix(Mpris): exclude idle players from active-player selection
Add MprisController.isIdle() (player Stopped with empty title and
artist). _resolveActivePlayer excludes idle players from every
selection path, and re-resolves when the active player itself goes
idle. Existing triggers (availablePlayers change, isPlaying becoming
true) do not fire for a player merely stopping.
The fallback now gates on !isIdle(p) instead of p.canPlay. canPlay
describes whether Play() would succeed; !isIdle describes whether
there is anything to surface. canControl unchanged.
When no eligible player remains, activePlayer becomes null and
consumers that gate on it unload (the bar media widget via
WidgetHost; the dash via the companion fix).
* fix(DankDash): show no-player state when active player resolves to null
showNoPlayerNow gated on _noneAvailable (player count === 0) or
activePlayer being idle. Neither covers activePlayer being null
while players remain registered, which is now possible (an
always-on player sitting stopped with empty metadata).
Key showNoPlayerNow on !activePlayer; drop the unreachable
_trulyIdle.
* add(MprisController): add track artist change handling to active player resolution
---------