Commit graph

501 commits

Author SHA1 Message Date
2e8ab6a741 Fix convergence notifications
Filter @other out of the history blacklist so senders without a\ndesktop entry still land in the drawer. Keep the convergence empty\nstate, dismiss path, and popup geometry aligned with the current\nframe and dock layout.
2026-05-24 15:48:49 +02:00
6cc92b7fa2 Add SPDX headers to motion QML components
Add missing SPDX copyright and license tags to Motion.qml,
MotionColorAnimation.qml, MotionNumberAnimation.qml, and
MotionStateLayer.qml to satisfy REUSE lint in CI.
2026-05-23 09:18:53 +02:00
7f9087f342 Move shell popups to shared motion
Apply Motion tokens to notification drag and stack transitions, volume OSD feedback, KRunner field state, media controls height changes, and action-button popup affordances. Leave timeout and marquee animations as timing behavior.
2026-05-21 11:13:06 +02:00
1074b86225 Move shell chrome to shared motion
Use the Motion wrappers for action-drawer transitions, status bar feedback, panel reveal motion, startup feedback, and shell homescreen chrome. Keep non-animation settings reads in ShellSettings where they still control behavior.
2026-05-21 11:12:44 +02:00
8767df8b10 Add shared mobile shell motion primitives
Introduce a central Motion singleton for animation durations, easing, and press scale tokens. Add typed NumberAnimation/ColorAnimation wrappers and a reusable state-layer component so runtime QML can share the same animation policy.
2026-05-21 11:12:20 +02:00
6d766892b5 Unpage convergence quick settings 2026-05-19 09:18:46 +02:00
c38b32042b Fit action drawer surface 2026-05-19 09:18:46 +02:00
ae3319b120 Frame convergence work area 2026-05-19 09:18:46 +02:00
a3173160e2 Render shell-owned icons with theme masks
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.
2026-05-17 08:57:06 +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
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
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
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
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
c469ad49b6 Polish quick settings states 2026-04-29 08:39:34 +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
e72beb7296 Show status bar down-arrow at rest in convergence 2026-04-19 09:22:53 +02:00
6a1631023e Theme-aware status bar hover and remove dead nav panel code
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.
2026-04-18 20:25:26 +02:00
acecbcc86a Fix notification popup position in convergence mode
The input region Y was computed from the bottom of the screen
instead of from the top, causing the touch region to be offset
from the actual popup. Use openOffset directly since the popup
anchors to the top. Unify the popup margin into a single
property so the delegate x and the input-region regionX stay
consistent.
2026-04-18 20:24:48 +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
8fecdf1d2d Guard against invalid KPackage in AppletHost
loadPackage + setPath can produce an invalid package if the shell
package is missing. Guard with isValid() to avoid passing a bad
package to setKPackage. Add the QML_SINGLETON factory that the
QML engine requires for proper singleton instantiation.
2026-04-18 20:24:11 +02:00
667efec483 Fix panel interactive flag and reserved height
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.
2026-04-18 19:04:56 +02:00
9b94c200ee Fix action drawer toolButtons ref and page indicator sync
NotificationDrawer referenced toolButtons, a sibling defined in
ContentContainer, not a local property. Add toolButtonsItem: Item
and wire it at the call site. Replace the magic literal 10 with
Kirigami.Units.largeSpacing while here.

The PageIndicator had a one-way binding to swipeView.currentIndex
that would break after a user tap. Make it bidirectional with a
Connections block and a loop guard on both sides.
2026-04-18 19:04:49 +02:00
2059f14faf Add null guards in AppletHost and TaskWidget
AppletHost: setPreloadFullRepresentation(true) does not guarantee
fullRepresentationItem() is non-null on return — the applet loads
asynchronously. Wire a single-shot connection to
fullRepresentationItemChanged to emit appletReady() when the item
arrives.

TaskWidget: operationDescription() can return null for an unknown
operation name; bail out rather than dereferencing it.
2026-04-18 19:04:40 +02:00
76e027f630 Fix Qt.rgba color arguments
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.
2026-04-18 19:04:22 +02:00
86283b526d Move notification popup to bottom-right in convergence
The mobile popup system always anchored to top-center which
looked out of place on a desktop screen. In convergence mode,
position popups at the bottom-right corner and slide them in
from below. Swipe-to-dismiss flips to match (drag down to
dismiss instead of up). Stacked card previews and the popup
drawer tap area are hidden since notifications are already
accessible in the action drawer.
2026-04-17 07:10:23 +02:00
c2b864d8b4 Show action drawer as bounded panel in convergence
Replace the full-screen slide-down sheet with two fade-in cards
anchored to the top corners. Quick settings sit top-right,
notifications top-left capped at 60% screen height. Background
scrim reduced to 30%. Redundant clock header and status bar
hidden since both are already visible in the top panel.
2026-04-16 17:42:06 +02:00
2a137d1ac9 Promote management tiles to status rows in convergence
Wi-Fi, Bluetooth, Sound and Battery behave differently from
toggle tiles: tapping them should open a detail panel, not
flip a switch. On a phone the long-press convention handles
this, but with a mouse long-press is unnatural.

Pull these four tiles out of the grid when convergence mode
is active and show them as full-width rows above the remaining
tiles. Each row has two click zones — a toggle pill on the
left that still switches the service on/off, and a detail
area on the right (name, status, chevron) that opens the
Plasma applet popup. The grid hides the duplicates so they
only appear once.
2026-04-16 13:41:24 +02:00
8017e4eaa0 Show applet popup on tile long-press in convergence
Long-pressing a mapped quick-settings tile in convergence
mode opens a floating popup with the Plasma applet UI
instead of launching System Settings. Unmapped tiles still
open Settings.

AppletHost creates a standalone Corona to host applets
outside the shell containment tree.
2026-04-15 14:58:25 +02:00
b77bf41cdc Fix action drawer not opening on click in convergence
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.
2026-04-15 14:58:15 +02:00
d8f9924c73 Widen quick settings panel in convergence mode
Use up to 45% of screen width so more tiles are visible
without pagination. Tile size stays touch-friendly.
2026-04-15 11:58:08 +02:00
2c7d88e5d8 Show down-arrow on status bar hover in convergence
Desktop users have no visual cue that the top bar opens quick
settings. Fade in a small arrow-down icon at the bottom center
when the mouse hovers, matching the arrow-up hint on the
favourites bar.
2026-04-15 11:20:07 +02:00
7fa2c20ab4 Open app drawer over windows in convergence mode
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.
2026-04-15 10:24:12 +02:00
756259bb01 Show pointer cursor on system tray icons 2026-04-13 19:37:42 +02:00
2c77b4c979 Dismiss action drawer with Escape in convergence mode 2026-04-13 13:53:53 +02:00
70c1810d82 Skip window activation in convergence mode
In phone mode, tapping a running app activates its existing
window. In convergence mode this prevents launching a new
instance of the same application.

Skip activateWindowByStorageId when convergence mode is
enabled so that launchApp is always reached, matching
standard desktop launcher behaviour.
2026-04-10 13:03:57 +02:00
cf5fb25bae Make quick settings page indicator clickable
The page dots were non-interactive so clicks fell through to the
swipe area and closed the drawer. Set interactive:true and sync
the index back to the SwipeView so clicking a dot switches pages.
2026-04-09 11:43:59 +02:00
73b4ecea57 Add hover highlight to status bar in convergence mode
Mouse users had no visual cue that clicking the status bar
toggles the action drawer. Add a subtle background highlight
on hover so the bar signals interactivity.
2026-04-09 11:43:51 +02:00
d89a303337 Replace navigation panel with unified dock bar
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.
2026-04-09 10:15:14 +02:00
00a9ac1c4d Add desktop switcher and task context menus
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.
2026-04-08 20:12:38 +02:00
32a9b04864 Show date in status bar in convergence mode
Force the date label visible in convergence mode, matching the
existing behavior of the dateInStatusBar setting.
2026-04-08 20:12:27 +02:00
e12e6b3a66 Add system tray to status bar in convergence mode
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.
2026-04-08 20:12:16 +02:00
5dfae0c45c Add task strip and Overview to navigation panel
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.
2026-04-08 19:07:37 +02:00
59ec6af0db Toggle action drawer on click in convergence mode
Use the new SwipeArea clicked() signal to open/close the action
drawer on a single click when convergence mode is enabled. The
existing swipe gesture remains available as a fallback.
2026-04-08 19:07:12 +02:00
94e2399425 Add clicked() signal to SwipeArea
Emit clicked() when a press-and-release occurs without any swipe
movement. This allows consumers to distinguish taps from swipe
gestures on the same surface.
2026-04-08 19:07:03 +02:00
Devin Lin
16d8a26a97 actiondrawer: Preload for first open
Preload the action drawer so that it doesn't get loaded only when the
user attempts to open it for the first time (making it laggy).
2026-03-07 11:06:39 -05: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
Micah Stanley
db98f2cd86 statusbar: fix hidden batteries from taking up space in the statusbar
I noticed at some point after updating my main phone, that non visible external device batteries started taking up extra space in the statusbar. This fixes the issue by filtering out external device batteries by using KSortFilterProxyModel.

Before (with external peripheral connected)

![Screenshot_20260303_124043](/uploads/a469eda41ff6d2a10b85c6a3de88785f/Screenshot_20260303_124043.png){width=399 height=28}

After

![Screenshot_20260303_123956](/uploads/521a7dc7bb16cf08ef026c3ef0655b93/Screenshot_20260303_123956.png){width=399 height=28}
2026-03-05 20:13:34 -05:00
Devin Lin
c4c7f5b195 actiondrawer: Fix loading race conditions with minimized quick settings
This reverts https://invent.kde.org/plasma/plasma-mobile/-/merge_requests/739 and avoids using loaders to load the quick settings. This otherwise leads to problems where the delegate could get half loaded and not receive model properties, due to ContentContainer also being a loader.

Fixes: https://invent.kde.org/plasma/plasma-mobile/-/merge_requests/739
2026-02-20 10:53:30 -05:00