sfx2/source/control/thumbnailview.cxx    |    2 -
 sfx2/source/control/thumbnailviewacc.cxx |   47 +++++++++++++++++++++++++++++--
 sfx2/source/control/thumbnailviewacc.hxx |    6 +++
 3 files changed, 52 insertions(+), 3 deletions(-)

New commits:
commit cdc6d32d9062b1c143b094910bc913cb8f183afa
Author: Jacobo Aragunde Pérez <jaragu...@igalia.com>
Date:   Mon Jan 20 20:22:32 2014 +0100

    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 <caol...@redhat.com>
    Tested-by: Caolán McNamara <caol...@redhat.com>
    (cherry picked from commit 01a9f7b2fb6b3445ba9a93a4278ffa3821f7d04b)

diff --git a/sfx2/source/control/thumbnailview.cxx 
b/sfx2/source/control/thumbnailview.cxx
index 1fe98f1..35380a8 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 3f61244..cd4a6d2 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 1e4f582..74f9f14 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
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to