diff options
Diffstat (limited to 'accessibility/source/standard/vclxaccessiblestatusbar.cxx')
-rw-r--r-- | accessibility/source/standard/vclxaccessiblestatusbar.cxx | 88 |
1 files changed, 37 insertions, 51 deletions
diff --git a/accessibility/source/standard/vclxaccessiblestatusbar.cxx b/accessibility/source/standard/vclxaccessiblestatusbar.cxx index e84825ea0b3f..bbf19b4416a5 100644 --- a/accessibility/source/standard/vclxaccessiblestatusbar.cxx +++ b/accessibility/source/standard/vclxaccessiblestatusbar.cxx @@ -22,6 +22,8 @@ #include <toolkit/helper/convert.hxx> #include <com/sun/star/accessibility/AccessibleEventId.hpp> #include <com/sun/star/lang/IndexOutOfBoundsException.hpp> +#include <comphelper/accessiblecontexthelper.hxx> +#include <o3tl/safeint.hxx> #include <vcl/status.hxx> #include <vcl/vclevent.hxx> @@ -38,71 +40,59 @@ using namespace ::comphelper; VCLXAccessibleStatusBar::VCLXAccessibleStatusBar( VCLXWindow* pVCLXWindow ) :VCLXAccessibleComponent( pVCLXWindow ) { - m_pStatusBar = static_cast< StatusBar *>( GetWindow().get() ); + m_pStatusBar = GetAs<StatusBar>(); if ( m_pStatusBar ) - m_aAccessibleChildren.assign( m_pStatusBar->GetItemCount(), Reference< XAccessible >() ); + m_aAccessibleChildren.assign( m_pStatusBar->GetItemCount(), rtl::Reference< VCLXAccessibleStatusBarItem >() ); } void VCLXAccessibleStatusBar::UpdateShowing( sal_Int32 i, bool bShowing ) { - if ( i >= 0 && i < static_cast<sal_Int32>(m_aAccessibleChildren.size()) ) + if ( i >= 0 && o3tl::make_unsigned(i) < m_aAccessibleChildren.size() ) { - Reference< XAccessible > xChild( m_aAccessibleChildren[i] ); - if ( xChild.is() ) - { - VCLXAccessibleStatusBarItem* pVCLXAccessibleStatusBarItem = static_cast< VCLXAccessibleStatusBarItem* >( xChild.get() ); - if ( pVCLXAccessibleStatusBarItem ) - pVCLXAccessibleStatusBarItem->SetShowing( bShowing ); - } + rtl::Reference< VCLXAccessibleStatusBarItem > pVCLXAccessibleStatusBarItem( m_aAccessibleChildren[i] ); + if ( pVCLXAccessibleStatusBarItem ) + pVCLXAccessibleStatusBarItem->SetShowing( bShowing ); } } void VCLXAccessibleStatusBar::UpdateItemName( sal_Int32 i ) { - if ( i < 0 || i >= static_cast<sal_Int32>(m_aAccessibleChildren.size()) ) + if ( i < 0 || o3tl::make_unsigned(i) >= m_aAccessibleChildren.size() ) return; - Reference< XAccessible > xChild( m_aAccessibleChildren[i] ); - if ( xChild.is() ) + rtl::Reference< VCLXAccessibleStatusBarItem > pVCLXAccessibleStatusBarItem( m_aAccessibleChildren[i] ); + if ( pVCLXAccessibleStatusBarItem.is() ) { - VCLXAccessibleStatusBarItem* pVCLXAccessibleStatusBarItem = static_cast< VCLXAccessibleStatusBarItem* >( xChild.get() ); - if ( pVCLXAccessibleStatusBarItem ) - { - OUString sItemName = pVCLXAccessibleStatusBarItem->GetItemName(); - pVCLXAccessibleStatusBarItem->SetItemName( sItemName ); - } + OUString sItemName = pVCLXAccessibleStatusBarItem->GetItemName(); + pVCLXAccessibleStatusBarItem->SetItemName( sItemName ); } } void VCLXAccessibleStatusBar::UpdateItemText( sal_Int32 i ) { - if ( i < 0 || i >= static_cast<sal_Int32>(m_aAccessibleChildren.size()) ) + if ( i < 0 || o3tl::make_unsigned(i) >= m_aAccessibleChildren.size() ) return; - Reference< XAccessible > xChild( m_aAccessibleChildren[i] ); - if ( xChild.is() ) + rtl::Reference< VCLXAccessibleStatusBarItem > pVCLXAccessibleStatusBarItem( m_aAccessibleChildren[i] ); + if ( pVCLXAccessibleStatusBarItem.is() ) { - VCLXAccessibleStatusBarItem* pVCLXAccessibleStatusBarItem = static_cast< VCLXAccessibleStatusBarItem* >( xChild.get() ); - if ( pVCLXAccessibleStatusBarItem ) - { - OUString sItemText = pVCLXAccessibleStatusBarItem->GetItemText(); - pVCLXAccessibleStatusBarItem->SetItemText( sItemText ); - } + OUString sItemText = pVCLXAccessibleStatusBarItem->GetItemText(); + pVCLXAccessibleStatusBarItem->SetItemText( sItemText ); } } void VCLXAccessibleStatusBar::InsertChild( sal_Int32 i ) { - if ( i < 0 || i > static_cast<sal_Int32>(m_aAccessibleChildren.size()) ) + if ( i < 0 || o3tl::make_unsigned(i) > m_aAccessibleChildren.size() ) return; // insert entry in child list - m_aAccessibleChildren.insert( m_aAccessibleChildren.begin() + i, Reference< XAccessible >() ); + m_aAccessibleChildren.insert( m_aAccessibleChildren.begin() + i, rtl::Reference< VCLXAccessibleStatusBarItem >() ); // send accessible child event Reference< XAccessible > xChild( getAccessibleChild( i ) ); @@ -117,7 +107,7 @@ void VCLXAccessibleStatusBar::InsertChild( sal_Int32 i ) void VCLXAccessibleStatusBar::RemoveChild( sal_Int32 i ) { - if ( i < 0 || i >= static_cast<sal_Int32>(m_aAccessibleChildren.size()) ) + if ( i < 0 || o3tl::make_unsigned(i) >= m_aAccessibleChildren.size() ) return; // get the accessible of the removed page @@ -158,18 +148,16 @@ void VCLXAccessibleStatusBar::ProcessWindowEvent( const VclWindowEvent& rVclWind { if ( m_pStatusBar ) { + OExternalLockGuard aGuard( this ); + sal_uInt16 nItemId = static_cast<sal_uInt16>(reinterpret_cast<sal_IntPtr>(rVclWindowEvent.GetData())); - for ( sal_Int32 i = 0, nCount = getAccessibleChildCount(); i < nCount; ++i ) + for ( sal_Int64 i = 0, nCount = m_aAccessibleChildren.size(); i < nCount; ++i ) { - Reference< XAccessible > xChild( getAccessibleChild( i ) ); - if ( xChild.is() ) + sal_uInt16 nChildItemId = m_pStatusBar->GetItemId( static_cast<sal_uInt16>(i) ); + if ( nChildItemId == nItemId ) { - VCLXAccessibleStatusBarItem* pVCLXAccessibleStatusBarItem = static_cast< VCLXAccessibleStatusBarItem* >( xChild.get() ); - if ( pVCLXAccessibleStatusBarItem && pVCLXAccessibleStatusBarItem->GetItemId() == nItemId ) - { - RemoveChild( i ); - break; - } + RemoveChild( i ); + break; } } } @@ -219,9 +207,8 @@ void VCLXAccessibleStatusBar::ProcessWindowEvent( const VclWindowEvent& rVclWind m_pStatusBar = nullptr; // dispose all children - for (const Reference<XAccessible>& i : m_aAccessibleChildren) + for (const rtl::Reference<VCLXAccessibleStatusBarItem>& xComponent : m_aAccessibleChildren) { - Reference< XComponent > xComponent( i, UNO_QUERY ); if ( xComponent.is() ) xComponent->dispose(); } @@ -250,9 +237,8 @@ void VCLXAccessibleStatusBar::disposing() m_pStatusBar = nullptr; // dispose all children - for (const Reference<XAccessible>& i : m_aAccessibleChildren) + for (const rtl::Reference<VCLXAccessibleStatusBarItem>& xComponent : m_aAccessibleChildren) { - Reference< XComponent > xComponent( i, UNO_QUERY ); if ( xComponent.is() ) xComponent->dispose(); } @@ -265,20 +251,20 @@ void VCLXAccessibleStatusBar::disposing() OUString VCLXAccessibleStatusBar::getImplementationName() { - return "com.sun.star.comp.toolkit.AccessibleStatusBar"; + return u"com.sun.star.comp.toolkit.AccessibleStatusBar"_ustr; } Sequence< OUString > VCLXAccessibleStatusBar::getSupportedServiceNames() { - return { "com.sun.star.awt.AccessibleStatusBar" }; + return { u"com.sun.star.awt.AccessibleStatusBar"_ustr }; } // XAccessibleContext -sal_Int32 VCLXAccessibleStatusBar::getAccessibleChildCount() +sal_Int64 VCLXAccessibleStatusBar::getAccessibleChildCount() { OExternalLockGuard aGuard( this ); @@ -286,14 +272,14 @@ sal_Int32 VCLXAccessibleStatusBar::getAccessibleChildCount() } -Reference< XAccessible > VCLXAccessibleStatusBar::getAccessibleChild( sal_Int32 i ) +Reference< XAccessible > VCLXAccessibleStatusBar::getAccessibleChild( sal_Int64 i ) { OExternalLockGuard aGuard( this ); - if ( i < 0 || i >= static_cast<sal_Int32> (m_aAccessibleChildren.size()) ) + if ( i < 0 || o3tl::make_unsigned(i) >= m_aAccessibleChildren.size() ) throw IndexOutOfBoundsException(); - Reference< XAccessible > xChild = m_aAccessibleChildren[i]; + rtl::Reference< VCLXAccessibleStatusBarItem > xChild = m_aAccessibleChildren[i]; if ( !xChild.is() ) { if ( m_pStatusBar ) @@ -323,7 +309,7 @@ Reference< XAccessible > VCLXAccessibleStatusBar::getAccessibleAtPoint( const aw { sal_uInt16 nItemId = m_pStatusBar->GetItemId( VCLPoint( rPoint ) ); sal_Int32 nItemPos = m_pStatusBar->GetItemPos( nItemId ); - if ( nItemPos >= 0 && nItemPos < static_cast<sal_Int32>(m_aAccessibleChildren.size()) ) + if ( nItemPos >= 0 && o3tl::make_unsigned(nItemPos) < m_aAccessibleChildren.size() ) xChild = getAccessibleChild( nItemPos ); } |