[Libreoffice-commits] core.git: Branch 'libreoffice-4-2' - 6 commits - winaccessibility/inc winaccessibility/source

Michael Stahl mstahl at redhat.com
Mon Nov 25 03:30:24 PST 2013


 winaccessibility/inc/AccObjectWinManager.hxx            |    1 
 winaccessibility/source/UAccCOM/AccTable.cxx            |   34 ++--
 winaccessibility/source/UAccCOM/MAccessible.cxx         |  128 ++++++++--------
 winaccessibility/source/UAccCOM/MAccessible.h           |   11 -
 winaccessibility/source/UAccCOM/UAccCOM.cxx             |    4 
 winaccessibility/source/service/AccObjectWinManager.cxx |   10 -
 winaccessibility/source/service/msaaservice_impl.cxx    |    8 +
 7 files changed, 104 insertions(+), 92 deletions(-)

New commits:
commit c0a500b9f1b47ee1beea3c22ff029a03e657cb8a
Author: Michael Stahl <mstahl at redhat.com>
Date:   Sun Nov 24 00:23:44 2013 +0100

    winaccessibility: let CoCreateInstance calls find the components
    
    The COM services are not found because they are not registered in the
    registry via regsvr32 (doing that is unnecessary since the components
    are only instantiated by winaccessibility code and undesirable since
    that would likely register the IAccessible2 types too, breaking A11y
    tools) and the special manifest resource #97 that ActivateActContext()
    tries to load does not exist in UAccCOM.dll; this would need to be a
    XML manifest, the *.rgs and *.tlb that are already included as
    individual resources won't work.
    
    After reading ATL headers for hours it is immediately obvious that the
    COM components can simply be registered by a call to
    CComModule::RegisterClassObjects() from DllMain; this just requires
    actually loading the UAccCOM library from somewhere so the DllMain runs.
    
    Change-Id: Id58b754835cd2f1bcada37e5639a6b6042a42fd5
    (cherry picked from commit 732ec36edfd09d2091d70c4d71b5f182fe279c45)

diff --git a/winaccessibility/source/UAccCOM/UAccCOM.cxx b/winaccessibility/source/UAccCOM/UAccCOM.cxx
index 1f7eab4..851464f 100644
--- a/winaccessibility/source/UAccCOM/UAccCOM.cxx
+++ b/winaccessibility/source/UAccCOM/UAccCOM.cxx
@@ -66,10 +66,14 @@ extern "C"
     if (dwReason == DLL_PROCESS_ATTACH)
     {
         _Module.Init(ObjectMap, hInstance, &LIBID_UACCCOMLib);
+        _Module.RegisterClassObjects(CLSCTX_INPROC_SERVER, REGCLS_MULTIPLEUSE);
         DisableThreadLibraryCalls(hInstance);
     }
     else if (dwReason == DLL_PROCESS_DETACH)
+    {
+        _Module.RevokeClassObjects();
         _Module.Term();
+    }
     return TRUE;    // ok
 }
 
diff --git a/winaccessibility/source/service/msaaservice_impl.cxx b/winaccessibility/source/service/msaaservice_impl.cxx
index e5e1231..5f3d5fc 100644
--- a/winaccessibility/source/service/msaaservice_impl.cxx
+++ b/winaccessibility/source/service/msaaservice_impl.cxx
@@ -267,6 +267,14 @@ Reference< XInterface > SAL_CALL create_MSAAServiceImpl( Reference< XComponentCo
         }
     }
 
+    // load UAccCOM library so its DllMain can register its COM components
+    static HMODULE h = LoadLibrary("UAccCOM.dll");
+    if (!h)
+    {
+        assert(false);
+        return 0;
+    }
+
     Reference< XMSAAService > xAccMgr( new MSAAServiceImpl() );
 
     AccessBridgeUpdateOldTopWindows( xAccMgr );
commit fd7cb4b05c1ac336f2430e05864bf98afe3030da
Author: Michael Stahl <mstahl at redhat.com>
Date:   Sun Nov 24 00:43:06 2013 +0100

    winaccessibility: fix some error handling in CAccTable
    
    Change-Id: I3c8bc6a476a6254a4ddc3a7cb0585544f3f78431
    (cherry picked from commit d04c970e8f33109a1ef5c52f922a48a0ff62adb0)

diff --git a/winaccessibility/source/UAccCOM/AccTable.cxx b/winaccessibility/source/UAccCOM/AccTable.cxx
index e7935b2..f3a1558 100644
--- a/winaccessibility/source/UAccCOM/AccTable.cxx
+++ b/winaccessibility/source/UAccCOM/AccTable.cxx
@@ -213,22 +213,23 @@ STDMETHODIMP CAccTable::get_columnHeader(IAccessibleTable __RPC_FAR *__RPC_FAR *
     }
     *startingRowIndex = 0 ;
 
-    IAccessible* m_pIMacc = NULL;
+    IMAccessible* pIMacc = NULL;
     ActivateActContext();
     HRESULT hr = CoCreateInstance( CLSID_MAccessible, NULL, CLSCTX_ALL ,
                                     IID_IMAccessible,
-                                    (void **)&m_pIMacc
+                                    (void **)&pIMacc
                                   );
     DeactivateActContext();
-    ((CMAccessible*)m_pIMacc)->SetXAccessible(
-        reinterpret_cast<hyper>(pRXColumnHeader.get()));
-    m_pIMacc->QueryInterface(IID_IAccessibleTable,(void **)accessibleTable);
-    if( SUCCEEDED(hr) )
+
+    if (!SUCCEEDED(hr))
     {
-        return S_OK;
+        return E_FAIL;
     }
+    pIMacc->SetXAccessible(
+        reinterpret_cast<hyper>(pRXColumnHeader.get()));
+    pIMacc->QueryInterface(IID_IAccessibleTable,(void **)accessibleTable);
 
-    return E_FAIL;
+    return S_OK;
 
     LEAVE_PROTECTED_BLOCK
 }
@@ -446,22 +447,23 @@ STDMETHODIMP CAccTable::get_rowHeader(IAccessibleTable __RPC_FAR *__RPC_FAR *acc
     }
     *startingColumnIndex = 0 ;
 
-    IAccessible* m_pIMacc = NULL;
+    IMAccessible* pIMacc = NULL;
     ActivateActContext();
     HRESULT hr = CoCreateInstance( CLSID_MAccessible, NULL, CLSCTX_ALL ,
                                     IID_IMAccessible,
-                                    (void **)&m_pIMacc
+                                    (void **)&pIMacc
                                   );
     DeactivateActContext();
-    ((CMAccessible*)m_pIMacc)->SetXAccessible(
-        reinterpret_cast<hyper>(pRXRowHeader.get()));
-    m_pIMacc->QueryInterface(IID_IAccessibleTable,(void **)accessibleTable);
-    if( SUCCEEDED(hr) )
+
+    if (!SUCCEEDED(hr))
     {
-        return S_OK;
+        return E_FAIL;
     }
+    pIMacc->SetXAccessible(
+        reinterpret_cast<hyper>(pRXRowHeader.get()));
+    pIMacc->QueryInterface(IID_IAccessibleTable,(void **)accessibleTable);
 
-    return E_FAIL;
+    return S_OK;
 
     LEAVE_PROTECTED_BLOCK
 }
commit 930b8f4d51010ddf748225ff445e0d1d19b8768e
Author: Michael Stahl <mstahl at redhat.com>
Date:   Fri Nov 22 19:36:04 2013 +0100

    winaccessibility: don't need 2 global pointers for AccObjectWinManager
    
    Sadly can't use rtl::Static because it needs a ctor parameter...
    
    Change-Id: I98bbfbb4d2ef54f40a5f110527b260c0b5b01eed
    (cherry picked from commit ccb1e06bdb3c37c82ddc7b61135eda09fcdecae4)

diff --git a/winaccessibility/inc/AccObjectWinManager.hxx b/winaccessibility/inc/AccObjectWinManager.hxx
index 41ae6a2..ab05a21 100644
--- a/winaccessibility/inc/AccObjectWinManager.hxx
+++ b/winaccessibility/inc/AccObjectWinManager.hxx
@@ -70,7 +70,6 @@ private:
     com::sun::star::accessibility::XAccessible* oldFocus;
 
     AccObjectManagerAgent*   pAgent;
-    static AccObjectWinManager* me;
     ResIDGenerator ResIdGen;
 
     AccObjectWinManager(AccObjectManagerAgent* Agent=NULL);
diff --git a/winaccessibility/source/service/AccObjectWinManager.cxx b/winaccessibility/source/service/AccObjectWinManager.cxx
index 5773a63..0e9c165 100644
--- a/winaccessibility/source/service/AccObjectWinManager.cxx
+++ b/winaccessibility/source/service/AccObjectWinManager.cxx
@@ -54,7 +54,6 @@ using namespace com::sun::star::accessibility::AccessibleStateType;
 using namespace com::sun::star::uno;
 
 AccObjectWinManager* g_acc_manager = NULL;
-AccObjectWinManager* AccObjectWinManager::me = NULL;
 
 /**
    * Implementation of interface XMSAAService's method getAccObjectPtr() that return the
@@ -97,14 +96,11 @@ AccObjectWinManager::AccObjectWinManager( AccObjectManagerAgent* Agent ):
    */
 AccObjectWinManager* AccObjectWinManager::CreateAccObjectWinManagerInstance( AccObjectManagerAgent* Agent )
 {
-    if( me == NULL )
+    if (!g_acc_manager)
     {
-        me = new AccObjectWinManager( Agent );
-        g_acc_manager = me;
-        return me;
+        g_acc_manager = new AccObjectWinManager( Agent );
     }
-
-    return me;
+    return g_acc_manager;
 }
 
 
commit 0a3bd6a8340a7c5adcae62b7c6863a03875ebf5d
Author: Michael Stahl <mstahl at redhat.com>
Date:   Fri Nov 22 00:38:45 2013 +0100

    winaccessibility: make XAccessibleAction member Reference
    
    Maybe it would be kept alive by AccObject::m_AccActionRef but why not
    play it safe.
    
    Change-Id: I03c2be04e97dcde8a177ef8dfd0d75595ab13a53
    (cherry picked from commit a5e281ff0468416e5bb20b16ccac16550a83a9fd)

diff --git a/winaccessibility/source/UAccCOM/MAccessible.cxx b/winaccessibility/source/UAccCOM/MAccessible.cxx
index 419b60d..ba6a5cd 100644
--- a/winaccessibility/source/UAccCOM/MAccessible.cxx
+++ b/winaccessibility/source/UAccCOM/MAccessible.cxx
@@ -207,7 +207,6 @@ m_pszValue(NULL),
 m_pszDescription(NULL),
 m_isDestroy(FALSE),
 m_pszActionDescription(NULL),
-m_pXAction(NULL),
 m_bRequiresSave(FALSE)
 {
     m_sLocation.m_dLeft=0;
@@ -2409,7 +2408,7 @@ STDMETHODIMP CMAccessible::GetUNOInterface(hyper * pXAcc)
 */
 STDMETHODIMP CMAccessible::SetDefaultAction(hyper pAction)
 {
-    m_pXAction = reinterpret_cast<XAccessibleAction*>(pAction);
+    m_xAction = reinterpret_cast<XAccessibleAction*>(pAction);
     return S_OK;
 }
 
@@ -2434,7 +2433,7 @@ HRESULT STDMETHODCALLTYPE CMAccessible::get_accDefaultAction(VARIANT varChild, B
         {
             if(varChild.lVal==CHILDID_SELF)
             {
-                if( m_pXAction == NULL )
+                if (!m_xAction.is())
                     return DISP_E_MEMBERNOTFOUND;
                 SAFE_SYSFREESTRING(*pszDefaultAction);
                 *pszDefaultAction = SysAllocString(m_pszActionDescription);
@@ -2465,15 +2464,15 @@ HRESULT STDMETHODCALLTYPE CMAccessible::accDoDefaultAction(VARIANT varChild)
         ISDESTROY()
         if( varChild.vt != VT_I4 )
             return E_INVALIDARG;
-    if( m_pXAction == NULL )
+    if (!m_xAction.is())
         return E_FAIL;
-    if( m_pXAction->getAccessibleActionCount() == 0 )
+    if (m_xAction->getAccessibleActionCount() == 0)
         return E_FAIL;
 
     if(varChild.lVal==CHILDID_SELF)
     {
-        if(m_pXAction->getAccessibleActionCount() > 0)
-            m_pXAction->doAccessibleAction(0);
+        if (m_xAction->getAccessibleActionCount() > 0)
+            m_xAction->doAccessibleAction(0);
         return S_OK;
     }
 
diff --git a/winaccessibility/source/UAccCOM/MAccessible.h b/winaccessibility/source/UAccCOM/MAccessible.h
index 315ae3c..69c6e46 100644
--- a/winaccessibility/source/UAccCOM/MAccessible.h
+++ b/winaccessibility/source/UAccCOM/MAccessible.h
@@ -229,7 +229,9 @@ private:
     BOOL m_isDestroy;
 
     css::uno::Reference<css::accessibility::XAccessible> m_xAccessible;
-    css::accessibility::XAccessibleAction *  m_pXAction;
+    // initially m_xAction and m_xContext are the same object
+    // but they may be different once AccObject::UpdateAction() is called?
+    css::uno::Reference<css::accessibility::XAccessibleAction>  m_xAction;
     css::uno::Reference<css::accessibility::XAccessibleContext> m_xContext;
 
 private:
commit 050f835bb390e82eaee4520e8e6c4e255d2c5038
Author: Michael Stahl <mstahl at redhat.com>
Date:   Fri Nov 22 00:27:43 2013 +0100

    winaccessibility: CMAccessible needs only one XAccessibleContext
    
    Merge aliases pRContextInterface (unused) and pRContext; this is
    exacerbated by countless local variables pRContext that shadow the
    member...
    
    Change-Id: I6bc71911fb41a2ce2590d614020ecea36d6ab4f8
    (cherry picked from commit 58ab5239868039bc9e4dff391fc0c420a2eb3d8d)

diff --git a/winaccessibility/source/UAccCOM/MAccessible.cxx b/winaccessibility/source/UAccCOM/MAccessible.cxx
index 493c793..419b60d 100644
--- a/winaccessibility/source/UAccCOM/MAccessible.cxx
+++ b/winaccessibility/source/UAccCOM/MAccessible.cxx
@@ -248,7 +248,6 @@ CMAccessible::~CMAccessible()
     }
     m_pEnumVar->Release();
     m_containedObjects.clear();
-    pRContext = NULL;
 }
 
 /**
@@ -1667,9 +1666,10 @@ STDMETHODIMP CMAccessible::get_nRelations( long __RPC_FAR *nRelations)
 
         *nRelations = 0;
 
-        if( !pRContext.is() )
+        if (!m_xContext.is())
             return E_FAIL;
-        Reference<XAccessibleRelationSet> pRrelationSet = pRContext.get()->getAccessibleRelationSet();
+        Reference<XAccessibleRelationSet> pRrelationSet =
+            m_xContext.get()->getAccessibleRelationSet();
         if(!pRrelationSet.is())
         {
             *nRelations = 0;
@@ -1694,7 +1694,7 @@ STDMETHODIMP CMAccessible::get_relation( long relationIndex, IAccessibleRelation
             return E_INVALIDARG;
         }
 
-        if( !pRContext.is() )
+        if (!m_xContext.is())
             return E_FAIL;
 
 
@@ -1712,9 +1712,8 @@ STDMETHODIMP CMAccessible::get_relation( long relationIndex, IAccessibleRelation
 
         if( relationIndex < nMax )
         {
-
-
-            Reference<XAccessibleRelationSet> pRrelationSet = pRContext.get()->getAccessibleRelationSet();
+            Reference<XAccessibleRelationSet> const pRrelationSet =
+                m_xContext.get()->getAccessibleRelationSet();
             if(!pRrelationSet.is())
             {
 
@@ -1762,10 +1761,11 @@ STDMETHODIMP CMAccessible::get_relations( long, IAccessibleRelation __RPC_FAR *_
         }
         // #CHECK XInterface#
 
-        if( !pRContext.is() )
+        if (!m_xContext.is())
             return E_FAIL;
 
-        Reference<XAccessibleRelationSet> pRrelationSet = pRContext.get()->getAccessibleRelationSet();
+        Reference<XAccessibleRelationSet> const pRrelationSet =
+            m_xContext.get()->getAccessibleRelationSet();
         if(!pRrelationSet.is())
         {
             *nRelations = 0;
@@ -2284,8 +2284,7 @@ STDMETHODIMP CMAccessible::SetXAccessible(hyper pXAcc)
     m_pEnumVar->PutSelection(/*XAccessibleSelection*/
             reinterpret_cast<hyper>(m_xAccessible.get()));
 
-    pRContext = m_xAccessible->getAccessibleContext();
-    pRContextInterface = (XAccessibleContext*)pRContext.is();
+    m_xContext = m_xAccessible->getAccessibleContext();
 
     return S_OK;
 }
@@ -3030,11 +3029,12 @@ STDMETHODIMP CMAccessible:: get_states(AccessibleStates __RPC_FAR *states )
     CHECK_ENABLE_INF
         ENTER_PROTECTED_BLOCK
         ISDESTROY()
-        // #CHECK XInterface#
-        if( !pRContext.is() )
-            return E_FAIL;
 
-    Reference<XAccessibleStateSet> pRStateSet = pRContext.get()->getAccessibleStateSet();
+    if (!m_xContext.is())
+        return E_FAIL;
+
+    Reference<XAccessibleStateSet> const pRStateSet =
+        m_xContext.get()->getAccessibleStateSet();
     if(!pRStateSet.is())
     {
         return S_OK;
@@ -3117,11 +3117,10 @@ STDMETHODIMP CMAccessible:: get_indexInParent( long __RPC_FAR *accParentIndex)
         if(accParentIndex == NULL)
             return E_INVALIDARG;
 
-    // #CHECK XInterface#
-    if( !pRContext.is() )
+    if (!m_xContext.is())
         return E_FAIL;
 
-    *accParentIndex = pRContext.get()->getAccessibleIndexInParent();
+    *accParentIndex = m_xContext.get()->getAccessibleIndexInParent();
     return S_OK;
 
 
@@ -3135,12 +3134,11 @@ STDMETHODIMP CMAccessible:: get_locale( IA2Locale __RPC_FAR *locale  )
         ISDESTROY()
         if(locale == NULL)
             return E_INVALIDARG;
-    // #CHECK XInterface#
 
-    if( !pRContext.is() )
+    if (!m_xContext.is())
         return E_FAIL;
 
-    ::com::sun::star::lang::Locale unoLoc = pRContext.get()->getLocale();
+    ::com::sun::star::lang::Locale unoLoc = m_xContext.get()->getLocale();
     locale->language = SysAllocString((OLECHAR*)unoLoc.Language.getStr());
     locale->country = SysAllocString((OLECHAR*)unoLoc.Country.getStr());
     locale->variant = SysAllocString((OLECHAR*)unoLoc.Variant.getStr());
diff --git a/winaccessibility/source/UAccCOM/MAccessible.h b/winaccessibility/source/UAccCOM/MAccessible.h
index f95ff77..315ae3c 100644
--- a/winaccessibility/source/UAccCOM/MAccessible.h
+++ b/winaccessibility/source/UAccCOM/MAccessible.h
@@ -230,8 +230,7 @@ private:
 
     css::uno::Reference<css::accessibility::XAccessible> m_xAccessible;
     css::accessibility::XAccessibleAction *  m_pXAction;
-    css::accessibility::XAccessibleContext * pRContextInterface;
-    css::uno::Reference<css::accessibility::XAccessibleContext> pRContext;
+    css::uno::Reference<css::accessibility::XAccessibleContext> m_xContext;
 
 private:
 
commit eb32f6e90d5b4f554044bb94bc0e9c3cb88aac17
Author: Michael Stahl <mstahl at redhat.com>
Date:   Fri Nov 22 00:16:08 2013 +0100

    winaccessibility: CMAccessible needs only one member for XAccessible
    
    Merge aliases pUNOInterface and pRef; also pAchorUNOInterface is never
    used.
    
    Change-Id: I1b3841a9aca9d2438b25c66c7f67d09ce13b41f9
    (cherry picked from commit fd2877ee09fd4cd738769cda5de5b641f73adee2)

diff --git a/winaccessibility/source/UAccCOM/MAccessible.cxx b/winaccessibility/source/UAccCOM/MAccessible.cxx
index 8998ec9..493c793 100644
--- a/winaccessibility/source/UAccCOM/MAccessible.cxx
+++ b/winaccessibility/source/UAccCOM/MAccessible.cxx
@@ -208,8 +208,7 @@ m_pszDescription(NULL),
 m_isDestroy(FALSE),
 m_pszActionDescription(NULL),
 m_pXAction(NULL),
-m_bRequiresSave(FALSE),
-pUNOInterface(NULL)
+m_bRequiresSave(FALSE)
 {
     m_sLocation.m_dLeft=0;
     m_sLocation.m_dTop = 0;
@@ -247,7 +246,6 @@ CMAccessible::~CMAccessible()
         m_pIParent->Release();
         m_pIParent=NULL;
     }
-    pRef = NULL;
     m_pEnumVar->Release();
     m_containedObjects.clear();
     pRContext = NULL;
@@ -310,10 +308,11 @@ STDMETHODIMP CMAccessible::get_accChildCount(long *pcountChildren)
             return E_INVALIDARG;
         }
 
-        if(!pUNOInterface)
+        if (!m_xAccessible.is())
             return S_FALSE;
 
-        Reference< XAccessibleContext > pRContext = pUNOInterface->getAccessibleContext();
+        Reference<XAccessibleContext> const pRContext =
+            m_xAccessible->getAccessibleContext();
         if( pRContext.is() )
         {
             *pcountChildren = pRContext->getAccessibleChildCount();
@@ -556,9 +555,10 @@ STDMETHODIMP CMAccessible::get_accState(VARIANT varChild, VARIANT *pvarState)
         {
             if(varChild.lVal == CHILDID_SELF)
             {
-                if(pUNOInterface)
+                if (m_xAccessible.is())
                 {
-                    Reference< XAccessibleContext > pContext = pUNOInterface->getAccessibleContext();
+                    Reference<XAccessibleContext> const pContext =
+                        m_xAccessible->getAccessibleContext();
                     if(pContext.is())
                     {
                         // add the STATE_SYSTEM_LINKED state
@@ -661,9 +661,10 @@ STDMETHODIMP CMAccessible::get_accKeyboardShortcut(VARIANT varChild, BSTR *pszKe
         {
             if(varChild.lVal == CHILDID_SELF)
             {
-                if( pUNOInterface )
+                if (m_xAccessible.is())
                 {
-                    Reference<XAccessibleContext> pRContext = pUNOInterface->getAccessibleContext();
+                    Reference<XAccessibleContext> const pRContext =
+                        m_xAccessible->getAccessibleContext();
                     if( !pRContext.is() )
                         return S_FALSE;
 
@@ -748,7 +749,7 @@ STDMETHODIMP CMAccessible::get_accKeyboardShortcut(VARIANT varChild, BSTR *pszKe
                         {
                             xTargets = paccRelation->TargetSet;
                             pRAcc = xTargets[0];
-                            if(pUNOInterface != (XAccessible*)pRAcc.get())
+                            if (m_xAccessible.get() != (XAccessible*)pRAcc.get())
                                 return S_FALSE;
                         }
 
@@ -903,9 +904,10 @@ STDMETHODIMP CMAccessible::accLocation(long *pxLeft, long *pyTop, long *pcxWidth
             if(varChild.lVal==CHILDID_SELF)
             {
 
-                if(pUNOInterface)
+                if (m_xAccessible.is())
                 {
-                    Reference< XAccessibleContext > pRContext = pUNOInterface->getAccessibleContext();
+                    Reference<XAccessibleContext> const pRContext =
+                        m_xAccessible->getAccessibleContext();
                     if( !pRContext.is() )
                         return S_FALSE;
                     Reference< XAccessibleComponent > pRComponent(pRContext,UNO_QUERY);
@@ -1006,7 +1008,7 @@ STDMETHODIMP CMAccessible::accHitTest(long xLeft, long yTop, VARIANT *pvarChild)
         {
             int i, nCount;
             pvarChild->vt = VT_EMPTY;
-            Reference< XAccessibleContext > pRContext = GetContextByXAcc(pUNOInterface);
+            Reference< XAccessibleContext > pRContext = GetContextByXAcc(m_xAccessible.get());
             nCount = pRContext->getAccessibleChildCount();
             if(nCount > 256)
                 return E_FAIL;
@@ -1344,7 +1346,7 @@ STDMETHODIMP CMAccessible::Put_XAccAgent(hyper pAgent)
 /**
 * When a UNO control disposing, it disposes its listeners,
 * then notify AccObject in bridge management, then notify
-* COM that the XAccessible is invalid,so set pUNOInterface as NULL
+* COM that the XAccessible is invalid,so set m_xAccessible as NULL
 * @param    isDestroy, true is it need to be destroyed.
 * @return   S_OK if successful and E_FAIL if failure.
 */
@@ -1352,7 +1354,7 @@ STDMETHODIMP CMAccessible::NotifyDestroy(BOOL isDestroy)
 {
 
     m_isDestroy = isDestroy;
-    pUNOInterface = NULL;
+    m_xAccessible.clear();
     return S_OK;
 }
 
@@ -1381,7 +1383,8 @@ IMAccessible* CMAccessible::GetChildInterface(long dChildID)//for test
     }
     else
     {
-        Reference< XAccessibleContext > pRContext = pUNOInterface->getAccessibleContext();
+        Reference<XAccessibleContext> const pRContext =
+            m_xAccessible->getAccessibleContext();
         if( !pRContext.is() )
             return NULL;
 
@@ -1394,7 +1397,7 @@ IMAccessible* CMAccessible::GetChildInterface(long dChildID)//for test
 
         if(!isGet)
         {
-            g_pAgent->InsertAccObj(pXChild.get(), pUNOInterface,
+            g_pAgent->InsertAccObj(pXChild.get(), m_xAccessible.get(),
                     reinterpret_cast<sal_Int64>(m_hwnd));
             isGet = get_IAccessibleFromXAccessible(pXChild.get(), &pChild);
         }
@@ -1429,7 +1432,7 @@ BOOL CMAccessible::IsDecendantManage()
 IMAccessible* CMAccessible::GetNavigateChildForDM(VARIANT varCur, short flags)
 {
 
-    XAccessibleContext* pXContext = GetContextByXAcc(pUNOInterface);
+    XAccessibleContext* pXContext = GetContextByXAcc(m_xAccessible.get());
     if(pXContext==NULL)
     {
         return NULL;
@@ -1490,7 +1493,7 @@ IMAccessible* CMAccessible::GetNavigateChildForDM(VARIANT varCur, short flags)
         return NULL;
     }
     pChildXAcc = pRChildXAcc.get();
-    g_pAgent->InsertAccObj(pChildXAcc,pUNOInterface);
+    g_pAgent->InsertAccObj(pChildXAcc, m_xAccessible.get());
     return g_pAgent->GetIMAccByXAcc(pChildXAcc);
 }
 
@@ -1589,7 +1592,8 @@ HRESULT CMAccessible::GetNextSibling(VARIANT varStart,VARIANT* pvarEndUpAt)
             return E_INVALIDARG;
         }
 
-        Reference< XAccessibleContext > pRContext = GetContextByXAcc(pUNOInterface);
+        Reference<XAccessibleContext> const pRContext =
+            GetContextByXAcc(m_xAccessible.get());
         if(pRContext.is())
         {
             varStart.iVal = sal_Int16(pRContext->getAccessibleIndexInParent() + 2);
@@ -1628,7 +1632,8 @@ HRESULT CMAccessible::GetPreSibling(VARIANT varStart,VARIANT* pvarEndUpAt)
             return E_INVALIDARG;
         }
 
-        Reference< XAccessibleContext > pRContext = GetContextByXAcc(pUNOInterface);
+        Reference<XAccessibleContext> const pRContext =
+            GetContextByXAcc(m_xAccessible.get());
         if(pRContext.is())
         {
             varStart.iVal = sal_Int16(pRContext->getAccessibleIndexInParent());
@@ -1902,7 +1907,8 @@ STDMETHODIMP CMAccessible:: get_groupPosition(long __RPC_FAR *groupLevel,long __
             return E_INVALIDARG;
         }
 
-        Reference<XAccessibleContext> pRContext = pUNOInterface->getAccessibleContext();
+        Reference<XAccessibleContext> const pRContext =
+            m_xAccessible->getAccessibleContext();
         if(!pRContext.is())
             return E_FAIL;
         long Role = pRContext->getAccessibleRole();
@@ -1960,7 +1966,7 @@ STDMETHODIMP CMAccessible:: get_groupPosition(long __RPC_FAR *groupLevel,long __
                             == (XAccessible*)pRAcc.get() &&
                             pRParentContext->getAccessibleChild(j)->getAccessibleContext()->getAccessibleRole() == RADIO_BUTTON)
                             number++;
-                        if(pRParentContext->getAccessibleChild(j).get() == pUNOInterface)
+                        if (pRParentContext->getAccessibleChild(j).get() == m_xAccessible.get())
                             index = number;
                     }
                 }
@@ -2152,9 +2158,10 @@ XAccessibleContext* CMAccessible::GetContextByXAcc( XAccessible* pXAcc )
 */
 Reference< XAccessibleSelection > CMAccessible::GetSelection()
 {
-    if( pUNOInterface == NULL )
+    if (!m_xAccessible.is())
         return NULL;
-    Reference< XAccessibleContext > pRContext = pUNOInterface->getAccessibleContext();
+    Reference<XAccessibleContext> const pRContext =
+        m_xAccessible->getAccessibleContext();
     if(pRContext.is())
     {
         Reference< XAccessibleSelection > pRSelection(pRContext,UNO_QUERY);
@@ -2173,7 +2180,7 @@ HRESULT CMAccessible::SelectChild(XAccessible* pItem)
 
     ENTER_PROTECTED_BLOCK
         ISDESTROY()
-        XAccessibleContext* pParentContext = GetContextByXAcc( pUNOInterface );
+        XAccessibleContext* pParentContext = GetContextByXAcc(m_xAccessible.get());
     XAccessibleContext* pContext = GetContextByXAcc( pItem );
     if( pParentContext == NULL || pContext == NULL )
         return E_FAIL;
@@ -2198,7 +2205,7 @@ HRESULT CMAccessible::DeSelectChild(XAccessible* pItem)
 
     ENTER_PROTECTED_BLOCK
         ISDESTROY()
-        XAccessibleContext* pParentContext = GetContextByXAcc( pUNOInterface );
+        XAccessibleContext* pParentContext = GetContextByXAcc(m_xAccessible.get());
     ;
     XAccessibleContext* pContext = GetContextByXAcc( pItem );
     if( pParentContext == NULL || pContext == NULL )
@@ -2273,12 +2280,11 @@ HRESULT CMAccessible::DeSelectMutipleChildren( XAccessible** pItem,int size )
 */
 STDMETHODIMP CMAccessible::SetXAccessible(hyper pXAcc)
 {
-    pUNOInterface = reinterpret_cast<XAccessible*>(pXAcc);
-    pRef = pUNOInterface;
+    m_xAccessible = reinterpret_cast<XAccessible*>(pXAcc);
     m_pEnumVar->PutSelection(/*XAccessibleSelection*/
-            reinterpret_cast<hyper>(pUNOInterface));
+            reinterpret_cast<hyper>(m_xAccessible.get()));
 
-    pRContext = pUNOInterface->getAccessibleContext();
+    pRContext = m_xAccessible->getAccessibleContext();
     pRContextInterface = (XAccessibleContext*)pRContext.is();
 
     return S_OK;
@@ -2393,7 +2399,7 @@ STDMETHODIMP CMAccessible::GetUNOInterface(hyper * pXAcc)
     if(pXAcc == NULL)
         return E_INVALIDARG;
 
-    *pXAcc = reinterpret_cast<hyper>(pUNOInterface);
+    *pXAcc = reinterpret_cast<hyper>(m_xAccessible.get());
     return S_OK;
 }
 
@@ -2571,7 +2577,8 @@ HRESULT WINAPI CMAccessible::SmartQI(void* pv, REFIID iid, void** ppvObject)
         if(ImplIsEqualGUID(iid, *pMap->piid))
         {
             XInterface* pXI = NULL;
-            BOOL bFound = GetXInterfaceFromXAccessible(pUNOInterface,&pXI,pMap->XIFIndex);
+            BOOL bFound = GetXInterfaceFromXAccessible(m_xAccessible.get(),
+                                &pXI, pMap->XIFIndex);
             if(!bFound)
             {
                 return E_FAIL;
@@ -2595,7 +2602,7 @@ HRESULT WINAPI CMAccessible::SmartQI(void* pv, REFIID iid, void** ppvObject)
                     if(wrapper)
                     {
                         wrapper->put_XInterface(
-                                reinterpret_cast<hyper>(pUNOInterface));
+                                reinterpret_cast<hyper>(m_xAccessible.get()));
                         wrapper->Release();
                     }
                     return S_OK;
@@ -3246,7 +3253,7 @@ STDMETHODIMP CMAccessible:: get_toolkitVersion(BSTR __RPC_FAR *version)
 STDMETHODIMP CMAccessible::get_attributes(/*[out]*/ BSTR *pAttr)
 {
     CHECK_ENABLE_INF
-        Reference<XAccessibleContext> pRContext = pUNOInterface->getAccessibleContext();
+    Reference<XAccessibleContext> pRContext = m_xAccessible->getAccessibleContext();
     if( !pRContext.is() )
     {
         return E_FAIL;
diff --git a/winaccessibility/source/UAccCOM/MAccessible.h b/winaccessibility/source/UAccCOM/MAccessible.h
index def1171..f95ff77 100644
--- a/winaccessibility/source/UAccCOM/MAccessible.h
+++ b/winaccessibility/source/UAccCOM/MAccessible.h
@@ -228,9 +228,7 @@ private:
     // specify if the XAccessible is invalid
     BOOL m_isDestroy;
 
-    css::accessibility::XAccessible * pUNOInterface;
-    css::uno::Reference<css::accessibility::XAccessible> pRef;
-    css::accessibility::XAccessible * pAchorUNOInterface;
+    css::uno::Reference<css::accessibility::XAccessible> m_xAccessible;
     css::accessibility::XAccessibleAction *  m_pXAction;
     css::accessibility::XAccessibleContext * pRContextInterface;
     css::uno::Reference<css::accessibility::XAccessibleContext> pRContext;


More information about the Libreoffice-commits mailing list