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);