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.
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
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 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.
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.
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.
Slide-out panel with brightness, volume, Wi-Fi, Bluetooth,
and airplane mode. Fully gamepad-navigable; D-pad and stick
input routed to the panel while open. System status bar
(clock, battery, connectivity) added to game center header.
Lutris games discovered from ~/.local/share/lutris/pga.db,
Heroic from ~/.config/heroic/store_cache/ JSON files.
Deduplication extended to cover all launcher sources.
Desktop entries launched via KIO::ApplicationLauncherJob to
expand Exec field codes. Generic commands parsed with
KShell::splitArgs. SQLite uses RAII cleanup guard.
Clamped SDL axis, rumble, and LED values. Renamed rumble
params from frequency to intensity. GamepadManager uses
singleton factory. setPlayerIndex checks SDL return.
FavouritesBar popup uses screen virtualX/Y for multi-monitor.
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.
Make the convergence dock fully usable from the keyboard.
Tab now reaches Home, favorites, running tasks, and Overview.
Left and right move across section boundaries, and Enter/Space
triggers the same actions as mouse clicks.
Also add accessible role/name/press actions for these controls
so screen readers expose meaningful button semantics.
The popup snapped to visible/hidden instantly while every other
surface in the shell uses animated transitions. Add an opacity
fade over shortDuration so it matches the rest of the motion
language. State cleanup waits for the fade-out to finish.
The dock background was a hardcoded dark fill because upstream
icon labels are white (for floating over wallpaper). Switching
to Theme.backgroundColor alone just made labels vanish on light
themes, so it kept getting reverted.
Fix the whole stack at once: background uses the Window color
set, hover highlights derive from Theme.textColor instead of
white, and delegate labels switch to Theme.textColor in
convergence mode (still white over wallpaper on mobile).
Clamp FavouritesBar window indicator dots to at least 1 so a
running task with an empty WinIdList still shows a dot. Add
Accessible.onPressAction to CategoryPanel tiles. Remove dead
convergence-mode property bindings from NavigationPanelComponent
since it is hidden in that mode. Use HTML video tags for .webm
files in README so they render as playable video.
Remove duplicate KService include in favouritesmodel.cpp. Add
keyboard navigation and accessibility role to CategoryPanel
tiles. Clamp the FavouritesBar thumbnail popup position to
screen bounds so it does not overflow offscreen on edge items.
Qt.rgba expects 0.0–1.0 floats. Passing 255 for R/G/B saturates
every channel to 1.0, producing opaque white instead of the
intended semi-transparent tint. Fix all call sites across
FavouritesBar, StatusBar, and AbstractDelegate.
Running task icons in the convergence dock can now be dragged into the favourites section to pin the app at the drop position.
Add indexed insertion to FavouritesModel so pinning can place the new favourite at a specific slot instead of always appending.
Show a placeholder while dragging and reuse the existing addApplication path for the final pin action.
Click-and-drag reordering of favourites bar items in convergence
mode. The existing touch-based press-and-hold drag is kept for
mobile; in convergence mode, press-and-hold opens the context
menu only.
DelegateTouchArea owns the exclusive mouse grab at the C++ level,
so drag detection (threshold crossing + delta signals) is added
there rather than using a QML DragHandler. Displaced items
animate into their new positions while the dragged item follows
the cursor.
Expose FavouritesModel::moveEntry as Q_INVOKABLE so QML can
persist the reorder.
The visible binding on the Pin to Dock menu item called the
imperative containsApplication() without any reactive dependency,
so QML never re-evaluated it after model changes. Add repeater.count
to the binding to force re-evaluation when favourites change.
Switch TasksModel from GroupDisabled to GroupApplications so
multiple windows of the same app share a single dock icon.
Replace the per-task windowCountForTask() helper with the
built-in WinIdList role.
The thumbnail popup now shows a horizontal row of per-window
previews. Clicking a grouped icon toggles the popup instead
of activating a single window. "Close All" replaces the
close action for multi-window groups.
Right-click a running task icon to pin the app to the dock
favourites bar. Pinned apps show a "Remove from Dock" action.
The dock overlay renders as a LayerTop window so context menus
and the dock itself stay above application windows. Menus use
popupType Window to avoid clipping inside the narrow dock
surface.
When multiple windows of the same application are open, each
dock icon displays a row of dots matching the sibling window
count. The active window's dots are bright; inactive siblings
are dimmed. Single-window apps show one dot as before.
Uses the TasksModel AppId role to count windows sharing the
same application identity.
filterHidden: true removed minimized windows from the
TasksModel because on Wayland IsHidden maps to IsMinimized.
Set filterHidden to false so minimized apps remain in the
dock and can be restored by tapping their icon.
Hovering a running-app icon in the dock shows a live PipeWire
thumbnail of the window via zkde_screencast. Falls back to the
app icon when the stream isn't available. Clicking the thumbnail
activates the window.
Uses a tooltip-type Window so the popup renders above app windows
instead of being clipped to the panel surface.
Right-click on a pinned favourite in the dock now shows:
- Launch: opens the app (using its own icon)
- Remove from Dock: existing unpin action, renamed for clarity
Dock buttons, running-app icons, and favourite delegates had no
mouse-over feedback. Add 3-state highlight backgrounds (hover
and press), Kirigami.Icon active state, and tooltips following
existing Plasma patterns. Favourite delegate hover is gated on
convergence mode to avoid overlap with touch press events.
In convergence mode the separate navigation panel is redundant
with window title-bar controls. Remove it by setting its
thickness to zero and visibility to false, then embed Home and
Overview buttons at the left and right ends of the favourites
bar. Running application icons with context menus are shown
between the favourites and the Overview button.
Add HomeScreen::triggerOverview() to invoke the KWin Overview
shortcut over D-Bus so the homescreen containment can open it
without access to the task-panel Plasmoid.
Accept Qt.RightButton on the HomeScreenPages and FavouritesBar
MouseAreas and open the settings view (wallpaper/widgets) on
right-click, mirroring the existing long-press behavior for mouse
users.
This refactors the homescreen state object to isolate drag & drop from
swipe states, allowing for using proper system-level drag & drop for delegate
movement. This then ports the new applet list to use it.