diff --git a/mozilla/widget/src/windows/Accessible.cpp b/mozilla/widget/src/windows/Accessible.cpp index 99f93996cff..2a8ddec9a2e 100644 --- a/mozilla/widget/src/windows/Accessible.cpp +++ b/mozilla/widget/src/windows/Accessible.cpp @@ -59,7 +59,7 @@ EXTERN_C GUID CDECL CLSID_Accessible = //----------------------------------------------------- // construction //----------------------------------------------------- -Accessible::Accessible(nsIAccessible* aAcc, HWND aWnd): SimpleDOMNode(aAcc, aWnd) +Accessible::Accessible(nsIAccessible* aAcc, nsIDOMNode* aNode, HWND aWnd): SimpleDOMNode(aAcc, aNode, aWnd) { mAccessible = aAcc; // The nsIAccessible we're proxying from @@ -76,6 +76,7 @@ Accessible::Accessible(nsIAccessible* aAcc, HWND aWnd): SimpleDOMNode(aAcc, aWnd #endif } + //----------------------------------------------------- // destruction //----------------------------------------------------- @@ -204,7 +205,7 @@ STDMETHODIMP Accessible::get_accParent( IDispatch __RPC_FAR *__RPC_FAR *ppdispPa mAccessible->GetAccParent(getter_AddRefs(parent)); if (parent) { - IAccessible* a = new Accessible(parent, mWnd); + IAccessible* a = new Accessible(parent, nsnull, mWnd); a->AddRef(); *ppdispParent = a; return S_OK; @@ -255,7 +256,7 @@ STDMETHODIMP Accessible::get_accChild( } // create a new one. - IAccessible* ia = new Accessible(a, mWnd); + IAccessible* ia = new Accessible(a, nsnull, mWnd); ia->AddRef(); *ppdispChild = ia; return S_OK; @@ -405,7 +406,7 @@ STDMETHODIMP Accessible::get_accFocus( nsCOMPtr focusedAccessible; if (NS_SUCCEEDED(mAccessible->GetAccFocused(getter_AddRefs(focusedAccessible)))) { pvarChild->vt = VT_DISPATCH; - pvarChild->pdispVal = new Accessible(focusedAccessible, mWnd); + pvarChild->pdispVal = new Accessible(focusedAccessible, nsnull, mWnd); pvarChild->pdispVal->AddRef(); return S_OK; } @@ -528,7 +529,7 @@ STDMETHODIMP Accessible::accNavigate( } if (acc) { - IAccessible* a = new Accessible(acc,mWnd); + IAccessible* a = new Accessible(acc, nsnull, mWnd); a->AddRef(); pvarEndUpAt->vt = VT_DISPATCH; pvarEndUpAt->pdispVal = a; @@ -563,7 +564,7 @@ STDMETHODIMP Accessible::accHitTest( pvarChild->lVal = CHILDID_SELF; } else { // its not create an Accessible for it. pvarChild->vt = VT_DISPATCH; - pvarChild->pdispVal = new Accessible(a, mWnd); + pvarChild->pdispVal = new Accessible(a, nsnull, mWnd); pvarChild->pdispVal->AddRef(); } } else { @@ -704,7 +705,7 @@ DocAccessible::Release(void) } -DocAccessible::DocAccessible(nsIAccessible* aAcc, HWND aWnd):Accessible(aAcc,aWnd) +DocAccessible::DocAccessible(nsIAccessible* aAcc, nsIDOMNode *aNode, HWND aWnd):Accessible(aAcc,aNode,aWnd) { } @@ -821,8 +822,9 @@ RootAccessible::Release(void) return DocAccessible::Release(); } -RootAccessible::RootAccessible(nsIAccessible* aAcc, HWND aWnd):DocAccessible(aAcc,aWnd) +RootAccessible::RootAccessible(nsIAccessible* aAcc, HWND aWnd):DocAccessible(aAcc,nsnull,aWnd) { + mListCount = 0; mNextId = -1; mNextPos = 0; diff --git a/mozilla/widget/src/windows/Accessible.h b/mozilla/widget/src/windows/Accessible.h index 1aa1a263e09..b0ea21c4dd5 100644 --- a/mozilla/widget/src/windows/Accessible.h +++ b/mozilla/widget/src/windows/Accessible.h @@ -48,7 +48,7 @@ typedef LRESULT (STDAPICALLTYPE *LPFNNOTIFYWINEVENT)(DWORD event,HWND hwnd,LONG class Accessible : public SimpleDOMNode, public IAccessible { public: // construction, destruction - Accessible(nsIAccessible*, HWND aWin = 0); + Accessible(nsIAccessible*, nsIDOMNode*, HWND aWin = 0); virtual ~Accessible(); public: // IUnknown methods - see iunknown.h for documentation @@ -191,7 +191,7 @@ public: class DocAccessible: public Accessible, public ISimpleDOMDocument { public: - DocAccessible(nsIAccessible*, HWND aWin = 0); + DocAccessible(nsIAccessible*, nsIDOMNode *, HWND aWin = 0); virtual ~DocAccessible(); STDMETHODIMP_(ULONG) AddRef (); @@ -218,6 +218,7 @@ public: /* [out] */ BSTR __RPC_FAR *nameSpaceURI); }; + #define MAX_LIST_SIZE 100 class RootAccessible: public DocAccessible, public nsIAccessibleEventListener diff --git a/mozilla/widget/src/windows/SimpleDOMNode.cpp b/mozilla/widget/src/windows/SimpleDOMNode.cpp index 3db70011e04..164948b667d 100644 --- a/mozilla/widget/src/windows/SimpleDOMNode.cpp +++ b/mozilla/widget/src/windows/SimpleDOMNode.cpp @@ -70,18 +70,12 @@ static gSimpleDOMNodes = 0; // construction //----------------------------------------------------- -SimpleDOMNode::SimpleDOMNode(nsIAccessible* aNSAcc, HWND aWnd): mWnd(aWnd), m_cRef(0) -{ - aNSAcc->AccGetDOMNode(getter_AddRefs(mDOMNode)); - nsCOMPtr doc(do_QueryInterface(mDOMNode)); - -#ifdef DEBUG_LEAKS - printf("SimpleDOMNodes=%d\n", ++gSimpleDOMNodes); -#endif -} - -SimpleDOMNode::SimpleDOMNode(nsIDOMNode *aNode, HWND aWnd): mDOMNode(aNode), mWnd(aWnd), m_cRef(0) +SimpleDOMNode::SimpleDOMNode(nsIAccessible* aNSAcc, nsIDOMNode *aNode, HWND aWnd): mWnd(aWnd), m_cRef(0) { + mDOMNode = aNode; + if (!aNode && aNSAcc) + aNSAcc->AccGetDOMNode(getter_AddRefs(mDOMNode)); + #ifdef DEBUG_LEAKS printf("SimpleDOMNodes=%d\n", ++gSimpleDOMNodes); #endif @@ -337,11 +331,11 @@ ISimpleDOMNode* SimpleDOMNode::MakeSimpleDOMNode(nsIDOMNode *node) if (nsAcc) { nsCOMPtr nsAccDoc(do_QueryInterface(nsAcc)); if (nsAccDoc) { - DocAccessible *accDoc = new DocAccessible(nsAcc, mWnd); + DocAccessible *accDoc = new DocAccessible(nsAcc, node, mWnd); accDoc->QueryInterface(IID_ISimpleDOMNode, (void**)&newNode); } else { - Accessible *acc = new Accessible(nsAcc, mWnd); + Accessible *acc = new Accessible(nsAcc, node, mWnd); acc->QueryInterface(IID_ISimpleDOMNode, (void**)&newNode); } } @@ -357,7 +351,7 @@ ISimpleDOMNode* SimpleDOMNode::MakeSimpleDOMNode(nsIDOMNode *node) } } else - newNode = new SimpleDOMNode(node, mWnd); + newNode = new SimpleDOMNode(nsnull, node, mWnd); if (newNode) newNode->AddRef(); diff --git a/mozilla/widget/src/windows/SimpleDOMNode.h b/mozilla/widget/src/windows/SimpleDOMNode.h index 2b35736cc28..9d3cf89d84b 100644 --- a/mozilla/widget/src/windows/SimpleDOMNode.h +++ b/mozilla/widget/src/windows/SimpleDOMNode.h @@ -44,7 +44,7 @@ class SimpleDOMNode : public ISimpleDOMNode { public: // construction, destruction SimpleDOMNode(nsIAccessible *, HWND); - SimpleDOMNode(nsIDOMNode *, HWND); + SimpleDOMNode(nsIAccessible *, nsIDOMNode *, HWND); virtual ~SimpleDOMNode(); public: // IUnknown methods - see iunknown.h for documentation