summaryrefslogtreecommitdiff
path: root/winaccessibility
diff options
context:
space:
mode:
authorMichael Stahl <mstahl@redhat.com>2013-12-03 18:36:28 +0100
committerMichael Stahl <mstahl@redhat.com>2013-12-13 19:47:41 +0100
commitec3cbe98c3aad0ca1d435ea8eccab2eced4b6f86 (patch)
treef9e085ba9cb36a04ee41c195cda83a6f5515dbaa /winaccessibility
parent4583a3e9b0392f91516603ac8a09f52494e1004f (diff)
winaccessibility: clean up the AGGMAP in CMAccessible
Replace it with a map for the new direct C++ instantiation and move this implementation detail to the cxx file. Change-Id: Ia961da03f8eb899481cf02f430c921aa8abd7c5c (cherry picked from commit 9d71c9a442b2be027900f7b20342e2a0f43ed2ab)
Diffstat (limited to 'winaccessibility')
-rw-r--r--winaccessibility/source/UAccCOM/MAccessible.cxx76
-rw-r--r--winaccessibility/source/UAccCOM/MAccessible.h41
-rw-r--r--winaccessibility/source/UAccCOM/acccommon.h9
3 files changed, 42 insertions, 84 deletions
diff --git a/winaccessibility/source/UAccCOM/MAccessible.cxx b/winaccessibility/source/UAccCOM/MAccessible.cxx
index 6c909f9722c1..dbe23c0b7a1f 100644
--- a/winaccessibility/source/UAccCOM/MAccessible.cxx
+++ b/winaccessibility/source/UAccCOM/MAccessible.cxx
@@ -57,6 +57,23 @@ using namespace com::sun::star::uno;
using namespace com::sun::star::accessibility;
using namespace com::sun::star::accessibility::AccessibleStateType;
+enum XInterfaceIndex {
+ XI_COMPONENT = 0x01,
+ XI_TEXT = 0x02,
+ XI_TABLE = 0x03,
+ XI_EDITABLETEXT = 0x04,
+ XI_IMAGE = 0x05,
+ XI_SELECTION = 0x06,
+ XI_EXTENDEDCOMP = 0x07,
+ XI_VALUE = 0x08,
+ XI_KEYBINDING = 0x09,
+ XI_ACTION = 0x0A,
+ XI_HYPERTEXT = 0x0B,
+ XI_HYPERLINK = 0x0C,
+ XI_ATTRIBUTE = 0x0D,
+ XI_NULL = -1
+};
+
// IA2 states mapping, and name
// maintenance the consistency, change one array, change the three all
long IA2_STATES[] =
@@ -2571,6 +2588,29 @@ createAggInstance(CMAccessible &rOuter, void ** ppvObject)
rOuter.GetControllingUnknown(), IID_IUnknown, ppvObject);
}
+typedef HRESULT (AggCreatorFunc)(CMAccessible &, void **);
+
+struct AggMapEntry
+{
+ const IID* piid;
+ AggCreatorFunc* pfnCreateInstance;
+ int XIFIndex;
+};
+
+static AggMapEntry g_CMAccessible_AggMap[] = {
+ { &IID_IAccessibleComponent, &createAggInstance<CAccComponent>, XI_COMPONENT },
+ { &IID_IAccessibleText, &createAggInstance<CAccText>, XI_TEXT },
+ { &IID_IAccessibleEditableText, &createAggInstance<CAccEditableText>, XI_EDITABLETEXT },
+ { &IID_IAccessibleImage, &createAggInstance<CAccImage>, XI_IMAGE },
+ { &IID_IAccessibleTable, &createAggInstance<CAccTable>, XI_TABLE },
+ { &IID_IAccessibleAction, &createAggInstance<CAccAction>, XI_ACTION },
+ { &IID_IAccessibleValue, &createAggInstance<CAccValue>, XI_VALUE },
+ { &IID_IAccessibleHypertext, &createAggInstance<CAccHypertext>, XI_HYPERTEXT },
+ { &IID_IAccessibleHyperlink, &createAggInstance<CAccHyperLink>, XI_HYPERLINK },
+ { 0, 0, 0 },
+};
+
+
HRESULT WINAPI CMAccessible::SmartQI(void* /*pv*/, REFIID iid, void** ppvObject)
{
ENTER_PROTECTED_BLOCK
@@ -2583,7 +2623,7 @@ HRESULT WINAPI CMAccessible::SmartQI(void* /*pv*/, REFIID iid, void** ppvObject)
return E_FAIL;
- _UNO_AGGMAP_ENTRY* pMap = _GetAggEntries();
+ AggMapEntry * pMap = &g_CMAccessible_AggMap[0];
while(pMap && pMap->piid)
{
if(ImplIsEqualGUID(iid, *pMap->piid))
@@ -2603,39 +2643,7 @@ HRESULT WINAPI CMAccessible::SmartQI(void* /*pv*/, REFIID iid, void** ppvObject)
}
else
{
- HRESULT hr(REGDB_E_CLASSNOTREG);
- switch (pMap->XIFIndex)
- {
- case XI_COMPONENT:
- hr = createAggInstance<CAccComponent>(*this, ppvObject);
- break;
- case XI_TEXT:
- hr = createAggInstance<CAccText>(*this, ppvObject);
- break;
- case XI_EDITABLETEXT:
- hr = createAggInstance<CAccEditableText>(*this, ppvObject);
- break;
- case XI_IMAGE:
- hr = createAggInstance<CAccImage>(*this, ppvObject);
- break;
- case XI_TABLE:
- hr = createAggInstance<CAccTable>(*this, ppvObject);
- break;
- case XI_ACTION:
- hr = createAggInstance<CAccAction>(*this, ppvObject);
- break;
- case XI_VALUE:
- hr = createAggInstance<CAccValue>(*this, ppvObject);
- break;
- case XI_HYPERTEXT:
- hr = createAggInstance<CAccHypertext>(*this, ppvObject);
- break;
- case XI_HYPERLINK:
- hr = createAggInstance<CAccHyperLink>(*this, ppvObject);
- break;
- default:
- assert(false);
- }
+ HRESULT hr = pMap->pfnCreateInstance(*this, ppvObject);
assert(hr == S_OK);
if(hr == S_OK)
{
diff --git a/winaccessibility/source/UAccCOM/MAccessible.h b/winaccessibility/source/UAccCOM/MAccessible.h
index 7262cb39b7af..5702a619dfd2 100644
--- a/winaccessibility/source/UAccCOM/MAccessible.h
+++ b/winaccessibility/source/UAccCOM/MAccessible.h
@@ -65,32 +65,6 @@ class ATL_NO_VTABLE CMAccessible :
{
typedef ::std::map<const GUID, CComPtr<IUnknown>, ltComp> XGUIDToComObjHash;
- typedef HRESULT (WINAPI _UNO_AGGCREATORFUNC)(void*, REFIID, LPVOID*);
-
- struct _UNO_AGGMAP_ENTRY
- {
- const IID* piid;
- _UNO_AGGCREATORFUNC* pfnCreateInstance;
- int XIFIndex;
- };
-
- enum XInterfaceIndex {
- XI_COMPONENT = 0x01,
- XI_TEXT = 0x02,
- XI_TABLE = 0x03,
- XI_EDITABLETEXT = 0x04,
- XI_IMAGE = 0x05,
- XI_SELECTION = 0x06,
- XI_EXTENDEDCOMP = 0x07,
- XI_VALUE = 0x08,
- XI_KEYBINDING = 0x09,
- XI_ACTION = 0x0A,
- XI_HYPERTEXT = 0x0B,
- XI_HYPERLINK = 0x0C,
- XI_ATTRIBUTE = 0x0D,
- XI_NULL = -1
- };
-
public:
CMAccessible();
virtual ~CMAccessible();
@@ -111,21 +85,6 @@ public:
COM_INTERFACE_ENTRY_FUNC_BLIND(NULL,_SmartQI)
END_COM_MAP()
- // AGGREGATE OBJECT MAP
- BEGIN_AGGOBJECT_MAP(CMAccessible)
- AGGOBJECT_ENTRY(IID_IAccessibleComponent, CLSID_AccComponent, COMPONENT)
- AGGOBJECT_ENTRY(IID_IAccessibleText, CLSID_AccText, TEXT)
- AGGOBJECT_ENTRY(IID_IAccessibleEditableText, CLSID_AccEditableText, EDITABLETEXT)
- AGGOBJECT_ENTRY(IID_IAccessibleImage, CLSID_AccImage, IMAGE)
- AGGOBJECT_ENTRY(IID_IAccessibleTable, CLSID_AccTable, TABLE)
- AGGOBJECT_ENTRY(IID_IAccessibleAction, CLSID_AccAction, ACTION)
- AGGOBJECT_ENTRY(IID_IAccessibleValue, CLSID_AccValue, VALUE)
- AGGOBJECT_ENTRY(IID_IAccessibleHypertext, CLSID_AccHypertext, HYPERTEXT)
- AGGOBJECT_ENTRY(IID_IAccessibleHyperlink, CLSID_AccHyperLink, HYPERLINK)
-
-
- END_AGGOBJECT_MAP()
-
// IMAccessible
STDMETHOD(put_accValue)(VARIANT varChild,BSTR szValue);
STDMETHOD(put_accName)(VARIANT varChild,BSTR szName);
diff --git a/winaccessibility/source/UAccCOM/acccommon.h b/winaccessibility/source/UAccCOM/acccommon.h
index 22112ad97eac..9ca1382c8e30 100644
--- a/winaccessibility/source/UAccCOM/acccommon.h
+++ b/winaccessibility/source/UAccCOM/acccommon.h
@@ -45,15 +45,6 @@ struct ltComp
}
};
-#define BEGIN_AGGOBJECT_MAP(x) \
- static _UNO_AGGMAP_ENTRY* WINAPI _GetAggEntries() { \
- static _UNO_AGGMAP_ENTRY _aggentries[] = {
-#define END_AGGOBJECT_MAP() {NULL, NULL,NULL}}; \
- return _aggentries;}
-#define AGGOBJECT_ENTRY(iid, clsid, ifindex) {&iid, \
- CComAggregateCreator< CComObject<CMAccessible>, &clsid >::CreateInstance,\
- XI_##ifindex},
-
enum DM_NIR {
DM_FIRSTCHILD = 0x00,
DM_LASTCHILD = 0x01,