Use Kirigami.Theme.textColor for the status bar hover overlay
so it works on both light and dark themes instead of hardcoded
white. Remove convergence-mode branches from the navigation
panel left action since it is hidden in convergence mode and
the code paths were unreachable.
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.
navigationPanelThickness is explicitly 0 in convergence mode, so using
it as the layer-shell surface height triggered a Wayland protocol error
and crashed the shell. Use gridUnit * 3 directly, matching the dock bar
height set on FavouritesBar.
ApplicationListSearchModel: beginFilterChange() was called after
mutating m_categoryFilter, inverting the documented before/after
contract. Also add null checks for sourceModel() and
favouritesModel() in filterAcceptsRow.
CategoryPanel: add onModelReset to repopulate the category list
when the underlying model is fully reloaded, not just on individual
row insertions and removals.
NavigationPanel: the taskStrip ListView checked contentWidth > width
to decide whether scrolling is enabled, which is wrong when the
panel is vertical. Check contentHeight > height in that case.
taskpanel: dockSpaceReserver used a hardcoded gridUnit * 3 for both
height and exclusionZone. Use navigationPanelHeight so the reserved
strip tracks the actual panel thickness.
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.
A panel between the drawer and the power panel lists the XDG
categories installed on the device as icon-and-label tiles.
Tapping one filters the app list; text search still applies
on top. The filter resets each time the drawer opens. Audio,
Video and Settings fold into their parent groups to match
Kickoff.
The dismiss button in the drawer header was isolated from the
other controls. Moving it to the top of the power panel groups
everything in one place and lets the power icons sit centered
between it and the user avatar.
Labels are gone; each action shows only an icon with a tooltip
on hover, keeping the panel narrow. A user avatar at the bottom
opens User Accounts on click. The shadow is on a backing
Rectangle rather than via layer.enabled, which would rasterize
the panel and blur icons at non-integer scale.
The hidden dock's window still covered full height, blocking
toolbar buttons in maximized apps. Reduce the input region to
a thin strip at the screen edge while off-screen and restore
it on reveal. A debounce timer prevents an accidental edge
graze from reopening the dock.
The dock's LayerShell window is transparent; icon labels are
hardcoded white (designed to float over wallpaper on mobile).
A dark semi-transparent fill keeps labels legible on any
wallpaper without coupling to the Plasma theme color.
Shows a narrow card to the right of the app drawer popup with
Lock Screen, Restart, and Shut Down buttons. Uses SessionManagement
from org.kde.plasma.private.sessions directly, the same QML type
Logout.qml already uses. No C++ changes needed. Shares the drawer
open/close animation and dismisses with it.
open() alone does not set intendedToBeVisible, so the drawer
immediately closes itself. Call the proper toggle path instead.
Also hide the drag handle since convergence users click.
Drawer is inside the homescreen, which sits behind windows.
Home button minimized everything to reach it. Render it in
a LayerTop window instead and skip the blanket minimizeAll
in the D-Bus handler.
Dock and space reserver hid unconditionally on maximize.
Gate both on autoHidePanelsEnabled. Make the exclusive zone
constant — dynamic changes on a contentless surface never
get committed to the compositor.
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.
The status bar was hidden whenever a window was showing because
the fullscreen property evaluated autoHidePanelsEnabled without
checking convergence mode. Return false from fullscreen when
convergence is active so the bar stays on screen.
Use WindowsGoBelow visibility mode in convergence so PanelView
does not manage the exclusive zone (it would fight with the
LayerOverlay layer set by QML). Add a separate layer-shell
surface at LayerBottom with an exclusive zone matching the bar
height, following the same pattern as the dock space reserver.
Re-run setWindowProperties on convergence mode changes.
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.
Slide the dock off-screen when WindowMaximizedTracker reports a
maximized window, and bring it back on mouse proximity via a
HoverHandler. The dockSpaceReserver exclusion zone drops to 0 so
KWin gives the full screen to the maximized window.
Animation follows the StatusBarWrapper pattern: offset property,
Translate transform, Behavior with InExpo/OutExpo easing.
The transparent dock overlay at LayerTop let maximized app content
bleed through, visible as a colored band (e.g. VLC's orange toolbar)
behind the favourites bar.
Add a Rectangle with Kirigami.Theme.backgroundColor using the Window
colorset, matching the pattern used by NavigationPanelComponent.
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.
The click-to-dismiss overlay for the app drawer popup
covered the dock, intercepting taps on dock icons. Add a
bottom margin equal to the dock height in convergence mode
so dock icons remain interactive.
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.
Add an invisible layer-shell surface with an exclusive zone matching
the dock height. KWin uses this to shrink MaximizeArea so maximized
and tiled windows no longer overlap the dock.
The previous approach of tweaking the nav-panel PanelView was a dead
end: PanelView resets its own surface properties on reconfiguration
and Wayland offers no way to set struts from a KWin script. A
separate surface at LayerBottom with exclusionZone is the intended
protocol mechanism.
In convergence mode the app drawer appears as a sized popup
anchored above the dock near the Overview button, instead of
taking over the full screen.
- Popup has rounded background, shadow, and clipped content
- Desktop stays visible behind the popup (no scale/fade/blur)
- Click outside the popup dismisses it
- Wallpaper scrim suppressed in convergence mode
- Mobile behavior is unchanged
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
The task panel window reserved bottom-edge screen space even
with zero thickness and invisible content. Set its visibility
mode to auto-hide in convergence and force the dock bottom
margin to zero so the favourites bar sits flush at the screen
edge.
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.
On desktop there is no swipe-down gesture to dismiss the drawer.
Add an X button at the right end of the header row, visible only
in convergence mode, so mouse users have an obvious way to close
the app drawer.
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.
Halve the favourites bar from gridUnit*6 to gridUnit*3 to avoid
oversized dock on desktop screens. Hide the arrow-up icon and
disable the page-indicator tap handler since the app drawer is
now opened via the dedicated Overview button.
In convergence mode the app drawer stays open after launching an
application. Connect to WindowUtil.onWindowCreated and close the
drawer automatically so the user lands on the new window.
Show numbered desktop indicator buttons between the nav buttons and
the keyboard toggle corner button. Each button highlights the current
desktop and switches on click via VirtualDesktopInfo.requestActivate.
Only visible in convergence mode when multiple desktops exist.
Add Minimize and Maximize/Restore actions to the task strip
right-click context menu alongside the existing Close action.
Reintroduce StatusNotifierModel-based system tray icons, gated on
convergenceModeEnabled. Desktop apps (KDE Connect, nm-applet, etc.)
expose tray icons that were removed in 1914e9be as unusable on
phone screens.
The status bar wrapper is raised above the ActionDrawerOpenSurface
so tray icon MouseAreas receive click events while non-interactive
areas still fall through to the swipe handler.
TaskWidget.qml supports left-click (Activate), right-click
(ContextMenu), hover tooltip, and hides Passive/ApplicationStatus
items. The lockscreen SIGABRT guard (disableSystemTray) is restored
on the action drawer's StatusBar instance.
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.
The home button was a no-op in convergence mode when windows were
visible. Call WindowUtil.minimizeAll() so the home button acts as
show-desktop, preserving the mobile path that also resets homescreen
state before minimizing.
In convergence mode, show a running-app icon strip in the navigation
panel using the existing TaskManager.TasksModel. Each icon activates
its window on click, with an indicator dot for the active window.
Replace the mobile task switcher button with a KWin Overview trigger:
add triggerOverview() to TaskPanel (D-Bus call to kglobalaccel), swap
the button icon to view-grid-symbolic, and enable the Overview effect
in the envmanager KWin config when convergence mode is active.
Wire convergenceMode and taskModel properties from
NavigationPanelComponent through to NavigationPanel so the task strip
populates from the existing TasksModel instance.
Load the button-based NavigationPanel when convergence mode is
enabled, regardless of the gesture panel preference. Gesture-only
navigation is incompatible with mouse and keyboard input.