[libreoffice/f20] unbreak tables in impress
Caolán McNamara
caolanm at fedoraproject.org
Wed Nov 19 13:42:09 UTC 2014
commit c1307e3f9e21fb97f53161192bbe820a68382ffb
Author: Caolán McNamara <caolanm at redhat.com>
Date: Wed Nov 19 13:42:06 2014 +0000
unbreak tables in impress
...ress-tables-are-not-interactively-growing.patch | 55 ++++++++++++++
...able-layout-cache-returns-wrong-rectangle.patch | 79 ++++++++++++++++++++
libreoffice.spec | 7 ++-
3 files changed, 140 insertions(+), 1 deletions(-)
---
diff --git a/0001-impress-tables-are-not-interactively-growing.patch b/0001-impress-tables-are-not-interactively-growing.patch
new file mode 100644
index 0000000..26cb866
--- /dev/null
+++ b/0001-impress-tables-are-not-interactively-growing.patch
@@ -0,0 +1,55 @@
+From 5a958aa9d95f0c14e4980f6909550e657d87a3a9 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= <caolanm at redhat.com>
+Date: Thu, 13 Nov 2014 14:31:09 +0000
+Subject: [PATCH] impress tables are not interactively growing
+
+the optimization here stops tables growing as their text
+contents change in editing mode
+
+So, just recalculate if the table could grow and its
+being interactively edited, which leaves the original
+(dubious ?) load-time optimization in place
+
+Change-Id: I894acf47d34ec8b68aaf9076b5a0cb7e29c38a17
+(cherry picked from commit 22ef69b25fa60f4543dc72cb7a8d2f88b789ce43)
+---
+ svx/source/table/svdotable.cxx | 9 ++++-----
+ 1 file changed, 4 insertions(+), 5 deletions(-)
+
+diff --git a/svx/source/table/svdotable.cxx b/svx/source/table/svdotable.cxx
+index fbd532a..856a9e5 100644
+--- a/svx/source/table/svdotable.cxx
++++ b/svx/source/table/svdotable.cxx
+@@ -689,16 +689,17 @@ sal_Int32 SdrTableObjImpl::getRowCount() const
+ return mxTable.is() ? mxTable->getRowCount() : 0;
+ }
+
+-
+-
+ void SdrTableObjImpl::LayoutTable( Rectangle& rArea, bool bFitWidth, bool bFitHeight )
+ {
+ if( mpLayouter && mpTableObj->GetModel() )
+ {
+ // Optimization: SdrTableObj::SetChanged() can call this very often, repeatedly
+ // with the same settings, noticeably increasing load time. Skip if already done.
++ bool bInteractiveMightGrowBecauseTextChanged =
++ mpTableObj->IsRealyEdited() && (mpTableObj->IsAutoGrowHeight() || mpTableObj->IsAutoGrowWidth());
+ WritingMode writingMode = mpTableObj->GetWritingMode();
+- if( lastLayoutTable != this || lastLayoutInputRectangle != rArea
++ if( bInteractiveMightGrowBecauseTextChanged
++ || lastLayoutTable != this || lastLayoutInputRectangle != rArea
+ || lastLayoutFitWidth != bFitWidth || lastLayoutFitHeight != bFitHeight
+ || lastLayoutMode != writingMode
+ || lastRowCount != getRowCount()
+@@ -722,8 +723,6 @@ void SdrTableObjImpl::LayoutTable( Rectangle& rArea, bool bFitWidth, bool bFitHe
+ }
+ }
+
+-
+-
+ void SdrTableObjImpl::UpdateCells( Rectangle& rArea )
+ {
+ if( mpLayouter && mxTable.is() )
+--
+1.9.3
+
diff --git a/0001-table-layout-cache-returns-wrong-rectangle.patch b/0001-table-layout-cache-returns-wrong-rectangle.patch
new file mode 100644
index 0000000..628baec
--- /dev/null
+++ b/0001-table-layout-cache-returns-wrong-rectangle.patch
@@ -0,0 +1,79 @@
+From f79f3d1322b396f5f45ccd7742015749e93ac57b Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= <caolanm at redhat.com>
+Date: Thu, 13 Nov 2014 13:32:35 +0000
+Subject: [PATCH] table layout cache returns wrong rectangle
+
+the layouter can modify its input rectangle to grow
+it to the necessary size to contain the layout
+
+but we're returning the input rectangle when the inputs are the same as the
+last call, not returning the output rectangle.
+
+cache the output rect for a given input and return that
+
+so now insert->table in impress and tab so extra cells are added and
+then select the table and the blue border contains the whole
+table, not just the first two rows
+
+Change-Id: I4f09594d82c1597204afbd059e175af9bf8e2527
+(cherry picked from commit 98cd2671f0a215ced6203372ac673e2380031ac0)
+---
+ svx/source/table/svdotable.cxx | 15 +++++++++++----
+ 1 file changed, 11 insertions(+), 4 deletions(-)
+
+diff --git a/svx/source/table/svdotable.cxx b/svx/source/table/svdotable.cxx
+index d49cfb3..fbd532a 100644
+--- a/svx/source/table/svdotable.cxx
++++ b/svx/source/table/svdotable.cxx
+@@ -244,7 +244,8 @@ public:
+ virtual bool isInUse() SAL_OVERRIDE;
+ private:
+ static SdrTableObjImpl* lastLayoutTable;
+- static Rectangle lastLayoutRectangle;
++ static Rectangle lastLayoutInputRectangle;
++ static Rectangle lastLayoutResultRectangle;
+ static bool lastLayoutFitWidth;
+ static bool lastLayoutFitHeight;
+ static WritingMode lastLayoutMode;
+@@ -253,7 +254,8 @@ private:
+ };
+
+ SdrTableObjImpl* SdrTableObjImpl::lastLayoutTable = NULL;
+-Rectangle SdrTableObjImpl::lastLayoutRectangle;
++Rectangle SdrTableObjImpl::lastLayoutInputRectangle;
++Rectangle SdrTableObjImpl::lastLayoutResultRectangle;
+ bool SdrTableObjImpl::lastLayoutFitWidth;
+ bool SdrTableObjImpl::lastLayoutFitHeight;
+ WritingMode SdrTableObjImpl::lastLayoutMode;
+@@ -696,14 +698,14 @@ void SdrTableObjImpl::LayoutTable( Rectangle& rArea, bool bFitWidth, bool bFitHe
+ // Optimization: SdrTableObj::SetChanged() can call this very often, repeatedly
+ // with the same settings, noticeably increasing load time. Skip if already done.
+ WritingMode writingMode = mpTableObj->GetWritingMode();
+- if( lastLayoutTable != this || lastLayoutRectangle != rArea
++ if( lastLayoutTable != this || lastLayoutInputRectangle != rArea
+ || lastLayoutFitWidth != bFitWidth || lastLayoutFitHeight != bFitHeight
+ || lastLayoutMode != writingMode
+ || lastRowCount != getRowCount()
+ || lastColCount != getColumnCount() )
+ {
+ lastLayoutTable = this;
+- lastLayoutRectangle = rArea;
++ lastLayoutInputRectangle = rArea;
+ lastLayoutFitWidth = bFitWidth;
+ lastLayoutFitHeight = bFitHeight;
+ lastLayoutMode = writingMode;
+@@ -711,6 +713,11 @@ void SdrTableObjImpl::LayoutTable( Rectangle& rArea, bool bFitWidth, bool bFitHe
+ lastColCount = getColumnCount();
+ TableModelNotifyGuard aGuard( mxTable.get() );
+ mpLayouter->LayoutTable( rArea, bFitWidth, bFitHeight );
++ lastLayoutResultRectangle = rArea;
++ }
++ else
++ {
++ rArea = lastLayoutResultRectangle;
+ }
+ }
+ }
+--
+1.9.3
+
diff --git a/libreoffice.spec b/libreoffice.spec
index 9812325..98b02e9 100644
--- a/libreoffice.spec
+++ b/libreoffice.spec
@@ -36,7 +36,7 @@ Summary: Free Software Productivity Suite
Name: libreoffice
Epoch: 1
Version: %{libo_version}.2
-Release: 7%{?libo_prerelease}%{?dist}
+Release: 8%{?libo_prerelease}%{?dist}
License: (MPLv1.1 or LGPLv3+) and LGPLv3 and LGPLv2+ and BSD and (MPLv1.1 or GPLv2 or LGPLv2 or Netscape) and Public Domain and ASL 2.0 and Artistic and MPLv2.0
Group: Applications/Productivity
URL: http://www.libreoffice.org/
@@ -321,6 +321,8 @@ Patch65: 0001-resolved-fdo-82936-do-not-clear-the-3D-flag-on-refup.patch
Patch66: 0001-fdo-85282-Correct-adjustment-of-range-reference-on-d.patch
Patch67: 0001-Resolves-fdo-65634-improve-wheel-scrolling-sidebar-p.patch
Patch68: 0001-Related-fdo-65634-make-sidebar-react-to-resizes-when.patch
+Patch69: 0001-table-layout-cache-returns-wrong-rectangle.patch
+Patch70: 0001-impress-tables-are-not-interactively-growing.patch
%define instdir %{_libdir}
%define baseinstdir %{instdir}/libreoffice
@@ -2262,6 +2264,9 @@ update-desktop-database %{_datadir}/applications &> /dev/null || :
%endif
%changelog
+* Wed Nov 19 2014 Caolán McNamara <caolanm at redhat.com> - 1:4.2.7.2-8
+- table resizing etc in impress is mangled
+
* Thu Nov 13 2014 Caolán McNamara <caolanm at redhat.com> - 1:4.2.7.2-7
- Resolves: rhbz#1163477 improve wheel scrolling in sidebar
More information about the scm-commits
mailing list