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


Reply via email to