summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJacobo Aragunde Pérez <jaragunde@igalia.com>2014-01-20 20:22:32 +0100
committerMiklos Vajna <vmiklos@collabora.co.uk>2014-01-21 15:38:34 +0000
commiteed45184ff542a713d28928b50c5a8ce8efd3a92 (patch)
tree7348307f13ae2d909bdf9f88db7bbd6b032b3848
parenta4a6fa38cebf6182769495c74af5f59588056e0b (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> (cherry picked from commit 01a9f7b2fb6b3445ba9a93a4278ffa3821f7d04b) (cherry picked from commit cdc6d32d9062b1c143b094910bc913cb8f183afa) Reviewed-on: https://gerrit.libreoffice.org/7573 Reviewed-by: Michael Stahl <mstahl@redhat.com> Reviewed-by: Miklos Vajna <vmiklos@collabora.co.uk> Tested-by: Miklos Vajna <vmiklos@collabora.co.uk>
-rw-r--r--sfx2/source/control/thumbnailview.cxx2
-rw-r--r--sfx2/source/control/thumbnailviewacc.cxx47
-rw-r--r--sfx2/source/control/thumbnailviewacc.hxx6
3 files changed, 52 insertions, 3 deletions
diff --git a/sfx2/source/control/thumbnailview.cxx b/sfx2/source/control/thumbnailview.cxx
index 1fe98f1195dd..35380a8ebfa5 100644
--- a/sfx2/source/control/thumbnailview.cxx
+++ b/sfx2/source/control/thumbnailview.cxx
@@ -1140,7 +1140,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