Move maximize-hover handling into the snap-assist effect so it can use
the actual decoration button geometry. Render the scene below the picker,
anchor layouts near the cursor, and preview the selected zone without a
fullscreen modal surface.
A normal maximize click keeps priority: hover activation requires a
deliberate pause, dismissal starts a short cooldown, and clicks on the
maximize button still toggle maximize while closing the suggestion.
Introduce a declarative KWin script that maintains a binary-space
partition layout per output for normal windows in convergence mode.
New windows are added to the active screen and the layout is
recomputed with 8 px outer and 8 px inner gaps; closed windows are
removed and neighbours expand to fill the freed area.
Windows that fail isTileable (panels, fixed-size dialogs, fullscreen,
xwaylandvideobridge, manually-floated) are left untouched. A 200 ms
deferred-retile timer mirrors the convergentwindows pattern so the
dockSpaceReserver layer-shell exclusive zone is settled before
clientArea is queried.
Dragging a tile and dropping it onto another tile swaps the two slots
in the BSP layout; an outline is drawn on the hovered target as a
visual cue. Drops elsewhere snap the tile back to its original slot
and leave KWin native quick-tile and electric borders untouched.
Keyboard bindings:
Meta+H/J/K/L focus left/down/up/right
Meta+F toggle float on the active window
Meta+T toggle tiling globally
Return early in run(window) when the window object is null, deleted, or non-normal before accessing resourceClass. This prevents runtime errors during window lifecycle races.
Strut windows committed zero height to layer-shell during
early init, causing a protocol error and session exit. Wrap
height and exclusionZone in Math.max(1, ...) for top bar
and dock.
Persisted gamingModeEnabled=true with hardcoded
gameCenterOpen=false hid panels with no overlay visible.
Initialize gameCenterOpen from the stored setting.
Fix HUD visibility regression from an emergency visible:true
override. Various null-guard and positioning fixes from
static analysis across the gaming shell QML.
Hide the navigation panel, status bar, and app drawer while
gamingModeEnabled is active. The KWin convergent-windows script
skips its window policy so game windows are not forcibly tiled
or maximized.
The Home button in gaming mode re-opens the Game Center overlay
rather than the app drawer. A configurable hint nudges the user
toward the HUD button after launching a game.
Check restrictedPermissions before opening the detail popup in
convergence mode. Guard against null output in the KWin script
window-setup handler to prevent TypeError when a window has no
assigned output yet.
KWin restores geometry before the compositor re-commits the
exclusive zone, so the window can land partly behind the dock.
A deferred check clips the bottom edge once the round-trip
completes.
This reverts commit c45f9ed446.
The kwin rules setting causes all desktop windows to have window decorations. Revert this for now until we figure out a solution.
Replace the convergentwindows KWin script SSD toggling with KWin rules to ensure
windows are maximized and have no window border (and toggle off for
docked mode). KWin rules work immediately at window creation, which is
more efficient than listening to window creation events and manually
changing properties on them.
Currently, window rules setting maximization don't seem to address all cases where a window gets unmaximized, so for the time being we will still need the logic in convergentwindows to handle any sidecases.
This fix maximizes the current window if it ever leaves a fullscreen or maximized state. This is to fix a bug where if a window exits fullscreen mode, it will not return back to a maximized state.
See https://invent.kde.org/teams/plasma-mobile/issues/-/issues/256
We have a race condition between maximizing and disabling window decorations on a window (the calls aren't blocking).
Workaround this by having the window already be in maximized size before we disable window decorations.