[Libreoffice-commits] core.git: vcl/qt5

Libreoffice Gerrit user logerrit at kemper.freedesktop.org
Fri Oct 26 18:10:16 UTC 2018


 vcl/qt5/Qt5Frame.cxx |   23 +++++++++++++++--------
 1 file changed, 15 insertions(+), 8 deletions(-)

New commits:
commit 140434a7677946020bb2c6db9ed3afe8998ee7d0
Author:     Katarina Behrens <Katarina.Behrens at cib.de>
AuthorDate: Thu Oct 25 12:29:34 2018 +0200
Commit:     Katarina Behrens <Katarina.Behrens at cib.de>
CommitDate: Fri Oct 26 20:09:42 2018 +0200

    tdf#119719: Move the window to the requested screen
    
    According to Qt doc, setScreen by itself is ineffective and this
    additional step is needed. It still wouldn't work w/ dual screen
    on older KDE Plasma (<= 5.12) but tests positively in GNOME and
    Plasma 5.13.5
    
    Change-Id: I080b6f93aa3c21411f606ade6df42e9bc3f6f299
    Reviewed-on: https://gerrit.libreoffice.org/62351
    Reviewed-by: Katarina Behrens <Katarina.Behrens at cib.de>
    Tested-by: Katarina Behrens <Katarina.Behrens at cib.de>

diff --git a/vcl/qt5/Qt5Frame.cxx b/vcl/qt5/Qt5Frame.cxx
index 1901877c57ea..822b8004b6e7 100644
--- a/vcl/qt5/Qt5Frame.cxx
+++ b/vcl/qt5/Qt5Frame.cxx
@@ -553,17 +553,16 @@ bool Qt5Frame::GetWindowState(SalFrameState* pState)
 
 void Qt5Frame::ShowFullScreen(bool bFullScreen, sal_Int32 nScreen)
 {
+    // only top-level windows can go fullscreen
     assert(m_pTopLevel);
 
-    if (isWindow())
-    {
-        QWidget* const pWidget = m_pTopLevel ? m_pTopLevel : m_pQWidget;
-        pWidget->show();
+    // show it if it isn't shown yet
+    if (!isWindow())
+        m_pTopLevel->show();
 
-        // do that before going fullscreen
-        SetScreenNumber(nScreen);
-        bFullScreen ? windowHandle()->showFullScreen() : windowHandle()->showNormal();
-    }
+    // do that before going fullscreen
+    SetScreenNumber(nScreen);
+    bFullScreen ? windowHandle()->showFullScreen() : windowHandle()->showNormal();
 }
 
 void Qt5Frame::StartPresentation(bool)
@@ -987,7 +986,15 @@ void Qt5Frame::SetScreenNumber(unsigned int nScreen)
         {
             QList<QScreen*> screens = QApplication::screens();
             if (static_cast<int>(nScreen) < screens.size())
+            {
+                QWidget* const pWidget = m_pTopLevel ? m_pTopLevel : m_pQWidget;
                 pWindow->setScreen(QApplication::screens()[nScreen]);
+
+                // setScreen by itself has no effect, explicitly move the widget to
+                // the new screen
+                QRect screenGeo = QApplication::desktop()->screenGeometry(nScreen);
+                pWidget->move(screenGeo.topLeft());
+            }
             else
             {
                 // index outta bounds, use primary screen


More information about the Libreoffice-commits mailing list