Use Window color roles for app drawer and overlay scrims, and update\ndock keyboard navigation focus paths. Extend folio and convergence\nregression checks to lock in the new theme and navigation behavior.
The convergence dock is now the bottom navigation surface, including the desktop pager. Hide the legacy homescreen page indicator wrapper there so page dots and drawer affordances do not compete with the dock.
All virtual desktop buttons now live beside the Desktop button, so the right-side pager branch can never render. Drop the dead delegate code and guard the dock invariant against reintroducing it.
Keep keyboard navigation aligned with the compact desktop pager group. Right from the Desktop button now enters the pager, pager buttons expose accessible activation, and focus continues into dock content after the last desktop.
Show all virtual desktop buttons as one compact group next to the Desktop button instead of splitting them across both dock edges. Update the convergence dock invariant so this layout does not regress.
Expose layout requests and state through shell settings so Folio
can offer alternatives for the current tiled workspace. Keep KWin
as the owner of layout changes, snapshot request serials so requests
are not dropped, and hide the edge menu when fewer than two windows
are tiled.
Record app launches from window creation so recent and most-used
lists survive after windows close.
Use those models in the convergence launcher and keep the hover
surface in the unified chrome.
Improve touchpad scroll handling for convergence workflows while avoiding gesture conflicts.
- make SwipeArea handle angleDelta-based touchpad wheel streams and phase-less sequences safely
- wire topbar ActionDrawerOpenSurface to virtual desktop info and horizontal workspace switching logic
- add dock pager wheel switching in FavouritesBar for the vertical wheel axis environments deliver
- prevent wallpaper/home surface touchpad scroll from opening app drawer in convergence
- extend convergence invariant checks for the new gesture paths
Keep Folio responsible for the visible convergence chrome, but let
the panel containment keep its transparent ActionDrawerOpenSurface
for the topbar hit target. This restores the old click and drag
behavior while keeping the legacy statusbar visual hidden in
convergence.
Add a passive hover-only MouseArea to show the pointing-hand cursor
without stealing input from the drawer swipe surface.
Move the visible convergence top bar, workspace frame, and dock
into one Folio-owned layer-shell surface so startup maps them as
a single piece of chrome. Keep the legacy panel/taskpanel surfaces
for reservations and plumbing, and update the convergence invariant
for the new ownership.
Track KWin Overview through the activeEffects DBus property and expose the state to Folio QML. Hide the workspace frame, dock overlay, and in-containment favourites scrim while Overview is active so the effect does not show Shift shell chrome in its desktop view.
Set the state before invoking the Overview shortcut from Folio so the chrome is already gone when KWin starts composing the effect. The convergence dock invariant now guards both the hide rules and this ordering.
Show each running window as its own card in the Folio Running
panel, including duplicate apps. When a card is dropped on another
desktop, still call requestVirtualDesktops() after notifying dynamic
tiling so the move actually completes. Add a guard to keep both
behaviors from regressing.
Use Motion tokens for the Game Center overlay, gaming HUD, quick settings drawer, and running-games panel. Keep gaming mode settings and gamepad behavior unchanged.
Use Motion wrappers and state layers across Folio and Halcyon delegates, drawers, folders, resize handles, and dock feedback. Also align Folio edit/drop highlights with theme colors instead of fixed white overlays.
Use a concrete wallpaper image in generated shell config. Disable KSycoca watches when preview opts out, and keep the convergent window connection target nullable.
Point homescreen and panel containment metadata at the Shift repository. Update the panel and task-panel descriptions from Plasma Mobile to SHIFT, and remove translated descriptions that would override the corrected base metadata.
Add a containment metadata guard while preserving the existing org.kde.plasma.mobile.* applet target IDs.
Use masked Kirigami icons with explicit theme colors for shell controls so the Shift icon theme renders reliably across light and dark surfaces. Replace the status-bar battery helper with theme icon names so battery glyphs also come from org.shift.icons.
Give the app-thumbnail close affordance a symbolic white X on a dark circular backing so it remains visible over previews.
Expose activity placement controls for running tasks in
convergence mode. The dock menu can now move a window to the
current activity, all activities, or a specific activity.
Place a desktop toggle next to Home in the convergence dock and
shift the pager and task focus flow around it. This brings the
upstream show-desktop affordance into SHIFT without adding a new
panel surface.
Place a Search button next to Overview and rebalance the dock
center so pager, trash, favourites, and running tasks keep
their spacing in convergence mode.
Expand the dock input region as soon as the reveal animation starts
rather than waiting for it to finish, so the cursor can reach dock
items while the panel is still sliding into view.
Introduce updateInputRegion() and call it from onDockOffsetChanged,
onShouldHideChanged, onActiveChanged, onWidthChanged, and onHeightChanged
so the input region is always consistent with the current state.
While hover-revealing with a maximised window present, switch the
LayerShell exclusion zone from -1 to dockHeight so the window tiles
away from the dock instead of being obscured underneath it.
Reduce the hover dwell timer from a hard-coded 300 ms to
Kirigami.Units.shortDuration so the dock is easier to summon.
Animate dock item sizing and button opacity when toggling convergence
mode so the dock does not snap abruptly between states.
FavouritesBar: promote cell/icon/nav/pager/trash sizing properties to
writable and attach NumberAnimation Behaviors (InOutCubic, longDuration).
Home, Overview, and trash buttons fade in/out with an InOutQuad opacity
Behavior so they appear gradually rather than popping.
Dock overlay (main.qml): introduce an `active` guard property so the
window can be driven by opacity (InOutQuad, shortDuration) rather than
toggling visibility directly. Switch the dockOffset slide easing from
a directional InExpo/OutExpo pair to a single InOutCubic so the motion
feels symmetrical.
StatusBar: smooth the background colour and convergence affordance
transitions.
Show only task actions that make sense for the current window and shell mode. Hide free-geometry actions while dynamic tiling owns window placement, collapse hidden menu rows, and filter virtual desktop destinations.
The containment provides HomeScreen instances itself. Mark the QML type
uncreatable to avoid default-construction warnings from the QML type
registration.
qmllint shipped with Qt 6.12 segfaults on the inline component
definition inside RunningAppsPanel.qml, breaking the
suse_tumbleweed_qt612 KDE Invent CI job. Move PanelIconButton out
to a sibling RunningAppsPanelButton.qml so qmllint never has to
parse a UiInlineComponent here.
The extracted file inlines its own colour-mix helper to keep it
self-contained and avoid leaking RunningAppsPanel internals.
Introduce shared dock height/reveal constants and use them in folio and taskpanel to keep overlay and exclusion zone aligned. Keep dock backing stationary while only content slides, and add a CTest invariant script to prevent regressions.
Steam, Lutris, and Heroic filter tabs in the Game Center are now
only shown when those launchers are detected on the system. Detection
checks the native executable, known Flatpak data directories, and
standard data paths. The tab bar shrinks accordingly.
On a zwlr_layer_shell surface the compositor does not send the
window's screen position back to the client, so mapToGlobal
returns dock-local coordinates instead of screen-absolute ones.
Compute position from screen.virtualX + targetDelegate.x directly;
the dock is full-width and bottom-anchored so no global mapping
is needed.
Right-clicking the desktop or dock background opened the mobile
settings overlay, which is a long-press gesture for touchscreens.
In convergence mode show a popup menu instead with three items:
Desktop and Wallpaper, Add Widgets, and Configure Desktop.
Long-press still opens the settings overlay on all form factors.
Show a trash icon to the left of the Overview button in convergence
mode. The icon toggles between user-trash and user-trash-full by
watching ~/.local/share/Trash/files via FolderListModel.
Left-click opens the trash in the default file manager via
Qt.openUrlExternally("trash:/"), making the feature file-manager-
agnostic. Right-click offers "Open Trash" and "Empty Trash"; the
latter shows a confirmation dialog before invoking KIO.Trash via
D-Bus.
The right wing of the virtual-desktop pager shifts left to make
room for the trash button.
Show compact numbered desktop buttons in the dock bar when two or
more virtual desktops exist. The buttons are split symmetrically
to the left and right of the centred app-icon cluster, matching
Plasma Desktop pager behaviour.
Click a button to switch desktops. Drag a running-task icon from
the dock and release it over a desktop button to move that window
to the target desktop. Right-click a task icon for a "Move to …"
submenu when the pager is visible.
The feature is a no-op on single-desktop sessions.
Show running windows in the app drawer with previews, window
actions, and virtual desktop controls. Hide dock task icons while
the panel is open so the same windows are not duplicated.
Use TaskManager to move windows between desktops, and expose
desktop activation through the containment.
interactive starts false at atYBeginning so HomeScreenState can
own the swipe-up gesture that opens the drawer on phones. No such
gesture exists in convergence mode, leaving the grid permanently
non-interactive. Short-circuit the condition when convergence
mode is active.
Remove hardcoded Complementary override and white color literals
from AppDrawerHeader. In mobile mode the Plasma containment
framework already provides Complementary context; in convergence
mode the drawerOverlay Window starts a fresh Window context.
Both cases now propagate correctly without an explicit override.
Also set Kirigami.Theme.Window on the convergence dock
FavouritesBar so icon labels and hover highlights follow the
active system palette instead of the wallpaper context.
A mapped LayerShell surface prevents KWin from using DRM direct
scanout for fullscreen windows. Setting showing=false fades out
the HUD then sets visible=false, unmapping the Wayland surface
and allowing KWin to bypass the compositor render loop entirely
for the game frame.
The HUD reappears when the game exits or is minimised. Error
toasts still work because a failed launch never produces a
fullscreen window, so showingWindow remains false.