diff options
author | Miikka Heikkinen <miikka.heikkinen@qt.io> | 2022-03-18 15:14:15 +0200 |
---|---|---|
committer | Miikka Heikkinen <miikka.heikkinen@qt.io> | 2022-03-24 05:59:34 +0000 |
commit | 9a9cd6d62f85f8ead41ac607b87a14bd27ae4f4a (patch) | |
tree | 75ed23c7c1408f3b8135e5b4b6d570a7ef68a6ae | |
parent | e40041978e7b42e17bc5264def255f71090160b4 (diff) |
QmlDesigner: Prevent showing preview tooltip when button is pressed
On some platforms, drag will stop deliving mouse events to MouseArea.
Disallowed showing the tooltip when a mouse button is pressed.
Fixes: QDS-6481
Change-Id: I8777d57be1bfef8470571027d9257d3a10eb5a7a
Reviewed-by: Mahmoud Badri <mahmoud.badri@qt.io>
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
Reviewed-by: Samuel Ghinet <samuel.ghinet@qt.io>
Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
4 files changed, 30 insertions, 6 deletions
diff --git a/share/qtcreator/qmldesigner/itemLibraryQmlSources/Assets.qml b/share/qtcreator/qmldesigner/itemLibraryQmlSources/Assets.qml index 8173457f73..66760b1a24 100644 --- a/share/qtcreator/qmldesigner/itemLibraryQmlSources/Assets.qml +++ b/share/qtcreator/qmldesigner/itemLibraryQmlSources/Assets.qml @@ -665,15 +665,23 @@ Item { MouseArea { id: mouseArea + property bool allowTooltip: true + anchors.fill: parent hoverEnabled: true acceptedButtons: Qt.LeftButton | Qt.RightButton onExited: tooltipBackend.hideTooltip() - onCanceled: tooltipBackend.hideTooltip() + onEntered: allowTooltip = true + onCanceled: { + tooltipBackend.hideTooltip() + allowTooltip = true + } onPositionChanged: tooltipBackend.reposition() onPressed: (mouse)=> { forceActiveFocus() + allowTooltip = false + tooltipBackend.hideTooltip() var ctrlDown = mouse.modifiers & Qt.ControlModifier if (mouse.button === Qt.LeftButton) { if (!root.selectedAssets[filePath] && !ctrlDown) @@ -698,12 +706,12 @@ Item { root.contextDir = model.fileDir root.isDirContextMenu = false - tooltipBackend.hideTooltip() contextMenu.popup() } } onReleased: (mouse)=> { + allowTooltip = true if (mouse.button === Qt.LeftButton) { if (!(mouse.modifiers & Qt.ControlModifier)) root.selectedAssets = {} @@ -720,7 +728,7 @@ Item { Timer { interval: 1000 - running: mouseArea.containsMouse + running: mouseArea.containsMouse && mouseArea.allowTooltip onTriggered: { if (suffix === ".ttf" || suffix === ".otf") { tooltipBackend.name = fileName diff --git a/share/qtcreator/qmldesigner/itemLibraryQmlSources/ItemDelegate.qml b/share/qtcreator/qmldesigner/itemLibraryQmlSources/ItemDelegate.qml index 03e536676d..130ec2aff6 100644 --- a/share/qtcreator/qmldesigner/itemLibraryQmlSources/ItemDelegate.qml +++ b/share/qtcreator/qmldesigner/itemLibraryQmlSources/ItemDelegate.qml @@ -88,6 +88,8 @@ Item { onShowContextMenu: delegateRoot.showContextMenu() onPressed: (mouse)=> { + allowTooltip = false + hide() if (mouse.button === Qt.LeftButton) rootView.startDragAndDrop(itemLibraryEntry, mapToGlobal(mouse.x, mouse.y)) } diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/ImagePreviewTooltipArea.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/ImagePreviewTooltipArea.qml index e354f5a698..11d6d8445e 100644 --- a/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/ImagePreviewTooltipArea.qml +++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/ImagePreviewTooltipArea.qml @@ -30,6 +30,8 @@ import HelperWidgets 2.0 MouseArea { id: mouseArea + property bool allowTooltip: true + signal showContextMenu() function hide() @@ -38,7 +40,12 @@ MouseArea { } onExited: tooltipBackend.hideTooltip() - onCanceled: tooltipBackend.hideTooltip() + onEntered: allowTooltip = true + onCanceled: { + tooltipBackend.hideTooltip() + allowTooltip = true + } + onReleased: allowTooltip = true onPositionChanged: tooltipBackend.reposition() onClicked: function(mouse) { forceActiveFocus() @@ -51,7 +58,7 @@ MouseArea { Timer { interval: 1000 - running: mouseArea.containsMouse + running: mouseArea.containsMouse && mouseArea.allowTooltip onTriggered: { tooltipBackend.name = itemName tooltipBackend.path = componentPath diff --git a/src/plugins/qmldesigner/components/navigator/navigatortreeview.cpp b/src/plugins/qmldesigner/components/navigator/navigatortreeview.cpp index d679e6017d..f243341938 100644 --- a/src/plugins/qmldesigner/components/navigator/navigatortreeview.cpp +++ b/src/plugins/qmldesigner/components/navigator/navigatortreeview.cpp @@ -293,8 +293,15 @@ void NavigatorTreeView::mousePressEvent(QMouseEvent *event) void NavigatorTreeView::startDrag(Qt::DropActions supportedActions) { - if (m_dragAllowed) + if (m_dragAllowed) { + if (m_previewToolTip) { + // Workaround to ensure tooltip doesn't linger during drag, as drag grabs all mouse + // events on some platforms (e.g. mac) + m_previewToolTip->hide(); + m_previewToolTipNodeId = -1; + } QTreeView::startDrag(supportedActions); + } } } |