summaryrefslogtreecommitdiffstats
path: root/src/controls/qquickmenupopupwindow.cpp
diff options
context:
space:
mode:
authorLaszlo Agocs <laszlo.agocs@digia.com>2014-06-28 12:04:30 +0200
committerLaszlo Agocs <laszlo.agocs@digia.com>2014-07-01 10:25:58 +0200
commitdf295d70421f068a567d0e37784bf7a1def56073 (patch)
treeeff20b95fd529c76a8ab7e2c4db26a76fae5fa7b /src/controls/qquickmenupopupwindow.cpp
parentce8e6301b4a80eebb081c8713fe8462bcc211351 (diff)
Use the correct parent window for menu popups
The previous fix applied only to the non-platform menu case and was broken on OS X at least, when having a combobox in a QQuickWidget. Task-number: QTBUG-39908 Change-Id: I5dde103c2fe33d52a312cc80b36b47b13e72a188 Reviewed-by: Gabriel de Dietrich <gabriel.dedietrich@digia.com>
Diffstat (limited to 'src/controls/qquickmenupopupwindow.cpp')
-rw-r--r--src/controls/qquickmenupopupwindow.cpp15
1 files changed, 8 insertions, 7 deletions
diff --git a/src/controls/qquickmenupopupwindow.cpp b/src/controls/qquickmenupopupwindow.cpp
index 6a2a03bc1..c8483d63c 100644
--- a/src/controls/qquickmenupopupwindow.cpp
+++ b/src/controls/qquickmenupopupwindow.cpp
@@ -64,8 +64,11 @@ void QQuickMenuPopupWindow::show()
void QQuickMenuPopupWindow::setParentItem(QQuickItem *item)
{
QQuickPopupWindow::setParentItem(item);
- if (item)
- setParentWindow(item->window());
+ if (item) {
+ QWindow *parentWindow = item->window();
+ QWindow *renderWindow = QQuickRenderControl::renderWindowFor(static_cast<QQuickWindow *>(parentWindow));
+ setParentWindow(renderWindow ? renderWindow : parentWindow, item->window());
+ }
}
void QQuickMenuPopupWindow::setItemAt(QQuickItem *menuItem)
@@ -83,12 +86,10 @@ void QQuickMenuPopupWindow::setItemAt(QQuickItem *menuItem)
}
}
-void QQuickMenuPopupWindow::setParentWindow(QQuickWindow *parentWindow)
+void QQuickMenuPopupWindow::setParentWindow(QWindow *effectiveParentWindow, QQuickWindow *parentWindow)
{
- QWindow *proxyWindow = QQuickRenderControl::renderWindowFor(parentWindow);
- QWindow *renderWindow = proxyWindow ? proxyWindow : parentWindow;
- if (transientParent() != renderWindow)
- setTransientParent(renderWindow);
+ if (transientParent() != effectiveParentWindow)
+ setTransientParent(effectiveParentWindow);
if (parentWindow) {
connect(parentWindow, SIGNAL(destroyed()), this, SLOT(dismissPopup()));
if (QQuickMenuPopupWindow *pw = qobject_cast<QQuickMenuPopupWindow *>(parentWindow))