Use applet geometry for panel scroll margins
This commit is contained in:
@@ -52,6 +52,25 @@ private:
|
||||
QCoreApplication::sendEvent(&window, &event);
|
||||
}
|
||||
private Q_SLOTS:
|
||||
void scrollHitTestingDoesNotExpandClickTargets()
|
||||
{
|
||||
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.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}});
|
||||
QSignalSpy scrolling(&controller, &PanelController::actionRequested);
|
||||
QSignalSpy clicking(&controller, &PanelController::clickRequested);
|
||||
wheel(window, 120);
|
||||
QCOMPARE(scrolling.count(), 1);
|
||||
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}));
|
||||
}
|
||||
void wheelOverridesAndNormalBehaviour()
|
||||
{
|
||||
QJSEngine engine;
|
||||
|
||||
@@ -48,9 +48,98 @@ Item {
|
||||
}
|
||||
}
|
||||
}
|
||||
Item {
|
||||
id: edges
|
||||
x: 40
|
||||
y: 10
|
||||
property bool vertical: false
|
||||
property bool reversed: false
|
||||
width: vertical ? 60 : 400
|
||||
height: vertical ? 400 : 60
|
||||
Item { width: 0; height: 60 } // invisible controller's zero-width slot
|
||||
Item { x: -100; y: -100; width: 50; height: 50; visible: false }
|
||||
Item {
|
||||
id: launcher
|
||||
x: edges.vertical ? 8 : edges.reversed ? 350 : 12
|
||||
y: edges.vertical ? (edges.reversed ? 350 : 12) : 8
|
||||
width: edges.vertical ? 44 : 36
|
||||
height: edges.vertical ? 36 : 44
|
||||
property QtObject applet: QtObject {
|
||||
property QtObject plasmoid: QtObject { property string pluginName: "org.kde.plasma.kickoff" }
|
||||
}
|
||||
}
|
||||
Item {
|
||||
x: edges.vertical ? 8 : 90
|
||||
y: edges.vertical ? 90 : 8
|
||||
width: edges.vertical ? 44 : 80
|
||||
height: edges.vertical ? 80 : 44
|
||||
property QtObject applet: QtObject {
|
||||
property QtObject plasmoid: QtObject { property string pluginName: "org.kde.plasma.panelspacer" }
|
||||
}
|
||||
}
|
||||
Item {
|
||||
id: clock
|
||||
x: edges.vertical ? 8 : edges.reversed ? 12 : 350
|
||||
y: edges.vertical ? (edges.reversed ? 12 : 350) : 8
|
||||
width: edges.vertical ? 44 : 36
|
||||
height: edges.vertical ? 36 : 44
|
||||
property QtObject applet: QtObject {
|
||||
property QtObject plasmoid: QtObject { property string pluginName: "org.kde.plasma.digitalclock" }
|
||||
}
|
||||
}
|
||||
}
|
||||
TestCase {
|
||||
name: "PanelAreas"
|
||||
when: windowShown
|
||||
function init() {
|
||||
edges.vertical = false;
|
||||
edges.reversed = false;
|
||||
edges.scale = 1;
|
||||
launcher.visible = true;
|
||||
}
|
||||
function scrollAt(along, across) {
|
||||
const p = edges.mapToItem(null, edges.vertical ? across : along, edges.vertical ? along : across);
|
||||
return Areas.scrollAreaAt(edges, p.x, p.y, edges.vertical);
|
||||
}
|
||||
function test_scrollMargins_data() {
|
||||
return [
|
||||
{tag: "horizontal", vertical: false, scale: 1},
|
||||
{tag: "vertical", vertical: true, scale: 1},
|
||||
{tag: "scaled", vertical: false, scale: 1.5},
|
||||
{tag: "vertical-scaled", vertical: true, scale: 1.5}
|
||||
];
|
||||
}
|
||||
function test_scrollMargins(data) {
|
||||
edges.vertical = data.vertical;
|
||||
edges.scale = data.scale;
|
||||
compare(scrollAt(-20, 58), "launcher"); // leading outer corner
|
||||
compare(scrollAt(30, 2), "launcher"); // thickness padding above/beside icon
|
||||
compare(scrollAt(420, 58), "clock"); // trailing outer corner
|
||||
compare(scrollAt(65, 58), "empty"); // internal gap
|
||||
compare(scrollAt(120, 58), "empty"); // explicit spacer
|
||||
compare(scrollAt(200, 58), "empty");
|
||||
edges.reversed = true; // physical order, not QObject child order
|
||||
compare(scrollAt(-20, 58), "clock");
|
||||
compare(scrollAt(420, 58), "launcher");
|
||||
}
|
||||
function test_clickMarginsStayEmpty() {
|
||||
const p = edges.mapToItem(null, -20, 58);
|
||||
compare(Areas.areaAt(edges, p.x, p.y), "empty");
|
||||
compare(Areas.scrollAreaAt(edges, p.x, p.y, false), "launcher");
|
||||
const inside = launcher.mapToItem(null, 10, 10);
|
||||
compare(Areas.areaAt(edges, inside.x, inside.y), "launcher");
|
||||
}
|
||||
function test_hiddenAndZeroSizeDoNotOwnPadding() {
|
||||
launcher.visible = false;
|
||||
compare(scrollAt(-20, 58), "empty"); // spacer becomes first
|
||||
compare(Areas.scrollAreaAt(null, 0, 0, false), "");
|
||||
}
|
||||
function test_taskThicknessPaddingKeepsUnusedSpaceEmpty() {
|
||||
compare(Areas.scrollAreaAt(panel, 40, 65, false), "tasks");
|
||||
compare(Areas.scrollAreaAt(panel, 150, 65, false), "empty");
|
||||
compare(Areas.areaAt(panel, 40, 65), "empty");
|
||||
compare(Areas.scrollAreaAt(panel, 0, 65, false), "tasks");
|
||||
}
|
||||
function test_taskButtonsVersusUnusedSpace() {
|
||||
compare(Areas.areaAt(panel, 40, 30), "tasks");
|
||||
compare(Areas.areaAt(panel, 150, 30), "empty");
|
||||
|
||||
Reference in New Issue
Block a user