Blame SOURCES/0001-gtk3-stop-the-ever-shrinking-size-of-toplevel-on-eve.patch

f325b2
From 3b31d0dc86d75f8283951f3fd6a4f48ff649ed99 Mon Sep 17 00:00:00 2001
f325b2
From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= <caolanm@redhat.com>
f325b2
Date: Fri, 4 Dec 2015 13:07:57 +0000
f325b2
Subject: [PATCH] gtk3: stop the ever shrinking size of toplevel on every
f325b2
 restore
f325b2
MIME-Version: 1.0
f325b2
Content-Type: text/plain; charset=UTF-8
f325b2
Content-Transfer-Encoding: 8bit
f325b2
f325b2
for getting and setting the window state, work on the toplevel m_pWindow. Leave
f325b2
the "geometry" alone as its for the purpose of the current known size of the
f325b2
toplevel window contents
f325b2
f325b2
Change-Id: Idf701aacf4aed4eefbca1bc1ebebaf38d1c82e27
f325b2
Reviewed-on: https://gerrit.libreoffice.org/20397
f325b2
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
f325b2
Tested-by: Caolán McNamara <caolanm@redhat.com>
f325b2
(cherry picked from commit 7242ed0567297c3c5186b4095496fc01448359f4)
f325b2
---
f325b2
 vcl/unx/gtk3/gtk3gtkframe.cxx | 41 ++++++++++++++++++++++++++++-------------
f325b2
 1 file changed, 28 insertions(+), 13 deletions(-)
f325b2
f325b2
diff --git a/vcl/unx/gtk3/gtk3gtkframe.cxx b/vcl/unx/gtk3/gtk3gtkframe.cxx
f325b2
index 966dc80..576946f 100644
f325b2
--- a/vcl/unx/gtk3/gtk3gtkframe.cxx
f325b2
+++ b/vcl/unx/gtk3/gtk3gtkframe.cxx
f325b2
@@ -1703,6 +1703,28 @@ void GtkSalFrame::SetWindowState( const SalFrameState* pState )
f325b2
     TriggerPaintEvent();
f325b2
 }
f325b2
 
f325b2
+namespace
f325b2
+{
f325b2
+    void GetPosAndSize(GtkWindow *pWindow, long& rX, long &rY, long &rWidth, long &rHeight)
f325b2
+    {
f325b2
+       gint root_x, root_y;
f325b2
+       gtk_window_get_position(GTK_WINDOW(pWindow), &root_x, &root_y);
f325b2
+       rX = root_x;
f325b2
+       rY = root_y;
f325b2
+       gint width, height;
f325b2
+       gtk_window_get_size(GTK_WINDOW(pWindow), &width, &height);
f325b2
+       rWidth = width;
f325b2
+       rHeight = height;
f325b2
+    }
f325b2
+
f325b2
+    Rectangle GetPosAndSize(GtkWindow *pWindow)
f325b2
+    {
f325b2
+        long nX, nY, nWidth, nHeight;
f325b2
+        GetPosAndSize(pWindow, nX, nY, nWidth, nHeight);
f325b2
+        return Rectangle(nX, nY, nX + nWidth, nY + nHeight);
f325b2
+    }
f325b2
+}
f325b2
+
f325b2
 bool GtkSalFrame::GetWindowState( SalFrameState* pState )
f325b2
 {
f325b2
     pState->mnState = WINDOWSTATE_STATE_NORMAL;
f325b2
@@ -1717,10 +1739,8 @@ bool GtkSalFrame::GetWindowState( SalFrameState* pState )
f325b2
         pState->mnY                 = m_aRestorePosSize.Top();
f325b2
         pState->mnWidth             = m_aRestorePosSize.GetWidth();
f325b2
         pState->mnHeight            = m_aRestorePosSize.GetHeight();
f325b2
-        pState->mnMaximizedX        = maGeometry.nX;
f325b2
-        pState->mnMaximizedY        = maGeometry.nY;
f325b2
-        pState->mnMaximizedWidth    = maGeometry.nWidth;
f325b2
-        pState->mnMaximizedHeight   = maGeometry.nHeight;
f325b2
+        GetPosAndSize(GTK_WINDOW(m_pWindow), pState->mnMaximizedX, pState->mnMaximizedY,
f325b2
+                                             pState->mnMaximizedWidth, pState->mnMaximizedWidth);
f325b2
         pState->mnMask  |= WINDOWSTATE_MASK_MAXIMIZED_X          |
f325b2
                            WINDOWSTATE_MASK_MAXIMIZED_Y          |
f325b2
                            WINDOWSTATE_MASK_MAXIMIZED_WIDTH      |
f325b2
@@ -1728,10 +1748,8 @@ bool GtkSalFrame::GetWindowState( SalFrameState* pState )
f325b2
     }
f325b2
     else
f325b2
     {
f325b2
-        pState->mnX         = maGeometry.nX;
f325b2
-        pState->mnY         = maGeometry.nY;
f325b2
-        pState->mnWidth     = maGeometry.nWidth;
f325b2
-        pState->mnHeight    = maGeometry.nHeight;
f325b2
+        GetPosAndSize(GTK_WINDOW(m_pWindow), pState->mnX, pState->mnY,
f325b2
+                                             pState->mnWidth, pState->mnHeight);
f325b2
     }
f325b2
     pState->mnMask  |= WINDOWSTATE_MASK_X            |
f325b2
                        WINDOWSTATE_MASK_Y            |
f325b2
@@ -1932,8 +1950,7 @@ void GtkSalFrame::ShowFullScreen( bool bFullScreen, sal_Int32 nScreen )
f325b2
 
f325b2
     if( bFullScreen )
f325b2
     {
f325b2
-        m_aRestorePosSize = Rectangle( Point( maGeometry.nX, maGeometry.nY ),
f325b2
-                                       Size( maGeometry.nWidth, maGeometry.nHeight ) );
f325b2
+        m_aRestorePosSize = GetPosAndSize(GTK_WINDOW(m_pWindow));
f325b2
         SetScreen( nScreen, SET_FULLSCREEN );
f325b2
     }
f325b2
     else
f325b2
@@ -2963,9 +2980,7 @@ gboolean GtkSalFrame::signalWindowState( GtkWidget*, GdkEvent* pEvent, gpointer
f325b2
     if(   (pEvent->window_state.new_window_state & GDK_WINDOW_STATE_MAXIMIZED) &&
f325b2
         ! (pThis->m_nState & GDK_WINDOW_STATE_MAXIMIZED) )
f325b2
     {
f325b2
-        pThis->m_aRestorePosSize =
f325b2
-            Rectangle( Point( pThis->maGeometry.nX, pThis->maGeometry.nY ),
f325b2
-                       Size( pThis->maGeometry.nWidth, pThis->maGeometry.nHeight ) );
f325b2
+        pThis->m_aRestorePosSize = GetPosAndSize(GTK_WINDOW(pThis->m_pWindow));
f325b2
     }
f325b2
     pThis->m_nState = pEvent->window_state.new_window_state;
f325b2
 
f325b2
-- 
f325b2
2.5.0
f325b2