include/sfx2/fcontnr.hxx | 11 +++++------ include/tools/ref.hxx | 27 +++++++++++++++++---------- sfx2/source/inc/objshimp.hxx | 2 +- 3 files changed, 23 insertions(+), 17 deletions(-)
New commits: commit 48528e00629e746a5e091a70644b9456e5037b7f Author: Noel Grandin <n...@peralex.com> Date: Thu Jul 10 15:44:28 2014 +0200 add some comments to include/tools/ref.hxx Change-Id: Ic38d7f5f816f2a91bfb468c0b7fb241b084a0c44 diff --git a/include/tools/ref.hxx b/include/tools/ref.hxx index cc52da4..6a8a01d 100644 --- a/include/tools/ref.hxx +++ b/include/tools/ref.hxx @@ -28,6 +28,7 @@ namespace tools { +/** T must be a class that extends SvRefBase */ template<typename T> class SvRef { public: SvRef(): pObj(0) {} @@ -142,6 +143,7 @@ public: }; +/** Classes that want to be referenced-counted via SvRef<T>, should extend this base class */ class TOOLS_DLLPUBLIC SvRefBase { static const sal_uIntPtr SV_NO_DELETE_REFCOUNT = 0x80000000; @@ -184,27 +186,36 @@ public: { return nRefCount; } }; +/** We only have one weak reference in LO, in include/sfx2/frame.hxx, class SfxFrameWeak. + This acts as a intermediary between SfxFrameWeak and SfxFrame_Impl. +*/ class SvCompatWeakHdl : public SvRefBase { friend class SvCompatWeakBase; void* _pObj; + SvCompatWeakHdl( void* pObj ) : _pObj( pObj ) {} public: - void ResetWeakBase( ) { _pObj = 0; } + void ResetWeakBase( ) { _pObj = 0; } void* GetObj() { return _pObj; } }; +/** We only have one place that extends this, in sfx2/source/view/impframe.hxx, class SfxFrame_Impl, + its function is to notify the SvCompatWeakHdl when an SfxFrame_Impl object is deleted. +*/ class SvCompatWeakBase { tools::SvRef<SvCompatWeakHdl> _xHdl; public: - SvCompatWeakHdl* GetHdl() { return _xHdl; } - - // does not use initializer due to compiler warnings + // Does not use initializer due to compiler warnings, + // because the lifetime of the _xHdl object can exceed the lifetime of this class. SvCompatWeakBase( void* pObj ) { _xHdl = new SvCompatWeakHdl( pObj ); } + ~SvCompatWeakBase() { _xHdl->ResetWeakBase(); } + + SvCompatWeakHdl* GetHdl() { return _xHdl; } }; #define SV_DECL_COMPAT_WEAK( ClassName ) \ commit 4ed943a24b79d2e4da30bdb282143327a8bfffd8 Author: Noel Grandin <n...@peralex.com> Date: Thu Jul 10 15:32:43 2014 +0200 inline SvCompatWeakHdlRef typedef .. only used in 2 places in the same file Change-Id: I5dc1dc77c3841bf86134f6a48597f8c1e71b2b3f diff --git a/include/tools/ref.hxx b/include/tools/ref.hxx index c2365f1..cc52da4 100644 --- a/include/tools/ref.hxx +++ b/include/tools/ref.hxx @@ -195,11 +195,9 @@ public: void* GetObj() { return _pObj; } }; -typedef tools::SvRef<SvCompatWeakHdl> SvCompatWeakHdlRef; - class SvCompatWeakBase { - SvCompatWeakHdlRef _xHdl; + tools::SvRef<SvCompatWeakHdl> _xHdl; public: SvCompatWeakHdl* GetHdl() { return _xHdl; } @@ -212,7 +210,7 @@ public: #define SV_DECL_COMPAT_WEAK( ClassName ) \ class ClassName##Weak \ { \ - SvCompatWeakHdlRef _xHdl; \ + tools::SvRef<SvCompatWeakHdl> _xHdl; \ public: \ inline ClassName##Weak( ) {} \ inline ClassName##Weak( ClassName* pObj ) { \ commit 6d2178b8c82ac7d2ac054e55b4221033acfab3d8 Author: Noel Grandin <n...@peralex.com> Date: Thu Jul 10 15:24:02 2014 +0200 inline tools::SvRefBaseRef typedef ..it is only used in two places Change-Id: If333936b26592ed44d3525f2eb3c21aafde7dddc diff --git a/include/sfx2/fcontnr.hxx b/include/sfx2/fcontnr.hxx index 8c3881a..96ebdcd 100644 --- a/include/sfx2/fcontnr.hxx +++ b/include/sfx2/fcontnr.hxx @@ -47,16 +47,15 @@ typedef sal_uInt16 SfxFilterContainerFlags; class SfxRefItem : public SfxPoolItem { - SvRefBaseRef aRef; + tools::SvRef<SvRefBase> maRef; public: + SfxRefItem( sal_uInt16 nWhichId, const tools::SvRef<SvRefBase>& rValue ) : SfxPoolItem( nWhichId ) + { maRef = rValue; } virtual SfxPoolItem* Clone( SfxItemPool* = 0 ) const SAL_OVERRIDE { return new SfxRefItem( *this ); } virtual bool operator==( const SfxPoolItem& rL) const SAL_OVERRIDE - { return ((SfxRefItem&)rL).aRef == aRef; } - SfxRefItem( sal_uInt16 nWhichId, const SvRefBaseRef& rValue ) : SfxPoolItem( nWhichId ) - { aRef = rValue; } - const SvRefBaseRef& GetValue() const { return aRef; } - + { return ((SfxRefItem&)rL).maRef == maRef; } + const tools::SvRef<SvRefBase>& GetValue() const { return maRef; } }; class SfxFrameWindow diff --git a/include/tools/ref.hxx b/include/tools/ref.hxx index 4d9bc86..c2365f1 100644 --- a/include/tools/ref.hxx +++ b/include/tools/ref.hxx @@ -184,8 +184,6 @@ public: { return nRefCount; } }; -typedef tools::SvRef<SvRefBase> SvRefBaseRef; - class SvCompatWeakHdl : public SvRefBase { friend class SvCompatWeakBase; diff --git a/sfx2/source/inc/objshimp.hxx b/sfx2/source/inc/objshimp.hxx index 72cbd96..a32e4f3 100644 --- a/sfx2/source/inc/objshimp.hxx +++ b/sfx2/source/inc/objshimp.hxx @@ -108,7 +108,7 @@ struct SfxObjectShell_Impl : public ::sfx2::IMacroDocumentAccess SfxModule* pModule; SfxObjectShellFlags eFlags; bool bReadOnlyUI; - SvRefBaseRef xHeaderAttributes; + tools::SvRef<SvRefBase> xHeaderAttributes; ::rtl::Reference< SfxBaseModel > pBaseModel; sal_uInt16 nStyleFilter; _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits