Modified: openoffice/trunk/main/vcl/inc/vcl/vclevent.hxx URL: http://svn.apache.org/viewvc/openoffice/trunk/main/vcl/inc/vcl/vclevent.hxx?rev=1541847&r1=1541846&r2=1541847&view=diff ============================================================================== --- openoffice/trunk/main/vcl/inc/vcl/vclevent.hxx (original) +++ openoffice/trunk/main/vcl/inc/vcl/vclevent.hxx Thu Nov 14 08:18:05 2013 @@ -154,6 +154,10 @@ namespace com { namespace sun { namespac #define VCLEVENT_ITEM_COLLAPSED 1175 // <-- #define VCLEVENT_DROPDOWN_PRE_OPEN 1176 +//IAccessibility2 Implementation 2009----- +#define VCLEVENT_LISTBOX_FOCUSITEMCHANGED 1180 +// #define VCLEVENT_EDIT_CARETCHANGED xxxx // IA2 CWS. MT: VCL only has selection API - difference for selection_changed vs. caret_changed is handled in accessibility wrapper since OOo 3.2 +//-----IAccessibility2 Implementation 2009 // VclMenuEvent #define VCLEVENT_MENU_ACTIVATE 1200 @@ -172,24 +176,39 @@ namespace com { namespace sun { namespac #define VCLEVENT_MENU_ITEMCHECKED 1213 #define VCLEVENT_MENU_ITEMUNCHECKED 1214 #define VCLEVENT_MENU_ACCESSIBLENAMECHANGED 1215 +//IAccessibility2 Implementation 2009----- +#define VCLEVENT_TOOLBOX_ITEMWINDOWCHANGED 1216 +#define VCLEVENT_TOOLBOX_ITEMUPDATED 1217 +//-----IAccessibility2 Implementation 2009 #define VCLEVENT_MENU_SHOW 1250 #define VCLEVENT_MENU_HIDE 1251 #define VCLEVENT_TOOLBOX_ITEMWINDOWCHANGED 1216 - +//IAccessibility2 Implementation 2009----- +#define VCLEVENT_LISTBOX_TREEEXPAND 1218 +#define VCLEVENT_LISTBOX_TREECOLLAPSE 1219 +#define VCLEVENT_LISTBOX_TREEFOCUS 1220 +#define VCLEVENT_LISTBOX_TREESELECT 1221 +#define VCLEVENT_EDIT_CARETCHANGED 1222 +#define VCLEVENT_COMBOBOX_UPDATEVALUE 1223 + +#define VCLEVENT_LISTBOX_FOCUS 1224 +#define VCLEVENT_LISTBOX_CLEAR 1225 +//-----IAccessibility2 Implementation 2009 // DockingWindow -#define VCLEVENT_WINDOW_STARTDOCKING 1217 // pData = DockingData -#define VCLEVENT_WINDOW_DOCKING 1218 -#define VCLEVENT_WINDOW_ENDDOCKING 1219 // pData = EndDockingData -#define VCLEVENT_WINDOW_PREPARETOGGLEFLOATING 1220 // pData = sal_Bool -#define VCLEVENT_WINDOW_TOGGLEFLOATING 1221 -#define VCLEVENT_WINDOW_ENDPOPUPMODE 1222 // pData = EndPopupModeData - -#define VCLEVENT_TOOLBOX_BUTTONSTATECHANGED 1223 // pData = itempos -#define VCLEVENT_TABLECELL_NAMECHANGED 1224 // pData = struct(Entry, Column, oldText) -#define VCLEVENT_TABLEROW_SELECT 1225 - +#define VCLEVENT_WINDOW_STARTDOCKING 1227 // pData = DockingData +#define VCLEVENT_WINDOW_DOCKING 1228 +#define VCLEVENT_WINDOW_ENDDOCKING 1229 // pData = EndDockingData +#define VCLEVENT_WINDOW_PREPARETOGGLEFLOATING 1230 // pData = sal_Bool +#define VCLEVENT_WINDOW_TOGGLEFLOATING 1231 +#define VCLEVENT_WINDOW_ENDPOPUPMODE 1232 // pData = EndPopupModeData + +#define VCLEVENT_TOOLBOX_BUTTONSTATECHANGED 1233 // pData = itempos +#define VCLEVENT_TABLECELL_NAMECHANGED 1234 // pData = struct(Entry, Column, oldText) +#define VCLEVENT_TABLEROW_SELECT 1235 +// IAccessible2 implementation 2009 +#define VCLEVENT_LISTBOX_STATEUPDATE 1236 class VCL_DLLPUBLIC VclSimpleEvent { private:
Modified: openoffice/trunk/main/vcl/inc/vcl/window.hxx URL: http://svn.apache.org/viewvc/openoffice/trunk/main/vcl/inc/vcl/window.hxx?rev=1541847&r1=1541846&r2=1541847&view=diff ============================================================================== --- openoffice/trunk/main/vcl/inc/vcl/window.hxx (original) +++ openoffice/trunk/main/vcl/inc/vcl/window.hxx Thu Nov 14 08:18:05 2013 @@ -629,6 +629,11 @@ public: virtual void DataChanged( const DataChangedEvent& rDCEvt ); virtual long PreNotify( NotifyEvent& rNEvt ); virtual long Notify( NotifyEvent& rNEvt ); +//IAccessibility2 Implementation 2009----- + virtual void NotifyVCLEvent( sal_uLong nEvent ,void* pData = NULL); + virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > > GetAccFlowToSequence(); + virtual void SwitchView() {} +//-----IAccessibility2 Implementation 2009 virtual Window* GetPreferredKeyInputWindow(); /*virtual*/ void AddEventListener( const Link& rEventListener ); Modified: openoffice/trunk/main/vcl/source/app/svapp.cxx URL: http://svn.apache.org/viewvc/openoffice/trunk/main/vcl/source/app/svapp.cxx?rev=1541847&r1=1541846&r2=1541847&view=diff ============================================================================== --- openoffice/trunk/main/vcl/source/app/svapp.cxx (original) +++ openoffice/trunk/main/vcl/source/app/svapp.cxx Thu Nov 14 08:18:05 2013 @@ -24,7 +24,7 @@ // MARKER(update_precomp.py): autogen include statement, do not remove #include "precompiled_vcl.hxx" -//#include "svsys.h" +#include "svsys.h" #include "comphelper/processfactory.hxx" @@ -77,6 +77,10 @@ #include <utility> +#ifdef WNT +#include <tchar.h> +#endif + using namespace ::com::sun::star::uno; // keycodes handled internally by VCL @@ -2045,7 +2049,13 @@ void Application::AddToRecentDocumentLis sal_Bool Application::IsAccessibilityEnabled() { +//IAccessible2 Implementation 2009----- +#ifdef WNT + return IsWNTInitAccessBridge(); +#else return sal_False; +#endif +//-----IAccessible2 Implementation 2009 } sal_Bool InitAccessBridge( sal_Bool bShowCancel, sal_Bool &rCancelled ) @@ -2057,22 +2067,52 @@ sal_Bool InitAccessBridge( sal_Bool bSho (void) bShowCancel; // unsued (void) rCancelled; // unused #else - bRet = ImplInitAccessBridge( bShowCancel, rCancelled ); - - if( !bRet && bShowCancel && !rCancelled ) - { - // disable accessibility if the user chooses to continue - AllSettings aSettings = Application::GetSettings(); - MiscSettings aMisc = aSettings.GetMiscSettings(); - aMisc.SetEnableATToolSupport( sal_False ); - aSettings.SetMiscSettings( aMisc ); - Application::SetSettings( aSettings ); - } + // Checking HasAtHook() was introduced with IBM's IA2 CWS. + if( HasAtHook() ) + { + bRet = ImplInitAccessBridge( bShowCancel, rCancelled ); + + if( !bRet && bShowCancel && !rCancelled ) + { + // disable accessibility if the user chooses to continue + AllSettings aSettings = Application::GetSettings(); + MiscSettings aMisc = aSettings.GetMiscSettings(); + aMisc.SetEnableATToolSupport( sal_False ); + aSettings.SetMiscSettings( aMisc ); + Application::SetSettings( aSettings ); + } + } + else + { + bRet = false; + } #endif // !UNX return bRet; } +//IAccessible2 Implementation 2009----- +#ifdef WNT +sal_Bool HasAtHook() +{ + sal_Int32 bIsRuning=0; + // BOOL WINAPI SystemParametersInfo( + // __in UINT uiAction, + // __in UINT uiParam, + // __inout PVOID pvParam, + // __in UINT fWinIni + // ); + // pvParam must be BOOL (defined in MFC as int) + // End + if(SystemParametersInfo(SPI_GETSCREENREADER,0,&bIsRuning,0)) + { + if( bIsRuning ) + return sal_True; + } + return sal_False; +} +#endif +//-----IAccessible2 Implementation 2009 // MT: AppProperty, AppEvent was in oldsv.cxx, but is still needed... // ------------------------------------------------------------------------ @@ -2094,6 +2134,21 @@ void Application::SetPropertyHandler( Pr delete pHandler; pHandler = p; } +//IAccessible2 Implementation 2009----- +bool Application::EnableAccessInterface(bool bEnable) +{ +#ifdef WNT + return WNTEnableAccessInterface(bEnable); +#else + bEnable = TRUE; // avoid compiler warning + return TRUE; +#endif +} +bool Application::IsEnableAccessInterface() +{ + return ImplGetSVData()->maAppData.m_bEnableAccessInterface; +} +//-----IAccessibility2 Implementation 2009 Modified: openoffice/trunk/main/vcl/source/app/svdata.cxx URL: http://svn.apache.org/viewvc/openoffice/trunk/main/vcl/source/app/svdata.cxx?rev=1541847&r1=1541846&r2=1541847&view=diff ============================================================================== --- openoffice/trunk/main/vcl/source/app/svdata.cxx (original) +++ openoffice/trunk/main/vcl/source/app/svdata.cxx Thu Nov 14 08:18:05 2013 @@ -36,6 +36,16 @@ #include "unotools/fontcfg.hxx" +//IAccessible2 Implementation 2009----- +#ifdef WNT +#ifndef _COM_SUN_STAR_ACCESSIBILITY_XACCESSIBLE_HPP_ +#include <com/sun/star/accessibility/XAccessible.hpp> +#endif +#ifndef _COM_SUN_STAR_ACCESSIBILITY_ACCESSIBLEROLE_HPP_ +#include <com/sun/star/accessibility/AccessibleRole.hpp> +#endif +#endif +//-----IAccessible2 Implementation 2009 #include "vos/mutex.hxx" #include "cppuhelper/implbase1.hxx" @@ -67,6 +77,13 @@ #include "com/sun/star/java/JavaDisabledException.hpp" #include <stdio.h> +//IAccessible2 Implementation 2009----- +#ifdef WNT +#include <unotools/processfactory.hxx> +#include <com/sun/star/accessibility/XMSAAService.hpp> +#include <win/g_msaasvc.h> +#endif +//-----IAccessible2 Implementation 2009 namespace { @@ -132,6 +149,12 @@ void ImplInitSVData() break; } } +//IAccessible2 Implementation 2009----- +#ifdef WNT + //Default enable the acc bridge interface + pImplSVData->maAppData.m_bEnableAccessInterface =true; +#endif +//-----IAccessible2 Implementation 2009 // mark default layout border as unitialized pImplSVData->maAppData.mnDefaultLayoutBorder = -1; @@ -339,7 +362,89 @@ com::sun::star::uno::Any AccessBridgeCur } return ret; } +//IAccessible2 Implementation 2009----- +#ifdef WNT +void AccessBridgehandleExistingWindow(Window * pWindow, bool bShow) +{ + if ( pWindow ) + { + css::uno::Reference< css::accessibility::XAccessible > xAccessible; + + // Test for combo box - drop down floating windows first + Window * pParentWindow = pWindow->GetParent(); + + if ( pParentWindow ) + { + try + { + // The parent window of a combo box floating window should have the role COMBO_BOX + css::uno::Reference< css::accessibility::XAccessible > xParentAccessible(pParentWindow->GetAccessible()); + if ( xParentAccessible.is() ) + { + css::uno::Reference< css::accessibility::XAccessibleContext > xParentAC( xParentAccessible->getAccessibleContext() ); + if ( xParentAC.is() && (css::accessibility::AccessibleRole::COMBO_BOX == xParentAC->getAccessibleRole()) ) + { + // O.k. - this is a combo box floating window corresponding to the child of role LIST of the parent. + // Let's not rely on a specific child order, just search for the child with the role LIST + sal_Int32 nCount = xParentAC->getAccessibleChildCount(); + for ( sal_Int32 n = 0; (n < nCount) && !xAccessible.is(); n++) + { + css::uno::Reference< css::accessibility::XAccessible > xChild = xParentAC->getAccessibleChild(n); + if ( xChild.is() ) + { + css::uno::Reference< css::accessibility::XAccessibleContext > xChildAC = xChild->getAccessibleContext(); + if ( xChildAC.is() && (css::accessibility::AccessibleRole::LIST == xChildAC->getAccessibleRole()) ) + { + xAccessible = xChild; + } + } + } + } + } + } + catch (::com::sun::star::uno::RuntimeException e) + { + // Ignore show events that throw DisposedExceptions in getAccessibleContext(), + // but keep revoking these windows in hide(s). + if (bShow) + return; + } + } + // We have to rely on the fact that Window::GetAccessible()->getAccessibleContext() returns a valid XAccessibleContext + // also for other menus than menubar or toplevel popup window. Otherwise we had to traverse the hierarchy to find the + // context object to this menu floater. This makes the call to Window->IsMenuFloatingWindow() obsolete. + if ( ! xAccessible.is() ) + xAccessible = pWindow->GetAccessible(); + + if ( xAccessible.is() && g_acc_manager1 ) + { + g_acc_manager1->handleWindowOpened( (long)(xAccessible.get())); + } + } +} + +void AccessBridgeupdateOldTopWindows() +{ + sal_uInt16 nTopWindowCount = (sal_uInt16)Application::GetTopWindowCount(); + for (sal_uInt16 i = 0; i < nTopWindowCount; i++) + { + Window* pTopWindow = Application::GetTopWindow( i ); + css::uno::Reference< css::accessibility::XAccessible > xAccessible = pTopWindow->GetAccessible(); + if ( xAccessible.is() ) + { + css::uno::Reference< css::accessibility::XAccessibleContext > xAC(xAccessible->getAccessibleContext()); + if ( xAC.is()) + { + short role = xAC->getAccessibleRole(); + if(xAC->getAccessibleName().getLength() > 0) + AccessBridgehandleExistingWindow(pTopWindow, true); + } + } + } +} +#endif +//-----IAccessible2 Implementation 2009 bool ImplInitAccessBridge(sal_Bool bAllowCancel, sal_Bool &rCancelled) { @@ -371,6 +476,22 @@ bool ImplInitAccessBridge(sal_Bool bAllo if( xFactory.is() ) { +//IAccessible2 Implementation 2009----- +#ifdef WNT + pSVData->mxAccessBridge = xFactory->createInstance( + OUString::createFromAscii( "com.sun.star.accessibility.MSAAService" ) ); + if( pSVData->mxAccessBridge.is() ) + { + css::uno::Reference< css::uno::XInterface > pRManager= pSVData->mxAccessBridge; + g_acc_manager1 = (css::accessibility::XMSAAService*)(pRManager.get()); + AccessBridgeupdateOldTopWindows(); + } + + if( !pSVData->mxAccessBridge.is() ) + bSuccess = false; + return bSuccess; +#endif +//-----IAccessible2 Implementation 2009 css::uno::Reference< XExtendedToolkit > xToolkit = css::uno::Reference< XExtendedToolkit >(Application::GetVCLToolkit(), UNO_QUERY); Modified: openoffice/trunk/main/vcl/source/app/svmain.cxx URL: http://svn.apache.org/viewvc/openoffice/trunk/main/vcl/source/app/svmain.cxx?rev=1541847&r1=1541846&r2=1541847&view=diff ============================================================================== --- openoffice/trunk/main/vcl/source/app/svmain.cxx (original) +++ openoffice/trunk/main/vcl/source/app/svmain.cxx Thu Nov 14 08:18:05 2013 @@ -55,6 +55,11 @@ #include <process.h> // for _beginthreadex #include <ole2.h> // for _beginthreadex #include <tools/postwin.h> +//IAccessibility2 Implementation 2009----- +#include <com/sun/star/accessibility/XMSAAService.hpp> +#include <win/g_msaasvc.h> +using namespace com::sun::star::accessibility; +//-----IAccessibility2 Implementation 2009 #endif // [ed 5/14/02 Add in explicit check for quartz graphics. OS X will define @@ -215,6 +220,12 @@ sal_Bool ImplSVMain() } DeInitVCL(); +//IAccessibility2 Implementation 2009----- + #ifdef WNT + if( g_acc_manager1 ) + g_acc_manager1->release(); + #endif +//-----IAccessibility2 Implementation 2009 return bInit; } Modified: openoffice/trunk/main/vcl/source/control/combobox.cxx URL: http://svn.apache.org/viewvc/openoffice/trunk/main/vcl/source/control/combobox.cxx?rev=1541847&r1=1541846&r2=1541847&view=diff ============================================================================== --- openoffice/trunk/main/vcl/source/control/combobox.cxx (original) +++ openoffice/trunk/main/vcl/source/control/combobox.cxx Thu Nov 14 08:18:05 2013 @@ -215,6 +215,9 @@ void ComboBox::ImplInit( Window* pParent mpImplLB->SetDoubleClickHdl( LINK( this, ComboBox, ImplDoubleClickHdl ) ); mpImplLB->SetUserDrawHdl( LINK( this, ComboBox, ImplUserDrawHdl ) ); mpImplLB->SetSelectionChangedHdl( LINK( this, ComboBox, ImplSelectionChangedHdl ) ); +//IAccessibility2 Implementation 2009----- + mpImplLB->SetListItemSelectHdl( LINK( this, ComboBox, ImplListItemSelectHdl ) ); +//-----IAccessibility2 Implementation 2009 mpImplLB->Show(); if ( mpFloatWin ) @@ -273,7 +276,13 @@ sal_Bool ComboBox::IsAutocompleteEnabled { return mpSubEdit->GetAutocompleteHdl().IsSet(); } - +//IAccessibility2 Implementation 2009----- +void ComboBox::SetMpSubEditAccessibleName(String &aName) +{ + if(mpSubEdit!=NULL) + mpSubEdit->SetAccessibleName(aName); +} +//-----IAccessibility2 Implementation 2009 // ----------------------------------------------------------------------- IMPL_LINK( ComboBox, ImplClickBtnHdl, void*, EMPTYARG ) @@ -468,7 +477,13 @@ IMPL_LINK( ComboBox, ImplSelectHdl, void return 0; } - +//IAccessibility2 Implementation 2009----- +IMPL_LINK( ComboBox, ImplListItemSelectHdl, void*, EMPTYARG ) +{ + ImplCallEventListeners( VCLEVENT_LISTBOX_SELECT ); + return 1; +} +//-----IAccessibility2 Implementation 2009 // ----------------------------------------------------------------------- IMPL_LINK( ComboBox, ImplCancelHdl, void*, EMPTYARG ) @@ -1420,6 +1435,12 @@ sal_uInt16 ComboBox::GetMaxMRUCount() co return mpImplLB->GetMaxMRUCount(); } +//IAccessibility2 Implementation 2009----- +sal_uInt16 ComboBox::GetMRUCount() const +{ + return mpImplLB->GetEntryList()->GetMRUCount(); +} +//-----IAccessibility2 Implementation 2009 // ----------------------------------------------------------------------- sal_uInt16 ComboBox::GetDisplayLineCount() const Modified: openoffice/trunk/main/vcl/source/control/edit.cxx URL: http://svn.apache.org/viewvc/openoffice/trunk/main/vcl/source/control/edit.cxx?rev=1541847&r1=1541846&r2=1541847&view=diff ============================================================================== --- openoffice/trunk/main/vcl/source/control/edit.cxx (original) +++ openoffice/trunk/main/vcl/source/control/edit.cxx Thu Nov 14 08:18:05 2013 @@ -2498,8 +2498,10 @@ void Edit::Modify() return; // #i13677# notify edit listeners about caret position change - ImplCallEventListeners( VCLEVENT_EDIT_SELECTIONCHANGED ); - +//IAccessibility2 Implementation 2009----- + //ImplCallEventListeners( VCLEVENT_EDIT_SELECTIONCHANGED ); + ImplCallEventListeners( VCLEVENT_EDIT_CARETCHANGED ); +//-----IAccessibility2 Implementation 2009 // FIXME: this is currently only on aqua // check for other platforms that need similar handling if( ImplGetSVData()->maNWFData.mbNoFocusRects && @@ -2654,15 +2656,37 @@ void Edit::ImplSetSelection( const Selec if ( aNew != maSelection ) { ImplClearLayoutData(); +//IAccessibility2 Implementation 2009----- + Selection aTemp = maSelection; +//-----IAccessibility2 Implementation 2009 maSelection = aNew; if ( bPaint && ( aOld.Len() || aNew.Len() || IsPaintTransparent() ) ) ImplInvalidateOrRepaint( 0, maText.Len() ); ImplShowCursor(); - if ( mbIsSubEdit ) - ((Edit*)GetParent())->ImplCallEventListeners( VCLEVENT_EDIT_SELECTIONCHANGED ); - else - ImplCallEventListeners( VCLEVENT_EDIT_SELECTIONCHANGED ); +//IAccessibility2 Implementation 2009----- + sal_Bool bCaret = sal_False, bSelection = sal_False; + long nB=aNew.Max(), nA=aNew.Min(),oB=aTemp.Max(), oA=aTemp.Min(); + long nGap = nB-nA, oGap = oB-oA; + if (nB != oB) + bCaret = sal_True; + if (nGap != 0 || oGap != 0) + bSelection = sal_True; + if (bCaret) + { + if ( mbIsSubEdit ) + ((Edit*)GetParent())->ImplCallEventListeners( VCLEVENT_EDIT_CARETCHANGED ); + else + ImplCallEventListeners( VCLEVENT_EDIT_CARETCHANGED ); + } + if (bSelection) + { + if ( mbIsSubEdit ) + ((Edit*)GetParent())->ImplCallEventListeners( VCLEVENT_EDIT_SELECTIONCHANGED ); + else + ImplCallEventListeners( VCLEVENT_EDIT_SELECTIONCHANGED ); + } +//-----IAccessibility2 Implementation 2009 // #103511# notify combobox listeners of deselection if( !maSelection && GetParent() && GetParent()->GetType() == WINDOW_COMBOBOX ) ((Edit*)GetParent())->ImplCallEventListeners( VCLEVENT_COMBOBOX_DESELECT ); Modified: openoffice/trunk/main/vcl/source/control/ilstbox.cxx URL: http://svn.apache.org/viewvc/openoffice/trunk/main/vcl/source/control/ilstbox.cxx?rev=1541847&r1=1541846&r2=1541847&view=diff ============================================================================== --- openoffice/trunk/main/vcl/source/control/ilstbox.cxx (original) +++ openoffice/trunk/main/vcl/source/control/ilstbox.cxx Thu Nov 14 08:18:05 2013 @@ -917,7 +917,11 @@ void ImplListBoxWindow::MouseButtonDown( mnCurrentPos = nSelect; mbTrackingSelect = true; - SelectEntries( nSelect, LET_MBDOWN, rMEvt.IsShift(), rMEvt.IsMod1() ); + //IAccessibility2 Impplementaton 2009----- + sal_Bool bCurPosChange = (mnCurrentPos != nSelect); + //SelectEntries( nSelect, LET_MBDOWN, rMEvt.IsShift(), rMEvt.IsMod1() ); + SelectEntries( nSelect, LET_MBDOWN, rMEvt.IsShift(), rMEvt.IsMod1() ,bCurPosChange); + //-----IAccessibility2 Impplementaton 2009 mbTrackingSelect = false; if ( mbGrabFocus ) GrabFocus(); @@ -988,6 +992,14 @@ void ImplListBoxWindow::MouseMove( const ImplCallSelect(); mbTravelSelect = false; } +//IAccessibility2 Implementation 2009---- + // When list box selection change by mouse move, notity + // VCLEVENT_LISTBOX_SELECT vcl event. + else + { + maListItemSelectHdl.Call(NULL); + } +//----IAccessibility2 Implementation 2009 } mbTrackingSelect = false; } @@ -1075,7 +1087,7 @@ void ImplListBoxWindow::SelectEntry( sal // ----------------------------------------------------------------------- -sal_Bool ImplListBoxWindow::SelectEntries( sal_uInt16 nSelect, LB_EVENT_TYPE eLET, sal_Bool bShift, sal_Bool bCtrl ) +sal_Bool ImplListBoxWindow::SelectEntries( sal_uInt16 nSelect, LB_EVENT_TYPE eLET, sal_Bool bShift, sal_Bool bCtrl, sal_Bool bSelectPosChange /*=FALSE*/ ) { sal_Bool bFocusChanged = sal_False; sal_Bool bSelectionChanged = sal_False; @@ -1220,6 +1232,12 @@ sal_Bool ImplListBoxWindow::SelectEntrie maFocusRect.SetSize( aSz ); if( HasFocus() ) ImplShowFocusRect(); +//IAccessibility2 Implementation 2009---- + if (bSelectPosChange) + { + maFocusHdl.Call(reinterpret_cast<void*>(nSelect)); + } +//----IAccessibility2 Implementation 2009 } ImplClearLayoutData(); } @@ -1682,8 +1700,12 @@ sal_Bool ImplListBoxWindow::ProcessKeyIn DBG_ASSERT( !mpEntryList->IsEntryPosSelected( nSelect ) || mbMulti, "ImplListBox: Selecting same Entry" ); if( nSelect >= mpEntryList->GetEntryCount() ) nSelect = mpEntryList->GetEntryCount()-1; +//IAccessibility2 Implementation 2009----- + sal_Bool bCurPosChange = (mnCurrentPos != nSelect); mnCurrentPos = nSelect; - if ( SelectEntries( nSelect, eLET, bShift, bCtrl ) ) + //if ( SelectEntries( nSelect, eLET, bShift, bCtrl ) ) + if(SelectEntries( nSelect, eLET, bShift, bCtrl ,bCurPosChange)) +//-----IAccessibility2 Implementation 2009 { mbTravelSelect = true; mnSelectModifier = rKEvt.GetKeyCode().GetModifier(); @@ -2158,7 +2180,10 @@ Rectangle ImplListBoxWindow::GetBounding { const ImplEntryType* pEntry = mpEntryList->GetEntryPtr( nItem ); Size aSz( GetSizePixel().Width(), pEntry ? pEntry->mnHeight : GetEntryHeight() ); - long nY = mpEntryList->GetAddedHeight( nItem, GetTopEntry() ) - mpEntryList->GetAddedHeight( GetTopEntry() ); + //long nY = mpEntryList->GetAddedHeight( nItem, GetTopEntry() ) - mpEntryList->GetAddedHeight( GetTopEntry() ); + //IAccessibility2 Impplementaton 2009----- + long nY = mpEntryList->GetAddedHeight( nItem, GetTopEntry() ) + GetEntryList()->GetMRUCount()*GetEntryHeight(); + //-----IAccessibility2 Impplementaton 2009 Rectangle aRect( Point( 0, nY ), aSz ); return aRect; } Modified: openoffice/trunk/main/vcl/source/control/lstbox.cxx URL: http://svn.apache.org/viewvc/openoffice/trunk/main/vcl/source/control/lstbox.cxx?rev=1541847&r1=1541846&r2=1541847&view=diff ============================================================================== --- openoffice/trunk/main/vcl/source/control/lstbox.cxx (original) +++ openoffice/trunk/main/vcl/source/control/lstbox.cxx Thu Nov 14 08:18:05 2013 @@ -170,6 +170,10 @@ void ListBox::ImplInit( Window* pParent, mpImplLB->SetCancelHdl( LINK( this, ListBox, ImplCancelHdl ) ); mpImplLB->SetDoubleClickHdl( LINK( this, ListBox, ImplDoubleClickHdl ) ); mpImplLB->SetUserDrawHdl( LINK( this, ListBox, ImplUserDrawHdl ) ); +//IAccessibility2 Implementation 2009----- + mpImplLB->SetFocusHdl( LINK( this, ListBox, ImplFocusHdl ) ); + mpImplLB->SetListItemSelectHdl( LINK( this, ListBox, ImplListItemSelectHdl ) ); +//-----IAccessibility2 Implementation 2009 mpImplLB->SetPosPixel( Point() ); mpImplLB->SetEdgeBlending(GetEdgeBlending()); mpImplLB->Show(); @@ -249,6 +253,18 @@ IMPL_LINK( ListBox, ImplSelectHdl, void* return 1; } +//IAccessibility2 Implementation 2009----- +IMPL_LINK( ListBox, ImplFocusHdl, void *, nPos ) +{ + ImplCallEventListeners( VCLEVENT_LISTBOX_FOCUS , nPos); + return 1; +} +IMPL_LINK( ListBox, ImplListItemSelectHdl, void*, EMPTYARG ) +{ + ImplCallEventListeners( VCLEVENT_LISTBOX_SELECT ); + return 1; +} +//-----IAccessibility2 Implementation 2009 // ----------------------------------------------------------------------- @@ -1060,6 +1076,8 @@ void ListBox::SetNoSelection() mpImplWin->SetImage( aImage ); mpImplWin->Invalidate(); } + // IAccessible2 implementation 2009 + NotifyVCLEvent( VCLEVENT_LISTBOX_STATEUPDATE); } // ----------------------------------------------------------------------- @@ -1204,7 +1222,21 @@ void ListBox::SelectEntry( const XubStri void ListBox::SelectEntryPos( sal_uInt16 nPos, sal_Bool bSelect ) { if ( nPos < mpImplLB->GetEntryList()->GetEntryCount() ) + { + // IAccessible2 implementation 2009 + sal_uInt16 oldSelectCount = GetSelectEntryCount(), newSelectCount = 0, nCurrentPos = mpImplLB->GetCurrentPos(); mpImplLB->SelectEntry( nPos + mpImplLB->GetEntryList()->GetMRUCount(), bSelect ); + newSelectCount = GetSelectEntryCount(); + if (oldSelectCount == 0 && newSelectCount > 0) + NotifyVCLEvent( VCLEVENT_LISTBOX_STATEUPDATE); + //Only when bSelect == true, send both Selection & Focus events + if (nCurrentPos != nPos && bSelect) + { + ImplCallEventListeners( VCLEVENT_LISTBOX_SELECT, reinterpret_cast<void*>(nPos)); + if (HasFocus()) + ImplCallEventListeners( VCLEVENT_LISTBOX_FOCUS, reinterpret_cast<void*>(nPos)); + } + } } // ----------------------------------------------------------------------- @@ -1605,6 +1637,12 @@ sal_uInt16 ListBox::GetMaxMRUCount() con { return mpImplLB->GetMaxMRUCount(); } +//IAccessibility2 Implementation 2009----- +sal_uInt16 ListBox::GetMRUCount() const +{ + return mpImplLB->GetEntryList()->GetMRUCount(); +} +//-----IAccessibility2 Implementation 2009 // ----------------------------------------------------------------------- Modified: openoffice/trunk/main/vcl/source/control/morebtn.cxx URL: http://svn.apache.org/viewvc/openoffice/trunk/main/vcl/source/control/morebtn.cxx?rev=1541847&r1=1541846&r2=1541847&view=diff ============================================================================== --- openoffice/trunk/main/vcl/source/control/morebtn.cxx (original) +++ openoffice/trunk/main/vcl/source/control/morebtn.cxx Thu Nov 14 08:18:05 2013 @@ -155,7 +155,7 @@ void MoreButton::Click() // Hier den Click-Handler rufen, damit vorher die Controls initialisiert // werden koennen - PushButton::Click(); + //PushButton::Click(); // IAccessibility2 Implementation 2009 // Je nach Status die Fenster updaten if ( mbState ) @@ -197,6 +197,9 @@ void MoreButton::Click() pWindow = mpMBData->mpItemList->Next(); } } +//IAccessibility2 Implementation 2009----- + PushButton::Click(); +//-----IAccessibility2 Implementation 2009 } // ----------------------------------------------------------------------- Modified: openoffice/trunk/main/vcl/source/control/tabctrl.cxx URL: http://svn.apache.org/viewvc/openoffice/trunk/main/vcl/source/control/tabctrl.cxx?rev=1541847&r1=1541846&r2=1541847&view=diff ============================================================================== --- openoffice/trunk/main/vcl/source/control/tabctrl.cxx (original) +++ openoffice/trunk/main/vcl/source/control/tabctrl.cxx Thu Nov 14 08:18:05 2013 @@ -619,6 +619,9 @@ void TabControl::ImplChangeTabPage( sal_ } pPage->ActivatePage(); +//IAccessibility2 Implementation 2009----- + pPage->Show(); +//-----IAccessibility2 Implementation 2009 if ( pOldPage && pOldPage->HasChildPathFocus() ) { @@ -630,7 +633,9 @@ void TabControl::ImplChangeTabPage( sal_ GrabFocus(); } - pPage->Show(); +//IAccessibility2 Implementation 2009----- + // pPage->Show(); +//-----IAccessibility2 Implementation 2009 } if ( pOldPage ) Modified: openoffice/trunk/main/vcl/source/window/btndlg.cxx URL: http://svn.apache.org/viewvc/openoffice/trunk/main/vcl/source/window/btndlg.cxx?rev=1541847&r1=1541846&r2=1541847&view=diff ============================================================================== --- openoffice/trunk/main/vcl/source/window/btndlg.cxx (original) +++ openoffice/trunk/main/vcl/source/window/btndlg.cxx Thu Nov 14 08:18:05 2013 @@ -289,6 +289,15 @@ void ButtonDialog::StateChanged( StateCh if ( nType == STATE_CHANGE_INITSHOW ) { ImplPosControls(); +//IAccessibility2 Implementation 2009----- + ImplBtnDlgItem* pItem = mpItemList->First(); + while ( pItem ) + { + if ( pItem->mpPushButton && pItem->mbOwnButton ) + pItem->mpPushButton->SetZOrder(0, WINDOW_ZORDER_LAST); + pItem = mpItemList->Next(); + } +//-----IAccessibility2 Implementation 2009 // Focus evt. auf den entsprechenden Button setzen if ( mnFocusButtonId != BUTTONDIALOG_BUTTON_NOTFOUND ) Modified: openoffice/trunk/main/vcl/source/window/dlgctrl.cxx URL: http://svn.apache.org/viewvc/openoffice/trunk/main/vcl/source/window/dlgctrl.cxx?rev=1541847&r1=1541846&r2=1541847&view=diff ============================================================================== --- openoffice/trunk/main/vcl/source/window/dlgctrl.cxx (original) +++ openoffice/trunk/main/vcl/source/window/dlgctrl.cxx Thu Nov 14 08:18:05 2013 @@ -835,7 +835,18 @@ sal_Bool Window::ImplDlgCtrl( const KeyE if ( nStyle & WB_GROUP ) break; - if ( pWindow->IsVisible() && pWindow->IsEnabled() && pWindow->IsInputEnabled() ) +//IAccessibility2 Implementation 2009----- + //Solution:Pure window shouldn't get window after controls such as buttons. + //if ( pWindow->IsVisible() && pWindow->IsEnabled() && pWindow->IsInputEnabled() ) + if ( pWindow->IsVisible() && pWindow->IsEnabled() && + pWindow->IsInputEnabled() && ( + pWindow->GetType() != WINDOW_WINDOW && + pWindow->GetType() != WINDOW_SYSWINDOW && + pWindow->GetType() != WINDOW_WORKWINDOW && + pWindow->GetType() != WINDOW_CONTROL + ) + ) +//-----IAccessibility2 Implementation 2009 { pWindow->ImplControlFocus( GETFOCUS_CURSOR | GETFOCUS_BACKWARD ); return sal_True; Modified: openoffice/trunk/main/vcl/source/window/menu.cxx URL: http://svn.apache.org/viewvc/openoffice/trunk/main/vcl/source/window/menu.cxx?rev=1541847&r1=1541846&r2=1541847&view=diff ============================================================================== --- openoffice/trunk/main/vcl/source/window/menu.cxx (original) +++ openoffice/trunk/main/vcl/source/window/menu.cxx Thu Nov 14 08:18:05 2013 @@ -1573,6 +1573,36 @@ sal_uInt16 Menu::GetCurItemId() const { return nSelectedId; } +//IAccessibility2 Implementation 2009 +void Menu::SetHightlightItem( sal_uInt16 nHighlightedItem ) +{ + this->nHighlightedItem = nHighlightedItem; +} +sal_uInt16 Menu::GetHighlightItem() const +{ + return nHighlightedItem; +} + + +XubString Menu::GetItemAccKeyStrFromPos(sal_uInt16 nPos) const +{ + MenuItemData* pData = pItemList->GetDataFromPos( nPos ); + if (pData) + { + return pData->aAccelKey.GetName(); + } + return XubString(); +} + +sal_Bool Menu::IsTemporaryItemFromPos(sal_uInt16 nPos ) const +{ + MenuItemData* pData = pItemList->GetDataFromPos( nPos ); + if (pData) + { + return pData->bIsTemporary; + } + return sal_False; +} void Menu::SetItemBits( sal_uInt16 nItemId, MenuItemBits nBits ) { @@ -3728,7 +3758,12 @@ sal_uInt16 PopupMenu::ImplExecute( Windo String aTmpEntryText( ResId( SV_RESID_STRING_NOSELECTIONPOSSIBLE, *pResMgr ) ); MenuItemData* pData = pItemList->Insert( 0xFFFF, MENUITEM_STRING, 0, aTmpEntryText, Image(), NULL, 0xFFFF ); +//IAccessibility2 Implementation 2009----- + sal_uInt16 nmPos; + pData = pItemList->GetData( pData->nId, nmPos ); pData->bIsTemporary = sal_True; + ImplCallEventListeners(VCLEVENT_MENU_SUBMENUCHANGED,nmPos); +//-----IAccessibility2 Implementation 2009 } } else if ( Application::GetSettings().GetStyleSettings().GetAutoMnemonic() && !( nMenuFlags & MENU_FLAG_NOAUTOMNEMONICS ) ) @@ -4005,7 +4040,9 @@ void MenuFloatingWindow::doShutdown() // otherwise the entry will not be read when the menu is opened again if( nHighlightedItem != ITEMPOS_INVALID ) pMenu->ImplCallEventListeners( VCLEVENT_MENU_DEHIGHLIGHT, nHighlightedItem ); - +//IAccessibility2 Implementation 2009----- + pMenu->SetHightlightItem(ITEMPOS_INVALID); +//-----IAccessibility2 Implementation 2009 if( !bKeyInput && pMenu && pMenu->pStartedFrom && !pMenu->pStartedFrom->bIsMenuBar ) { // #102461# remove highlight in parent @@ -4676,6 +4713,9 @@ void MenuFloatingWindow::ChangeHighlight } } HighlightItem( nHighlightedItem, sal_True ); +//IAccessibility2 Implementation 2009----- + pMenu->SetHightlightItem(nHighlightedItem); +//-----IAccessibility2 Implementation 2009 pMenu->ImplCallHighlight( nHighlightedItem ); } else @@ -4977,6 +5017,10 @@ void MenuFloatingWindow::KeyInput( const MenuFloatingWindow* pFloat = ((PopupMenu*)pMenu->pStartedFrom)->ImplGetFloatingWindow(); pFloat->GrabFocus(); pFloat->KillActivePopup(); +//IAccessibility2 Implementation 2009----- + sal_uInt16 highlightItem = pFloat->GetHighlightedItem(); + pFloat->ChangeHighlightItem(highlightItem, sal_False); +//-----IAccessibility2 Implementation 2009 } } } @@ -5566,6 +5610,9 @@ void MenuBarWindow::ChangeHighlightItem( nHighlightedItem = (sal_uInt16)n; DBG_ASSERT( ( nHighlightedItem == ITEMPOS_INVALID ) || pMenu->ImplIsVisible( nHighlightedItem ), "ChangeHighlightItem: Not visible!" ); HighlightItem( nHighlightedItem, sal_True ); +//IAccessibility2 Implementation 2009----- + pMenu->SetHightlightItem(nHighlightedItem); +//-----IAccessibility2 Implementation 2009 pMenu->ImplCallHighlight( nHighlightedItem ); if( mbAutoPopup ) Modified: openoffice/trunk/main/vcl/source/window/toolbox.cxx URL: http://svn.apache.org/viewvc/openoffice/trunk/main/vcl/source/window/toolbox.cxx?rev=1541847&r1=1541846&r2=1541847&view=diff ============================================================================== --- openoffice/trunk/main/vcl/source/window/toolbox.cxx (original) +++ openoffice/trunk/main/vcl/source/window/toolbox.cxx Thu Nov 14 08:18:05 2013 @@ -6065,6 +6065,11 @@ void ToolBox::ImplChangeHighlight( ImplT mnCurPos = aPos; ImplShowFocus(); +//IAccessibility2 Implementation 2009----- + if( pItem->mpWindow ) + pItem->mpWindow->GrabFocus(); + if( pItem != pOldItem ) +//-----IAccessibility2 Implementation 2009 ImplCallEventListeners( VCLEVENT_TOOLBOX_HIGHLIGHT ); } } Modified: openoffice/trunk/main/vcl/source/window/toolbox2.cxx URL: http://svn.apache.org/viewvc/openoffice/trunk/main/vcl/source/window/toolbox2.cxx?rev=1541847&r1=1541846&r2=1541847&view=diff ============================================================================== --- openoffice/trunk/main/vcl/source/window/toolbox2.cxx (original) +++ openoffice/trunk/main/vcl/source/window/toolbox2.cxx Thu Nov 14 08:18:05 2013 @@ -1737,7 +1737,11 @@ void ToolBox::SetItemState( sal_uInt16 n ImplCallEventListeners( VCLEVENT_TOOLBOX_BUTTONSTATECHANGED, reinterpret_cast< void* >( nPos ) ); // Notify - ImplCallEventListeners( VCLEVENT_TOOLBOX_CLICK, reinterpret_cast< void* >( nPos ) ); +//IAccessibility2 Implementation 2009----- + //Solution:Call accessivle listener to notify state_changed event + ImplCallEventListeners( VCLEVENT_TOOLBOX_ITEMUPDATED,reinterpret_cast< void* >(nPos) ); + //ImplCallEventListeners( VCLEVENT_TOOLBOX_CLICK, reinterpret_cast< void* >( nPos ) ); +//-----IAccessibility2 Implementation 2009 } } } Modified: openoffice/trunk/main/vcl/source/window/window.cxx URL: http://svn.apache.org/viewvc/openoffice/trunk/main/vcl/source/window/window.cxx?rev=1541847&r1=1541846&r2=1541847&view=diff ============================================================================== --- openoffice/trunk/main/vcl/source/window/window.cxx (original) +++ openoffice/trunk/main/vcl/source/window/window.cxx Thu Nov 14 08:18:05 2013 @@ -5397,6 +5397,15 @@ long Window::Notify( NotifyEvent& rNEvt return nRet; } +// IAccessible2 implementation, 2009 +void Window::NotifyVCLEvent( sal_uLong nEvent ,void* pData /*= NULL*/) +{ + ImplCallEventListeners( nEvent ,pData); +} +::com::sun::star::uno::Sequence< ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > > Window::GetAccFlowToSequence() +{ + return ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > >(); +} // ----------------------------------------------------------------------- void Window::ImplCallEventListeners( sal_uLong nEvent, void* pData ) @@ -9097,10 +9106,11 @@ sal_uInt16 Window::GetAccessibleRole() c case WINDOW_CANCELBUTTON: case WINDOW_HELPBUTTON: case WINDOW_IMAGEBUTTON: - case WINDOW_MENUBUTTON: + //case WINDOW_MENUBUTTON: case WINDOW_MOREBUTTON: case WINDOW_SPINBUTTON: case WINDOW_BUTTON: nRole = accessibility::AccessibleRole::PUSH_BUTTON; break; + case WINDOW_MENUBUTTON: nRole = accessibility::AccessibleRole::BUTTON_MENU; break; case WINDOW_PATHDIALOG: nRole = accessibility::AccessibleRole::DIRECTORY_PANE; break; case WINDOW_FILEDIALOG: nRole = accessibility::AccessibleRole::FILE_CHOOSER; break; @@ -9115,10 +9125,15 @@ sal_uInt16 Window::GetAccessibleRole() c case WINDOW_MULTILINEEDIT: nRole = accessibility::AccessibleRole::SCROLL_PANE; break; case WINDOW_PATTERNFIELD: +//IAccessibility2 Impplementaton 2009----- + // Need to set the role of those window control to spinbox + /* case WINDOW_NUMERICFIELD: case WINDOW_METRICFIELD: case WINDOW_CURRENCYFIELD: case WINDOW_LONGCURRENCYFIELD: + */ +//-----IAccessibility2 Impplementaton 2009 case WINDOW_EDIT: nRole = ( GetStyle() & WB_PASSWORD ) ? (accessibility::AccessibleRole::PASSWORD_TEXT) : (accessibility::AccessibleRole::TEXT); break; case WINDOW_PATTERNBOX: @@ -9135,7 +9150,17 @@ sal_uInt16 Window::GetAccessibleRole() c case WINDOW_FIXEDTEXT: nRole = accessibility::AccessibleRole::LABEL; break; case WINDOW_FIXEDBORDER: - case WINDOW_FIXEDLINE: nRole = accessibility::AccessibleRole::SEPARATOR; break; + nRole = accessibility::AccessibleRole::SEPARATOR; break; + //IAccessibility2 Impplementaton 2009----- + case WINDOW_FIXEDLINE: + { if( GetText().Len() > 0 ) + nRole = accessibility::AccessibleRole::LABEL; + else + nRole = accessibility::AccessibleRole::SEPARATOR; + break; + } + //case WINDOW_FIXEDLINE: nRole = accessibility::AccessibleRole::SEPARATOR; break; + //-----IAccessibility2 Impplementaton 2009 case WINDOW_FIXEDBITMAP: case WINDOW_FIXEDIMAGE: nRole = accessibility::AccessibleRole::ICON; break; case WINDOW_GROUPBOX: nRole = accessibility::AccessibleRole::GROUP_BOX; break; @@ -9150,6 +9175,13 @@ sal_uInt16 Window::GetAccessibleRole() c case WINDOW_DATEFIELD: case WINDOW_TIMEFIELD: nRole = accessibility::AccessibleRole::DATE_EDITOR; break; +//IAccessibility2 Impplementaton 2009----- + // Need to set the role of those window control to spinbox + case WINDOW_NUMERICFIELD: + case WINDOW_METRICFIELD: + case WINDOW_CURRENCYFIELD: + case WINDOW_LONGCURRENCYFIELD: +//-----IAccessibility2 Impplementaton 2009 case WINDOW_SPINFIELD: nRole = accessibility::AccessibleRole::SPIN_BOX; break; case WINDOW_TOOLBOX: nRole = accessibility::AccessibleRole::TOOL_BAR; break; @@ -9201,8 +9233,12 @@ void Window::SetAccessibleName( const St if ( !mpWindowImpl->mpAccessibleInfos ) mpWindowImpl->mpAccessibleInfos = new ImplAccessibleInfos; +//IAccessibility2 Implementation 2009----- + String oldName = GetAccessibleName(); delete mpWindowImpl->mpAccessibleInfos->pAccessibleName; mpWindowImpl->mpAccessibleInfos->pAccessibleName = new String( rName ); + ImplCallEventListeners( VCLEVENT_WINDOW_FRAMETITLECHANGED, &oldName ); +//-----IAccessibility2 Implementation 2009 } String Window::GetAccessibleName() const @@ -9247,6 +9283,12 @@ String Window::GetAccessibleName() const if ( pLabel && pLabel != this ) aAccessibleName = pLabel->GetText(); } + //IAccessibility2 Implementation 2009----- + if ( !aAccessibleName.Len() ) + { + aAccessibleName = GetQuickHelpText(); + } + //-----IAccessibility2 Implementation 2009 break; case WINDOW_IMAGEBUTTON: @@ -9260,6 +9302,16 @@ String Window::GetAccessibleName() const } break; +//IAccessibility2 Implementation 2009----- + case WINDOW_TOOLBOX: + aAccessibleName = GetText(); + if( aAccessibleName.Len() == 0 ) + aAccessibleName =XubString( RTL_CONSTASCII_USTRINGPARAM( "Tool Bar" ) ); + break; + case WINDOW_MOREBUTTON: + aAccessibleName = mpWindowImpl->maText; + break; +//-----IAccessibility2 Implementation 2009 default: aAccessibleName = GetText(); break; Modified: openoffice/trunk/main/vcl/win/source/window/salframe.cxx URL: http://svn.apache.org/viewvc/openoffice/trunk/main/vcl/win/source/window/salframe.cxx?rev=1541847&r1=1541846&r2=1541847&view=diff ============================================================================== --- openoffice/trunk/main/vcl/win/source/window/salframe.cxx (original) +++ openoffice/trunk/main/vcl/win/source/window/salframe.cxx Thu Nov 14 08:18:05 2013 @@ -92,6 +92,16 @@ using ::std::max; #endif +//IAccessibility2 Implementation 2009----- +#ifdef WNT +#include <oleacc.h> +#include <com/sun/star/accessibility/XMSAAService.hpp> +#ifndef _WIN32_WCE +#define WM_GETOBJECT 0x003D +#endif +#include <win/g_msaasvc.h> +#endif +//-----IAccessibility2 Implementation 2009 #include <com/sun/star/uno/Exception.hdl> #include <time.h> @@ -153,7 +163,12 @@ sal_Bool WinSalFrame::mbInReparent = FAL #define Uni_SupplementaryPlanesStart 0x10000 // ======================================================================= - +//IAccessibility2 Implementation 2009----- +#ifdef WNT +using namespace ::com::sun::star::accessibility; +XMSAAService* g_acc_manager1 = NULL; +#endif +//-----IAccessibility2 Implementation 2009 static void UpdateFrameGeometry( HWND hWnd, WinSalFrame* pFrame ); static void SetMaximizedFrameGeometry( HWND hWnd, WinSalFrame* pFrame, RECT* pParentRect = NULL ); @@ -6178,6 +6193,62 @@ LRESULT CALLBACK SalFrameWndProc( HWND h case WM_IME_NOTIFY: ImplHandleIMENotify( hWnd, wParam ); break; + +//IAccessibility2 implementation 2009----- +#ifdef WNT + case WM_GETOBJECT: + { + if (!Application::IsEnableAccessInterface()) + { + break; + } + else + { + // IA2 should be enabled automatically + AllSettings aSettings = Application::GetSettings(); + MiscSettings aMisc = aSettings.GetMiscSettings(); + aMisc.SetEnableATToolSupport( sal_True ); + aSettings.SetMiscSettings( aMisc ); + Application::SetSettings( aSettings ); + + if (Application::GetSettings().GetMiscSettings().GetEnableATToolSupport()) + { + // Make sure to launch Accessibiliity only the following criterias are satisfied to avoid RFT interrupts regular acc processing + if (g_acc_manager1 == NULL) + { + sal_Bool bCancelled; + InitAccessBridge(sal_False,bCancelled); + if( bCancelled ) + break; + } + if (g_acc_manager1 != NULL) + { + // MT: mhOnSetTitleWnd not set to reasonable value anywhere... + /* + sal_Bool bSkipSetTitleClient = sal_False; + SalFrame* pFrame = GetWindowPtr( hWnd ); + if(pFrame) + { + bSkipSetTitleClient = (lParam == OBJID_CLIENT && hWnd == ((WinSalFrame*)pFrame)->mhOnSetTitleWnd); + } + */ + if ( (lParam == OBJID_CLIENT ) /* && !bSkipSetTitleClient */ ) + { + long RetResult = g_acc_manager1->getAccObjectPtr((long)hWnd, lParam, wParam); + if(RetResult != 0) + { + rDef = FALSE; + return (HRESULT)RetResult; + } + } + } + } + } + break; + } +#endif +//-----IAccessibility2 implementation 2009 + case WM_APPCOMMAND: if( ImplHandleAppCommand( hWnd, lParam ) ) { @@ -6398,3 +6469,25 @@ sal_Bool ImplWriteLastError( DWORD lastE // ----------------------------------------------------------------------- +//IAccessibility2 implementation 2009----- +#ifdef WNT +bool IsWNTInitAccessBridge() +{ + return NULL != g_acc_manager1; +} +#endif +#ifdef WNT +bool WNTEnableAccessInterface(bool bEnable) +{ + ImplSVData* pSVData = ImplGetSVData(); + + BOOL bPreVal = pSVData->maAppData.m_bEnableAccessInterface; + long nEnable= bEnable; + ::InterlockedExchange( + (LPLONG)&(pSVData->maAppData.m_bEnableAccessInterface), + nEnable); + + return bPreVal; +} +#endif +//-----IAccessibility2 implementation 2009 Propchange: openoffice/trunk/test/ ------------------------------------------------------------------------------ Merged /openoffice/branches/ia2/test:r1417739-1541842 Propchange: openoffice/trunk/test/testcommon/source/org/openoffice/test/vcl/ ------------------------------------------------------------------------------ Merged /openoffice/branches/ia2/test/testcommon/source/org/openoffice/test/vcl:r1417739-1541842
