Kaydet (Commit) d0e8e6e3 authored tarafından Michael Stahl's avatar Michael Stahl

winaccessibility: fix my stupid mistake in createAggInstance

Change-Id: I7701021befcf1dbad85557c2095fe4bf0b4e0ff1
üst db214684
...@@ -2560,14 +2560,15 @@ BOOL CMAccessible::GetXInterfaceFromXAccessible(XAccessible* pXAcc, XInterface** ...@@ -2560,14 +2560,15 @@ BOOL CMAccessible::GetXInterfaceFromXAccessible(XAccessible* pXAcc, XInterface**
} }
template<typename T> HRESULT template<typename T> HRESULT
createAggInstance(CMAccessible &rOuter, REFIID iid, void ** ppvObject) createAggInstance(CMAccessible &rOuter, void ** ppvObject)
{ {
// return CComCreator< CComAggObject<T> >::CreateInstance( // Note: CComAggObject has special handling for IUnknown - must
// XXX: do not use CComAggObject - the aggregation is hand-crafted! // query for that when creating it! Otherwise we get a T member of it
// the SmartQI method must not call itself recursively - // which will redirect QueryInterface back to CMAccessible infinitely.
// which it will do if CComAggObject redirects QueryInterface. // (CComAggObject has its own ref-count too which is not a problem
return CComCreator< CComObject<T> >::CreateInstance( // since it is inserted in m_containedObjects.)
rOuter.GetControllingUnknown(), iid, ppvObject); return CComCreator< CComAggObject<T> >::CreateInstance(
rOuter.GetControllingUnknown(), IID_IUnknown, ppvObject);
} }
HRESULT WINAPI CMAccessible::SmartQI(void* /*pv*/, REFIID iid, void** ppvObject) HRESULT WINAPI CMAccessible::SmartQI(void* /*pv*/, REFIID iid, void** ppvObject)
...@@ -2606,31 +2607,31 @@ HRESULT WINAPI CMAccessible::SmartQI(void* /*pv*/, REFIID iid, void** ppvObject) ...@@ -2606,31 +2607,31 @@ HRESULT WINAPI CMAccessible::SmartQI(void* /*pv*/, REFIID iid, void** ppvObject)
switch (pMap->XIFIndex) switch (pMap->XIFIndex)
{ {
case XI_COMPONENT: case XI_COMPONENT:
hr = createAggInstance<CAccComponent>(*this, iid, ppvObject); hr = createAggInstance<CAccComponent>(*this, ppvObject);
break; break;
case XI_TEXT: case XI_TEXT:
hr = createAggInstance<CAccText>(*this, iid, ppvObject); hr = createAggInstance<CAccText>(*this, ppvObject);
break; break;
case XI_EDITABLETEXT: case XI_EDITABLETEXT:
hr = createAggInstance<CAccEditableText>(*this, iid, ppvObject); hr = createAggInstance<CAccEditableText>(*this, ppvObject);
break; break;
case XI_IMAGE: case XI_IMAGE:
hr = createAggInstance<CAccImage>(*this, iid, ppvObject); hr = createAggInstance<CAccImage>(*this, ppvObject);
break; break;
case XI_TABLE: case XI_TABLE:
hr = createAggInstance<CAccTable>(*this, iid, ppvObject); hr = createAggInstance<CAccTable>(*this, ppvObject);
break; break;
case XI_ACTION: case XI_ACTION:
hr = createAggInstance<CAccAction>(*this, iid, ppvObject); hr = createAggInstance<CAccAction>(*this, ppvObject);
break; break;
case XI_VALUE: case XI_VALUE:
hr = createAggInstance<CAccValue>(*this, iid, ppvObject); hr = createAggInstance<CAccValue>(*this, ppvObject);
break; break;
case XI_HYPERTEXT: case XI_HYPERTEXT:
hr = createAggInstance<CAccHypertext>(*this, iid, ppvObject); hr = createAggInstance<CAccHypertext>(*this, ppvObject);
break; break;
case XI_HYPERLINK: case XI_HYPERLINK:
hr = createAggInstance<CAccHyperLink>(*this, iid, ppvObject); hr = createAggInstance<CAccHyperLink>(*this, ppvObject);
break; break;
default: default:
assert(false); assert(false);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment