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