diff --git a/reactos/dll/win32/shell32/she_ocmenu.c b/reactos/dll/win32/shell32/she_ocmenu.c index 433059f6d74..e1fe2909c90 100644 --- a/reactos/dll/win32/shell32/she_ocmenu.c +++ b/reactos/dll/win32/shell32/she_ocmenu.c @@ -23,7 +23,7 @@ #define COBJMACROS #define NONAMELESSUNION #define NONAMELESSSTRUCT -//#define YDEBUG +#define YDEBUG #include "winerror.h" #include "wine/debug.h" @@ -588,6 +588,7 @@ SHEOW_LoadOpenWithItems(SHEOWImpl *This, IDataObject *pdtobj) LPCITEMIDLIST pidl; WCHAR szPath[MAX_PATH]; LPWSTR szPtr; + static const WCHAR szShortCut[] = { '.','l','n','k', 0 }; fmt.cfFormat = RegisterClipboardFormatA(CFSTR_SHELLIDLIST); fmt.ptd = NULL; @@ -619,11 +620,18 @@ SHEOW_LoadOpenWithItems(SHEOWImpl *This, IDataObject *pdtobj) ERR("no mem\n"); return E_OUTOFMEMORY; } + if (_ILIsFolder(pidl_child)) + { + TRACE("pidl is a folder\n"); + SHFree(pidl); + return E_FAIL; + } + if (!SHGetPathFromIDListW(pidl, szPath)) { SHFree(pidl); ERR("SHGetPathFromIDListW failed\n"); - return FALSE; + return E_FAIL; } SHFree(pidl); @@ -632,6 +640,12 @@ SHEOW_LoadOpenWithItems(SHEOWImpl *This, IDataObject *pdtobj) szPtr = wcschr(szPath, '.'); if (szPtr) { + if (!_wcsicmp(szPtr, szShortCut)) + { + TRACE("pidl is a shortcut\n"); + return E_FAIL; + } + SHEOW_LoadItemFromHKCU(This, szPtr); SHEOW_LoadItemFromHKCR(This, szPtr); } diff --git a/reactos/dll/win32/shell32/shv_item_cmenu.c b/reactos/dll/win32/shell32/shv_item_cmenu.c index 87e0a42fa71..0c0fec26f76 100644 --- a/reactos/dll/win32/shell32/shv_item_cmenu.c +++ b/reactos/dll/win32/shell32/shv_item_cmenu.c @@ -382,20 +382,19 @@ static HRESULT WINAPI ISvItemCm_fnQueryContextMenu( _InsertMenuItem(hmenu, indexMenu++, TRUE, FCIDM_SHVIEW_OPEN, MFT_STRING, "&Select", MFS_ENABLED); TRACE("rfg %x\n", This->rfg); - if (This->rfg & SFGAO_BROWSABLE) + + if (This->rfg & SFGAO_HASSUBFOLDER) { - if(This->bAllValues) - { - _InsertMenuItem(hmenu, indexMenu++, TRUE, FCIDM_SHVIEW_OPEN, MFT_STRING, "&Open", MFS_ENABLED); - _InsertMenuItem(hmenu, indexMenu++, TRUE, FCIDM_SHVIEW_EXPLORE, MFT_STRING, "&Explore", MFS_ENABLED); - } - else - { - _InsertMenuItem(hmenu, indexMenu++, TRUE, FCIDM_SHVIEW_EXPLORE, MFT_STRING, "&Explore", MFS_ENABLED); - _InsertMenuItem(hmenu, indexMenu++, TRUE, FCIDM_SHVIEW_OPEN, MFT_STRING, "&Open", MFS_ENABLED); - } + /* FIXME + * check if folder hasnt already been extended + * use reduce verb then + */ + + _InsertMenuItem(hmenu, indexMenu++, TRUE, FCIDM_SHVIEW_EXPLORE, MFT_STRING, "&Explore", MFS_ENABLED); } + _InsertMenuItem(hmenu, indexMenu++, TRUE, FCIDM_SHVIEW_OPEN, MFT_STRING, "&Open", MFS_ENABLED); + SetMenuDefaultItem(hmenu, 0, MF_BYPOSITION); if (This->rfg & (SFGAO_CANCOPY | SFGAO_CANMOVE)) @@ -669,7 +668,7 @@ static void DoProperties( HRESULT DoShellExtensions(ItemCmImpl *This, LPCMINVOKECOMMANDINFO lpcmi) { - HRESULT hResult; + HRESULT hResult = NOERROR; UINT i; TRACE("DoShellExtensions %p verb %x count %u\n",This, LOWORD(lpcmi->lpVerb), This->ecount); @@ -679,9 +678,12 @@ DoShellExtensions(ItemCmImpl *This, LPCMINVOKECOMMANDINFO lpcmi) hResult = cmenu->lpVtbl->InvokeCommand(cmenu, lpcmi); if (SUCCEEDED(hResult)) - return hResult; + { + break; + } } - return NOERROR; + TRACE("DoShellExtensions result %x\n", hResult); + return hResult; } @@ -873,7 +875,7 @@ SH_LoadDynamicContextMenuHandler(HKEY hKey, const CLSID * szClass, IContextMenu* cmobj->lpVtbl->Release(cmobj); return FALSE; } - hr = shext->lpVtbl->Initialize(shext, pidlFolder, pDataObj, hKey); + hr = shext->lpVtbl->Initialize(shext, NULL, pDataObj, hKey); if (hr != S_OK) { TRACE("Failed to initialize shell extension\n");