summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2018-04-13 10:10:29 +0100
committerCaolán McNamara <caolanm@redhat.com>2018-04-13 14:21:13 +0200
commit1670f6aaf28907403e5305b78ebcf93de4ebc19b (patch)
tree399dc7d5a0da061e640259d206724cefdc9d207b
parent9baf9a80ac267a2382aac2b6fe7e7a61528231c5 (diff)
Resolves: tdf#116865 trigger pending sizing timers before arranging
trigger pending sizing timers now so we arrange with the final size of the client area Otherwise calling GetSizePixel in the Arranging loop will trigger the timers anyway, causing reentry into Arrange_Impl again where the inner Arrange_Impl arranges with the final size, and then returns to this outer Arrange_Impl which would rearrange with the old client area size. Change-Id: Ibc2b97f679ceaa0a825cee015576f403703a5f9e Reviewed-on: https://gerrit.libreoffice.org/52815 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Caolán McNamara <caolanm@redhat.com> Tested-by: Caolán McNamara <caolanm@redhat.com>
-rw-r--r--sfx2/source/appl/workwin.cxx23
-rw-r--r--sfx2/source/inc/workwin.hxx2
2 files changed, 24 insertions, 1 deletions
diff --git a/sfx2/source/appl/workwin.cxx b/sfx2/source/appl/workwin.cxx
index 1f8ad2a573c9..baff47e83bda 100644
--- a/sfx2/source/appl/workwin.cxx
+++ b/sfx2/source/appl/workwin.cxx
@@ -695,6 +695,20 @@ void SfxWorkWindow::ArrangeChildren_Impl( bool bForce )
ArrangeAutoHideWindows( nullptr );
}
+void SfxWorkWindow::FlushPendingChildSizes()
+{
+ // tdf#116865, if any windows are being resized, i.e. their
+ // resize timer is active, then calling GetSizePixel on
+ // them forces the timer to fire and sets the final
+ // size to which they are getting resized towards.
+ for (size_t i = 0; i < aChildren.size(); ++i)
+ {
+ SfxChild_Impl *pCli = aChildren[i];
+ if (!pCli || !pCli->pWin)
+ continue;
+ (void)pCli->pWin->GetSizePixel();
+ }
+}
SvBorder SfxWorkWindow::Arrange_Impl()
@@ -706,7 +720,14 @@ SvBorder SfxWorkWindow::Arrange_Impl()
ClientArea, it is set to "not visible".
*/
{
-
+ //tdf#116865 trigger pending sizing timers now so we arrange
+ //with the final size of the client area.
+ //
+ //Otherwise calling GetSizePixel in the following loop will trigger the
+ //timers, causing reentry into Arrange_Impl again where the inner
+ //Arrange_Impl arranges with the final size, and then returns to this outer
+ //Arrange_Impl which would rearrange with the old client area size
+ FlushPendingChildSizes();
aClientArea = GetTopRect_Impl();
aUpperClientArea = aClientArea;
diff --git a/sfx2/source/inc/workwin.hxx b/sfx2/source/inc/workwin.hxx
index 5f5f19228d27..c3286960a568 100644
--- a/sfx2/source/inc/workwin.hxx
+++ b/sfx2/source/inc/workwin.hxx
@@ -224,6 +224,8 @@ class SfxWorkWindow final
void SaveStatus_Impl(SfxChildWindow*, const SfxChildWinInfo&);
static bool IsPluginMode( SfxObjectShell const * pObjShell );
+ void FlushPendingChildSizes();
+
public:
SfxWorkWindow( vcl::Window* pWin, SfxFrame* pFrm, SfxFrame* pMaster );
~SfxWorkWindow();