Module: wine Branch: master Commit: f196551a4d465f726f19ecbc4e74a22d9ee51975 URL: http://source.winehq.org/git/wine.git/?a=commit;h=f196551a4d465f726f19ecbc4e...
Author: Piotr Caban piotr@codeweavers.com Date: Thu May 1 16:14:58 2014 +0200
oleacc: Add Client_get_accHelpTopic implementation.
---
dlls/oleacc/client.c | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-)
diff --git a/dlls/oleacc/client.c b/dlls/oleacc/client.c index 88009f3..a60ec24 100644 --- a/dlls/oleacc/client.c +++ b/dlls/oleacc/client.c @@ -238,9 +238,31 @@ static HRESULT WINAPI Client_get_accHelpTopic(IAccessible *iface, static HRESULT WINAPI Client_get_accKeyboardShortcut(IAccessible *iface, VARIANT varID, BSTR *pszKeyboardShortcut) { + static const WCHAR shortcut_fmt[] = {'A','l','t','+','!',0}; Client *This = impl_from_Client(iface); - FIXME("(%p)->(%s %p)\n", This, debugstr_variant(&varID), pszKeyboardShortcut); - return E_NOTIMPL; + WCHAR name[1024]; + UINT i, len; + + TRACE("(%p)->(%s %p)\n", This, debugstr_variant(&varID), pszKeyboardShortcut); + + *pszKeyboardShortcut = NULL; + if(convert_child_id(&varID) != CHILDID_SELF) + return E_INVALIDARG; + + len = SendMessageW(This->hwnd, WM_GETTEXT, sizeof(name)/sizeof(WCHAR), (LPARAM)name); + for(i=0; i<len; i++) { + if(name[i] == '&') + break; + } + if(i+1 >= len) + return S_FALSE; + + *pszKeyboardShortcut = SysAllocString(shortcut_fmt); + if(!*pszKeyboardShortcut) + return E_OUTOFMEMORY; + + (*pszKeyboardShortcut)[4] = name[i+1]; + return S_OK; }
static HRESULT WINAPI Client_get_accFocus(IAccessible *iface, VARIANT *pvarID)