diff options
Diffstat (limited to 'accessibility/source/standard/vclxaccessibletoolbox.cxx')
-rw-r--r-- | accessibility/source/standard/vclxaccessibletoolbox.cxx | 34 |
1 files changed, 30 insertions, 4 deletions
diff --git a/accessibility/source/standard/vclxaccessibletoolbox.cxx b/accessibility/source/standard/vclxaccessibletoolbox.cxx index a58163c818a6..e4cebc53f461 100644 --- a/accessibility/source/standard/vclxaccessibletoolbox.cxx +++ b/accessibility/source/standard/vclxaccessibletoolbox.cxx @@ -208,7 +208,7 @@ VCLXAccessibleToolBoxItem* VCLXAccessibleToolBox::GetItem_Impl( sal_Int32 _nPos, { ToolBoxItemsMap::iterator aIter = m_aAccessibleChildren.find( _nPos ); // returns only toolbox buttons, not windows - if ( aIter != m_aAccessibleChildren.end() && !aIter->second.is()) + if ( aIter != m_aAccessibleChildren.end() && aIter->second.is()) pItem = static_cast< VCLXAccessibleToolBoxItem* >( aIter->second.get() ); } @@ -284,11 +284,14 @@ void VCLXAccessibleToolBox::ReleaseFocus_Impl( sal_Int32 _nPos ) } } // ----------------------------------------------------------------------------- -void VCLXAccessibleToolBox::UpdateChecked_Impl( sal_Int32 ) +void VCLXAccessibleToolBox::UpdateChecked_Impl( sal_Int32 _nPos ) { ToolBox* pToolBox = static_cast< ToolBox* >( GetWindow() ); if ( pToolBox ) { + sal_uInt16 nFocusId = pToolBox->GetItemId( (sal_uInt16)_nPos ); + VCLXAccessibleToolBoxItem* pFocusItem = NULL; + for ( ToolBoxItemsMap::iterator aIter = m_aAccessibleChildren.begin(); aIter != m_aAccessibleChildren.end(); ++aIter ) { @@ -297,7 +300,12 @@ void VCLXAccessibleToolBox::UpdateChecked_Impl( sal_Int32 ) VCLXAccessibleToolBoxItem* pItem = static_cast< VCLXAccessibleToolBoxItem* >( aIter->second.get() ); pItem->SetChecked( pToolBox->IsItemChecked( nItemId ) ); + if ( nItemId == nFocusId ) + pFocusItem = pItem; } + //Solution:If the position is not a child item,the focus should not be called + if ( pFocusItem && (sal_uInt16)_nPos != TOOLBOX_ITEM_NOTFOUND ) + pFocusItem->SetFocus( sal_True ); } } // ----------------------------------------------------------------------------- @@ -535,23 +543,41 @@ void VCLXAccessibleToolBox::ProcessWindowEvent( const VclWindowEvent& rVclWindow // to prevent an early release of the toolbox (VCLEVENT_OBJECT_DYING) Reference< XAccessibleContext > xTemp = this; + ToolBox* pToolBox = static_cast< ToolBox* >( GetWindow() ); switch ( rVclWindowEvent.GetId() ) { case VCLEVENT_TOOLBOX_CLICK: + case VCLEVENT_TOOLBOX_SELECT: { if ( rVclWindowEvent.GetData() ) { UpdateChecked_Impl( (sal_Int32)(sal_IntPtr)rVclWindowEvent.GetData() ); UpdateIndeterminate_Impl( (sal_Int32)(sal_IntPtr)rVclWindowEvent.GetData() ); } + else if( pToolBox->GetItemPos(pToolBox->GetCurItemId()) != TOOLBOX_ITEM_NOTFOUND ) + { + UpdateChecked_Impl( pToolBox->GetItemPos(pToolBox->GetCurItemId()) ); + UpdateIndeterminate_Impl( pToolBox->GetItemPos(pToolBox->GetCurItemId()) ); + } break; } case VCLEVENT_TOOLBOX_DOUBLECLICK: case VCLEVENT_TOOLBOX_ACTIVATE: case VCLEVENT_TOOLBOX_DEACTIVATE: - case VCLEVENT_TOOLBOX_SELECT: + //case VCLEVENT_TOOLBOX_SELECT: break; - + // IA2 CWS. MT: Still using VCLEVENT_TOOLBOX_CLICK, see comment in vcl/source/window/toolbox2.cxx + /* + case VCLEVENT_TOOLBOX_ITEMUPDATED: + { + if ( rVclWindowEvent.GetData() ) + { + UpdateChecked_Impl( TOOLBOX_ITEM_NOTFOUND ); + UpdateIndeterminate_Impl( (sal_Int32)rVclWindowEvent.GetData() ); + } + break; + } + */ case VCLEVENT_TOOLBOX_HIGHLIGHT: UpdateFocus_Impl(); break; |