Commit graph

178 commits

Author SHA1 Message Date
36d9004473 Round normal window decorations
Reserve side and bottom decoration borders for normal windows and draw a rounded decoration frame so windows match the convergence workspace shape. Add static guards for the decoration and existing workspace-frame corner geometry.
2026-05-23 08:53:02 +02:00
d03f3585a3 Block native window menu during tiling 2026-05-22 09:39:45 +02:00
5311dc8fe8 Own dynamic tiling window workflows 2026-05-22 09:39:11 +02:00
753909a6ce Move shell and KWin surfaces to shared motion
Apply Motion tokens to startup, applet configuration, lockscreen controls, logout and splash transitions, KWin effects, and the mobile task switcher. Preserve timing-specific behavior where it drives runtime state.
2026-05-21 11:14:42 +02:00
75b9049a8c Page dynamic tiles by workspace
Keep one layout per output and virtual desktop. Move new windows to another existing desktop when the current page is full.

When a user moves a window onto a full page, replace the last focused window on that page and send it back to the source desktop. Use stable slot swaps instead of insert splits so the layout shape does not change during moves.
2026-05-20 09:38:37 +02:00
40beabede9 Keep tile preview effect inert
Nested KWin blacks out when this scene effect becomes visible. Leave the effect disabled and let the tiling script own swap and restore outlines.
2026-05-20 09:38:22 +02:00
f2f6f6f890 Stabilize nested preview startup
Use a concrete wallpaper image in generated shell config. Disable KSycoca watches when preview opts out, and keep the convergent window connection target nullable.
2026-05-20 09:38:08 +02:00
cb4d842de3 Add primary tile promotion 2026-05-19 10:01:45 +02:00
7c51f76cc0 Reduce dynamic tile drag jitter 2026-05-19 10:00:43 +02:00
c6bd37dfc3 Stabilize automatic tile layouts 2026-05-19 09:55:25 +02:00
e0e51d7ffd Add dynamic tile drag preview 2026-05-19 09:47:45 +02:00
65efc37410 Unify Shift theme identity 2026-05-19 09:18:32 +02:00
a338369457 Improve dynamic tiling layout handling
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.
2026-05-17 18:26:28 +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
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
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
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
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
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
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
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
70fa861b30 Harden gaming mode and fix startup crash
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.
2026-04-20 09:46:32 +02:00
b0739dd9a7 Suppress shell chrome in gaming mode
Hide the navigation panel, status bar, and app drawer while
gamingModeEnabled is active. The KWin convergent-windows script
skips its window policy so game windows are not forcibly tiled
or maximized.

The Home button in gaming mode re-opens the Game Center overlay
rather than the app drawer. A configurable hint nudges the user
toward the HUD button after launching a game.
2026-04-19 13:51:08 +02:00
aa4103f72a Add null guards in QuickSettingsDelegate and convergentwindows
Check restrictedPermissions before opening the detail popup in
convergence mode. Guard against null output in the KWin script
window-setup handler to prevent TypeError when a window has no
assigned output yet.
2026-04-18 20:24:28 +02:00
6e48055b40 Clamp restored window below the dock
KWin restores geometry before the compositor re-commits the
exclusive zone, so the window can land partly behind the dock.
A deferred check clips the bottom edge once the round-trip
completes.
2026-04-18 13:20:13 +02:00
l10n daemon script
ef88e5a7f2 SVN_SILENT made messages (.desktop file) - always resolve ours
In case of conflict in i18n, keep the version of the branch "ours"
To resolve a particular conflict, "git checkout --ours path/to/file.desktop"
2026-03-15 01:41:15 +00:00
Devin Lin
a8b858dc3e Remove kirigami version in imports
This fixes potential issues stemming from pinning versions on Kirigami
qml api imports
2026-03-06 22:08:07 -05:00
Devin Lin
e915990621 taskswitcher: Don't set layer on task item, to avoid blurriness
Don't set a layer on the task item because it'll be put into a VBO and reduce the quality when the item is blown up in size.
2026-02-17 21:30:22 -05:00
Devin Lin
28f7224a5b gestures: Add optional gesture guide panel
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.
2025-12-14 18:36:42 -05:00
Nicolas Fella
8e8f794f02 Use workspace to find output
We want the LogicalOutput from workspace(), not the BackendOutput
2025-12-02 20:14:03 +01:00
Nicolas Fella
37dcef56d9 Adjust to renamed KWin::Output class 2025-11-26 17:46:31 +01:00
Devin Lin
839d5e2bff panels: Add support for defining device specific panel tweaks
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`.
2025-11-04 23:08:18 -05:00
Luis Büchi
64bcfb7ebc taskswitcher: fix double tap navpanel task switch being inconsistent 2025-11-03 02:02:19 +01:00
Devin Lin
674c5034ae animations: Use Kirigami units and speed up several of them
This converts many of the animation durations to Kirigami units so that
they can be controlled system wide. It also speeds up several of the
animation durations (ex. in folio) from 800ms to 400ms to improve the
feel and responsiveness of the shell.
2025-09-12 05:41:20 -04:00
l10n daemon script
625deeb11d SVN_SILENT made messages (.desktop file) - always resolve ours
In case of conflict in i18n, keep the version of the branch "ours"
To resolve a particular conflict, "git checkout --ours path/to/file.desktop"
2025-09-09 02:09:50 +00:00
Kunda Ki
7f3dcab42b Fix various typos
Fixes typos in various source comments.  
Found via `codespell -S "*.po,*.svg,*.pgm,*.xml,./po,*.desktop,*.json,*.actions" -L aline,aparent,childs,distroname,indexin,indx,logicaly,lokal,nd,splitted,te`
2025-09-05 12:21:15 +00:00
Devin Lin
c76e19037c Ensure i18n is used with double quotes and add CI check
Apparently i18n doesn't support string literals with single quotes as
parameters. Fix occurrences of this and add a CI check to ensure this
won't happen in the future.
2025-08-11 18:19:41 -04:00
l10n daemon script
c3ee2fe339 SVN_SILENT made messages (.desktop file) - always resolve ours
In case of conflict in i18n, keep the version of the branch "ours"
To resolve a particular conflict, "git checkout --ours path/to/file.desktop"
2025-08-05 01:37:48 +00:00
Luis Büchi
0fe7879afa taskswitcher: make task scrub mode more resistant against overlapping UI 2025-07-15 17:36:55 +02:00
Luis Büchi
1fa16ee491 taskswitcher: fix incorrect enum access & remove long broken logic in QML 2025-07-11 23:58:37 +02:00
Luis Büchi
04bcbd9f8d taskswitcher: fully qualify property lookups 2025-07-10 19:01:04 +02:00
Luis Büchi
0d2e15cea4 taskswitcher: add QML type registration to taskmodel 2025-07-06 00:27:02 +02:00
Nicolas Fella
25a3706d7f [mobiletaskswitcher] Add missing dependency to QML module
The module exposes TaskFilterModel, which extends QSortFilterProxyModel

QSortFilterProxyModel is registered to QML as part of the QtCore module, so we need to add that to DEPENDENCIES for tools like qmllint to work properly
2025-07-04 14:59:13 +02:00
Luis Büchi
5d33295443 add type annotations to taskswitcher QML and do more explicit typing 2025-06-26 16:30:41 +02:00
Devin Lin
62f9237aec taskswitcher: Fix task close icon colour in light mode
Breeze changed the icon for the "close" button to be a plain X, instead
of having a red background. Ensure that we use the complementary colour
scheme.
2025-06-11 00:22:38 -04:00
Roy Kollen Svendsen
2b1f66ecdc taskswitcher: Fix build when KWin is built without activities support
Fixes:
../kwin/mobiletaskswitcher/plugin/taskfiltermodel.cpp:81:40: error: ‘class KWin::Workspace’ has no member named ‘activities’; did you mean ‘ActivityRaise’?
   81 |     auto activity = Workspace::self()->activities()->current();
      |                                        ^~~~~~~~~~
      |                                        ActivityRaise

This occurs when KWin is built with -DKWIN_BUILD_ACTIVITIES=OFF:

https://invent.kde.org/plasma/kwin/-/blob/master/src/workspace.h#L424
2025-06-10 09:12:25 -04:00
l10n daemon script
efb518c817 SVN_SILENT made messages (.desktop file) - always resolve ours
In case of conflict in i18n, keep the version of the branch "ours"
To resolve a particular conflict, "git checkout --ours path/to/file.desktop"
2025-04-27 01:31:31 +00:00