diff options
author | Stephan Bergmann <sbergman@redhat.com> | 2019-05-24 17:40:55 +0200 |
---|---|---|
committer | Stephan Bergmann <sbergman@redhat.com> | 2019-05-24 23:08:53 +0200 |
commit | af67aeff0e76c1130401685824a6a2d9216e8abe (patch) | |
tree | 23084c460bddcf7b36bd5cfe185377b421bebb3d /svtools/source | |
parent | 04b60370a73b79e3aa0a04bc7cff45dff1db6286 (diff) |
Avoid broken static_cast
...from SvtValueItemAcc to unrelated ValueItemAcc in ~SvtValueSetItem. The
Svt* classes had been copied from the non-Svt* ones in
4883fd31141c3598b25a123033297f847cd18552 "weld ScTabBgColorDlg", but this
static_cast had apparently been missed when copying ~SvtValueSetItem from
~ValueSetItem (and the originally copied SvtValueItemAcc::ParentDestroyed had
later been removed with d4d037619638e1915d15dba81c38a1c9b3157972
"loplugin:unusedmethods"). But the static_cast in ~ValueSetItem would never
have been necessary in the first place (though that needs partial reversal of
508c95f1b655d9cfa6be37a5a9de9aff6fd383bf "improve passstuffbyref return
analysis", which had unhelpfully changed ValueSetItem::GetAccessible to return a
reference).
Change-Id: If1c9bb617ac4ad3c24371729504f9082594c048f
Reviewed-on: https://gerrit.libreoffice.org/72914
Tested-by: Jenkins
Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
Diffstat (limited to 'svtools/source')
-rw-r--r-- | svtools/source/control/valueacc.cxx | 18 | ||||
-rw-r--r-- | svtools/source/control/valueimp.hxx | 12 |
2 files changed, 20 insertions, 10 deletions
diff --git a/svtools/source/control/valueacc.cxx b/svtools/source/control/valueacc.cxx index b6a74cc43d6a..1033fa1c52fd 100644 --- a/svtools/source/control/valueacc.cxx +++ b/svtools/source/control/valueacc.cxx @@ -50,17 +50,17 @@ ValueSetItem::~ValueSetItem() { if( mxAcc.is() ) { - static_cast< ValueItemAcc* >( mxAcc.get() )->ParentDestroyed(); + mxAcc->ParentDestroyed(); } } -uno::Reference< accessibility::XAccessible > const & ValueSetItem::GetAccessible( bool bIsTransientChildrenDisabled ) +uno::Reference< accessibility::XAccessible > ValueSetItem::GetAccessible( bool bIsTransientChildrenDisabled ) { if( !mxAcc.is() ) mxAcc = new ValueItemAcc( this, bIsTransientChildrenDisabled ); - return mxAcc; + return mxAcc.get(); } SvtValueSetItem::SvtValueSetItem( SvtValueSet& rParent ) @@ -77,16 +77,16 @@ SvtValueSetItem::~SvtValueSetItem() { if( mxAcc.is() ) { - static_cast< ValueItemAcc* >( mxAcc.get() )->ParentDestroyed(); + mxAcc.get()->ParentDestroyed(); } } -uno::Reference< accessibility::XAccessible > const & SvtValueSetItem::GetAccessible( bool bIsTransientChildrenDisabled ) +uno::Reference< accessibility::XAccessible > SvtValueSetItem::GetAccessible( bool bIsTransientChildrenDisabled ) { if( !mxAcc.is() ) mxAcc = new SvtValueItemAcc( this, bIsTransientChildrenDisabled ); - return mxAcc; + return mxAcc.get(); } ValueSetAcc::ValueSetAcc( ValueSet* pParent ) : @@ -1073,6 +1073,12 @@ SvtValueItemAcc::~SvtValueItemAcc() { } +void SvtValueItemAcc::ParentDestroyed() +{ + const ::osl::MutexGuard aGuard( maMutex ); + mpParent = nullptr; +} + namespace { class theSvtValueItemAccUnoTunnelId : public rtl::Static< UnoTunnelIdInit, theSvtValueItemAccUnoTunnelId > {}; diff --git a/svtools/source/control/valueimp.hxx b/svtools/source/control/valueimp.hxx index c960434a6159..635a7d0da624 100644 --- a/svtools/source/control/valueimp.hxx +++ b/svtools/source/control/valueimp.hxx @@ -47,7 +47,9 @@ enum ValueSetItemType VALUESETITEM_USERDRAW }; +class ValueItemAcc; class ValueSet; +class SvtValueItemAcc; class SvtValueSet; struct ValueSetItem @@ -60,12 +62,12 @@ struct ValueSetItem Color maColor; OUString maText; void* mpData; - css::uno::Reference< css::accessibility::XAccessible > mxAcc; + rtl::Reference< ValueItemAcc > mxAcc; explicit ValueSetItem( ValueSet& rParent ); ~ValueSetItem(); - css::uno::Reference< css::accessibility::XAccessible > const & + css::uno::Reference< css::accessibility::XAccessible > GetAccessible( bool bIsTransientChildrenDisabled ); }; @@ -79,12 +81,12 @@ struct SvtValueSetItem Color maColor; OUString maText; void* mpData; - css::uno::Reference< css::accessibility::XAccessible > mxAcc; + rtl::Reference< SvtValueItemAcc > mxAcc; explicit SvtValueSetItem( SvtValueSet& rParent ); ~SvtValueSetItem(); - css::uno::Reference< css::accessibility::XAccessible > const & + css::uno::Reference< css::accessibility::XAccessible > GetAccessible( bool bIsTransientChildrenDisabled ); }; @@ -410,6 +412,8 @@ public: SvtValueItemAcc(SvtValueSetItem* pParent, bool bIsTransientChildrenDisabled); virtual ~SvtValueItemAcc() override; + void ParentDestroyed(); + void FireAccessibleEvent( short nEventId, const css::uno::Any& rOldValue, const css::uno::Any& rNewValue ); static SvtValueItemAcc* getImplementation( const css::uno::Reference< css::uno::XInterface >& rxData ) throw(); |