Commit graph

4137 commits

Author SHA1 Message Date
1b8efc3be3 Use Activities icon for overview button
Replace the redundant app-grid icon with the Activities icon in the
Folio dock overview button.
2026-05-10 09:32:37 +02:00
3fbf68d56b Refine Dynamic Tiling drag zones
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.
2026-05-10 09:32:33 +02:00
3f6916cafc Add Dynamic Tiling task menu request bridge
Expose a KConfig-backed request channel in MobileShellSettings and use
it from the Folio task menu to request float/tile actions for a single
window.
2026-05-10 09:32:25 +02:00
3fde6cd173 Use Shift logo in nav UI
Replace the remaining KDE start-here icon in the navigation
tutorial preview and the mobile task switcher.
2026-05-09 13:55:26 +02:00
3c2d8fb602 Add activity actions to dock menu
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.
2026-05-09 13:55:23 +02:00
6ee9cb62a3 Fix Folio trash D-Bus call
Restore the /trash object path in emptyTrash(). The current
argument list is malformed and breaks the Folio plugin build.
2026-05-09 13:55:19 +02:00
ca557f1c2b Delay convergence dock tooltips
Stop dock tooltips from appearing immediately under the pointer and
hide them as soon as the user presses or opens a context menu.
2026-05-09 10:49:25 +02:00
a9e5a2f1e4 Add virtual desktop actions to the dock pager
Open desktop management from the convergence pager and let the
pager add or remove the last virtual desktop without leaving the
dock.
2026-05-09 10:48:52 +02:00
ebb80d5838 Add desktop actions to the dock button
Open the desktop button context menu on right click or press and
hold, and expose Minimize All Windows through KWin's existing
global shortcut.
2026-05-09 10:47:41 +02:00
76da62dae9 Add Peek at Desktop to the convergence dock
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.
2026-05-09 10:46:32 +02:00
c23d756596 Add desktop settings links to Shell KCM
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.
2026-05-09 10:01:14 +02:00
c5582393bc Promote desktop utilities in action drawer
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.
2026-05-09 10:00:58 +02:00
85b5aec742 Expose power profiles in battery tile
Use the existing power profile control in the battery quick
setting so users can see and cycle available profiles
without opening settings.
2026-05-09 10:00:36 +02:00
0ec1794929 Add search launcher to convergence dock
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.
2026-05-09 10:00:30 +02:00
e5ec88a12b Improve auto-hide dock reveal
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.
2026-05-06 13:33:38 +02:00
daf6ec3fd6 Smooth convergence mode transitions
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.
2026-05-06 13:33:25 +02:00
3fba9798e4 Add snap layouts shell setting
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.
2026-05-06 11:44:54 +02:00
8d59ce6153 Add Convergence section to shell KCM
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.
2026-05-06 10:02:43 +02:00
4282b30a30 Refine convergence dock task menu
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.
2026-05-06 09:37:14 +02:00
3d32eaf5b7 Use Shift accent colors for snap layouts
Replace the blue snap-layout accents with the Shift selection color
used by the shipped color schemes.
2026-05-06 08:27:19 +02:00
39e5a504a3 Ignore VS Code workspace files
Remove the checked-in workspace file and ignore local VS Code
workspace files going forward.
2026-05-06 08:27:13 +02:00
8aabeed02b Fix Shift decoration SPDX identifier
Use the valid SPDX form EUPL-1.2 so reuse lint accepts the
decoration QML license header.
2026-05-06 08:17:39 +02:00
2c0e329037 Make snap layouts optional on maximize hover
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.
2026-05-05 13:31:06 +02:00
ba1428851e Expose KWin titlebar button order to QML
Snap-assist needs the configured decoration button order to find the
maximize button after users move titlebar controls between sides.
2026-05-05 13:30:52 +02:00
e8549f90cd Mark folio HomeScreen as uncreatable
The containment provides HomeScreen instances itself. Mark the QML type
uncreatable to avoid default-construction warnings from the QML type
registration.
2026-05-05 13:30:46 +02:00
ed2fc8301b Seed lockscreen wallpaper defaults at startup
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.
2026-05-05 09:06:46 +02:00
462ceddd66 Extract RunningAppsPanelButton to its own file
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.
2026-05-04 20:34:54 +02:00
3fa5f90ed1 Add dynamic tiling toggle quick setting
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.
2026-05-04 20:25:40 +02:00
d9b2e987dc Drop snap-assist hover stub from decoration
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.
2026-05-04 20:25:28 +02:00
9364cb29db Add SHIFT snap-assist KWin effect
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.
2026-05-04 20:25:17 +02:00
730385d8c8 Add SHIFT dynamic tiling KWin script
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
2026-05-04 20:25:06 +02:00
c52e331d31 Auto-clear startup feedback panel fill
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.
2026-05-04 20:24:53 +02:00
fe8b798cb2 lookandfeel: use Shift decoration by default
Switch kdecoration2 defaults from Breeze to Aurorae and select
org.shift.decoration as the theme.
2026-05-04 11:43:41 +02:00
92e7b78b5e kwin: add Shift Aurorae decoration
Add a KWin decoration package under kwin/decorations and install it
into share/kwin/decorations. The QML theme defines Shift titlebar
colors, button rendering, and maximized border geometry.

Wire the new decorations subdirectory from kwin/CMakeLists.txt.
2026-05-04 11:43:41 +02:00
c2f4c8ad88 Keep wallpaper selector drawer below the status bar
Pass topMargin to the WallpaperSelector in landscape/horizontal mode
so the drawer does not overlap the top status bar.
2026-05-04 11:43:41 +02:00
b0438bdf48 Fix wallpaper selector icon and surface colors
The header button used list-add icon and hard-coded white backgrounds
that did not match the dark theme. Change icon to configure (it opens
Configure Folio for advanced settings, not add-wallpaper), and use
Kirigami.Theme.backgroundColor for both the header and thumbnail
backgrounds.
2026-05-04 11:43:41 +02:00
9d076bf542 Sync lockscreen wallpaper with homescreen changes
When homescreen wallpaper is set, also persist the same image for lockscreen. Add a one-time migration in loadHomescreenSettings() that updates lockscreen when it is unset or still points to legacy Next wallpaper.
2026-05-04 11:43:41 +02:00
378e4830ac Guard convergentwindows against invalid windows
Return early in run(window) when the window object is null, deleted, or non-normal before accessing resourceClass. This prevents runtime errors during window lifecycle races.
2026-05-04 11:43:41 +02:00
e72165ec98 Unify convergence dock geometry and add invariant test
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.
2026-05-04 11:43:41 +02:00
709304c99c Restore convergence mode after undocking
Track docked state transitions in KScreenOSDProvider and only snapshot the initial convergence mode when transitioning into docked mode. This restores the previous user preference when outputs drop back to one.
2026-05-04 11:43:41 +02:00
9f7e1677eb Hide launcher tabs when not installed
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.
2026-05-04 11:43:41 +02:00
8632d47d68 Fix thumbnail popup x position on Wayland layer-shell
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.
2026-05-04 11:43:41 +02:00
84a6fa8054 Show context menu on desktop right-click in convergence mode
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.
2026-05-04 11:43:41 +02:00
6d79f8ed05 Add trash button to convergence dock
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.
2026-05-04 11:43:41 +02:00
a0bad0507f Add virtual desktop pager to convergence dock
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.
2026-05-04 11:43:41 +02:00
160bc97621 Drop KDE wallpaper packages from dependencies
SHIFT now ships its own wallpaper package; remove
breeze6-wallpapers and plasma6-workspace-wallpapers from the
runtime dependency list in HACKING.md. Add .preview-data/ to
.gitignore.
2026-05-04 11:43:41 +02:00
6e67728f46 Add SHIFT wallpaper as the shell default
Add a wallpapers/SHIFT package with light and dark images. Set
Image=SHIFT in the look-and-feel defaults.

Plasma's org.kde.image backend requires a directory URL, not a
bare package ID, when writing Image= in a layout.js. Use
configure_file to stamp the resolved KDE_INSTALL_WALLPAPERDIR
path into the installed layout.js at build time.
2026-05-04 11:43:41 +02:00
5c319d2e7e Rename look-and-feel package to org.shift.mobile
Update the package ID in metadata.json, the translation catalog
name in Messages.sh, the compile-time default in envmanager, and
the test suite --lookandfeel flag. Rename the 41 .po files from
the old org.kde.breeze.mobile catalog name.
2026-05-04 11:40:41 +02:00
4077292801 Add task panel to Folio drawer
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.
2026-04-29 12:10:31 +02:00
c469ad49b6 Polish quick settings states 2026-04-29 08:39:34 +02:00