shell32: Implement some of the missing shellview IContextMenu command verbs.
Signed-off-by: Damjan Jovanovic <damjan.jov@gmail.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
ad412b11a7
commit
566454b9dc
|
@ -828,6 +828,10 @@ static HRESULT WINAPI ItemMenu_InvokeCommand(
|
||||||
TRACE("Verb is %s\n",debugstr_a(lpcmi->lpVerb));
|
TRACE("Verb is %s\n",debugstr_a(lpcmi->lpVerb));
|
||||||
if (strcmp(lpcmi->lpVerb,"delete")==0)
|
if (strcmp(lpcmi->lpVerb,"delete")==0)
|
||||||
DoDelete(This);
|
DoDelete(This);
|
||||||
|
else if (strcmp(lpcmi->lpVerb,"copy")==0)
|
||||||
|
DoCopyOrCut(This, lpcmi->hwnd, FALSE);
|
||||||
|
else if (strcmp(lpcmi->lpVerb,"cut")==0)
|
||||||
|
DoCopyOrCut(This, lpcmi->hwnd, TRUE);
|
||||||
else if (strcmp(lpcmi->lpVerb,"properties")==0)
|
else if (strcmp(lpcmi->lpVerb,"properties")==0)
|
||||||
DoOpenProperties(This, lpcmi->hwnd);
|
DoOpenProperties(This, lpcmi->hwnd);
|
||||||
else {
|
else {
|
||||||
|
@ -1256,6 +1260,10 @@ static HRESULT WINAPI BackgroundMenu_InvokeCommand(
|
||||||
{
|
{
|
||||||
if (hWnd) SendMessageA(hWnd, WM_COMMAND, MAKEWPARAM(FCIDM_SHVIEW_REPORTVIEW, 0), 0);
|
if (hWnd) SendMessageA(hWnd, WM_COMMAND, MAKEWPARAM(FCIDM_SHVIEW_REPORTVIEW, 0), 0);
|
||||||
}
|
}
|
||||||
|
else if (!strcmp(lpcmi->lpVerb, "paste"))
|
||||||
|
{
|
||||||
|
DoPaste(This);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
FIXME("please report: unknown verb %s\n", debugstr_a(lpcmi->lpVerb));
|
FIXME("please report: unknown verb %s\n", debugstr_a(lpcmi->lpVerb));
|
||||||
|
@ -1306,27 +1314,66 @@ static HRESULT WINAPI BackgroundMenu_GetCommandString(
|
||||||
LPSTR lpszName,
|
LPSTR lpszName,
|
||||||
UINT uMaxNameLen)
|
UINT uMaxNameLen)
|
||||||
{
|
{
|
||||||
|
static const WCHAR pasteW[] = {'p','a','s','t','e',0};
|
||||||
|
static const WCHAR propertiesW[] = {'p','r','o','p','e','r','t','i','e','s',0};
|
||||||
ContextMenu *This = impl_from_IContextMenu3(iface);
|
ContextMenu *This = impl_from_IContextMenu3(iface);
|
||||||
|
const WCHAR *cmdW = NULL;
|
||||||
|
HRESULT hr = E_FAIL;
|
||||||
|
|
||||||
TRACE("(%p)->(idcom=%lx flags=%x %p name=%p len=%x)\n",This, idCommand, uFlags, lpReserved, lpszName, uMaxNameLen);
|
TRACE("(%p)->(idcom=%lx flags=%x %p name=%p len=%x)\n",This, idCommand, uFlags, lpReserved, lpszName, uMaxNameLen);
|
||||||
|
|
||||||
|
switch (uFlags)
|
||||||
|
{
|
||||||
|
case GCS_HELPTEXTA:
|
||||||
|
case GCS_HELPTEXTW:
|
||||||
|
hr = E_NOTIMPL;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case GCS_VERBA:
|
||||||
|
case GCS_VERBW:
|
||||||
|
switch (idCommand + FCIDM_BASE)
|
||||||
|
{
|
||||||
|
case FCIDM_SHVIEW_INSERT:
|
||||||
|
cmdW = pasteW;
|
||||||
|
break;
|
||||||
|
case FCIDM_SHVIEW_PROPERTIES:
|
||||||
|
cmdW = propertiesW;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!cmdW)
|
||||||
|
{
|
||||||
|
hr = E_INVALIDARG;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (uFlags == GCS_VERBA)
|
||||||
|
WideCharToMultiByte(CP_ACP, 0, cmdW, -1, lpszName, uMaxNameLen, NULL, NULL);
|
||||||
|
else
|
||||||
|
lstrcpynW((WCHAR *)lpszName, cmdW, uMaxNameLen);
|
||||||
|
TRACE("name %s\n", uFlags == GCS_VERBA ? debugstr_a(lpszName) : debugstr_w((WCHAR *)lpszName));
|
||||||
|
hr = S_OK;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case GCS_VALIDATEA:
|
||||||
|
case GCS_VALIDATEW:
|
||||||
/* test the existence of the menu items, the file dialog enables
|
/* test the existence of the menu items, the file dialog enables
|
||||||
the buttons according to this */
|
the buttons according to this */
|
||||||
if (uFlags == GCS_VALIDATEA)
|
|
||||||
{
|
|
||||||
if (HIWORD(idCommand))
|
if (HIWORD(idCommand))
|
||||||
{
|
{
|
||||||
if (!strcmp((LPSTR)idCommand, CMDSTR_VIEWLISTA) ||
|
if (!strcmp((LPSTR)idCommand, CMDSTR_VIEWLISTA) ||
|
||||||
!strcmp((LPSTR)idCommand, CMDSTR_VIEWDETAILSA) ||
|
!strcmp((LPSTR)idCommand, CMDSTR_VIEWDETAILSA) ||
|
||||||
!strcmp((LPSTR)idCommand, CMDSTR_NEWFOLDERA))
|
!strcmp((LPSTR)idCommand, CMDSTR_NEWFOLDERA))
|
||||||
|
hr = S_OK;
|
||||||
|
else
|
||||||
{
|
{
|
||||||
return S_OK;
|
FIXME("unknown command string %s\n", uFlags == GCS_VALIDATEA ? debugstr_a((LPSTR)idCommand) : debugstr_w((WCHAR*)idCommand));
|
||||||
|
hr = E_FAIL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
return hr;
|
||||||
FIXME("unknown command string\n");
|
|
||||||
return E_FAIL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static const IContextMenu3Vtbl BackgroundContextMenuVtbl =
|
static const IContextMenu3Vtbl BackgroundContextMenuVtbl =
|
||||||
|
|
|
@ -4381,7 +4381,6 @@ static void test_contextmenu(IContextMenu *menu, BOOL background)
|
||||||
ok(mii.wID >= 64 && mii.wID <= 64 + max_id,
|
ok(mii.wID >= 64 && mii.wID <= 64 + max_id,
|
||||||
"Expected between 64 and %d, got %d.\n", 64 + max_id, mii.wID);
|
"Expected between 64 and %d, got %d.\n", 64 + max_id, mii.wID);
|
||||||
hr = IContextMenu_GetCommandString(menu, mii.wID - 64, GCS_VERBA, 0, buf, sizeof(buf));
|
hr = IContextMenu_GetCommandString(menu, mii.wID - 64, GCS_VERBA, 0, buf, sizeof(buf));
|
||||||
todo_wine_if(background)
|
|
||||||
ok(hr == S_OK || hr == E_NOTIMPL || hr == E_INVALIDARG,
|
ok(hr == S_OK || hr == E_NOTIMPL || hr == E_INVALIDARG,
|
||||||
"Got unexpected hr %#x for ID %d, string %s.\n", hr, mii.wID, debugstr_a(mii.dwTypeData));
|
"Got unexpected hr %#x for ID %d, string %s.\n", hr, mii.wID, debugstr_a(mii.dwTypeData));
|
||||||
if (hr == S_OK)
|
if (hr == S_OK)
|
||||||
|
|
Loading…
Reference in New Issue