diff options
author | J-P Nurmi <jpnurmi@digia.com> | 2014-09-18 11:30:23 +0200 |
---|---|---|
committer | J-P Nurmi <jpnurmi@digia.com> | 2014-09-18 11:30:23 +0200 |
commit | 0276bda8914f94081d844ed671a215906fd1ae70 (patch) | |
tree | 2b54bb9c120cf5cd257337e3e005f12a6124f9c3 /src/controls/qquickmenupopupwindow.cpp | |
parent | 2766db3c581f00dbadabaef8eb869d404d821fe9 (diff) | |
parent | 1aecda36d1d12bcd24a5ee87dd82ed04f85c41e2 (diff) | |
download | qtquickcontrols-0276bda8914f94081d844ed671a215906fd1ae70.tar.gz |
Merge remote-tracking branch 'origin/5.3' into 5.4
Conflicts:
src/controls/qquickmenupopupwindow.cpp
Change-Id: Ibc10e7da3b3a2983c022b8973cd80cb1a7e110af
Diffstat (limited to 'src/controls/qquickmenupopupwindow.cpp')
-rw-r--r-- | src/controls/qquickmenupopupwindow.cpp | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/src/controls/qquickmenupopupwindow.cpp b/src/controls/qquickmenupopupwindow.cpp index c3231fd4..52ce7219 100644 --- a/src/controls/qquickmenupopupwindow.cpp +++ b/src/controls/qquickmenupopupwindow.cpp @@ -42,8 +42,10 @@ QT_BEGIN_NAMESPACE QQuickMenuPopupWindow::QQuickMenuPopupWindow() : - QQuickPopupWindow(), m_itemAt(0) -{ } + m_itemAt(0), + m_logicalParentWindow(0) +{ +} void QQuickMenuPopupWindow::setParentItem(QQuickItem *item) { @@ -72,8 +74,11 @@ void QQuickMenuPopupWindow::setItemAt(QQuickItem *menuItem) void QQuickMenuPopupWindow::setParentWindow(QWindow *effectiveParentWindow, QQuickWindow *parentWindow) { + while (effectiveParentWindow && effectiveParentWindow->parent()) + effectiveParentWindow = effectiveParentWindow->parent(); if (transientParent() != effectiveParentWindow) setTransientParent(effectiveParentWindow); + m_logicalParentWindow = parentWindow; if (parentWindow) { connect(parentWindow, SIGNAL(destroyed()), this, SLOT(dismissPopup())); if (QQuickMenuPopupWindow *pw = qobject_cast<QQuickMenuPopupWindow *>(parentWindow)) @@ -129,6 +134,10 @@ void QQuickMenuPopupWindow::exposeEvent(QExposeEvent *e) // the popup will reposition at the last moment, so its // initial position must be captured for updateSize(). m_initialPos = position(); + if (m_logicalParentWindow && m_logicalParentWindow->parent()) { + // This must be a QQuickWindow embedded via createWindowContainer. + m_initialPos += m_logicalParentWindow->geometry().topLeft(); + } QQuickPopupWindow::exposeEvent(e); } |