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.




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)
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.
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.
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.
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.
We so far have been recreating the background elements for all the item throughout the shell. This merge request simplifies this by unifying these elements into a single component, making is easier to keep things at a consistent design while also being able to adjust things when needed in the future.
Per request, I tried to keep thing looking mostly the same as before.
The first picture is what the action drawer looks like now, the one after is with these changes.


Currently, we wait user release the button to trigger action. It makes more sense to trigger directly when the timer is triggered.
I keep buttonHeld variable for animation.
This merge request moves the location where the action drawer panel opacity gets set to the top of the background item stack to resolve an issue with the opacity not changing properly when the brightness is adjusted.
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
Draw our own background in the action drawer instead of using the svg, because it loads faster when visible: true/false is set, and we do a bunch of resizing animations.
The quick settings is not updated because sometimes is set to the same model but here, we disconnect all signals to previous model without check if is the same model, but we don't reconnect the signals if is the same model.
Currently opening the action drawer causes notification popups to
"expire", causing some unintended behaviour (ex. dismiss alarm/timer).
This commit removes this behaviour, and also fixes notification popup
expiry while the action drawer is open.
Fixes https://invent.kde.org/plasma/plasma-mobile/-/issues/468
Try to reduce the amount of preloaded objects that aren't needed until the quick setting is toggled. Also port the the kpipewire interaction parts to C++.
This commit writes options as immutable to the config file ([$i]
suffix), so that user defined options from desktop do not override our
specified mobile settings.
This commit also moves kdeglobals settings to be written to
~/.config/plasma-mobile/kdeglobals rather than directly to
~/.config/kdeglobals, continuing the work from
!723
Fixes https://invent.kde.org/plasma/plasma-mobile/-/issues/467
This merge request reworks the MarqueeLabel to add smooth scrolling, giving it a more clean appearance while also improving scrolling when filled when characters of different lengths.
Before:

After:

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.
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