* feat(island): add system tray slot and overflow menu to compact home
- Add system tray slot and overflow expander menu in Dynamic Island
- Share tray icon path resolution and DBus context menu fallback in TrayMenuManager
- Support edge-anchored context menu positioning across top, bottom, left, and right
- Lock bottom and edge anchoring in DContextMenu to prevent animation jitter
* fix(island): only instantiate tray menus when tray slot is enabled
* feat(island): expand tray item and caret click area to slot height
* fix(island): use Theme.surfaceTextHover and restore DContextMenu height behavior
* refactor(tray): extract shared TrayMenuContent and TrayOverflowGrid, support tray order and IPC in island
* Revert "refactor(tray): extract shared TrayMenuContent and TrayOverflowGrid, support tray order and IPC in island"
This reverts commit 29888f89cd.
* refactor(tray): use shared TrayMenuManager helpers and TrayItemIcon, support tray order and IPC in island
* refactor(tray): extract shared TrayMenuContent and TrayOverflowGrid
* feat(island): support tray item drag and drop reordering
* fix(island): prevent re-entrant tray drag reordering on model destruction
* fix(tray): remove native submenu anchor hydration to prevent popup stutter
* fix(tray): decouple submenu hydrator from anchor window to avoid stutter
* fix(tray): restore anchor window on submenu hydrator and disable on island
* tray: fix bar overflow surface & reuse max visible items on the island
* feat(bar): support auto-hide for island in overlay mode
* fix(settings): restore selectedIslandDocked scope for overlay islands
* fix(bar): keep edge hover strip while island auto-hide is revealed
* island: open media and the power menu in one step, fix dash edits
- Clicking media on the home face opens the player. Closing a sheet
goes back to the face the user picked, and an opt-in setting
switches to media when playback starts.
- The power menu can open in the island (Super+X, the dock button),
with its own route row in the island settings.
- An island collapses when another popout opens on its screen.
- The widgets page hides the center section the island replaces.
- Dragging or resizing a dashboard card no longer blanks the overview:
Qt hands the committed list over as a non-array, which read as empty.
- The island blur region stays inside the rounded fill.
* fix(island): address review feedback on switching faces by mouse
Opening the player with one click removed the only mouse path from
the home face to the media face. A right-click on the collapsed island
now swaps between the two while media is available.
The swap resizes the island under the pointer, so hover-open stays off
until the pointer leaves. Without a face to swap to, the press is not
accepted and reaches the bar's own right-click action as before.
* notifications: allow extra conditions per rule
Co-Authored-By: Claude Opus 5.5 <[email protected]>
* notifications: add translator context to the rule condition strings
Co-Authored-By: Claude Opus 5.5 <[email protected]>
* don't use deprecated widgets
---------
Co-authored-by: Claude Opus 5.5 <[email protected]>
Co-authored-by: bbedward <[email protected]>
* settings: explain why the autostart settings page is empty
Fixed an issue where the autostart apps page was blank if
"xdg-desktop-autostart" was inactive.
The page was still reachable through the search function but not present
in the "Applicatiosn" settings sidebar tab.
* settings: point unavailable autostart applications to new docs section
* plugins: forward directory metadata (version, icon, permissions, dates) to the shell
* plugins: ranking module for recommendations, trending and picks
* plugins: mark new and recently updated plugins on the browser cards, keep badges clear of the vote count
* i18n: allow the lowercase plugin recency badge next to the New action
* fix(settings): show what frame mode controls
With frame mode on, many settings did nothing or were hidden while
still applying, and nothing said so. The frame takes its color and
opacity from the first non-island bar, but that bar's Surface card is
hidden while the frame styles it, so neither had a visible control.
Add Background and Override/Opacity rows to the Appearance Frame card,
bound to the same frame bar the renderer reads. Settings the frame
provides in connected mode get a "Managed by Frame in Connected Mode"
note (Interface style border, corner style, background blur and dock
opacity, shadow targets, launcher border); settings with no effect get
"Disabled by Frame Mode" (maximize detection, bar shadow, the bar's
overlay layer in separate mode). Bar size, the bar's overlay layer in
connected mode, dock Over fullscreen and the controls of overlay-layer
docks and launchers are shown again, since they still apply.
Notification Over fullscreen shows as forced on when the frame covers
every display, and launcher rows the Spotlight style ignores are
disabled.
Also relabel the frame Width row as Thickness, raise the inset padding
maximum to its automatic range, and drop a FrameWindow handler for the
removed frameOpacity signal. No new strings.
* settings: show what frame mode controls, fix review findings
---------
Co-authored-by: purian23 <[email protected]>
* fix(frame): make connected mode honor the settings it overrides
Several frame-mode behaviors contradicted what the settings UI shows:
- Frame -> Blur gated blur for every shell surface in connected mode,
including the Settings window, polkit, context menus, OSDs and toasts.
WindowBlur now defaults to Background blur; only surfaces painted
with the frame color (connected popouts, slideouts, Control Center)
follow Frame -> Blur, and frame-owned surfaces are blurred by the
frame as before.
- The notepad slideout painted its own fill at the notepad
transparency. On screens where the frame owns connected chrome it now
claims a frame surface (new connected_arc slot 5), so the frame paints
it flush with the cutout, with fillets, and follows the slide.
- Notification popups painted a card surface on top of the frame body,
stacking fills. That layer is transparent when the frame paints it.
- Connected mode stripped shadow, border and corner styling from every
bar, including bars on displays without a frame, and hid the rows.
Styling is now stripped and restored per bar based on whether it
covers a frame display, re-checked on screen, frame display and
display-name-mode changes.
- Auto popup gaps and Gap size were hidden in separate mode although
they still apply there; they now hide only in connected mode.
- The launcher style picker was hidden in connected mode while Island
still overrode the connected launcher. Connected mode now always uses
the connected launcher; the picker shows Full, disabled, with a note
linking to the Bar layout picker.
- The frame shadow ignored Shadows -> Apply to -> Bars.
* fix(frame): address review feedback on connected mode
- Skip bar style reconciliation while the screen list is empty, so a
hotplug doesn't restore and re-strip every bar.
- Replace the 16 copies of the connector blur anchor and cutout in
FrameWindow with a ConnectorBlurRegion inline component.
- Let connected mode use the island launcher again now that the island
can sit in any bar. The picker offers Full and Island there and hides
Spotlight, which opens the full launcher in that mode anyway; the note
and the SettingsControlledBy bar target are dropped.
* frame: address review findings on connected mode
---------
Co-authored-by: purian23 <[email protected]>
- new blur variants, glow, wobble, motion blur and groupbar support
- new inputs support for mouse, touchpad and keyboard settings
- greeter, cheatsheet and scroll capture dispatch in Lua
- scrolling workspace screenshot focus fix
- fix scrolling screenshots from being cut-off on fractional-scale displays
- workspaces are keyed by address on the beta branch and upcoming stable release where named workspaces have no id
- bind flags, per-device binds, new window-rule keys and effects
- outputs default to preferred/auto/auto and gate HDR/VRR on hardwareDetails
- new dms setup/installer systemd session support on hyprland-session.target
- Auto detect the snake_case dialect of Mango master from the binary, write configs and respell existing fragments with:
`dms config mango-migrate`
- Setup backs up and replaces config.conf, moves binds and rules into dms/
- Start DMS from mango-session.target with systemd or exec-once without
- fix cheatsheet run action and bind precedence, window-rule and display save updates
- Support urgent active tag, greeter loading /etc/mango, per-screen overviews
it doesnt interfere, with a setting to turn it off
Some compositors like kwin/labwc/sway cannot have this without breaking
some built in layering they do.
niri can have this, but for focus follow mouse it may need to be disabled.
fixes#3717
* fix(hyprland): write window rules Hyprland 0.56 accepts, keep DMS windows opaque
The Lua window-rule writer emitted match keys and effects Hyprland 0.56
does not know: `floating`/`pinned`/`initialised` as match keys and
`noborder`/`norounding` as effects. It now writes `float`/`pin` and
`border_size = 0`/`rounding = 0`; the parser still reads the old
spellings, so existing files load and are rewritten on the next save.
"No Rounding" now suppresses the corner radius so a rule has one
`rounding` key.
The rule editor no longer offers fields the Hyprland writer drops
(Window Opening output/workspace, Size Constraints, the Initialised
match), and Save is disabled while only one half of a move or size
pair is filled. Every window-rule write now reloads the compositor
through one helper, which also covers Hyprland.
DMS windows draw their own translucent background, so any compositor
opacity rule or decoration opacity multiplied on top of it. DMS now
keeps a hidden rule for its own app id: `opaque = true` on Hyprland
(applied after rule and decoration opacity, independent of order, and
leaving the window's own alpha alone) and `opacity 1.0` on niri, which
the store keeps last. It is re-added on start when missing and hidden
from the rules list and the focused-window menu.
Compositor layout gains a Hyprland "Window opacity" slider writing
decoration.active_opacity/inactive_opacity; 100 leaves the user's own
config in charge.
HyprlandService.reloadConfig queues callbacks: Proc keeps one callback
per id, so a reload requested while the layout writer's reload was
pending dropped its callback and left layout generation stuck.
* fix(windowrules): cap corner radius at 20
Hyprland 0.56's Lua window_rule rejects rounding above 20 ("value 24
is more than the maximum of 20") and the rule loses its rounding. The
Hyprland writer now clamps to 20, and the editor slider stops at 20
for every compositor.
* feat(notifications): timed per-app popup mutes (1h / 4h) with expiry
* fix test assertions
* notifications: let a timed mute expire without taking the rule's other settings
---------
Co-authored-by: bbedward <[email protected]>