From 33fbccdac726b1586f742050f6b8755dc1f4a7f4 Mon Sep 17 00:00:00 2001 From: Casper Jeukendrup <48658420+cbjeukendrup@users.noreply.github.com> Date: Mon, 23 Jan 2023 01:33:04 +0100 Subject: [PATCH] Fix clicking FlatButton if you (accidentally) move the mouse between press and release See https://github.com/musescore/MuseScore/issues/16012#issuecomment-1399656043 --- .../qml/MuseScore/UiComponents/FlatButton.qml | 7 ++----- .../MuseScore/NotationScene/NoteInputBar.qml | 18 +++++++++++++----- 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/src/framework/uicomponents/qml/MuseScore/UiComponents/FlatButton.qml b/src/framework/uicomponents/qml/MuseScore/UiComponents/FlatButton.qml index 2882bed5d9..a24cc68f88 100644 --- a/src/framework/uicomponents/qml/MuseScore/UiComponents/FlatButton.qml +++ b/src/framework/uicomponents/qml/MuseScore/UiComponents/FlatButton.qml @@ -93,7 +93,8 @@ FocusScope { } signal clicked(var mouse) - signal pressAndHold(var mouse) + // There are intentionally no "forwarded" signals here from the MouseArea, like `pressAndHold` + // See https://github.com/musescore/MuseScore/issues/16012#issuecomment-1399656043 objectName: root.text @@ -290,10 +291,6 @@ FocusScope { ui.tooltip.hide(root, true) } - onPressAndHold: function(mouse) { - root.pressAndHold(mouse) - } - onContainsMouseChanged: { if (!Boolean(root.toolTipTitle)) { return diff --git a/src/notation/qml/MuseScore/NotationScene/NoteInputBar.qml b/src/notation/qml/MuseScore/NotationScene/NoteInputBar.qml index 52f5b91115..e8c60d2efa 100644 --- a/src/notation/qml/MuseScore/NotationScene/NoteInputBar.qml +++ b/src/notation/qml/MuseScore/NotationScene/NoteInputBar.qml @@ -168,12 +168,20 @@ Item { } } - onPressAndHold: { - if (menuLoader.isMenuOpened || !hasMenu) { - return - } + Connections { + target: btn.mouseArea - toggleMenuOpened() + // Make sure we only connect to `pressAndHold` if necessary + // See https://github.com/musescore/MuseScore/issues/16012 + enabled: btn.hasMenu && !menuLoader.isMenuOpened + + function onPressAndHold() { + if (menuLoader.isMenuOpened || !btn.hasMenu) { + return + } + + btn.toggleMenuOpened() + } } Canvas {