In scroll fill mode the parallax layer decodes its own copy of the
wallpaper (parallaxImage, asynchronous). renderActive only waited for
currentWallpaper and nextWallpaper, so after a wallpaper change it could
drop to false and let updatesEnabled run out after the three settle
frames while parallaxImage was still loading. The window then kept
showing the black backing until something else, like a workspace
switch, started rendering again.
Count parallaxImage loading as active too. When it turns Ready,
renderActive flips back and onRenderActiveChanged invalidates, so the
finished image gets its settle frames.
Fixes#3702. Diagnosis and fix by @clethbridgedaniel in the issue.
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.
dms screenshot put only image/png on the clipboard. Terminals can only
paste text, so pasting a screenshot into a terminal app (e.g. a CLI
that attaches images from a pasted path) did nothing, while a file
copied through the server's clipboard.copyFile pastes its path.
When the screenshot is saved to a file, copy it the same way:
gnome-copied-files, text/uri-list, the path as text/plain, and the
image bytes. The server is asked first so the copy lands in history;
without it, the same offers are served locally. The offer list is
shared with Manager.CopyFile through clipboard.FileOffers.
copyMultiFork now waits for the child to take the selection, like
copyForkCached, so a failed local copy is reported instead of lost.
dms cl copy --download shares this path and now falls back to a local
copy when the server is down or rejects the file. --no-file and PPM
keep the image-only copy.
* 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]>
* network(networkd): treat bridge, bond, team and vlan links as wired
When the IP configuration lives on a bridge or link aggregate, the
enslaved member NIC reports opState=enslaved and the aggregate itself
was dropped by isWired() because only Type=ether was accepted, so the
widget showed Disconnected. Accept the same link types NetworkManager
already handles (#1581).
Also treat lxdbr*/incusbr* as virtual so container bridges, now of a
wired type, are not picked as the uplink.
Fixes#3463
* network(networkd): only treat a bridge as wired if it has a physical member
Name prefixes can't cover every container/VM bridge (lxcbr0, waydroid0,
...). Check the bridge's members in /sys/class/net/<br>/brif instead and
only accept it as the uplink when at least one member is not virtual
(veth*, tap*, ...). This replaces the lxdbr*/incusbr* prefixes.