diff options
author | Andy Shaw <andy.shaw@digia.com> | 2013-11-14 14:57:50 +0100 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2013-11-15 12:42:27 +0100 |
commit | a9edbeddafe5d8866192de44f4028d07bd93013a (patch) | |
tree | d3bad3999de6a3f0ba6e6f3df0ef36ce8d6b9075 /src/gui/kernel/qwidget_win.cpp | |
parent | 92a4fcff80cf7a2e3a71c0ff8a2a378866b79739 (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.cpp | 12 |
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 |