[Libreoffice-commits] core.git: include/vcl svx/source vcl/source

Caolán McNamara caolanm at redhat.com
Thu Apr 9 06:59:14 PDT 2015


 include/vcl/window.hxx             |    4 +++-
 svx/source/sidebar/PanelLayout.cxx |    1 +
 vcl/source/window/dockwin.cxx      |    4 +---
 vcl/source/window/syswin.cxx       |    4 +---
 vcl/source/window/window2.cxx      |   13 ++++++++++---
 5 files changed, 16 insertions(+), 10 deletions(-)

New commits:
commit b39a6449d5debc7cdf55c3f967b441f3de4d50f3
Author: Caolán McNamara <caolanm at redhat.com>
Date:   Thu Apr 9 14:43:09 2015 +0100

    Resolves: tdf#90384 queue_resize needs to Invalidate the optimal cache size
    
    but the PanelLayout didn't
    
    Change-Id: I38a8975f1488fa2a2ffe91b66745e1a1c6c48a28

diff --git a/include/vcl/window.hxx b/include/vcl/window.hxx
index 5b681f2..bc20cbe 100644
--- a/include/vcl/window.hxx
+++ b/include/vcl/window.hxx
@@ -1192,9 +1192,11 @@ protected:
      * the preferred widget size.
      *
      * Use get_preferred_size to retrieve this value
-     * mediated via height and width requests
+     * cached and mediated via height and width requests
      */
     virtual Size GetOptimalSize() const;
+    /// clear OptimalSize cache
+    void InvalidateSizeCache();
 private:
 
     SAL_DLLPRIVATE bool                 ImplIsAccessibleCandidate() const;
diff --git a/svx/source/sidebar/PanelLayout.cxx b/svx/source/sidebar/PanelLayout.cxx
index 21fcc2d..829fd3b 100644
--- a/svx/source/sidebar/PanelLayout.cxx
+++ b/svx/source/sidebar/PanelLayout.cxx
@@ -51,6 +51,7 @@ void PanelLayout::queue_resize(StateChangedType /*eReason*/)
         return;
     if (!isLayoutEnabled(this))
         return;
+    InvalidateSizeCache();
     m_aPanelLayoutIdle.Start();
 }
 
diff --git a/vcl/source/window/dockwin.cxx b/vcl/source/window/dockwin.cxx
index 5a0df3c..94e32d3 100644
--- a/vcl/source/window/dockwin.cxx
+++ b/vcl/source/window/dockwin.cxx
@@ -1114,9 +1114,7 @@ void DockingWindow::queue_resize(StateChangedType /*eReason*/)
         return;
     if (!isLayoutEnabled())
         return;
-    WindowImpl *pWindowImpl = mpWindowImpl->mpBorderWindow ? mpWindowImpl->mpBorderWindow->mpWindowImpl : mpWindowImpl;
-    pWindowImpl->mnOptimalWidthCache = -1;
-    pWindowImpl->mnOptimalHeightCache = -1;
+    InvalidateSizeCache();
     maLayoutIdle.Start();
 }
 
diff --git a/vcl/source/window/syswin.cxx b/vcl/source/window/syswin.cxx
index 1455c3b..c5d0522 100644
--- a/vcl/source/window/syswin.cxx
+++ b/vcl/source/window/syswin.cxx
@@ -997,9 +997,7 @@ void SystemWindow::queue_resize(StateChangedType /*eReason*/)
         return;
     if (!isLayoutEnabled())
         return;
-    WindowImpl *pWindowImpl = mpWindowImpl->mpBorderWindow ? mpWindowImpl->mpBorderWindow->mpWindowImpl : mpWindowImpl;
-    pWindowImpl->mnOptimalWidthCache = -1;
-    pWindowImpl->mnOptimalHeightCache = -1;
+    InvalidateSizeCache();
     maLayoutIdle.Start();
 }
 
diff --git a/vcl/source/window/window2.cxx b/vcl/source/window/window2.cxx
index 691b92c..e667287 100644
--- a/vcl/source/window/window2.cxx
+++ b/vcl/source/window/window2.cxx
@@ -1427,16 +1427,23 @@ namespace
     }
 }
 
+void Window::InvalidateSizeCache()
+{
+    WindowImpl *pWindowImpl = mpWindowImpl->mpBorderWindow ? mpWindowImpl->mpBorderWindow->mpWindowImpl : mpWindowImpl;
+    pWindowImpl->mnOptimalWidthCache = -1;
+    pWindowImpl->mnOptimalHeightCache = -1;
+}
+
 void Window::queue_resize(StateChangedType eReason)
 {
     bool bSomeoneCares = queue_ungrouped_resize(this);
 
-    WindowImpl *pWindowImpl = mpWindowImpl->mpBorderWindow ? mpWindowImpl->mpBorderWindow->mpWindowImpl : mpWindowImpl;
     if (eReason != StateChangedType::VISIBLE)
     {
-        pWindowImpl->mnOptimalWidthCache = -1;
-        pWindowImpl->mnOptimalHeightCache = -1;
+        InvalidateSizeCache();
     }
+
+    WindowImpl *pWindowImpl = mpWindowImpl->mpBorderWindow ? mpWindowImpl->mpBorderWindow->mpWindowImpl : mpWindowImpl;
     if (pWindowImpl->m_xSizeGroup && pWindowImpl->m_xSizeGroup->get_mode() != VCL_SIZE_GROUP_NONE)
     {
         std::set<vcl::Window*> &rWindows = pWindowImpl->m_xSizeGroup->get_widgets();


More information about the Libreoffice-commits mailing list