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.
This is exacerbated now that we have device-specific view margins (to
deal with notches and the like), which caused the drag and drop
positions to be wildly inaccurate.
This adds a gesture handle mode to the navigation panel, which can be
enabled during gesture-only mode. This reserves space for the system
gesture to be able to be used, allowing us to extend the height in KWin
of the gesture recognition area (which is currently far too short for devices such as Pixel 3a).
This also allows for navigation with a mouse; clicking on the handle
triggers the task switcher, holding it triggers the "home" action.
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.
The startup feedback uses theme adjusted colors, we can use standard
foreground colors for the panels for better contrast rather than relying
on the shadow.
This adds support for specifying options needed to deal with phone
display panel pecularities (ex. screen curves, notches, punch holes)
This is implemented as settings in ~/.config/plasmamobilerc, which can
set panel heights, paddings, and center spacings to duck display
cutouts. The pixel values are scaling independent, and so are not
affected when the display scaling is changed.
This is then exposed over DBus, so that components from outside of
plasmashell (ex. KWin) can access it easily without needing to connect to
kscreen themselves. Each screen is exposed as a single object.
Currently support is only added in the status bar and the navigation
panel.
Currently all screens have the settings applied. In the future, we may
want to limit this just to the internal screen (?)
---
This also adds a "devices" folder (in `devices/configs`) where per-device configs can be set.
This is installed to `/usr/share/plasma-mobile-device-configs`.
In `plasmamobilerc` (installed to `/etc/xdg/plasmamobilerc`, or
`~/.config/plasmamobilerc`), envmanager will read:
```toml
[Device]
device=oneplus-enchilada
```
for the device config to use and write its settings to
`~/.config/plasma-mobile/plasmamobilerc`.
This switching Folio and Halcyon to define their settings as a
containment config so that it fits in with the other containment
options.
This removes the convoluted maze of nested settings windows due to
wrapping the containment settings with a custom settings window around
it.