diff options
| author | Laszlo Agocs <laszlo.agocs@digia.com> | 2014-06-28 12:04:30 +0200 |
|---|---|---|
| committer | Laszlo Agocs <laszlo.agocs@digia.com> | 2014-07-01 10:25:58 +0200 |
| commit | df295d70421f068a567d0e37784bf7a1def56073 (patch) | |
| tree | eff20b95fd529c76a8ab7e2c4db26a76fae5fa7b /src/controls/qquickmenupopupwindow.cpp | |
| parent | ce8e6301b4a80eebb081c8713fe8462bcc211351 (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.cpp | 15 |
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)) |
