summaryrefslogtreecommitdiff
path: root/svtools
diff options
context:
space:
mode:
authorStephan Bergmann <sbergman@redhat.com>2019-05-24 17:40:55 +0200
committerStephan Bergmann <sbergman@redhat.com>2019-05-24 23:08:53 +0200
commitaf67aeff0e76c1130401685824a6a2d9216e8abe (patch)
tree23084c460bddcf7b36bd5cfe185377b421bebb3d /svtools
parent04b60370a73b79e3aa0a04bc7cff45dff1db6286 (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')
-rw-r--r--svtools/source/control/valueacc.cxx18
-rw-r--r--svtools/source/control/valueimp.hxx12
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();