summaryrefslogtreecommitdiff
path: root/wintable/accessibility.h
diff options
context:
space:
mode:
Diffstat (limited to 'wintable/accessibility.h')
-rw-r--r--wintable/accessibility.h23
1 files changed, 15 insertions, 8 deletions
diff --git a/wintable/accessibility.h b/wintable/accessibility.h
index 15a7aa8..6783353 100644
--- a/wintable/accessibility.h
+++ b/wintable/accessibility.h
@@ -1,7 +1,7 @@
// 24 december 2014
struct tableAcc {
- IAccessibleVtbl *vtbl;
+ const IAccessibleVtbl *vtbl;
ULONG refcount;
struct table *t;
IAccessible *std;
@@ -20,8 +20,7 @@ static HRESULT STDMETHODCALLTYPE tableAccQueryInterface(IAccessible *this, REFII
if (IsEqualIID(riid, &IID_IUnknown) ||
IsEqualIID(riid, &IID_IDispatch) ||
IsEqualIID(riid, &IID_IAccessible)) {
- // TODO figure out what pointer to use here
- TA->vtbl->AddRef(TA);
+ IAccessible_AddRef(this);
*ppvObject = (void *) this;
return S_OK;
}
@@ -218,9 +217,10 @@ static struct tableAcc *newTableAcc(struct table *t)
ta = (struct tableAcc *) tableAlloc(sizeof (struct tableAcc), "error creating Table accessibility object");
ta->vtbl = &tableAccVtbl;
- ta->vtbl->AddRef(ta);
+ // TODO
+ IAccessible_AddRef((IAccessible *) ta);
ta->t = t;
- hr = CreateStdAccessibleObject(t->hwnd, OBJID_CLIENT, &IID_IAccessible, &std);
+ hr = CreateStdAccessibleObject(t->hwnd, OBJID_CLIENT, &IID_IAccessible, (void *) (&std));
if (hr != S_OK)
// TODO panichresult
panic("error creating standard accessible object for Table");
@@ -234,16 +234,23 @@ static struct tableAcc *newTableAcc(struct table *t)
static void freeTableAcc(struct tableAcc *ta)
{
ta->t = NULL;
- ta->vtbl->Release(ta);
+ // TODO
+ IAccessible_Release((IAccessible *) ta);
}
HANDLER(accessibilityHandler)
{
if (uMsg != WM_GETOBJECT)
return FALSE;
- if (((DWORD) lParam) != OBJID_CLIENT)
+ // OBJID_CLIENT evaluates to an expression of type LONG
+ // the documentation for WM_GETOBJECT says to cast "it" to a DWORD before comparing
+ // https://msdn.microsoft.com/en-us/library/windows/desktop/dd373624%28v=vs.85%29.aspx casts them both to DWORDs; let's do that
+ // its two siblings only cast lParam, resulting in an erroneous DWORD to LONG comparison
+ // The Old New Thing book does not cast anything
+ // Microsoft's MSAA sample casts lParam to LONG instead!
+ if (((DWORD) lParam) != ((DWORD) OBJID_CLIENT))
return FALSE;
- *lResult = LresultFromObject(&IID_IAccessible, wParam, t->ta);
+ *lResult = LresultFromObject(&IID_IAccessible, wParam, (LPUNKNOWN) (t->ta));
// TODO check *lResult
return TRUE;
}