diff --git a/modules/background/Border.qml b/modules/background/Border.qml index e944299c..143097ac 100644 --- a/modules/background/Border.qml +++ b/modules/background/Border.qml @@ -68,6 +68,12 @@ Scope { LayerShadow { source: effect } + + MouseArea { + anchors.fill: parent + hoverEnabled: true + onPositionChanged: event => Drawers.setPosForScreen(root.screen, event.x, event.y) + } } ExclusionZone { diff --git a/modules/osd/Osd.qml b/modules/osd/Osd.qml index 009eb2ff..f16b3969 100644 --- a/modules/osd/Osd.qml +++ b/modules/osd/Osd.qml @@ -12,6 +12,7 @@ Variants { required property ShellScreen modelData readonly property Brightness.Monitor monitor: Brightness.getMonitorForScreen(modelData) + property int winHeight property bool osdVisible property bool hovered @@ -50,6 +51,15 @@ Variants { } } + Connections { + target: Drawers + + function onPosChanged(screen: ShellScreen, x: int, y: int): void { + if (screen === root.modelData && x > screen.width / 2 && y > (screen.height - root.winHeight) / 2 && y < (screen.height + root.winHeight) / 2) + root.show(); + } + } + LazyLoader { loading: true @@ -68,6 +78,8 @@ Variants { anchors.right: true height: wrapper.height + Component.onCompleted: root.winHeight = height + Background { id: bg diff --git a/services/Drawers.qml b/services/Drawers.qml new file mode 100644 index 00000000..1f524abe --- /dev/null +++ b/services/Drawers.qml @@ -0,0 +1,20 @@ +pragma Singleton + +import Quickshell + +Singleton { + id: root + + property var positions: ({}) + + signal posChanged(screen: ShellScreen, x: int, y: int) + + function getPosForScreen(screen: ShellScreen): point { + return positions[screen] || Qt.point(0, 0); + } + + function setPosForScreen(screen: ShellScreen, x: int, y: int): void { + positions[screen] = Qt.point(x, y); + posChanged(screen, x, y); + } +}