From ce96202857d604a1e381e3323f3846c2209eb8d9 Mon Sep 17 00:00:00 2001 From: Tim Jenssen Date: Mon, 30 Jun 2014 14:53:34 +0200 Subject: [PATCH] QmlDesigner: hotfix for Qt 5.3.2 to ungrab the mouse At the moment the QML world does not get the release event if a drag started in QML and ends up on QWidget world. Hotfix: 3.2 Task-number: QTCREATORBUG-12510 Change-Id: I4f4c023e177221af61ba9e754f27a5087013fb08 Reviewed-by: Marco Bubke --- .../components/itemlibrary/itemlibrarywidget.cpp | 13 +++++++++++++ src/plugins/qmldesigner/qmldesignerplugin.pro | 1 + 2 files changed, 14 insertions(+) diff --git a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarywidget.cpp b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarywidget.cpp index 59dba2bdb78..c95fd7a30bc 100644 --- a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarywidget.cpp +++ b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarywidget.cpp @@ -55,6 +55,10 @@ #include #include +#include // mouse ungrabbing workaround on quickitems +#include // mouse ungrabbing workaround on quickitems + + namespace QmlDesigner { ItemLibraryWidget::ItemLibraryWidget(QWidget *parent) : @@ -369,6 +373,13 @@ void ItemLibraryWidget::setResourcePath(const QString &resourcePath) updateSearch(); } +static void ungrabMouseOnQMLWorldWorkAround(QQuickWidget *quickWidget) +{ + const QQuickWidgetPrivate *widgetPrivate = QQuickWidgetPrivate::get(quickWidget); + if (widgetPrivate && widgetPrivate->offscreenWindow && widgetPrivate->offscreenWindow->mouseGrabberItem()) + widgetPrivate->offscreenWindow->mouseGrabberItem()->ungrabMouse(); +} + void ItemLibraryWidget::startDragAndDrop(QVariant itemLibraryId) { m_currentitemLibraryEntry = itemLibraryId.value(); @@ -380,6 +391,8 @@ void ItemLibraryWidget::startDragAndDrop(QVariant itemLibraryId) drag->setMimeData(mimeData); drag->exec(); + + ungrabMouseOnQMLWorldWorkAround(m_itemViewQuickWidget.data()); } void ItemLibraryWidget::removeImport(const QString &name) diff --git a/src/plugins/qmldesigner/qmldesignerplugin.pro b/src/plugins/qmldesigner/qmldesignerplugin.pro index 154a04167d1..0e002e3cadf 100644 --- a/src/plugins/qmldesigner/qmldesignerplugin.pro +++ b/src/plugins/qmldesigner/qmldesignerplugin.pro @@ -1,4 +1,5 @@ QT += quickwidgets +QT += widgets-private quick-private quickwidgets-private core-private gui-private #mouse ungrabbing workaround on quickitems CONFIG += exceptions INCLUDEPATH += $$PWD