summaryrefslogtreecommitdiff
path: root/sw/inc/unobaseclass.hxx
diff options
context:
space:
mode:
authorMichael Stahl <mstahl@redhat.com>2015-06-30 13:09:32 +0200
committerMichael Stahl <mstahl@redhat.com>2015-06-30 14:00:30 +0200
commitb6cefd5e8b5086619e591385a0d7a6ffcd9783b9 (patch)
tree4657b6ffacdf5fc427001c03c6d932e266879d2c /sw/inc/unobaseclass.hxx
parent6c76a0a84785b48c29687e6d31b8229a230563d8 (diff)
sw: avoid layout recursion when loading documents with charts...
... that have a Writer table as data source, such as ooo38798-1.sxw. The problem is that during layouting, the SwWrtShell::CalcAndSetScale() wants to call setVisualAreaSize() on the embedded chart object. This switches the state of the object to RUNNING, which loads it from the file, and during that the ODF filter calls into SwChartDataProvider and that uses a UnoActionRemoveContext; unfortunately that ends all pending Actions, so we get a recursive layout action. Apparently the UnoActionRemoveContext is required to call SwUnoTableCrsr::MakeBoxSels() for old-style tables, which need layout frames for selection?!? Try to avoid the problem by disabling UnoActionRemoveContext in case a new-style table will be selected, which can be done without layout. Change-Id: I097991ffb2e78ddf011db7575f7bb63ae8aa7005
Diffstat (limited to 'sw/inc/unobaseclass.hxx')
-rw-r--r--sw/inc/unobaseclass.hxx4
1 files changed, 4 insertions, 0 deletions
diff --git a/sw/inc/unobaseclass.hxx b/sw/inc/unobaseclass.hxx
index bfbc9be95f4b..17ac71c081b6 100644
--- a/sw/inc/unobaseclass.hxx
+++ b/sw/inc/unobaseclass.hxx
@@ -29,6 +29,7 @@
class SfxPoolItem;
class SwClient;
class SwDoc;
+class SwUnoTableCrsr;
typedef ::cppu::WeakImplHelper
< ::com::sun::star::lang::XServiceInfo
@@ -70,6 +71,8 @@ class UnoActionContext
/*
interrupt Actions for a little while
+ FIXME: this is a vile abomination that may cause recursive layout actions!
+ C'thulhu fhtagn.
*/
class UnoActionRemoveContext
{
@@ -78,6 +81,7 @@ class UnoActionRemoveContext
public:
UnoActionRemoveContext(SwDoc *const pDoc);
+ UnoActionRemoveContext(SwUnoTableCrsr const& rCursor);
~UnoActionRemoveContext();
};