refresh window content after context menu popups only if any command has
been executed
Modified: trunk/reactos/subsys/system/winefile/winefile.c
_____
Modified: trunk/reactos/subsys/system/winefile/winefile.c
--- trunk/reactos/subsys/system/winefile/winefile.c 2005-06-05
12:08:39 UTC (rev 15802)
+++ trunk/reactos/subsys/system/winefile/winefile.c 2005-06-05
12:20:07 UTC (rev 15803)
@@ -4113,6 +4113,7 @@
static HRESULT ShellFolderContextMenu(IShellFolder* shell_folder, HWND
hwndParent, int cidl, LPCITEMIDLIST* apidl, int x, int y)
{
IContextMenu* pcm;
+ BOOL executed = FALSE;
HRESULT hr =
(*shell_folder->lpVtbl->GetUIObjectOf)(shell_folder, hwndParent, cidl,
apidl, &IID_IContextMenu, NULL, (LPVOID*)&pcm);
/* HRESULT hr =
CDefFolderMenu_Create2(dir?dir->_pidl:DesktopFolder(), hwndParent, 1,
&pidl, shell_folder, NULL, 0, NULL, &pcm); */
@@ -4131,19 +4132,20 @@
CtxMenu_reset();
if (idCmd) {
- CMINVOKECOMMANDINFO cmi;
+ CMINVOKECOMMANDINFO cmi;
- cmi.cbSize =
sizeof(CMINVOKECOMMANDINFO);
- cmi.fMask = 0;
- cmi.hwnd = hwndParent;
- cmi.lpVerb = (LPCSTR)(INT_PTR)(idCmd -
FCIDM_SHVIEWFIRST);
- cmi.lpParameters = NULL;
- cmi.lpDirectory = NULL;
- cmi.nShow = SW_SHOWNORMAL;
- cmi.dwHotKey = 0;
- cmi.hIcon = 0;
+ cmi.cbSize =
sizeof(CMINVOKECOMMANDINFO);
+ cmi.fMask = 0;
+ cmi.hwnd = hwndParent;
+ cmi.lpVerb =
(LPCSTR)(INT_PTR)(idCmd - FCIDM_SHVIEWFIRST);
+ cmi.lpParameters = NULL;
+ cmi.lpDirectory = NULL;
+ cmi.nShow = SW_SHOWNORMAL;
+ cmi.dwHotKey = 0;
+ cmi.hIcon = 0;
- hr =
(*pcm->lpVtbl->InvokeCommand)(pcm, &cmi);
+ hr =
(*pcm->lpVtbl->InvokeCommand)(pcm, &cmi);
+ executed = TRUE;
}
} else
CtxMenu_reset();
@@ -4152,7 +4154,7 @@
(*pcm->lpVtbl->Release)(pcm);
}
- return hr;
+ return FAILED(hr)? hr: executed? S_OK: S_FALSE;
}
@@ -4487,7 +4489,7 @@
/* get and use the parent
folder to display correct context menu in all cases */
if
(SUCCEEDED(SHBindToParent(pidl_abs, &IID_IShellFolder,
(LPVOID*)&parentFolder, &pidlLast))) {
- if
(SUCCEEDED(ShellFolderContextMenu(parentFolder, hwnd, 1, &pidlLast,
pt.x, pt.y)))
+ if
(ShellFolderContextMenu(parentFolder, hwnd, 1, &pidlLast, pt.x, pt.y) ==
S_OK)
refresh_child(child);
(*parentFolder->lpVtbl->Release)(parentFolder);