* feat(freebsd): add comprehensive native FreeBSD support
* Update BatteryService.qml
* Add battery probe completion and fallback updates
* Add isVideoSource function and update PwObjectTracker filter
* Add isPipewireVideoSource function to AudioService
Added a function to check if a Pipewire node is a video source.
* Refactor video source check to use AudioService
* Remove unnecessary call in BatteryService.qml
* Add call to updateFreeBsdBatteryFallback on completion
* Simplify AudioService by eliminating redundant bindings
Removed unnecessary bindings in the AudioService loader to streamline the loading process.
* Improve error handling in CheckUpdates function
Handle specific exit error for package upgrade check.
* Enhance FreeBSD network detection logic
* Implement FreeBSD Wi-Fi hardware discovery in Initialize
Added FreeBSD Wi-Fi hardware discovery and updated initialization logic to handle cases where no wpa_supplicant control socket is found.
* Implement Ethernet state monitoring in StartMonitoring
Added monitoring for Ethernet state updates in StartMonitoring function.
* Add Ethernet management functions to backend
* Remove unimplemented Ethernet control methods
Removed unimplemented Ethernet control methods from WpaSupplicantBackend.
* Implement SetWiFiEnabled method for WiFi control
Add error handling and state management for WiFi control
* Update core/internal/server/network/backend_wpa_ethernet.go
Co-authored-by: claude[bot] <209825114+claude[bot]@users.noreply.github.com>
* Implement Ethernet monitoring in WpaSupplicantBackend
* Refactor startEthernetMonitor and add debounce logic
Refactor the startEthernetMonitor function to improve readability and maintainability. Introduce a debounce mechanism for processing relevant FreeBSD route events.
* Reorder import statements in backend_pkg.go
* Remove unnecessary blank line in backend_wpa_ethernet.go
* Implement FreeBSD audio polling based on UI visibility
Introduce a polling mechanism for FreeBSD audio device updates based on visibility of UI elements.
* Add readonly freeBsdPollingRequested property and optimize polling
Introduce a readonly property to determine if FreeBSD polling is requested based on various UI conditions. Update command execution to prioritize polling efficiency.
* Simplify freeBsdPollingRequested logic
Removed unnecessary conditions from freeBsdPollingRequested property.
* Implement reference counting for battery consumers
Added reference counting to manage battery information consumers and updated related functions for better battery state handling.
---------
Co-authored-by: claude[bot] <209825114+claude[bot]@users.noreply.github.com>
deprecation notice to plugin compatibility shims
- When qml-common became a thing, we left qs.Widgets shims in place for
plugin compatibility
- It's annoying to need to maintain them when qml-common has any change,
add a warning so we can safely deprecate them in the future
- One shot rename the common stuff to D to make it shorter and nicer to
write
On compositors with no include support (sway, labwc, ...) the displays page
showed a setup banner whose fix button can never succeed.
Co-authored-by: Claude Opus 5.5 <[email protected]>
The drawer's modal adapter lacked alignedX/alignedY/effectiveScreen, so
LauncherContextMenu treated the offsets as 0 and opened the menu near the
top-left of the screen.
Co-authored-by: Claude Opus 5.5 <[email protected]>
* lock: take the lock back when the shell restarts into a locked session
Check the state once when the module completes, on locked or lockedHint,
and handle it the way onSessionLocked does, including the wait while the
session is inactive. After a logind Unlock that the shell ignored for a
lock it started, only lockedHint still says locked; and the module loads
asynchronously, so the state can arrive before its Connections exist.
* loginctl: read LockedHint from logind on unlock
logind's Unlock signal does not clear LockedHint, only the locker does.
Forcing it false told a shell restarted in that window that the session
was no longer locked.
* settings: add a link to the source code in plugin details
* style: remove unnecessary whitespace, add empty line
* show link to the plugin source instead of explanation
* fix: check for empty string instead of undefined
* feat(dock): push neighboring icons apart on magnification
* fix(dock): cap magnification expansion and disable it in taskbar mode
* fix(dock): scale pushed icon offsets to the capped magnification expansion
* fix(dock): avoid binding loop when reading expansion ratio
- caps lock, power profile, idle inhibitor and charging pulse in the island
- microphone mute and volume as a level transient
- privacy slot while mic, camera or screen share is in use
- duo battery style: arc around the network glyph with signal dots
* fix(notifications): edit rules from the menu instead of deleting them
A notification rule can set an action and Bypass DND together, but
Unmute and Block in Do Not Disturb spliced the whole rule, dropping the
other setting. They now reset only their own field, and a rule is
removed once it no longer does anything (action and urgency default,
no bypass). Mute and Allow in Do Not Disturb set their field on the
app's existing rule instead of appending one that first-match policy
would shadow.
The menu now only reads and edits enabled, exact rules on the app name
or desktop entry. It used to match any rule whose pattern equaled the
app name, including summary, body, contains and regex rules, and could
delete disabled ones.
Also adds a Copy item to the notification menu on popups and center
cards, copying the summary and body as plain text.
* fix(notifications): let mute apply alongside other rule actions
Rule actions are first-match, so a mute rule behind an app's existing
rule (e.g. No history) never applied while the menu showed Unmute.
Mute is now evaluated like Bypass DND: any matching enabled mute rule
disables the popup, and the other actions stay first-match, so No
history and Mute both apply.
* fix(notifications): skip the sound for dropped and muted notifications
The notification sound played before the check that dismisses a
notification with neither a popup nor a center entry, so dropped
notifications (transient while muted, Popup only plus Mute) still made
a sound. Play it only for notifications that are kept, and not when a
mute rule applies, like Do Not Disturb.
With two or more screens connected and none of them in the lock screen
display list (a laptop docked at a different desk), every surface was
inactive and no password field rendered, so the only way out was a
TTY. getFilteredScreens only falls back to all screens with
showOnLastDisplay and exactly one screen, which the lock screen picker
never sets. Treat an empty result as all screens, the same as the
default "all" preference.