summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@nokia.com>2012-07-09 12:50:00 +0200
committerQt by Nokia <qt-info@nokia.com>2012-07-11 14:52:17 +0200
commitcf2b5a7722e2d919f57f7094124dbcf52ae79b68 (patch)
tree41ebeb2ffce5176a5fcda0aae3fe679ffd6e64f2 /src
parent9de46b2b9387e813e3194765652699aa6ad4d158 (diff)
Clear qt_button_down widget when starting a drag.
Prevent pickMouseReceiver() from using the widget from which the drag was started. Task-number: QTBUG-26145 Change-Id: I65d4c295a894193e41c676fb9fd1f7113c2631b5 Reviewed-by: Girish Ramakrishnan <girish.1.ramakrishnan@nokia.com>
Diffstat (limited to 'src')
-rw-r--r--src/gui/kernel/qdnd.cpp1
-rw-r--r--src/gui/kernel/qguiapplication.cpp8
-rw-r--r--src/gui/kernel/qguiapplication_p.h8
-rw-r--r--src/widgets/kernel/qapplication.cpp9
-rw-r--r--src/widgets/kernel/qapplication_p.h3
5 files changed, 29 insertions, 0 deletions
diff --git a/src/gui/kernel/qdnd.cpp b/src/gui/kernel/qdnd.cpp
index 8182719830..a97583b4ef 100644
--- a/src/gui/kernel/qdnd.cpp
+++ b/src/gui/kernel/qdnd.cpp
@@ -195,6 +195,7 @@ Qt::DropAction QDragManager::drag(QDrag *o)
m_object->d_func()->target = 0;
+ QGuiApplicationPrivate::instance()->notifyDragStarted(o);
const Qt::DropAction result = m_platformDrag->drag(m_object);
m_object = 0;
return result;
diff --git a/src/gui/kernel/qguiapplication.cpp b/src/gui/kernel/qguiapplication.cpp
index fd7e32e96f..a9986422c8 100644
--- a/src/gui/kernel/qguiapplication.cpp
+++ b/src/gui/kernel/qguiapplication.cpp
@@ -2527,6 +2527,14 @@ void QGuiApplicationPrivate::notifyThemeChanged()
}
}
+#ifndef QT_NO_DRAGANDDROP
+void QGuiApplicationPrivate::notifyDragStarted(const QDrag *drag)
+{
+ Q_UNUSED(drag)
+
+}
+#endif
+
const QDrawHelperGammaTables *QGuiApplicationPrivate::gammaTables()
{
QDrawHelperGammaTables *result = m_gammaTables.load();
diff --git a/src/gui/kernel/qguiapplication_p.h b/src/gui/kernel/qguiapplication_p.h
index 857dc5390e..58a82a9cc5 100644
--- a/src/gui/kernel/qguiapplication_p.h
+++ b/src/gui/kernel/qguiapplication_p.h
@@ -62,6 +62,9 @@ class QPlatformIntegration;
class QPlatformTheme;
class QPlatformDragQtResponse;
struct QDrawHelperGammaTables;
+#ifndef QT_NO_DRAGANDDROP
+class QDrag;
+#endif // QT_NO_DRAGANDDROP
class Q_GUI_EXPORT QGuiApplicationPrivate : public QCoreApplicationPrivate
{
@@ -240,8 +243,13 @@ public:
protected:
virtual void notifyThemeChanged();
+#ifndef QT_NO_DRAGANDDROP
+ virtual void notifyDragStarted(const QDrag *);
+#endif // QT_NO_DRAGANDDROP
private:
+ friend class QDragManager;
+
void init();
static QGuiApplicationPrivate *self;
diff --git a/src/widgets/kernel/qapplication.cpp b/src/widgets/kernel/qapplication.cpp
index 997a663c27..6634a2eb69 100644
--- a/src/widgets/kernel/qapplication.cpp
+++ b/src/widgets/kernel/qapplication.cpp
@@ -4503,6 +4503,15 @@ void QApplicationPrivate::notifyThemeChanged()
initSystemPalette();
}
+#ifndef QT_NO_DRAGANDDROP
+void QApplicationPrivate::notifyDragStarted(const QDrag *drag)
+{
+ // Prevent pickMouseReceiver() from using the widget where the drag was started after a drag operation.
+ QGuiApplicationPrivate::notifyDragStarted(drag);
+ qt_button_down = 0;
+}
+#endif // QT_NO_DRAGANDDROP
+
#ifndef QT_NO_GESTURES
QGestureManager* QGestureManager::instance()
{
diff --git a/src/widgets/kernel/qapplication_p.h b/src/widgets/kernel/qapplication_p.h
index 7b69129d29..3ce590865b 100644
--- a/src/widgets/kernel/qapplication_p.h
+++ b/src/widgets/kernel/qapplication_p.h
@@ -195,6 +195,9 @@ public:
protected:
void notifyThemeChanged();
+#ifndef QT_NO_DRAGANDDROP
+ void notifyDragStarted(const QDrag *);
+#endif // QT_NO_DRAGANDDROP
public:
static QFont *sys_font;