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.
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.
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.
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.
These changes make the navigation and status bar accessible from within fullscreen applications by allowing the user to tap on the top or tap or drag on the bottom of the screen.
Also, since the top panel is now over top of all fullscreen applications, this moves the action drawer swipe area back into the status bar.

This adds support for touchpad scrolling in various shell components, such as the lockscreen, homescreen and action drawer.
Currently TODO because it appears to be very buggy when there is a control underneath that also accepts touchpad input (ex. flickable). The touchpad scroll start appears to get called by Qt, but not the end event, so I am unable to "let go" of the flick. Not sure if it's a wayland issue.
This also appears to not work in the nested KWin session, not sure if it's because of libinput or something
SwipeArea requires 10px to differentiate between taps and swipes. HomeScreenState uses a further 10px to differentiate between vertical and horizontal swipes. This MR combines the swipe detection together so that we only need 10px rather than 20px for gesture detection.