Commit graph

1225 commits

Author SHA1 Message Date
220be94b63 Allow dragging running dock tasks to pin them
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.
2026-04-13 12:32:54 +02:00
0cbd933e71 Add middle-click to close running dock tasks
Middle-click on a running task in the dock now closes it, matching
standard desktop taskbar behavior.
2026-04-13 11:53:26 +02:00
36a39e1537 Add spacer between pinned and running dock items 2026-04-13 09:39:19 +02:00
9bccbeede6 Add drag-reorder for dock favourites
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.
2026-04-12 14:15:13 +02:00
ca6170c1f5 Add close button to dock thumbnail preview popup 2026-04-12 10:15:28 +02:00
03ba3bc616 Fix Pin to Dock not reappearing after unpin
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.
2026-04-12 09:36:23 +02:00
1ce85bba28 Remove tooltips from dock nav buttons
The ToolTip popups were overlapping the Home and Overview buttons,
blocking click input. The icons are self-explanatory.
2026-04-12 09:23:44 +02:00
9e60c0e923 Keep status bar visible in convergence mode
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.
2026-04-11 13:25:26 +02:00
86b34878c7 Group dock icons by application in convergence mode
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.
2026-04-11 13:25:01 +02:00
3728ef7602 Auto-hide dock when a window is maximized
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.
2026-04-11 12:05:15 +02:00
41a64bfe8e Add opaque background to dock overlay window
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.
2026-04-11 10:34:23 +02:00
8c56409f1c Add pin-to-dock for running apps in convergence mode
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.
2026-04-11 09:42:21 +02:00
eb33b533c6 Show window count indicator dots on dock icons
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.
2026-04-10 13:32:16 +02:00
55b985bc89 Exclude dock area from drawer dismiss overlay
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.
2026-04-10 13:04:10 +02:00
92a9e2714c Keep minimized windows visible in dock
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.
2026-04-10 13:04:04 +02:00
29ce5117ff Show window thumbnail on dock icon hover
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.
2026-04-10 10:23:36 +02:00
98733bb654 Reserve screen space for the dock in convergence mode
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.
2026-04-09 19:47:38 +02:00
7af389b358 Show app drawer as popup in convergence mode
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
2026-04-09 12:35:52 +02:00
8105a0b971 Add launch action to dock favourite context menu
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
2026-04-09 12:29:38 +02:00
db18022a9b Hide task panel strut in convergence mode
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.
2026-04-09 11:09:25 +02:00
d2cfa5497f Add hover highlights and tooltips to convergence UI
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.
2026-04-09 11:09:15 +02:00
1200740f6b Add close button to app drawer header in convergence
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.
2026-04-09 10:41:42 +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
5770a4981f Reduce dock height and hide redundant controls in convergence
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.
2026-04-09 10:14:55 +02:00
908a63ba44 Close app drawer when a new window is created
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.
2026-04-09 10:14:33 +02:00
769211cf75 Open app drawer directly from homescreen
Skip the intermediate go-to-page-0 step when pressing Home while
already on the homescreen in convergence mode.
2026-04-08 20:12:48 +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
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
a0dceaedc1 Add right-click settings on homescreen background
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.
2026-04-08 19:08:23 +02:00
7889e07815 Minimize all windows on home button press
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.
2026-04-08 19:07:47 +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
60163ee15e Force button navigation in convergence mode
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.
2026-04-08 19:07:21 +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
c8be7be5cb homescreens/folio: Render page in one texture
Render every page together in one texture. This groups together all page contents so that it is rendered a single time in the scene graph.
2026-02-18 22:43:13 -05:00
Devin Lin
d91ae2e74f folio: Fix folder view delegates using page view delegate dimensions
Fixes: https://invent.kde.org/plasma/plasma-mobile/-/issues/478
2026-01-15 21:25:22 -05:00
Devin Lin
81232b3ed7 folio: Fix delegate drop placement not accounting for view padding
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.
2026-01-13 21:57:13 -05:00
Devin Lin
22b095e340 gestures: Set kwin touch area to be gesture guide area height
Use a heuristic (the height of the gesture guide panel) to set the
gesture trigger area.
2025-12-25 22:27:44 -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
Devin Lin
4c76f55b5c folio: Refactor and implement support for proper drag & drop
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.
2025-12-13 21:24:05 -05:00
Devin Lin
e5cb775830 folio: Fix some state transitions
Fixes some potential state problems when transitioning to the app
drawer.
2025-12-05 11:51:41 -05:00
Devin Lin
e480114d53 panels: Use standard foreground colors when startup feedback is open
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.
2025-12-05 09:11:17 -05:00
Balló György
3b2033857e homescreens/folio: Use locale-aware sorting for application list
This fixes the problem that application names starting with non-English
characters are placed at the end of the list.
2025-11-28 23:08:39 -05:00
Devin Lin
44e5ed6bbf folio: Fix typo with keyboard navigation logic 2025-11-24 23:24:17 -05:00
Bohdan Onofriichuk
6a327acde6 containments/homescreens/halcyon: port from the clock dataengine 2025-11-15 12:14:44 +02: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
Devin Lin
3d8250c010 folio & halcyon: Use standardized containment config for settings
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.
2025-10-05 15:30:15 -04:00
Devin Lin
dc1fa9b187 homescreens/folio: Add keyboard navigation on pages
Implements the rest of https://invent.kde.org/plasma/plasma-mobile/-/issues/219
2025-09-15 15:47:38 -04:00
Devin Lin
074007ef48 homescreens/folio: Fix folder animating from wrong y
There was a typo with the padding to use in the calculation for the y
position of the folder, it should use the top padding not the right
padding.
2025-09-14 23:20:06 -04:00
Devin Lin
929cde56db animation: Make fast animations less jolty
Use less steep animation curves to avoid "jolty" behaviour.
2025-09-14 08:07:52 -04:00
Devin Lin
a95598d5e4 panels: Fix panels having partial opacity and convoluted vkbd colors
A custom 0.95 opacity was added to the panels in
https://invent.kde.org/plasma/plasma-mobile/-/merge_requests/642 for
overlaying applications. This
required some complicated logic and layering to mix with other modes of
operation. Since this broke at some point, simplify the logic completely
so that it's just a flat colour. This also fixes the navigation panel
not having a colour when the keyboard is shown over the homescreen.
2025-09-13 22:18:32 -04: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
Florian RICHER
9cd44c8db8
Fix Settings Buttons alignements and width
When we use languages with long text translation, the width is > width
screen and the alignment is bad with multiple line.
2025-09-11 14:18:30 +00:00
Florian RICHER
6f862e24c3 Fix Applet Label overflow
For languages with big translation, the label is above of New stuff
button.
2025-09-11 04:51:59 -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
Nicolas Fella
3f02922206 Remove duplicate and unneeded ID 2025-08-22 13:42:42 +02: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
Devin Lin
1e2ba92a5a panel: Fix startup feedback fill showing on lockscreen
Ensure that the startup feedback background fill does not show up on the
lockscreen.
2025-07-30 13:43:43 -04:00
Devin Lin
f7f657131b folio: Port to plasma_add_applet
Use plasma_add_applet to deploy as a module: https://invent.kde.org/plasma/libplasma/-/merge_requests/1116
2025-07-16 23:21:46 -04:00
Devin Lin
32584ebd54 halcyon: Move settings to config group
Similar to
https://invent.kde.org/plasma/plasma-mobile/-/merge_requests/784 but for
halcyon (see rationale there).
2025-07-16 16:09:50 -04:00
Devin Lin
7dc2d980aa folio: Move settings to config group, and consolidate
Currently Folio's settings are being written to the main KConfigGroup of the
containment, when can interfere with other generic containment settings.
ShellCorona in plasma-workspace also expects the settings to be in
sub-config group when it preserves them when changing containments.

This commit moves all of the settings to its own config group, and also
consolidates config read/write for favourites and pages into
FolioSettings.
2025-07-16 15:44:59 -04:00
Devin Lin
5139984e94 halcyon: Restore translation flag
It was accidentally removed with the plasma_add_applet port
2025-07-16 13:05:56 -04:00
Florian RICHER
78312b6c44 folio: ApplicationListModel initialize m_homeScreen 2025-07-16 11:32:32 -04:00
Devin Lin
8a0b3d4f56 homescreens/halcyon: Port to plasma_add_applet 2025-07-15 18:14:55 -04:00
Devin Lin
ecefc446a6 homescreens/folio: Do not initialize shared_ptr with a QObject parent
This MR ensures that delegates created with make_shared do not also get
initialized with a QObject parent. Some of the classes used the same
constructor parameter for HomeScreen and used it as a parent simultaneously. This was refactored
so that they are separated.
2025-07-15 18:10:03 -04:00
Devin Lin
b41a80466a taskpanel: Use 'visible' to check keyboard state, not 'active'
The virtual keyboard can be active but not visible. We want to use the
visibile property when determining whether there is a keyboard visually
showing.
2025-07-11 15:29:57 -04:00
Devin Lin
d0b1df97a6 homescreens/halcyon: Unify search widget with folio
This commit drops halcyon's search widget in favour of using the same
widget as folio to share code. This also brings over its keyboard
navigation features.
2025-07-10 17:04:42 -04:00
Devin Lin
0bcab0ae3a homescreens/folio: Add keyboard navigation to app drawer and fix on
search

This commit is a subset of
https://invent.kde.org/plasma/plasma-mobile/-/merge_requests/694 to add
keyboard navigation to the app drawer.

Pressing the arrow keys while in the app drawer will allow you to
navigate between the apps and the search bar, and going up will exit the
app drawer. Escape/Back is also supported for unfocusing the search bar
and exiting the view.

This also fixes an issue in the keyboard navigation on the search screen
where it wouldn't close when there are no search results.
2025-07-10 17:04:08 -04:00
Florian RICHER
11792ae565 Add NewStuff Button 2025-07-07 22:36:55 -04:00
Florian RICHER
78a7e641e2 Add model.isSupported checking 2025-07-05 10:30:30 -04:00
Florian RICHER
ceeb3b3770 folio: Load SettingsComponent as Async
Avoid to load SettingsComponent in same time as Homescreen because it take ~200ms to load.
2025-07-03 15:41:43 -04:00
Devin Lin
3b6951bf1e panel: Overlay over lockscreen
Overlay the shell's status panel and quicksettings panel over the lockscreen, instead of rendering a second copy in the lockscreen theme. This will allow us to improve the lockscreen loading speed.

Key changes:
- Overlay quicksettings window and the status bar over the lockscreen when it is shown
- Refactor the top panel's showing logic to be cleaner (as it supports various overlay modes over fullscreen apps already)
- Implement lockscreen support to the status bar and quicksettings panel in the to panel
- Forward quicksettings panel requests for "unlock" over DBus to the lockscreen
- Add "raiselockscreen" QML plugin to easily request a window to be raised over the lockscreen

Notes:
- Now that we are sharing the quicksettings panel from the shell, notifications that are already there will be shown on the lockscreen (compared to right now, where only new notifications would be shown)

Depends on: 
- https://invent.kde.org/plasma/plasma-workspace/-/merge_requests/2339
- https://invent.kde.org/plasma/kscreenlocker/-/merge_requests/283
- https://invent.kde.org/plasma/kwin/-/merge_requests/7839

Implements: https://invent.kde.org/plasma/plasma-mobile/-/issues/199

![Screencast_20250612_013325](/uploads/49e9981cb863056b4c0c46a144e5ee7d/Screencast_20250612_013325.webm)
2025-07-02 10:27:33 -04:00
Devin Lin
6af5d97595 folio: Ensure y anim signals don't get emitted if value didn't change
This ensures extraneous signals from being emitted when values don't
change in y animations. This fixes the vkbd in the search widget getting
in a weird stuck state due to multiple focuses on the search widget.
2025-06-28 11:04:11 -04:00
Devin Lin
47a886988f homescreen: Use generic app name when X-KDE-PlasmaMobile-UseGenericName is set in a .desktop file
This commit adds support for using the generic app name when the "X-KDE-PlasmaMobile-UseGenericName" .desktop key is set.

This allows us to have applications that we consider "system apps" to have a generic name, without needing to change the "Name" tag itself when used in other desktop environments (ex. Plasma Desktop).
2025-06-28 00:19:50 -04:00
Micah Stanley
d4eaf693c6 Folio/Halcyon: Expand Background Blur Effect using a MaskLayer
This merge request expands upon the folio and halcyon background blur effects, making the folio background blur include the backgrounds of folder icons, the favorites bar, and wallpaper selector, and for halcyon, it now includes the folder icons, app library, search, and wallpaper selector. To accomplish this, a mask layer plugin was created to easily attach to these elements. This way, we can use a `OpacityMask` to cut out from the existing blur layer, thus hopefully keeping the performance cost low. And with my limited testing, it does at least seems to run about the same on my oneplus 6t, though it is not really a low end device, so I can not fairly judge the impact for something slower (eg. PinePhone). To be on the safe side, a third option was also added to the folio settings, allowing for the ability to toggle back to the old functionality if needed.

![Screenshot_20250613_135521](/uploads/d5aa81d6589b61fbba675e4a6e621b55/Screenshot_20250613_135521.png)
![Screenshot_20250613_135536](/uploads/bd726459a131f736e2711ced3fe90d4f/Screenshot_20250613_135536.png)
![Screenshot_20250613_135505](/uploads/c603627b4e65d4b956a1e0b6463d28f3/Screenshot_20250613_135505.png)
![Screenshot_20250627_093729](/uploads/e5f1ad672361c2b9bae23e57905336eb/Screenshot_20250627_093729.png)
2025-06-27 14:27:30 -04:00
Devin Lin
d4f1c78d61 doubletaptolock: Simplify, and use "lock" instead of "sleep"
This MR does several things as a followup to
https://invent.kde.org/plasma/plasma-mobile/-/merge_requests/748:
- Use the word "lock" instead of "sleep" since we are locking the
  device, not putting it to sleep
- Simplify usage by using existing MouseAreas instead of including our
  own for this feature (I encountered several focus captures in folio that prevented the
SwipeArea from getting events)
2025-06-27 00:14:26 -04:00
Devin Lin
5e3fa11be7 panel & taskpanel: Port to use plasma_add_applet
Use plasma_add_applet to deploy the applets as a module: https://invent.kde.org/plasma/libplasma/-/merge_requests/1116

We eventually need to do this for Halcyon and Folio homescreens too, but
they also have a bunch of C++ classes to be ported to declarative type
registration.
2025-06-26 20:46:48 -04:00
Devin Lin
1d3ceb5801 homescreens/halcyon: Add settings page
Add a settings page to halcyon, which allows for toggling whether the
wallpaper is blurred and double tapping on the homescreen to lock the
device. This also does a bit of refactoring for folio and halcyon to
share the same wallpaper blurring item.
2025-06-26 18:57:12 -04:00
Devin Lin
ca9696b84d notifications: Fix do-not-disturb
The implementation of do-not-disturb broke after the port to our own
notification popups. Since the notification widget is quite deep in the
ActionDrawer, just implement the DBus listening directly in
NotificationsWidget. Also add the missing pulseAudio object in
NotificationPopupProvider to implement notification inhibition.
2025-06-25 20:08:38 -04:00
Devin Lin
46578fde73 singletons: Initialize singletons in shell desktop, not panel
We have some singletons (ex. for notification popups, volume, dbus) that
need to be initialized somewhere in plasmashell. Currently they are done
from the panel containment, which is a bit of a strange location. There isn't really
any offical way it seems to do this, so move it to the shell package
which feels more central.
2025-06-25 19:33:00 -04:00
Florian RICHER
2b51e0c30c homescreens/folio: Add options to turn off and lock the phone after a double tap on screen
Linked to issue: https://invent.kde.org/teams/plasma-mobile/issues/-/issues/318
2025-06-25 16:39:36 -04:00
Florian RICHER (aka MrDev023)
43672a5ec5 homescreens/folio: Block propagation if edit mode is active to avoid widget to trigger event
Fixes https://invent.kde.org/plasma/plasma-mobile/-/issues/387 and https://invent.kde.org/plasma/plasma-mobile/-/issues/353

I can't only block the touch events because it blocks also MouseEvent.
> I think because it's used to convert it by QT into Mouse Event with source == MouseEventSynthesizedByQt or MouseEventSynthesizedBySystem.

So the solution, it's to check if mouse event is a synthetized event and if edit mode has been triggered to block or not the event propagation

Test:

- On VM with kwin_wayland command
- On mobile
2025-06-18 05:53:15 -04:00
Micah Stanley
8e3e05ddea Folio: Add Haptic Feedback
This merge request adds haptic feedback to the folio home screen when:
- Pressing and holding on an app icon
- Pressing and holding on an widget
- Pressing and holding for opening the settings component
2025-05-01 05:04:38 -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
Micah Stanley
5fade2d5eb Folio: Search Widget View State Bugfix
Fixes a bug where if one swipes up from the app drawer and immediately swipes up again to the search widget, then lets the widget fully appear, then after that at any point swipes down to dismiss it, it will cause the swipe action to reveal the app drawer instead of the home screen. This was resolved by making sure when `closeAppDrawerAnim` is active, to only set the view state to `PageView` if the view state equals `AppDrawerView`. This prevents `closeAppDrawerAnim` from overwriting the `SearchWidgetView` state and making it seem to think we are still on the home screen when swiping down.

Here is a video of the bug in question.

![Screencast_20250424_225241__online-video-cutter.com_](/uploads/f5d03324850688028628ef8fc18f6c28/Screencast_20250424_225241__online-video-cutter.com_.mp4)
2025-04-25 12:39:05 +00:00
Micah Stanley
06e5a89ca7 Folio: Make SettingsComponent Buttons Match FavoritesBar Location
This merge request makes the SettingsComponent buttons match the FavoritesBar location. This helps better utilize the available screen space as before the buttons would exclusively remain at the bottom and could cause them to overlap with the HomeScreenPage or navbar.

Before:

![Screenshot_20250424_093156](/uploads/be3b3ef255333052a8f2b74b8645a906/Screenshot_20250424_093156.png)

After:

![Screenshot_20250423_181926](/uploads/7823b8e2d1ba41c376bc83b80ea56136/Screenshot_20250423_181926.png)
2025-04-25 01:23:48 +00:00
Micah Stanley
a452bc3030 Folio: Settings Component Bugfix
Fixes a bug where if one presses and holds the home screen to bring up the settings component, then swipes up to access the application drawer while the settings component open animation is playing, both the drawer and settings component will be visible on screen at the same time. Fixing this was achieved by setting swipe state back to none whenever the settings component is opening and a onSwipeMove event happens.

Video of the bug.

![Screencast_20250423_151033](/uploads/7f4f04617c42d5898322a8fa5ef306b8/Screencast_20250423_151033.webm)
2025-04-24 13:42:16 +00:00
Micah Stanley
9bd4f0b747 GestureNavigation: Screen Rotation Popup Button
Implementation of a popup button to rotate the screen while using gesture navigation.

The button is set to appear when the device rotates while auto rotation is off. Then the button will be visible for a short period of time before disappearing.
2025-04-21 22:09:14 +00:00
Micah Stanley
842354bd70 Shell: Add Setting to Auto Hide Panels so Applications Can Fill the Entire Device Screen Space
This merge request adds a new setting to auto hide the status and navigation panels so applications will be able to fill out the entire device screen area. Also, this adds a new quick settings toggle to quickly change this property.
2025-04-21 15:56:33 +00:00
Micah Stanley
036cc8502b Folio: Add ability to lock layout
Adds a new setting to lock the layout of the home screen so one will not accidentally modify it.

Closes https://invent.kde.org/plasma/plasma-mobile/-/issues/459
2025-04-21 14:01:54 +00:00
l10n daemon script
9d284e4aa1 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-15 01:29:59 +00:00
Micah Stanley
9707f503a2 GestureNavigation: Fix Action Drawer State being out of Sync on First Start 2025-04-13 12:55:25 +00:00
Devin Lin
049eaf7df1 taskpanel: Fix rotate button showing with autorotate
AutoRotatePolicy has another option "InTabletMode" which is still
autorotate since we are always in tablet mode on mobile. Ensure that it
is skipped when determining whether to show the manual rotation button.
2025-04-08 16:12:56 +00:00
Micah Stanley
a3cfa885ee Mobileshell: Reorganize File Structure of Popup Items
Consolidate the popup items into a single folder for better organization.
2025-03-23 03:55:04 +00:00
Devin Lin
d621b23eb0 folio: Delete delegates if the application is removed
When an application is detected to be removed from the system, remove the delegate from the homescreen layout as well.
2025-03-19 23:40:11 -04:00
Micah Stanley
e4323f4ef0 notification list: fix notification scrolling within action drawer and lockscreen
This merge request fixes an issue with notification list scrolling and also adds a few general improvements.

To accomplish this, the notification widget was moved outside of the action drawer swipe area and lock screen swipe area, separating them from the parent-child relationship. Instead, the notification widget is now layered separately on top. This change seems to fix the conflict when both areas are accepting swipes from the same direction.

Additionally, changes were made to the notification list widget for the action drawer to make it behave similarly to the folio home screen app library. Specifically, when at the top of the list, one can swipe down over the notification area to expand the action drawer. In landscape mode, the media widget, clock, and date were also added to the notification list to provide more room for viewing notifications when scrolling.

Closes https://invent.kde.org/plasma/plasma-mobile/-/issues/318
2025-03-20 02:06:33 +00:00
Devin Lin
df6fb87ac8 folio: Add visual placeholder for favourites bar
This adds a visual placeholder when dropping applications on the
favourites bar, making it consistent with dropping applications on a
page.
2025-03-19 21:50:27 +00:00
Devin Lin
3afdafd8c2 folio: Use dynamic list insert/delete for changes
Should help reduce the effect of https://invent.kde.org/plasma/plasma-mobile/-/issues/440

Instead of fully resetting the application list when the ksycoca db
changes, calculate which items are removed and added based on the
storageId and emit targeted signals for them.
2025-03-19 21:45:06 +00:00
Devin Lin
c5f0d15b14 folio: Fix AppDelegate null errors
Sometimes due to model changes the application will be null, which
causes a lot of errors in the console. Add null checks to avoid this.
2025-03-19 18:23:35 +00:00