vcl/inc/qt5/QtFrame.hxx |    1 +
 vcl/qt5/QtFrame.cxx     |   20 ++++++++++++++------
 2 files changed, 15 insertions(+), 6 deletions(-)

New commits:
commit 4d30c63bd0652c75cda9c57ef21c4cfe65df184f
Author:     Jan-Marek Glogowski <glo...@fbihome.de>
AuthorDate: Mon Dec 20 13:32:52 2021 +0100
Commit:     Adolfo Jayme Barrientos <fit...@ubuntu.com>
CommitDate: Wed Dec 22 05:01:00 2021 +0100

    tdf#131467 Qt set default position on first resize
    
    Setting the position in Show() is too late, because LO will try
    to set the mouse pointer to the default button, if configured.
    That obviously needs the window position.
    And also take the menubar offset into account.
    
    Change-Id: Ia280539c082ff6f675966869fb6643a41a17d696
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/127154
    Tested-by: Jenkins
    Reviewed-by: Jan-Marek Glogowski <glo...@fbihome.de>
    (cherry picked from commit ca28826a087245686d7fca3ffc8ca1f03307924d)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/127185
    Reviewed-by: Adolfo Jayme Barrientos <fit...@ubuntu.com>

diff --git a/vcl/inc/qt5/QtFrame.hxx b/vcl/inc/qt5/QtFrame.hxx
index c3c9cdb9f309..dbf54079313d 100644
--- a/vcl/inc/qt5/QtFrame.hxx
+++ b/vcl/inc/qt5/QtFrame.hxx
@@ -130,6 +130,7 @@ class VCLPLUG_QT_PUBLIC QtFrame : public QObject, public 
SalFrame
     bool isMinimized() const;
     bool isMaximized() const;
     void SetWindowStateImpl(Qt::WindowStates eState);
+    int menuBarOffset() const;
 
     void fixICCCMwindowGroup();
     void modalReparent(bool bVisible);
diff --git a/vcl/qt5/QtFrame.cxx b/vcl/qt5/QtFrame.cxx
index 5772e7e87251..7b24103908e9 100644
--- a/vcl/qt5/QtFrame.cxx
+++ b/vcl/qt5/QtFrame.cxx
@@ -470,7 +470,6 @@ void QtFrame::Show(bool bVisible, bool bNoActivate)
 
     // show
     SetDefaultSize();
-    SetDefaultPos();
 
     pSalInst->RunInMainThread([this, bNoActivate]() {
         QWidget* const pChild = asChild();
@@ -504,6 +503,14 @@ void QtFrame::SetMaxClientSize(tools::Long nWidth, 
tools::Long nHeight)
     }
 }
 
+int QtFrame::menuBarOffset() const
+{
+    QtMainWindow* pTopLevel = m_pParent->GetTopLevelWindow();
+    if (pTopLevel && pTopLevel->menuBar() && pTopLevel->menuBar()->isVisible())
+        return round(pTopLevel->menuBar()->geometry().height() * 
devicePixelRatioF());
+    return 0;
+}
+
 void QtFrame::SetDefaultPos()
 {
     if (!m_bDefaultPos)
@@ -516,6 +523,7 @@ void QtFrame::SetDefaultPos()
         QWidget* const pParentWin = m_pParent->asChild()->window();
         QWidget* const pChildWin = asChild()->window();
         QPoint aPos = (pParentWin->rect().center() - 
pChildWin->rect().center()) * fRatio;
+        aPos.ry() -= menuBarOffset();
         SetPosSize(aPos.x(), aPos.y(), 0, 0, SAL_FRAME_POSSIZE_X | 
SAL_FRAME_POSSIZE_Y);
         assert(!m_bDefaultPos);
     }
@@ -604,7 +612,11 @@ void QtFrame::SetPosSize(tools::Long nX, tools::Long nY, 
tools::Long nWidth, too
     }
 
     if (!(nFlags & (SAL_FRAME_POSSIZE_X | SAL_FRAME_POSSIZE_Y)))
+    {
+        if (nFlags & (SAL_FRAME_POSSIZE_WIDTH | SAL_FRAME_POSSIZE_HEIGHT))
+            SetDefaultPos();
         return;
+    }
 
     if (m_pParent)
     {
@@ -613,11 +625,7 @@ void QtFrame::SetPosSize(tools::Long nX, tools::Long nY, 
tools::Long nWidth, too
             nX = aParentGeometry.nX + aParentGeometry.nWidth - nX - 
maGeometry.nWidth - 1;
         else
             nX += aParentGeometry.nX;
-        nY += aParentGeometry.nY;
-
-        QtMainWindow* pTopLevel = m_pParent->GetTopLevelWindow();
-        if (pTopLevel && pTopLevel->menuBar() && 
pTopLevel->menuBar()->isVisible())
-            nY += round(pTopLevel->menuBar()->geometry().height() * 
devicePixelRatioF());
+        nY += aParentGeometry.nY + menuBarOffset();
     }
 
     if (!(nFlags & SAL_FRAME_POSSIZE_X))

Reply via email to