initial refactor of Interactions.qml to add better support for touch screen gestures
Lint & Format (JS/TS) / lint-format (pull_request) Successful in 11s
Python / lint-format (pull_request) Successful in 19s
Python / test (pull_request) Successful in 51s
Lint & Format (Rust) / lint-format (pull_request) Successful in 1m5s

This commit is contained in:
2026-05-31 13:58:21 +02:00
parent d041ce2471
commit e06fd71f11
2 changed files with 107 additions and 60 deletions
+106 -60
View File
@@ -1,15 +1,16 @@
import Quickshell import Quickshell
import QtQuick import QtQuick
import QtTest
import qs.Components import qs.Components
import qs.Config import qs.Config
import qs.Helpers
import qs.Modules as BarPopouts import qs.Modules as BarPopouts
CustomMouseArea { Item {
id: root id: root
required property Item bar required property Item bar
property bool dashboardShortcutActive property bool dashboardShortcutActive
property point dragStart
required property Drawing drawing required property Drawing drawing
required property DrawingInput input required property DrawingInput input
property bool osdShortcutActive property bool osdShortcutActive
@@ -52,78 +53,124 @@ CustomMouseArea {
} }
anchors.fill: parent anchors.fill: parent
cursorShape: (pressed && dragStart.y < bar.implicitHeight) ? Qt.ClosedHandCursor : undefined
hoverEnabled: true
propagateComposedEvents: false
onContainsMouseChanged: { Timer {
if (!containsMouse) { interval: 5000
if (!osdShortcutActive) { running: true
visibilities.osd = false;
root.panels.osd.hovered = false;
}
if (!popouts.currentName.startsWith("traymenu")) { onTriggered: root.runTest = true
popouts.hasCurrent = false; }
}
if (Config.barConfig.autoHide) DragHandler {
bar.isHovered = false; id: multiHandler
grabPermissions: PointerHandler.CanTakeOverFromAnything
maximumPointCount: 2
minimumPointCount: 2
target: null
onCentroidChanged: {
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)
root.visibilities.sidebar = true;
} }
} }
onPositionChanged: event => {
const x = event.x;
const y = event.y;
const dragX = x - dragStart.x;
const dragY = y - dragStart.y;
if (root.visibilities.isDrawing && !root.inLeftPanel(root.panels.drawing, x, y)) { DragHandler {
root.input.z = 2; id: pressHandler
root.panels.drawing.expanded = false;
}
if (!visibilities.bar && Config.barConfig.autoHide && y < bar.implicitHeight) cursorShape: (active && centroid.pressPosition.y < root.bar.implicitHeight) ? Qt.ClosedHandCursor : undefined
bar.isHovered = true; dragThreshold: 0
maximumPointCount: 1
minimumPointCount: 1
target: null
if (pressed && dragStart.y < bar.implicitHeight) { onCentroidChanged: {
if (dragY > 20) const x = centroid.position.x;
visibilities.settings = true; const y = centroid.position.y;
else if (dragY < -20) const dragX = x - centroid.pressPosition.x;
visibilities.settings = false; const dragY = y - centroid.pressPosition.y;
}
if (Config.dock.hoverToReveal && pressed && dragStart.y > root.screen.height - root.bar.implicitHeight) if (centroid.pressPosition.y < root.bar.implicitHeight) {
if (dragY < -10) if (dragY > 20)
visibilities.dock = true; root.visibilities.settings = true;
else if (dragY < -20)
if (panels.sidebar.width === 0) { root.visibilities.settings = false;
const showOsd = inRightPanel(panels.osdWrapper, x, y);
if (showOsd) {
osdShortcutActive = false;
root.panels.osd.hovered = true;
} }
} else {
const outOfSidebar = x < width - panels.sidebar.width;
const showOsd = outOfSidebar && inRightPanel(panels.osdWrapper, x, y);
if (!osdShortcutActive) { if (!Config.dock.hoverToReveal && centroid.pressPosition.y > root.screen.height - root.bar.implicitHeight)
visibilities.osd = showOsd; if (dragY < -10)
root.panels.osd.hovered = showOsd; root.visibilities.dock = true;
} else if (showOsd) {
osdShortcutActive = false;
root.panels.osd.hovered = true;
}
}
if (Config.dock.enable && !Config.dock.hoverToReveal && !visibilities.dock && !visibilities.launcher && inBottomPanel(panels.dock, x, y)) if (centroid.pressPosition.x >= root.screen.width - Config.barConfig.border && dragX < -20)
visibilities.dock = true; Hypr.dispatch(`hl.dsp.focus({ workspace = 'r+1', on_current_monitor = true })`);
if (y < root.bar.implicitHeight) { if (centroid.pressPosition.x <= Config.barConfig.border && dragX > 20)
root.bar.checkPopout(x); Hypr.dispatch(`hl.dsp.focus({ workspace = 'r-1', on_current_monitor = true })`);
}
}
HoverHandler {
id: hoverHandler
onHoveredChanged: {
if (!hovered) {
if (!root.osdShortcutActive) {
root.visibilities.osd = false;
root.panels.osd.hovered = false;
}
if (!root.popouts.currentName.startsWith("traymenu")) {
root.popouts.hasCurrent = false;
}
if (Config.barConfig.autoHide)
root.bar.isHovered = false;
}
}
onPointChanged: {
const x = point.position.x;
const y = point.position.y;
if (root.visibilities.isDrawing && !root.inLeftPanel(root.panels.drawing, x, y)) {
root.input.z = 2;
root.panels.drawing.expanded = false;
}
if (!root.visibilities.bar && Config.barConfig.autoHide && y < root.bar.implicitHeight)
root.bar.isHovered = true;
if (root.panels.sidebar.width === 0) {
const showOsd = root.inRightPanel(root.panels.osdWrapper, x, y);
if (showOsd) {
root.osdShortcutActive = false;
root.panels.osd.hovered = true;
}
} else {
const outOfSidebar = x < root.width - root.panels.sidebar.width;
const showOsd = outOfSidebar && root.inRightPanel(root.panels.osdWrapper, x, y);
if (!root.osdShortcutActive) {
root.visibilities.osd = showOsd;
root.panels.osd.hovered = showOsd;
} else if (showOsd) {
root.osdShortcutActive = false;
root.panels.osd.hovered = true;
}
}
if (Config.dock.enable && Config.dock.hoverToReveal && !root.visibilities.dock && !root.visibilities.launcher && root.inBottomPanel(root.panels.dock, x, y))
root.visibilities.dock = true;
if (y < root.bar.implicitHeight)
root.bar.checkPopout(x);
} }
} }
onPressed: event => dragStart = Qt.point(event.x, event.y)
Connections { Connections {
function onDashboardChanged() { function onDashboardChanged() {
@@ -164,7 +211,6 @@ CustomMouseArea {
if (root.visibilities.launcher) { if (root.visibilities.launcher) {
if (root.panels.dashboardWrapper.x < root.panels.launcher.x + root.panels.launcher.width) { if (root.panels.dashboardWrapper.x < root.panels.launcher.x + root.panels.launcher.width) {
console.log("true");
root.visibilities.dashboard = false; root.visibilities.dashboard = false;
} }
+1
View File
@@ -341,6 +341,7 @@ Variants {
anchors.fill: parent anchors.fill: parent
bar: bar bar: bar
drawing: drawingLoader.item drawing: drawingLoader.item
enabled: true
input: inputLoader.item input: inputLoader.item
panels: panels panels: panels
popouts: panels.popouts popouts: panels.popouts