Implemented get_accFocus()... mostly. Needs testing.
This commit is contained in:
parent
ed92e59933
commit
28cfb10f9d
|
@ -366,13 +366,63 @@ static HRESULT STDMETHODCALLTYPE tableAccget_accKeyboardShortcut(IAccessible *th
|
||||||
return IAccessible_get_accKeyboardShortcut(TA->std, varChild, pszKeyboardShortcut);
|
return IAccessible_get_accKeyboardShortcut(TA->std, varChild, pszKeyboardShortcut);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO TEST THIS
|
||||||
|
// TODO [EDGE CASE??] no parents?
|
||||||
static HRESULT STDMETHODCALLTYPE tableAccget_accFocus(IAccessible *this, VARIANT *pvarChild)
|
static HRESULT STDMETHODCALLTYPE tableAccget_accFocus(IAccessible *this, VARIANT *pvarChild)
|
||||||
{
|
{
|
||||||
if (TA->t == NULL || TA->std == NULL) {
|
HRESULT hr;
|
||||||
// TODO set values on error
|
|
||||||
|
if (pvarChild == NULL)
|
||||||
|
return E_POINTER;
|
||||||
|
// TODO set pvarChild to empty?
|
||||||
|
if (TA->t == NULL || TA->std == NULL)
|
||||||
return RPC_E_DISCONNECTED;
|
return RPC_E_DISCONNECTED;
|
||||||
|
// TODO verify that TA is still pointing to a valid row/column
|
||||||
|
|
||||||
|
// first see if the control has the focus
|
||||||
|
// this is why a standard accessible object is needed on all accessible objects
|
||||||
|
hr = IAccessible_get_accFocus(TA->std, pvarChild);
|
||||||
|
// check the pvarChild type instead of hr
|
||||||
|
// https://msdn.microsoft.com/en-us/library/windows/desktop/dd318479%28v=vs.85%29.aspx does this
|
||||||
|
// TODO [EDGE CASE] figure out why
|
||||||
|
if (pvarChild->vt != VT_I4)
|
||||||
|
return hr;
|
||||||
|
|
||||||
|
switch (TA->what.role) {
|
||||||
|
case ROLE_SYSTEM_TABLE:
|
||||||
|
if (TA->t->selectedRow != -1 && TA->t->selectedColumn != -1)
|
||||||
|
goto selectedCell;
|
||||||
|
goto self;
|
||||||
|
case ROLE_SYSTEM_ROW:
|
||||||
|
if (TA->t->selectedRow != TA->what.row)
|
||||||
|
goto nothing;
|
||||||
|
goto selectedCell;
|
||||||
|
case ROLE_SYSTEM_CELL:
|
||||||
|
if (TA->t->selectedRow != TA->what.row)
|
||||||
|
goto nothing;
|
||||||
|
if (TA->t->selectedColumn != TA->what.column)
|
||||||
|
goto nothing;
|
||||||
|
goto self;
|
||||||
}
|
}
|
||||||
return IAccessible_get_accFocus(TA->std, pvarChild);
|
// TODO actually do this right
|
||||||
|
// TODO un-GetLastError() this
|
||||||
|
panic("impossible blah blah blah TODO write this");
|
||||||
|
return E_FAIL;
|
||||||
|
|
||||||
|
nothing:
|
||||||
|
pvarChild->vt = VT_EMPTY;
|
||||||
|
// TODO really this one?
|
||||||
|
return S_FALSE;
|
||||||
|
|
||||||
|
self:
|
||||||
|
pvarChild->vt = VT_I4;
|
||||||
|
pvarChild->lVal = CHILDID_SELF;
|
||||||
|
return S_OK;
|
||||||
|
|
||||||
|
selectedCell:
|
||||||
|
pvarChild->vt = VT_I4;
|
||||||
|
pvarChild->pdispVal = (IDispatch *) newTableAcc(TA->t, ROLE_SYSTEM_CELL, TA->what.row, TA->what.column);
|
||||||
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
static HRESULT STDMETHODCALLTYPE tableAccget_accSelection(IAccessible *this, VARIANT *pvarChildren)
|
static HRESULT STDMETHODCALLTYPE tableAccget_accSelection(IAccessible *this, VARIANT *pvarChildren)
|
||||||
|
@ -634,7 +684,7 @@ specificCell:
|
||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO should this ever return parents?
|
// TODO [EDGE CASE??] should this ever return parents?
|
||||||
static HRESULT STDMETHODCALLTYPE tableAccaccHitTest(IAccessible *this, long xLeft, long yTop, VARIANT *pvarChild)
|
static HRESULT STDMETHODCALLTYPE tableAccaccHitTest(IAccessible *this, long xLeft, long yTop, VARIANT *pvarChild)
|
||||||
{
|
{
|
||||||
POINT pt;
|
POINT pt;
|
||||||
|
|
Loading…
Reference in New Issue