* Close notification center after clicking action buttons
When clicking action buttons (e.g., "View", "Activate") in the
notification center, the action fires but the popout stays open. Since
the center is a layer-shell surface, it blocks focus changes on Wayland
compositors like niri, making the action appear to do nothing.
The keyboard navigation path already closes the center after invoking
actions; this brings the mouse click path in line.
Also fix closeNotificationCenter() in PopoutService to set
notificationHistoryVisible = false (matching PopoutManager._closePopout)
instead of calling close() directly, which left the visibility property
stale and caused the bell toggle to require two presses to reopen.
Fixes#2178
* Sync notificationHistoryVisible with shouldBeVisible
NotificationCenterPopout has its own notificationHistoryVisible property
that drives open/close, but the PopoutService public API (open, close,
toggle) calls DankPopout methods directly, bypassing that property. This
leaves notificationHistoryVisible stale, causing the bell toggle to
require two presses to reopen after a programmatic close.
Sync the property from onShouldBeVisibleChanged so any caller going
through open()/close() gets the state corrected automatically.
cherry-pick of 1abb2210 from master, translated to hotfix-1.4.5
(omits ElevationShadow gating since shadow overhaul isn't on this
branch; gates existing MultiEffect-based shadows by BlurService.enabled
instead). Drops DoNotDisturbDetail.qml hunk since the file does not
exist on this branch.
* 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.
* Fix ddc brightness not applying because process exits before debounce timer runs
* Added sync.WaitGroup to DDCBackend and use it instead of loop in wait logic, added timeout in case i2c hangs.
* go fmt
---------
Co-authored-by: bbedward <bbedward@gmail.com>
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>