Qt minimize modal reparenting a bit
Change-Id: Ie7203e9d92e5971de6c2730ff847f351e5641c9f Reviewed-on: https://gerrit.libreoffice.org/c/core/+/128178 Tested-by: Jenkins Reviewed-by: Jan-Marek Glogowski <glogow@fbihome.de>
This commit is contained in:
@@ -176,8 +176,8 @@ QtFrame::QtFrame(QtFrame* pParent, SalFrameStyleFlags nStyle, bool bUseCairo)
|
||||
|
||||
if (pParent && !(pParent->m_nStyle & SalFrameStyleFlags::PLUG))
|
||||
{
|
||||
QWindow* pParentWindow = pParent->GetQWidget()->window()->windowHandle();
|
||||
QWindow* pChildWindow = asChild()->window()->windowHandle();
|
||||
QWindow* pParentWindow = pParent->windowHandle();
|
||||
QWindow* pChildWindow = windowHandle();
|
||||
if (pParentWindow && pChildWindow && (pParentWindow != pChildWindow))
|
||||
pChildWindow->setTransientParent(pParentWindow);
|
||||
}
|
||||
@@ -349,6 +349,7 @@ QWindow* QtFrame::windowHandle() const
|
||||
{
|
||||
// set attribute 'Qt::WA_NativeWindow' first to make sure a window handle actually exists
|
||||
QWidget* pChild = asChild();
|
||||
assert(pChild->window() == pChild);
|
||||
pChild->setAttribute(Qt::WA_NativeWindow);
|
||||
return pChild->windowHandle();
|
||||
}
|
||||
@@ -428,21 +429,25 @@ void QtFrame::modalReparent(bool bVisible)
|
||||
|
||||
if (!bVisible)
|
||||
{
|
||||
m_pQWidget->setParent(m_pParent ? m_pParent->asChild() : nullptr,
|
||||
m_pQWidget->windowFlags());
|
||||
QWidget* pNewParent = m_pParent ? m_pParent->asChild() : nullptr;
|
||||
if (pNewParent != m_pQWidget->parent())
|
||||
m_pQWidget->setParent(pNewParent, m_pQWidget->windowFlags());
|
||||
return;
|
||||
}
|
||||
|
||||
if (!QGuiApplication::modalWindow())
|
||||
const QWindow* pModalWin = QGuiApplication::modalWindow();
|
||||
if (!pModalWin || m_pParent->windowHandle() == pModalWin)
|
||||
return;
|
||||
|
||||
QtInstance* pInst = static_cast<QtInstance*>(GetSalData()->m_pInstance);
|
||||
for (auto* pFrame : pInst->getFrames())
|
||||
{
|
||||
QWidget* pQWidget = static_cast<QtFrame*>(pFrame)->asChild();
|
||||
if (pQWidget->windowHandle() == QGuiApplication::modalWindow())
|
||||
QtFrame* pQtFrame = static_cast<QtFrame*>(pFrame);
|
||||
if (pQtFrame->windowHandle() == pModalWin)
|
||||
{
|
||||
m_pQWidget->setParent(pQWidget, m_pQWidget->windowFlags());
|
||||
QWidget* pNewParent = pQtFrame->asChild();
|
||||
if (pNewParent != m_pQWidget->parent())
|
||||
m_pQWidget->setParent(pNewParent, m_pQWidget->windowFlags());
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user