Match Plasma panel edge areas for clicks and scrolling

This commit is contained in:
ajp_anton
2026-09-11 10:55:27 +00:00
parent 8719402d97
commit ccd0161398
8 changed files with 117 additions and 94 deletions
@@ -17,7 +17,7 @@ public:
bool event(QEvent *event) override
{
if (event->type() == QEvent::Wheel || event->type() == QEvent::MouseButtonPress
|| event->type() == QEvent::MouseButtonRelease || event->type() == QEvent::MouseMove) {
|| event->type() == QEvent::MouseButtonRelease || event->type() == QEvent::MouseButtonDblClick || event->type() == QEvent::MouseMove) {
++delivered;
return true;
}
@@ -31,6 +31,7 @@ class PanelControllerTest : public QObject
private:
static void setup(PanelController &controller, PanelWindow &window, QJSEngine &engine)
{
window.resize(400, 40);
controller.setParentItem(window.contentItem());
controller.setProperty("active", true);
controller.setProperty("locateArea", QVariant::fromValue(engine.evaluate(
@@ -52,15 +53,15 @@ private:
QCoreApplication::sendEvent(&window, &event);
}
private Q_SLOTS:
void scrollHitTestingDoesNotExpandClickTargets()
void clicksAndScrollsShareWidgetAreas()
{
QJSEngine engine;
PanelWindow window;
PanelController controller;
setup(controller, window, engine);
controller.setLocateArea(engine.evaluate(u"(function(x,y,scrolling) { return scrolling ? 'launcher' : 'empty'; })"_s));
controller.setLocateArea(engine.evaluate(u"(function(x,y) { return 'launcher'; })"_s));
controller.setProperty("scrollActions", QVariantMap{{u"launcher"_s, u"brightness"_s}, {u"empty"_s, u"volume"_s}});
controller.setProperty("clickActions", QVariantMap{{u"leftClick"_s, u"mute"_s}});
controller.setProperty("clickActions", QVariantMap{{u"leftClick"_s, u"mute"_s}, {u"leftDoubleClick"_s, u"overview"_s}});
QSignalSpy scrolling(&controller, &PanelController::actionRequested);
QSignalSpy clicking(&controller, &PanelController::clickRequested);
wheel(window, 120);
@@ -68,8 +69,11 @@ private Q_SLOTS:
QCOMPARE(scrolling.first(), QVariantList({u"brightness"_s, 1}));
mouse(window, QEvent::MouseButtonPress, 20);
mouse(window, QEvent::MouseButtonRelease, 20);
QCOMPARE(clicking.count(), 1);
QCOMPARE(clicking.first(), QVariantList({u"leftClick"_s}));
mouse(window, QEvent::MouseButtonPress, 20);
mouse(window, QEvent::MouseButtonDblClick, 20);
mouse(window, QEvent::MouseButtonRelease, 20);
QCOMPARE(clicking.count(), 0);
QCOMPARE(window.delivered, 5); // Plasma handles both clicks, including margin forwarding.
}
void wheelOverridesAndNormalBehaviour()
{
@@ -145,11 +149,24 @@ private Q_SLOTS:
mouse(window, QEvent::MouseButtonRelease, 20);
QCOMPARE(actions.count(), 0);
}
void releaseOutsidePanelDoesNotClick()
{
QJSEngine engine;
PanelWindow window;
PanelController controller;
setup(controller, window, engine);
controller.setProperty("clickActions", QVariantMap{{u"leftClick"_s, u"mute"_s}});
QSignalSpy actions(&controller, &PanelController::clickRequested);
mouse(window, QEvent::MouseButtonPress, 1);
mouse(window, QEvent::MouseButtonRelease, -1);
QCOMPARE(actions.count(), 0);
}
void disabledAndOtherWindowsAreUntouched()
{
QJSEngine engine;
PanelWindow window;
PanelWindow popup;
popup.resize(400, 40);
PanelController controller;
setup(controller, window, engine);
QSignalSpy actions(&controller, &PanelController::actionRequested);