initial refactor of Interactions.qml to add better support for touch screen gestures #114

Merged
zach merged 10 commits from feat/improved-gestures into main 2026-06-01 19:18:54 +02:00
Showing only changes of commit db6051457f - Show all commits
+36 -7
View File
@@ -12,10 +12,12 @@ Item {
property bool dashboardShortcutActive
required property Drawing drawing
required property DrawingInput input
property bool multiGestureTriggered: false
property bool osdShortcutActive
required property Panels panels
required property BarPopouts.Wrapper popouts
required property ShellScreen screen
property bool singleGestureTriggered: false
property bool utilitiesShortcutActive
required property PersistentProperties visibilities
@@ -62,19 +64,28 @@ Item {
minimumPointCount: 2
target: null
onActiveChanged: {
if (!active)
root.multiGestureTriggered = false;
}
onCentroidChanged: {
if (root.multiGestureTriggered)
return;
const x = centroid.position.x;
const y = centroid.position.y;
const dragX = x - centroid.pressPosition.x;
const dragY = y - centroid.pressPosition.y;
if (centroid.pressPosition.x > root.screen.width - Config.barConfig.border && dragX < -20)
if (centroid.pressPosition.x > root.screen.width - Config.barConfig.border && dragX < -20) {
root.visibilities.sidebar = true;
root.multiGestureTriggered = true;
}
}
}
DragHandler {
id: pressHandler
id: singleHandler
cursorShape: (active && centroid.pressPosition.y < root.bar.implicitHeight) ? Qt.ClosedHandCursor : undefined
dragThreshold: 0
@@ -83,28 +94,46 @@ Item {
minimumPointCount: 1
target: null
onActiveChanged: {
if (!active)
root.singleGestureTriggered = false;
}
onCentroidChanged: {
if (root.singleGestureTriggered) {
console.log(root.singleGestureTriggered);
return;
}
const x = centroid.position.x;
const y = centroid.position.y;
const dragX = x - centroid.pressPosition.x;
AramJonghu marked this conversation as resolved Outdated
Outdated
Review

Could this value also be a variable that takes a percentage of horizontal pixels on the display (or size of display eg a 14 inch display vs 24 inch).

Could this value also be a variable that takes a percentage of horizontal pixels on the display (or size of display eg a 14 inch display vs 24 inch).
Outdated
Review

Was it intentional to make this comment on line 89? Because then I don't really know what you mean, since that is deleted code.

Was it intentional to make this comment on line 89? Because then I don't really know what you mean, since that is deleted code.
Outdated
Review

Ah, yea you are right. Sunlight made it hard to see when I made the comment. Line 93 seems like the added relevant code.

I meant; how many pixels are needed in a swipe motion before it is recognized (if it is 20px)? My original comment speaks on that.

Ah, yea you are right. Sunlight made it hard to see when I made the comment. Line 93 seems like the added relevant code. I meant; how many pixels are needed in a swipe motion before it is recognized (if it is 20px)? My original comment speaks on that.
Outdated
Review

To add to this, I reread the original post. My question stands if this could be dynamic depending on display size for example.

To add to this, I reread the original post. My question stands if this could be dynamic depending on display size for example.
const dragY = y - centroid.pressPosition.y;
if (centroid.pressPosition.y < root.bar.implicitHeight) {
if (dragY > 20)
if (dragY > 20) {
root.visibilities.settings = true;
else if (dragY < -20)
root.singleGestureTriggered = true;
} else if (dragY < -20) {
root.visibilities.settings = false;
root.singleGestureTriggered = true;
}
}
if (!Config.dock.hoverToReveal && centroid.pressPosition.y > root.screen.height - root.bar.implicitHeight)
if (dragY < -10)
if (dragY < -10) {
root.visibilities.dock = true;
root.singleGestureTriggered = true;
}
if (centroid.pressPosition.x >= root.screen.width - Config.barConfig.border && dragX < -20)
if (centroid.pressPosition.x >= root.screen.width - Config.barConfig.border && dragX < -20) {
Hypr.dispatch(`hl.dsp.focus({ workspace = 'r+1', on_current_monitor = true })`);
root.singleGestureTriggered = true;
}
if (centroid.pressPosition.x <= Config.barConfig.border && dragX > 20)
if (centroid.pressPosition.x <= Config.barConfig.border && dragX > 20) {
Hypr.dispatch(`hl.dsp.focus({ workspace = 'r-1', on_current_monitor = true })`);
root.singleGestureTriggered = true;
}
}
}