shell32: Add IInputObject stub to ExplorerBrowser.
This commit is contained in:
parent
378df94ef8
commit
35a45d8190
|
@ -58,6 +58,7 @@ typedef struct _ExplorerBrowserImpl {
|
|||
ICommDlgBrowser3 ICommDlgBrowser3_iface;
|
||||
IObjectWithSite IObjectWithSite_iface;
|
||||
INameSpaceTreeControlEvents INameSpaceTreeControlEvents_iface;
|
||||
IInputObject IInputObject_iface;
|
||||
LONG ref;
|
||||
BOOL destroyed;
|
||||
|
||||
|
@ -790,6 +791,10 @@ static HRESULT WINAPI IExplorerBrowser_fnQueryInterface(IExplorerBrowser *iface,
|
|||
{
|
||||
*ppvObject = &This->IObjectWithSite_iface;
|
||||
}
|
||||
else if(IsEqualIID(riid, &IID_IInputObject))
|
||||
{
|
||||
*ppvObject = &This->IInputObject_iface;
|
||||
}
|
||||
|
||||
if(*ppvObject)
|
||||
{
|
||||
|
@ -1971,6 +1976,67 @@ const INameSpaceTreeControlEventsVtbl vt_INameSpaceTreeControlEvents = {
|
|||
NSTCEvents_fnOnGetDefaultIconIndex
|
||||
};
|
||||
|
||||
/**************************************************************************
|
||||
* IInputObject Implementation
|
||||
*/
|
||||
|
||||
static inline ExplorerBrowserImpl *impl_from_IInputObject(IInputObject *iface)
|
||||
{
|
||||
return CONTAINING_RECORD(iface, ExplorerBrowserImpl, IInputObject_iface);
|
||||
}
|
||||
|
||||
static HRESULT WINAPI IInputObject_fnQueryInterface(IInputObject *iface,
|
||||
REFIID riid, void **ppvObject)
|
||||
{
|
||||
ExplorerBrowserImpl *This = impl_from_IInputObject(iface);
|
||||
TRACE("%p\n", This);
|
||||
return IUnknown_QueryInterface((IUnknown*)This, riid, ppvObject);
|
||||
}
|
||||
|
||||
static ULONG WINAPI IInputObject_fnAddRef(IInputObject *iface)
|
||||
{
|
||||
ExplorerBrowserImpl *This = impl_from_IInputObject(iface);
|
||||
TRACE("%p\n", This);
|
||||
return IUnknown_AddRef((IUnknown*)This);
|
||||
}
|
||||
|
||||
static ULONG WINAPI IInputObject_fnRelease(IInputObject *iface)
|
||||
{
|
||||
ExplorerBrowserImpl *This = impl_from_IInputObject(iface);
|
||||
TRACE("%p\n", This);
|
||||
return IUnknown_Release((IUnknown*)This);
|
||||
}
|
||||
|
||||
static HRESULT WINAPI IInputObject_fnUIActivateIO(IInputObject *iface, BOOL fActivate, MSG *pMsg)
|
||||
{
|
||||
ExplorerBrowserImpl *This = impl_from_IInputObject(iface);
|
||||
FIXME("stub, %p (%d, %p)\n", This, fActivate, pMsg);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI IInputObject_fnHasFocusIO(IInputObject *iface)
|
||||
{
|
||||
ExplorerBrowserImpl *This = impl_from_IInputObject(iface);
|
||||
FIXME("stub, %p\n", This);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI IInputObject_fnTranslateAcceleratorIO(IInputObject *iface, MSG *pMsg)
|
||||
{
|
||||
ExplorerBrowserImpl *This = impl_from_IInputObject(iface);
|
||||
FIXME("stub, %p (%p)\n", This, pMsg);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static IInputObjectVtbl vt_IInputObject = {
|
||||
IInputObject_fnQueryInterface,
|
||||
IInputObject_fnAddRef,
|
||||
IInputObject_fnRelease,
|
||||
IInputObject_fnUIActivateIO,
|
||||
IInputObject_fnHasFocusIO,
|
||||
IInputObject_fnTranslateAcceleratorIO
|
||||
};
|
||||
|
||||
HRESULT WINAPI ExplorerBrowser_Constructor(IUnknown *pUnkOuter, REFIID riid, void **ppv)
|
||||
{
|
||||
ExplorerBrowserImpl *eb;
|
||||
|
@ -1990,6 +2056,7 @@ HRESULT WINAPI ExplorerBrowser_Constructor(IUnknown *pUnkOuter, REFIID riid, voi
|
|||
eb->ICommDlgBrowser3_iface.lpVtbl = &vt_ICommDlgBrowser3;
|
||||
eb->IObjectWithSite_iface.lpVtbl = &vt_IObjectWithSite;
|
||||
eb->INameSpaceTreeControlEvents_iface.lpVtbl = &vt_INameSpaceTreeControlEvents;
|
||||
eb->IInputObject_iface.lpVtbl = &vt_IInputObject;
|
||||
|
||||
/* Default settings */
|
||||
eb->navpane.width = 150;
|
||||
|
|
|
@ -1607,6 +1607,114 @@ static void test_GetCurrentView(void)
|
|||
IExplorerBrowser_Release(peb);
|
||||
}
|
||||
|
||||
static void test_InputObject(void)
|
||||
{
|
||||
IExplorerBrowser *peb;
|
||||
IShellFolder *psf;
|
||||
IInputObject *pio;
|
||||
HRESULT hr;
|
||||
RECT rc;
|
||||
UINT i;
|
||||
WPARAM supported_key_accels_mode1[] = {
|
||||
VK_BACK, VK_TAB, VK_RETURN, VK_PRIOR, VK_NEXT, VK_END, VK_HOME,
|
||||
VK_LEFT, VK_UP, VK_RIGHT, VK_DOWN, VK_DELETE, VK_F1, VK_F2,
|
||||
VK_F5, VK_F6, VK_F10, 0 };
|
||||
WPARAM supported_key_accels_mode2[] = {
|
||||
VK_RETURN, VK_PRIOR, VK_NEXT, VK_END, VK_HOME,
|
||||
VK_LEFT, VK_UP, VK_RIGHT, VK_DOWN, VK_DELETE, VK_F1, VK_F2,
|
||||
VK_F10, 0 };
|
||||
WPARAM *key_accels;
|
||||
MSG msg_a = {
|
||||
hwnd,
|
||||
WM_KEYDOWN,
|
||||
VK_F5, 0,
|
||||
GetTickCount(),
|
||||
{5, 2}
|
||||
};
|
||||
|
||||
ebrowser_instantiate(&peb);
|
||||
hr = IExplorerBrowser_QueryInterface(peb, &IID_IInputObject, (void**)&pio);
|
||||
ok(hr == S_OK, "Got 0x%08x\n", hr);
|
||||
if(FAILED(hr))
|
||||
{
|
||||
win_skip("IInputObject not supported.\n");
|
||||
return;
|
||||
}
|
||||
|
||||
/* Before initializing */
|
||||
hr = IInputObject_TranslateAcceleratorIO(pio, &msg_a);
|
||||
todo_wine ok(hr == E_FAIL, "Got 0x%08x\n", hr);
|
||||
|
||||
hr = IInputObject_HasFocusIO(pio);
|
||||
todo_wine ok(hr == E_FAIL, "Got 0x%08x\n", hr);
|
||||
|
||||
hr = IInputObject_UIActivateIO(pio, TRUE, &msg_a);
|
||||
todo_wine ok(hr == S_OK, "Got 0x%08x\n", hr);
|
||||
|
||||
hr = IInputObject_HasFocusIO(pio);
|
||||
todo_wine ok(hr == E_FAIL, "Got 0x%08x\n", hr);
|
||||
|
||||
hr = IInputObject_TranslateAcceleratorIO(pio, &msg_a);
|
||||
todo_wine ok(hr == E_FAIL, "Got 0x%08x\n", hr);
|
||||
|
||||
rc.left = 0; rc.top = 0; rc.right = 100; rc.bottom = 100;
|
||||
hr = IExplorerBrowser_Initialize(peb, hwnd, &rc, NULL);
|
||||
ok(hr == S_OK, "Got 0x%08x\n", hr);
|
||||
|
||||
hr = IInputObject_HasFocusIO(pio);
|
||||
todo_wine ok(hr == E_FAIL, "Got 0x%08x\n", hr);
|
||||
|
||||
hr = IInputObject_TranslateAcceleratorIO(pio, &msg_a);
|
||||
todo_wine ok(hr == E_FAIL, "Got 0x%08x\n", hr);
|
||||
|
||||
/* Browse to the desktop */
|
||||
SHGetDesktopFolder(&psf);
|
||||
hr = IExplorerBrowser_BrowseToObject(peb, (IUnknown*)psf, SBSP_DEFBROWSER);
|
||||
ok(hr == S_OK, "Got 0x%08x\n", hr);
|
||||
IShellFolder_Release(psf);
|
||||
|
||||
hr = IInputObject_UIActivateIO(pio, TRUE, &msg_a);
|
||||
todo_wine ok(hr == S_OK, "Got 0x%08x\n", hr);
|
||||
|
||||
hr = IInputObject_HasFocusIO(pio);
|
||||
todo_wine ok(hr == S_OK, "Got 0x%08x\n", hr);
|
||||
|
||||
hr = IInputObject_UIActivateIO(pio, FALSE, &msg_a);
|
||||
todo_wine ok(hr == S_OK, "Got 0x%08x\n", hr);
|
||||
|
||||
hr = IInputObject_HasFocusIO(pio);
|
||||
todo_wine ok(hr == S_OK, "Got 0x%08x\n", hr);
|
||||
|
||||
hr = IInputObject_TranslateAcceleratorIO(pio, &msg_a);
|
||||
if(hr == S_OK)
|
||||
key_accels = supported_key_accels_mode1;
|
||||
else
|
||||
key_accels = supported_key_accels_mode2;
|
||||
|
||||
for(i = 0; i < 0x100; i++)
|
||||
{
|
||||
BOOL found = FALSE;
|
||||
UINT j;
|
||||
for(j = 0; key_accels[j] != 0; j++)
|
||||
if(key_accels[j] == i)
|
||||
{
|
||||
found = TRUE;
|
||||
break;
|
||||
}
|
||||
|
||||
msg_a.wParam = i;
|
||||
process_msgs();
|
||||
hr = IInputObject_TranslateAcceleratorIO(pio, &msg_a);
|
||||
todo_wine ok(hr == (found ? S_OK : S_FALSE), "Got 0x%08x (%04x)\n", hr, i);
|
||||
}
|
||||
|
||||
process_msgs();
|
||||
|
||||
IInputObject_Release(pio);
|
||||
IExplorerBrowser_Destroy(peb);
|
||||
IExplorerBrowser_Release(peb);
|
||||
}
|
||||
|
||||
static BOOL test_instantiate_control(void)
|
||||
{
|
||||
IExplorerBrowser *peb;
|
||||
|
@ -1658,6 +1766,7 @@ START_TEST(ebrowser)
|
|||
test_navigation();
|
||||
test_GetCurrentView();
|
||||
test_SetSite();
|
||||
test_InputObject();
|
||||
|
||||
DestroyWindow(hwnd);
|
||||
OleUninitialize();
|
||||
|
|
Loading…
Reference in New Issue