summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBjoern Michaelsen <bjoern.michaelsen@libreoffice.org>2019-09-20 00:43:42 +0200
committerBjörn Michaelsen <bjoern.michaelsen@libreoffice.org>2019-09-20 02:22:46 +0200
commit11feca7a98e21062a2284e7d4dbb21030598cb65 (patch)
tree117bf110a188df55c1d7f5b3ae64294c4a3fe48b
parent7b554b78f864cc25e6178d81cb577daf0f0e7bf2 (diff)
no more SwClient in sw/source/filter/ww8
- prevent apparently leaking ~all InsertedTableClient by using a unique_ptr - rename InsertedTableClient to InsertedTableListener Change-Id: I60407113bf0ba28f5944ff9241a2d8a80a03d399 Reviewed-on: https://gerrit.libreoffice.org/79262 Tested-by: Jenkins Reviewed-by: Björn Michaelsen <bjoern.michaelsen@libreoffice.org>
-rw-r--r--sw/inc/node.hxx2
-rw-r--r--sw/source/filter/inc/msfilter.hxx11
-rw-r--r--sw/source/filter/ww8/writerhelper.cxx25
3 files changed, 22 insertions, 16 deletions
diff --git a/sw/inc/node.hxx b/sw/inc/node.hxx
index e3e469c5ff9d..9ed3eb02579a 100644
--- a/sw/inc/node.hxx
+++ b/sw/inc/node.hxx
@@ -484,7 +484,7 @@ private:
// SwTableNode
-class SW_DLLPUBLIC SwTableNode : public SwStartNode, public SwModify
+class SW_DLLPUBLIC SwTableNode : public SwStartNode, public sw::BroadcastingModify
{
friend class SwNodes;
std::unique_ptr<SwTable> m_pTable;
diff --git a/sw/source/filter/inc/msfilter.hxx b/sw/source/filter/inc/msfilter.hxx
index e46769c02216..b5fbfdb2e737 100644
--- a/sw/source/filter/inc/msfilter.hxx
+++ b/sw/source/filter/inc/msfilter.hxx
@@ -32,6 +32,7 @@
#include "fltshell.hxx"
#include <shellio.hxx>
#include <svl/zforlist.hxx>
+#include <svl/listener.hxx>
class SwDoc;
class SwPaM;
@@ -250,11 +251,13 @@ namespace sw
explicit FontMapExport(const OUString &rFontDescription);
};
- class InsertedTableClient : public SwClient
+ class InsertedTableListener: public SvtListener
{
+ SwTableNode* m_pTableNode;
public:
- explicit InsertedTableClient(SwTableNode & rNode);
- SwTableNode * GetTableNode();
+ explicit InsertedTableListener(SwTableNode& rNode);
+ SwTableNode* GetTableNode();
+ virtual void Notify(const SfxHint&) override;
};
/** Handle requirements for table formatting in insert->file mode.
@@ -276,7 +279,7 @@ namespace sw
class InsertedTablesManager
{
public:
- typedef std::map<InsertedTableClient *, SwNodeIndex *> TableMap;
+ typedef std::map<std::unique_ptr<InsertedTableListener>, SwNodeIndex*> TableMap;
void DelAndMakeTableFrames();
void InsertTable(SwTableNode &rTableNode, SwPaM &rPaM);
explicit InsertedTablesManager(const SwDoc &rDoc);
diff --git a/sw/source/filter/ww8/writerhelper.cxx b/sw/source/filter/ww8/writerhelper.cxx
index 792f492fa069..4c45fc48abb9 100644
--- a/sw/source/filter/ww8/writerhelper.cxx
+++ b/sw/source/filter/ww8/writerhelper.cxx
@@ -839,20 +839,24 @@ namespace sw
namespace util
{
- InsertedTableClient::InsertedTableClient(SwTableNode & rNode)
+ InsertedTableListener::InsertedTableListener(SwTableNode& rNode)
+ : m_pTableNode(&rNode)
{
- rNode.Add(this);
+ StartListening(rNode.GetNotifier());
}
- SwTableNode * InsertedTableClient::GetTableNode()
+ SwTableNode* InsertedTableListener::GetTableNode()
+ { return m_pTableNode; }
+
+ void InsertedTableListener::Notify(const SfxHint& rHint)
{
- return dynamic_cast<SwTableNode *> (GetRegisteredInNonConst());
+ if(rHint.GetId() == SfxHintId::Dying)
+ m_pTableNode = nullptr;
}
InsertedTablesManager::InsertedTablesManager(const SwDoc &rDoc)
: mbHasRoot(rDoc.getIDocumentLayoutAccess().GetCurrentLayout())
- {
- }
+ { }
void InsertedTablesManager::DelAndMakeTableFrames()
{
@@ -877,16 +881,15 @@ namespace sw
}
}
- void InsertedTablesManager::InsertTable(SwTableNode &rTableNode, SwPaM &rPaM)
+ void InsertedTablesManager::InsertTable(SwTableNode& rTableNode, SwPaM& rPaM)
{
if (!mbHasRoot)
return;
//Associate this tablenode with this after position, replace an //old
//node association if necessary
-
- InsertedTableClient * pClient = new InsertedTableClient(rTableNode);
-
- maTables.emplace(pClient, &(rPaM.GetPoint()->nNode));
+ maTables.emplace(
+ std::unique_ptr<InsertedTableListener>(new InsertedTableListener(rTableNode)),
+ &(rPaM.GetPoint()->nNode));
}
}