forked from Shinonome/dots-hyprland
bar: fix messed mouse interaction hog/passthrough
This commit is contained in:
@@ -51,11 +51,58 @@ Scope {
|
|||||||
color: showBarBackground ? Appearance.colors.colLayer0 : "transparent"
|
color: showBarBackground ? Appearance.colors.colLayer0 : "transparent"
|
||||||
height: barHeight
|
height: barHeight
|
||||||
|
|
||||||
RowLayout { // Left section
|
MouseArea { // Left side | scroll to change brightness
|
||||||
id: leftSection
|
id: barLeftSideMouseArea
|
||||||
anchors.left: parent.left
|
anchors.left: parent.left
|
||||||
implicitHeight: barHeight
|
implicitHeight: barHeight
|
||||||
width: (barRoot.width - middleSection.width) / 2
|
width: (barRoot.width - middleSection.width) / 2
|
||||||
|
property bool hovered: false
|
||||||
|
property real lastScrollX: 0
|
||||||
|
property real lastScrollY: 0
|
||||||
|
property bool trackingScroll: false
|
||||||
|
anchors.fill: leftSection
|
||||||
|
acceptedButtons: Qt.LeftButton
|
||||||
|
hoverEnabled: true
|
||||||
|
propagateComposedEvents: true
|
||||||
|
onEntered: (event) => {
|
||||||
|
barLeftSideMouseArea.hovered = true
|
||||||
|
}
|
||||||
|
onExited: (event) => {
|
||||||
|
barLeftSideMouseArea.hovered = false
|
||||||
|
barLeftSideMouseArea.trackingScroll = false
|
||||||
|
}
|
||||||
|
onPressed: (event) => {
|
||||||
|
if (event.button === Qt.LeftButton) {
|
||||||
|
Hyprland.dispatch('global quickshell:sidebarLeftOpen')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Scroll to change brightness
|
||||||
|
WheelHandler {
|
||||||
|
onWheel: (event) => {
|
||||||
|
if (event.angleDelta.y < 0)
|
||||||
|
Brightness.increment = -1;
|
||||||
|
else if (event.angleDelta.y > 0)
|
||||||
|
Brightness.increment = 1;
|
||||||
|
// Store the mouse position and start tracking
|
||||||
|
barLeftSideMouseArea.lastScrollX = event.x;
|
||||||
|
barLeftSideMouseArea.lastScrollY = event.y;
|
||||||
|
barLeftSideMouseArea.trackingScroll = true;
|
||||||
|
}
|
||||||
|
acceptedDevices: PointerDevice.Mouse | PointerDevice.TouchPad
|
||||||
|
}
|
||||||
|
onPositionChanged: (mouse) => {
|
||||||
|
if (barLeftSideMouseArea.trackingScroll) {
|
||||||
|
const dx = mouse.x - barLeftSideMouseArea.lastScrollX;
|
||||||
|
const dy = mouse.y - barLeftSideMouseArea.lastScrollY;
|
||||||
|
if (Math.sqrt(dx*dx + dy*dy) > osdHideMouseMoveThreshold) {
|
||||||
|
Hyprland.dispatch('global quickshell:osdBrightnessHide')
|
||||||
|
barLeftSideMouseArea.trackingScroll = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
RowLayout { // Left section
|
||||||
|
id: leftSection
|
||||||
|
anchors.fill: parent
|
||||||
spacing: 10
|
spacing: 10
|
||||||
|
|
||||||
Rectangle {
|
Rectangle {
|
||||||
@@ -91,6 +138,7 @@ Scope {
|
|||||||
bar: barRoot
|
bar: barRoot
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
RowLayout { // Middle section
|
RowLayout { // Middle section
|
||||||
id: middleSection
|
id: middleSection
|
||||||
@@ -115,10 +163,19 @@ Scope {
|
|||||||
RowLayout {
|
RowLayout {
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
Layout.fillHeight: true
|
Layout.fillHeight: true
|
||||||
spacing: 4
|
|
||||||
|
|
||||||
Workspaces {
|
Workspaces {
|
||||||
bar: barRoot
|
bar: barRoot
|
||||||
|
MouseArea { // Right-click to toggle overview
|
||||||
|
anchors.fill: parent
|
||||||
|
acceptedButtons: Qt.RightButton
|
||||||
|
|
||||||
|
onPressed: (event) => {
|
||||||
|
if (event.button === Qt.RightButton) {
|
||||||
|
Hyprland.dispatch('global quickshell:overviewToggle')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -145,12 +202,66 @@ Scope {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Right section
|
MouseArea { // Right side | scroll to change volume
|
||||||
RowLayout {
|
id: barRightSideMouseArea
|
||||||
id: rightSection
|
|
||||||
anchors.right: parent.right
|
anchors.right: parent.right
|
||||||
implicitHeight: barHeight
|
implicitHeight: barHeight
|
||||||
width: (barRoot.width - middleSection.width) / 2
|
width: (barRoot.width - middleSection.width) / 2
|
||||||
|
|
||||||
|
property bool hovered: false
|
||||||
|
property real lastScrollX: 0
|
||||||
|
property real lastScrollY: 0
|
||||||
|
property bool trackingScroll: false
|
||||||
|
|
||||||
|
acceptedButtons: Qt.LeftButton
|
||||||
|
hoverEnabled: true
|
||||||
|
propagateComposedEvents: true
|
||||||
|
onEntered: (event) => {
|
||||||
|
barRightSideMouseArea.hovered = true
|
||||||
|
}
|
||||||
|
onExited: (event) => {
|
||||||
|
barRightSideMouseArea.hovered = false
|
||||||
|
barRightSideMouseArea.trackingScroll = false
|
||||||
|
}
|
||||||
|
onPressed: (event) => {
|
||||||
|
if (event.button === Qt.LeftButton) {
|
||||||
|
Hyprland.dispatch('global quickshell:sidebarRightOpen')
|
||||||
|
}
|
||||||
|
else if (event.button === Qt.RightButton) {
|
||||||
|
MprisController.activePlayer.next()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Scroll to change volume
|
||||||
|
WheelHandler {
|
||||||
|
onWheel: (event) => {
|
||||||
|
const currentVolume = Audio.value;
|
||||||
|
const step = currentVolume < 0.1 ? 0.01 : 0.02 || 0.2;
|
||||||
|
if (event.angleDelta.y < 0)
|
||||||
|
Audio.sink.audio.volume -= step;
|
||||||
|
else if (event.angleDelta.y > 0)
|
||||||
|
Audio.sink.audio.volume = Math.min(1, Audio.sink.audio.volume + step);
|
||||||
|
// Store the mouse position and start tracking
|
||||||
|
barRightSideMouseArea.lastScrollX = event.x;
|
||||||
|
barRightSideMouseArea.lastScrollY = event.y;
|
||||||
|
barRightSideMouseArea.trackingScroll = true;
|
||||||
|
}
|
||||||
|
acceptedDevices: PointerDevice.Mouse | PointerDevice.TouchPad
|
||||||
|
}
|
||||||
|
onPositionChanged: (mouse) => {
|
||||||
|
if (barRightSideMouseArea.trackingScroll) {
|
||||||
|
const dx = mouse.x - barRightSideMouseArea.lastScrollX;
|
||||||
|
const dy = mouse.y - barRightSideMouseArea.lastScrollY;
|
||||||
|
if (Math.sqrt(dx*dx + dy*dy) > osdHideMouseMoveThreshold) {
|
||||||
|
Hyprland.dispatch('global quickshell:osdVolumeHide')
|
||||||
|
barRightSideMouseArea.trackingScroll = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
RowLayout {
|
||||||
|
id: rightSection
|
||||||
|
anchors.fill: parent
|
||||||
spacing: 5
|
spacing: 5
|
||||||
layoutDirection: Qt.RightToLeft
|
layoutDirection: Qt.RightToLeft
|
||||||
|
|
||||||
@@ -232,120 +343,6 @@ Scope {
|
|||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Interactions
|
|
||||||
MouseArea { // Left side: scroll to change brightness
|
|
||||||
id: barLeftSideMouseArea
|
|
||||||
property bool hovered: false
|
|
||||||
property real lastScrollX: 0
|
|
||||||
property real lastScrollY: 0
|
|
||||||
property bool trackingScroll: false
|
|
||||||
anchors.fill: leftSection
|
|
||||||
acceptedButtons: Qt.LeftButton
|
|
||||||
hoverEnabled: true
|
|
||||||
propagateComposedEvents: true
|
|
||||||
onEntered: (event) => {
|
|
||||||
barLeftSideMouseArea.hovered = true
|
|
||||||
}
|
|
||||||
onExited: (event) => {
|
|
||||||
barLeftSideMouseArea.hovered = false
|
|
||||||
barLeftSideMouseArea.trackingScroll = false
|
|
||||||
}
|
|
||||||
onPressed: (event) => {
|
|
||||||
if (event.button === Qt.LeftButton) {
|
|
||||||
Hyprland.dispatch('global quickshell:sidebarLeftOpen')
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// Scroll to change brightness
|
|
||||||
WheelHandler {
|
|
||||||
onWheel: (event) => {
|
|
||||||
if (event.angleDelta.y < 0)
|
|
||||||
Brightness.increment = -1;
|
|
||||||
else if (event.angleDelta.y > 0)
|
|
||||||
Brightness.increment = 1;
|
|
||||||
// Store the mouse position and start tracking
|
|
||||||
barLeftSideMouseArea.lastScrollX = event.x;
|
|
||||||
barLeftSideMouseArea.lastScrollY = event.y;
|
|
||||||
barLeftSideMouseArea.trackingScroll = true;
|
|
||||||
}
|
|
||||||
acceptedDevices: PointerDevice.Mouse | PointerDevice.TouchPad
|
|
||||||
}
|
|
||||||
onPositionChanged: (mouse) => {
|
|
||||||
if (barLeftSideMouseArea.trackingScroll) {
|
|
||||||
const dx = mouse.x - barLeftSideMouseArea.lastScrollX;
|
|
||||||
const dy = mouse.y - barLeftSideMouseArea.lastScrollY;
|
|
||||||
if (Math.sqrt(dx*dx + dy*dy) > osdHideMouseMoveThreshold) {
|
|
||||||
Hyprland.dispatch('global quickshell:osdBrightnessHide')
|
|
||||||
barLeftSideMouseArea.trackingScroll = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
MouseArea { // Middle: right-click to toggle overview
|
|
||||||
id: barMiddleMouseArea
|
|
||||||
anchors.fill: middleSection
|
|
||||||
acceptedButtons: Qt.RightButton
|
|
||||||
|
|
||||||
onPressed: (event) => {
|
|
||||||
if (event.button === Qt.RightButton) {
|
|
||||||
Hyprland.dispatch('global quickshell:overviewToggle')
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
MouseArea { // Right side: scroll to change volume
|
|
||||||
id: barRightSideMouseArea
|
|
||||||
property bool hovered: false
|
|
||||||
property real lastScrollX: 0
|
|
||||||
property real lastScrollY: 0
|
|
||||||
property bool trackingScroll: false
|
|
||||||
anchors.fill: rightSection
|
|
||||||
acceptedButtons: Qt.LeftButton
|
|
||||||
hoverEnabled: true
|
|
||||||
propagateComposedEvents: true
|
|
||||||
onEntered: (event) => {
|
|
||||||
barRightSideMouseArea.hovered = true
|
|
||||||
}
|
|
||||||
onExited: (event) => {
|
|
||||||
barRightSideMouseArea.hovered = false
|
|
||||||
barRightSideMouseArea.trackingScroll = false
|
|
||||||
}
|
|
||||||
onPressed: (event) => {
|
|
||||||
if (event.button === Qt.LeftButton) {
|
|
||||||
Hyprland.dispatch('global quickshell:sidebarRightOpen')
|
|
||||||
}
|
|
||||||
else if (event.button === Qt.RightButton) {
|
|
||||||
MprisController.activePlayer.next()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// Scroll to change volume
|
|
||||||
WheelHandler {
|
|
||||||
onWheel: (event) => {
|
|
||||||
const currentVolume = Audio.value;
|
|
||||||
const step = currentVolume < 0.1 ? 0.01 : 0.02 || 0.2;
|
|
||||||
if (event.angleDelta.y < 0)
|
|
||||||
Audio.sink.audio.volume -= step;
|
|
||||||
else if (event.angleDelta.y > 0)
|
|
||||||
Audio.sink.audio.volume = Math.min(1, Audio.sink.audio.volume + step);
|
|
||||||
// Store the mouse position and start tracking
|
|
||||||
barRightSideMouseArea.lastScrollX = event.x;
|
|
||||||
barRightSideMouseArea.lastScrollY = event.y;
|
|
||||||
barRightSideMouseArea.trackingScroll = true;
|
|
||||||
}
|
|
||||||
acceptedDevices: PointerDevice.Mouse | PointerDevice.TouchPad
|
|
||||||
}
|
|
||||||
onPositionChanged: (mouse) => {
|
|
||||||
if (barRightSideMouseArea.trackingScroll) {
|
|
||||||
const dx = mouse.x - barRightSideMouseArea.lastScrollX;
|
|
||||||
const dy = mouse.y - barRightSideMouseArea.lastScrollY;
|
|
||||||
if (Math.sqrt(dx*dx + dy*dy) > osdHideMouseMoveThreshold) {
|
|
||||||
Hyprland.dispatch('global quickshell:osdVolumeHide')
|
|
||||||
barRightSideMouseArea.trackingScroll = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -24,9 +24,9 @@ MouseArea {
|
|||||||
break;
|
break;
|
||||||
case Qt.RightButton:
|
case Qt.RightButton:
|
||||||
if (item.hasMenu) menu.open();
|
if (item.hasMenu) menu.open();
|
||||||
event.accepted = true;
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
event.accepted = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
QsMenuAnchor {
|
QsMenuAnchor {
|
||||||
|
|||||||
Reference in New Issue
Block a user