diff --git a/src/declarativeimports/plasmacomponents/qmenu.cpp b/src/declarativeimports/plasmacomponents/qmenu.cpp --- a/src/declarativeimports/plasmacomponents/qmenu.cpp +++ b/src/declarativeimports/plasmacomponents/qmenu.cpp @@ -290,6 +290,12 @@ m_menu->addSection(item->text()); } else { m_menu->addAction(item->action()); + if (item->action()->menu()) { + //This ensures existence of the QWindow + m_menu->winId(); + item->action()->menu()->winId(); + item->action()->menu()->windowHandle()->setTransientParent(m_menu->windowHandle()); + } } } @@ -418,6 +424,20 @@ void QMenuProxy::openInternal(QPoint pos) { + QQuickItem *parentItem = nullptr; + + if (m_visualParent) { + parentItem = qobject_cast(m_visualParent.data()); + } else { + parentItem = qobject_cast(parent()); + } + + if (parentItem && parentItem->window()) { + //create the QWindow + m_menu->winId(); + m_menu->windowHandle()->setTransientParent(parentItem->window()); + } + m_menu->popup(pos); m_status = DialogStatus::Open; emit statusChanged();