diff options
author | Jacobo Aragunde Pérez <jaragunde@igalia.com> | 2014-01-20 20:22:32 +0100 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2014-01-21 15:14:14 +0000 |
commit | 01a9f7b2fb6b3445ba9a93a4278ffa3821f7d04b (patch) | |
tree | 93e0725acb2cc8f1c755854a5db943cbde2c8735 /sfx2 | |
parent | 2cb1a05e867c17328ef24bd3489f3c18d80dfcf4 (diff) |
fdo#72639: send proper ACTIVE_DESCENDANT_CHANGED events
At ThumbnailView::SelectItem the piece of code in charge of the
accessible events related to selection change was mistakenly using
the accessibility helper class ThumbnailViewAcc instead of
ThumbnailViewItemAcc which is the proper one for managing the events
related to ThumbnailViewItem objects.
The methods FireAccessibleEvent and static getImplementation had to
be added to ThumbnailViewItemAcc to provide the full functionality
required.
Change-Id: Ia5ffb24c920f3c48854021700819be683c979411
Reviewed-on: https://gerrit.libreoffice.org/7551
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
Tested-by: Caolán McNamara <caolanm@redhat.com>
Diffstat (limited to 'sfx2')
-rw-r--r-- | sfx2/source/control/thumbnailview.cxx | 2 | ||||
-rw-r--r-- | sfx2/source/control/thumbnailviewacc.cxx | 47 | ||||
-rw-r--r-- | sfx2/source/control/thumbnailviewacc.hxx | 6 |
3 files changed, 52 insertions, 3 deletions
diff --git a/sfx2/source/control/thumbnailview.cxx b/sfx2/source/control/thumbnailview.cxx index 5c8522e7b2b1..06f5800d3c97 100644 --- a/sfx2/source/control/thumbnailview.cxx +++ b/sfx2/source/control/thumbnailview.cxx @@ -1139,7 +1139,7 @@ void ThumbnailView::SelectItem( sal_uInt16 nItemId ) if( ImplHasAccessibleListeners() ) { // focus event (select) - ThumbnailViewAcc* pItemAcc = ThumbnailViewAcc::getImplementation( pItem->GetAccessible( mbIsTransientChildrenDisabled ) ); + ThumbnailViewItemAcc* pItemAcc = ThumbnailViewItemAcc::getImplementation( pItem->GetAccessible( mbIsTransientChildrenDisabled ) ); if( pItemAcc ) { diff --git a/sfx2/source/control/thumbnailviewacc.cxx b/sfx2/source/control/thumbnailviewacc.cxx index 3f612442bc9f..cd4a6d2c8b13 100644 --- a/sfx2/source/control/thumbnailviewacc.cxx +++ b/sfx2/source/control/thumbnailviewacc.cxx @@ -97,7 +97,7 @@ void ThumbnailViewAcc::GetFocus (void) { mbIsFocused = true; - // Boradcast the state change. + // Broadcast the state change. ::com::sun::star::uno::Any aOldState, aNewState; aNewState <<= ::com::sun::star::accessibility::AccessibleStateType::FOCUSED; FireAccessibleEvent( @@ -109,7 +109,7 @@ void ThumbnailViewAcc::LoseFocus (void) { mbIsFocused = false; - // Boradcast the state change. + // Broadcast the state change. ::com::sun::star::uno::Any aOldState, aNewState; aOldState <<= ::com::sun::star::accessibility::AccessibleStateType::FOCUSED; FireAccessibleEvent( @@ -612,6 +612,32 @@ ThumbnailViewItemAcc::~ThumbnailViewItemAcc() { } +void ThumbnailViewItemAcc::FireAccessibleEvent( short nEventId, const uno::Any& rOldValue, const uno::Any& rNewValue ) +{ + if( nEventId ) + { + ::std::vector< uno::Reference< accessibility::XAccessibleEventListener > > aTmpListeners( mxEventListeners ); + accessibility::AccessibleEventObject aEvtObject; + + aEvtObject.EventId = nEventId; + aEvtObject.Source = static_cast<uno::XWeak*>(this); + aEvtObject.NewValue = rNewValue; + aEvtObject.OldValue = rOldValue; + + for (::std::vector< uno::Reference< accessibility::XAccessibleEventListener > >::const_iterator aIter( aTmpListeners.begin() ), aEnd( aTmpListeners.end() ); + aIter != aEnd ; ++aIter) + { + try + { + (*aIter)->notifyEvent( aEvtObject ); + } + catch(const uno::Exception&) + { + } + } + } +} + void ThumbnailViewItemAcc::ParentDestroyed() { const ::osl::MutexGuard aGuard( maMutex ); @@ -628,6 +654,23 @@ const uno::Sequence< sal_Int8 >& ThumbnailViewItemAcc::getUnoTunnelId() return theValueItemAccUnoTunnelId::get().getSeq(); } +ThumbnailViewItemAcc* ThumbnailViewItemAcc::getImplementation( const uno::Reference< uno::XInterface >& rxData ) + throw() +{ + try + { + uno::Reference< lang::XUnoTunnel > xUnoTunnel( rxData, uno::UNO_QUERY ); + return( xUnoTunnel.is() ? + reinterpret_cast<ThumbnailViewItemAcc*>(sal::static_int_cast<sal_IntPtr>( + xUnoTunnel->getSomething( ThumbnailViewItemAcc::getUnoTunnelId() ))) : + NULL ); + } + catch(const ::com::sun::star::uno::Exception&) + { + return NULL; + } +} + uno::Reference< accessibility::XAccessibleContext > SAL_CALL ThumbnailViewItemAcc::getAccessibleContext() throw (uno::RuntimeException) { diff --git a/sfx2/source/control/thumbnailviewacc.hxx b/sfx2/source/control/thumbnailviewacc.hxx index 1e4f5823e636..74f9f1401f67 100644 --- a/sfx2/source/control/thumbnailviewacc.hxx +++ b/sfx2/source/control/thumbnailviewacc.hxx @@ -187,10 +187,16 @@ public: ThumbnailViewItemAcc( ThumbnailViewItem* pParent, bool bIsTransientChildrenDisabled ); ~ThumbnailViewItemAcc(); + void FireAccessibleEvent( short nEventId, + const ::com::sun::star::uno::Any& rOldValue, + const ::com::sun::star::uno::Any& rNewValue ); + void ParentDestroyed(); sal_Bool HasAccessibleListeners() const { return( mxEventListeners.size() > 0 ); } + static ThumbnailViewItemAcc* getImplementation( const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& rxData ) throw(); + public: // XAccessible |