From 9a3e528abd4878d4524bba2e042f33956e22e389 Mon Sep 17 00:00:00 2001 From: krasko <154632626+krasko78@users.noreply.github.com> Date: Sat, 22 Feb 2025 18:10:40 +0100 Subject: [PATCH] 26665: Toolbar buttons do not react to long clicks --- .../qml/Muse/UiComponents/FlatButton.qml | 11 +++++++++-- .../Muse/UiComponents/StyledToolBarItem.qml | 17 +++++++---------- .../MuseScore/NotationScene/NoteInputBar.qml | 19 +++++++------------ 3 files changed, 23 insertions(+), 24 deletions(-) diff --git a/src/framework/uicomponents/qml/Muse/UiComponents/FlatButton.qml b/src/framework/uicomponents/qml/Muse/UiComponents/FlatButton.qml index 14816bb3a0183..f4c6fb91f99d0 100644 --- a/src/framework/uicomponents/qml/Muse/UiComponents/FlatButton.qml +++ b/src/framework/uicomponents/qml/Muse/UiComponents/FlatButton.qml @@ -103,8 +103,7 @@ FocusScope { } signal clicked(var mouse) - // There are intentionally no "forwarded" signals here from the MouseArea, like `pressAndHold` - // See https://github.com/musescore/MuseScore/issues/16012#issuecomment-1399656043 + signal pressAndHold(var mouseEvent) objectName: root.text @@ -313,6 +312,14 @@ FocusScope { ui.tooltip.hide(root, true) } + onPressAndHold: function(mouseEvent) { + // Set 'accepted' to false (it is true by default) to not supress the click event. + // If a handler consumes this event, it should set 'accepted' to true. + mouseEvent.accepted = false + + root.pressAndHold(mouseEvent) + } + onContainsMouseChanged: { if (!Boolean(root.toolTipTitle) || root.toolTipShowLocked) { return diff --git a/src/framework/uicomponents/qml/Muse/UiComponents/StyledToolBarItem.qml b/src/framework/uicomponents/qml/Muse/UiComponents/StyledToolBarItem.qml index c418f0f6ee81e..7022c40a2e40b 100644 --- a/src/framework/uicomponents/qml/Muse/UiComponents/StyledToolBarItem.qml +++ b/src/framework/uicomponents/qml/Muse/UiComponents/StyledToolBarItem.qml @@ -103,18 +103,15 @@ FlatButton { } } - Connections { - target: root.mouseArea - - enabled: root.hasMenu && !menuLoader.isMenuOpened + onPressAndHold: function(mouseEvent) { + if (menuLoader.isMenuOpened || !root.hasMenu) { + return + } - function onPressAndHold() { - if (menuLoader.isMenuOpened || !root.hasMenu) { - return - } + // consume event and suppress the click event + mouseEvent.accepted = true - root.toggleMenuOpened() - } + root.toggleMenuOpened() } Canvas { diff --git a/src/notation/qml/MuseScore/NotationScene/NoteInputBar.qml b/src/notation/qml/MuseScore/NotationScene/NoteInputBar.qml index ec3a6d3adbc7d..74e6e91769c3f 100644 --- a/src/notation/qml/MuseScore/NotationScene/NoteInputBar.qml +++ b/src/notation/qml/MuseScore/NotationScene/NoteInputBar.qml @@ -155,20 +155,15 @@ Item { } } - Connections { - target: btn.mouseArea - - // Make sure we only connect to `pressAndHold` if necessary - // See https://github.com/musescore/MuseScore/issues/16012 - enabled: btn.hasMenu && !menuLoader.isMenuOpened + onPressAndHold: function(mouseEvent) { + if (menuLoader.isMenuOpened || !btn.hasMenu) { + return + } - function onPressAndHold() { - if (menuLoader.isMenuOpened || !btn.hasMenu) { - return - } + // consume event and suppress the click event + mouseEvent.accepted = true - btn.toggleMenuOpened() - } + btn.toggleMenuOpened() } StyledMenuLoader {