BusyBox find does not support GNU find's -xtype predicate, which
caused shift-icon-theme-coverage to fail in CI. Iterate symlinks with
portable find -type l -print0 and let Bash check whether each target
exists instead.
Replace the flat per-screen tiling order with a persistent layout
tree so split orientation and window relationships survive retiles.
Derive the per-screen tile cache from the tree when applying
geometries.
Make drag insertion deterministic by mapping the cursor position
over a target tile to the nearest split direction and previewing
the exact half that will be assigned.
Retile on Workspace.onScreensChanged so screen rotation and output
changes recompute tiled window geometry from the updated work area,
and reconcile tiled windows that KWin moved to another output.
Rewrite the main project docs to present SHIFT as the product and Plasma Mobile as the upstream base. Keep compatibility-sensitive runtime identifiers such as org.kde.plasma.mobileshell and ~/.config/plasma-mobile explicit in the hacking guide instead of treating them as product identity.
Point the mobile shell, navigation, and Waydroid KCM metadata at the Shift repository. Brand the KDED startup and APN autodetect module names and descriptions as SHIFT while keeping existing plasma-mobile plugin/library identifiers stable.
Add a guard for these metadata surfaces so upstream project URLs and translated Plasma Mobile overrides are not reintroduced.
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.
Update quick setting package metadata to use SHIFT-facing descriptions and repository links while preserving org.kde.plasma.quicksetting.* package IDs. Drop translated Description entries that could override the corrected base descriptions, update the Caffeine inhibition reason, and add a guard for future regressions.
Update first-run KPackage descriptions and websites so package-visible metadata points at SHIFT while keeping the existing mobileinitialstart package IDs stable. Remove localized Description entries that could override the new SHIFT-facing base descriptions. Add a CTest guard for the first-run module metadata.
Update session, AppStream, service, shell metadata, and initial setup about/defaults to use SHIFT-facing product metadata while keeping runtime package IDs and executable names stable. Install Shift AppStream metadata and remove stale upstream metainfo from existing prefixes. Add a guard for product metadata branding.
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.
Install org.shift.icons as the look-and-feel icon theme while keeping the Plasma style on breeze-dark. Add the icon-theme coverage guard and CTest registration so shell, System Settings, KCM, and installed Plasma icon names do not silently fall back to missing Breeze-only assets.
Document the theme rules and add scoped REUSE metadata for the Phosphor-derived SVG glyphs.
The package shipped no overrides and only inherited the system
default theme, so it had no visible effect. Authoring a correct
FrameSvg override needs a separate, designed effort.
Keep the selected timezone visible in the wizard and update it before applying the system timezone.
Filter by city or zone name and report timedatectl failures without discarding the staged choice.
Detect the device class, stage the selected experience, and write the resulting setup choices through SetupState.
Load the new device and experience modules before the existing setup pages, and use the Shift icon on the finished page.
Use edge insert zones for drag-and-drop reordering, keep drag signal
connections stable across window creation, and consume task-menu tiling
requests through the script settings bridge.
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.
Surface installed desktop settings modules from the Shell KCM
so convergence users can reach display, networking, sound,
locking, virtual keyboard, and KWin workspace controls from
one place.
Reshape the convergence quick settings into a compact
promoted grid and add Clipboard, Disks & Devices, and a
drawer-hosted System Tray popup.
Retry applet popups when their full representation becomes
ready so the desktop utilities open reliably.
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.
Expose snapLayoutsEnabled through MobileShellSettings and store it\nin plasmamobilerc.\n\nUse the setting in the Shift snap assist effect eligibility logic\nand add a Convergence KCM switch to control it.\n\nKeep the switch disabled when convergence is off, gaming mode is on,\nor dynamic tiling is enabled so window-placement ownership stays\nconsistent.
Group convergence controls in one place by adding Convergence Mode, Dynamic Tiling, and Auto Hide Panels to the Shell settings page. Move Auto Hide Panels out of General and keep Dynamic Tiling disabled when convergence is off or gaming mode is active.
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.
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.
The containment provides HomeScreen instances itself. Mark the QML type
uncreatable to avoid default-construction warnings from the QML type
registration.
When kscreenlockerrc has no greeter wallpaper configured, or still
points at the legacy Next wallpaper, the lockscreen falls back to KDE
default imagery. Seed the greeter wallpaper settings from the installed
SHIFT wallpaper package during Plasma Mobile startup so the lockscreen
uses the fork default consistently.
Link ConfigCore for the startup module so it can read and update
kscreenlockerrc.
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.
Expose dynamicTilingEnabled (default true) on MobileShellSettings,
stored under the General group of plasmamobilerc and re-emitted by
the existing config watcher. shift-tiling extends its activation
guard with this flag and clears the BSP layout when it goes false,
so users can fall back to KWin native quick-tile at will.
Add a quick-settings tile that surfaces the toggle. available is
gated on convergenceModeEnabled and !gamingModeEnabled, so the tile
is hidden on the phone form factor and during gaming sessions.
The decoration QML sandbox has no DBus or kglobalaccel access, so
the Qt.callDBus call from the maximize-button hover Timer was a
silent no-op. Remove the dead Timer, hover state and grid-dot
overlay; the shift-tiling script now polls the cursor over the
title-bar button strip and triggers SHIFT Snap Assist itself.
Also refresh the SPDX header on both decoration files.
Declarative SceneEffect that shows a floating panel of layout
presets (halves, thirds, quadrants). Activated via Meta+Shift+S or
by the shift-tiling script when the cursor hovers the title-bar
controls of the active window for 500 ms.
Clicking a preset assigns the active window to the chosen zone with
the same outer gap used by the BSP engine; remaining zones are shown
as snap-assist drop targets for recently-used windows.
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
The coloured rectangle that paints over the bottom panel during an
app-launch animation was reset only by a change of
WindowMaximizedTracker.showingWindow. In convergence mode kwinrc
sets Placement=Centered, so launched apps stay non-maximized,
showingWindow never flips and the band remained on the panel
indefinitely.
Restart a 600 ms safety timer whenever the animation is triggered.
When it fires, clear colour and height to zero only if no maximized
or fullscreen window exists, preserving the original mobile reset
path while fixing the convergence one.