summaryrefslogtreecommitdiffstats
path: root/src/gui/kernel/qwidget_win.cpp
diff options
context:
space:
mode:
authorAndy Shaw <andy.shaw@digia.com>2013-11-14 14:57:50 +0100
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-11-15 12:42:27 +0100
commita9edbeddafe5d8866192de44f4028d07bd93013a (patch)
treed3bad3999de6a3f0ba6e6f3df0ef36ce8d6b9075 /src/gui/kernel/qwidget_win.cpp
parent92a4fcff80cf7a2e3a71c0ff8a2a378866b79739 (diff)
When reparenting a widget, children need to reregister as a drop site
If a widget is a drop site and an ancestor gets reparented then the widget needs to be reregistered as a drop site so that it is correctly associated with the new native parent widget. Task-number: QTBUG-30276 Change-Id: I440077e54f614d0bfbaef46104de6598411c986b Reviewed-by: Friedemann Kleint <Friedemann.Kleint@digia.com>
Diffstat (limited to 'src/gui/kernel/qwidget_win.cpp')
-rw-r--r--src/gui/kernel/qwidget_win.cpp12
1 files changed, 11 insertions, 1 deletions
diff --git a/src/gui/kernel/qwidget_win.cpp b/src/gui/kernel/qwidget_win.cpp
index 9419226e67..c90cd9cb99 100644
--- a/src/gui/kernel/qwidget_win.cpp
+++ b/src/gui/kernel/qwidget_win.cpp
@@ -631,7 +631,15 @@ void QWidgetPrivate::setParent_sys(QWidget *parent, Qt::WindowFlags f)
dropSiteWasRegistered = true;
q->setAttribute(Qt::WA_DropSiteRegistered, false); // ole dnd unregister (we will register again below)
}
-
+ QList<QWidget *> registeredDropChildren;
+ if (QWidget *nativeParent = q->internalWinId() ? q : q->nativeParentWidget()) {
+ foreach (QWidget *w, nativeParent->d_func()->extra->oleDropWidgets) {
+ if (w && q->isAncestorOf(w)) {
+ registeredDropChildren.push_back(w);
+ w->setAttribute(Qt::WA_DropSiteRegistered, false);
+ }
+ }
+ }
if ((q->windowType() == Qt::Desktop))
old_winid = 0;
setWinId(0);
@@ -684,6 +692,8 @@ void QWidgetPrivate::setParent_sys(QWidget *parent, Qt::WindowFlags f)
if (q->testAttribute(Qt::WA_AcceptDrops) || dropSiteWasRegistered
|| (!q->isWindow() && q->parentWidget() && q->parentWidget()->testAttribute(Qt::WA_DropSiteRegistered)))
q->setAttribute(Qt::WA_DropSiteRegistered, true);
+ foreach (QWidget *w, registeredDropChildren)
+ w->setAttribute(Qt::WA_DropSiteRegistered, true);
#ifdef Q_WS_WINCE
// Show borderless toplevel windows in tasklist & NavBar