From 824353d01b4cd7d3811465a5777dd52031077ab1 Mon Sep 17 00:00:00 2001 From: Martin Fuchs Date: Mon, 14 Mar 2005 10:49:03 +0000 Subject: [PATCH] - switch to correct shell desktop context menu - launch desk.cpl when activating the desktop context menu entry "properties" - don't send WM_COMMAND if we didn't get a shell view window --- dlls/shell32/shell32_main.h | 2 +- dlls/shell32/shfldr_desktop.c | 6 ++++-- dlls/shell32/shlview.c | 4 ++-- dlls/shell32/shv_bg_cmenu.c | 16 ++++++++++++++-- 4 files changed, 21 insertions(+), 7 deletions(-) diff --git a/dlls/shell32/shell32_main.h b/dlls/shell32/shell32_main.h index 3c5d6c5f053..53258d1e41d 100644 --- a/dlls/shell32/shell32_main.h +++ b/dlls/shell32/shell32_main.h @@ -81,7 +81,7 @@ LPENUMFORMATETC IEnumFORMATETC_Constructor(UINT, const FORMATETC []); LPCLASSFACTORY IClassFactory_Constructor(REFCLSID); IContextMenu2 * ISvItemCm_Constructor(LPSHELLFOLDER pSFParent, LPCITEMIDLIST pidl, LPCITEMIDLIST *aPidls, UINT uItemCount); -IContextMenu2 * ISvBgCm_Constructor(LPSHELLFOLDER pSFParent); +IContextMenu2 * ISvBgCm_Constructor(LPSHELLFOLDER pSFParent, BOOL bDesktop); LPSHELLVIEW IShellView_Constructor(LPSHELLFOLDER); HRESULT WINAPI IFSFolder_Constructor(IUnknown * pUnkOuter, REFIID riid, LPVOID * ppv); diff --git a/dlls/shell32/shfldr_desktop.c b/dlls/shell32/shfldr_desktop.c index 7c0d6cf64f4..935877e5499 100644 --- a/dlls/shell32/shfldr_desktop.c +++ b/dlls/shell32/shfldr_desktop.c @@ -524,8 +524,10 @@ static HRESULT WINAPI ISF_Desktop_fnGetUIObjectOf (IShellFolder2 * iface, if (IsEqualIID (riid, &IID_IContextMenu)) { - pObj = (LPUNKNOWN) ISvItemCm_Constructor( (IShellFolder *) iface, - This->pidlRoot, apidl, cidl); + if (cidl > 0) + pObj = (LPUNKNOWN) ISvItemCm_Constructor( (IShellFolder *) iface, This->pidlRoot, apidl, cidl); + else + pObj = (LPUNKNOWN) ISvBgCm_Constructor( (IShellFolder *) iface, TRUE); hr = S_OK; } else if (IsEqualIID (riid, &IID_IDataObject) && (cidl >= 1)) diff --git a/dlls/shell32/shlview.c b/dlls/shell32/shlview.c index eb5ad7b7670..06f30c6c7b1 100644 --- a/dlls/shell32/shlview.c +++ b/dlls/shell32/shlview.c @@ -988,7 +988,7 @@ static void ShellView_DoContextMenu(IShellViewImpl * This, WORD x, WORD y, BOOL { hMenu = CreatePopupMenu(); - pCM = ISvBgCm_Constructor(This->pSFParent); + pCM = ISvBgCm_Constructor(This->pSFParent, FALSE); IContextMenu2_QueryContextMenu(pCM, hMenu, 0, FCIDM_SHVIEWFIRST, FCIDM_SHVIEWLAST, 0); uCommand = TrackPopupMenu( hMenu, TPM_LEFTALIGN | TPM_RETURNCMD,x,y,0,This->hWnd,NULL); @@ -1977,7 +1977,7 @@ static HRESULT WINAPI IShellView_fnGetItemObject(IShellView * iface, UINT uItem, switch(uItem) { case SVGIO_BACKGROUND: - *ppvOut = ISvBgCm_Constructor(This->pSFParent); + *ppvOut = ISvBgCm_Constructor(This->pSFParent, FALSE); break; case SVGIO_SELECTION: diff --git a/dlls/shell32/shv_bg_cmenu.c b/dlls/shell32/shv_bg_cmenu.c index b879d180fa2..a22384de83b 100644 --- a/dlls/shell32/shv_bg_cmenu.c +++ b/dlls/shell32/shv_bg_cmenu.c @@ -46,6 +46,7 @@ typedef struct IContextMenu2Vtbl *lpVtbl; IShellFolder* pSFParent; DWORD ref; + BOOL bDesktop; } BgCmImpl; @@ -54,7 +55,7 @@ static struct IContextMenu2Vtbl cmvt; /************************************************************************** * ISVBgCm_Constructor() */ -IContextMenu2 *ISvBgCm_Constructor(IShellFolder* pSFParent) +IContextMenu2 *ISvBgCm_Constructor(IShellFolder* pSFParent, BOOL bDesktop) { BgCmImpl* cm; @@ -62,6 +63,7 @@ IContextMenu2 *ISvBgCm_Constructor(IShellFolder* pSFParent) cm->lpVtbl = &cmvt; cm->ref = 1; cm->pSFParent = pSFParent; + cm->bDesktop = bDesktop; if(pSFParent) IShellFolder_AddRef(pSFParent); TRACE("(%p)->()\n",cm); @@ -362,12 +364,22 @@ static HRESULT WINAPI ISVBgCm_fnInvokeCommand( case FCIDM_SHVIEW_NEWFOLDER: DoNewFolder(iface, lpSV); break; + case FCIDM_SHVIEW_INSERT: DoPaste(iface); break; + + case FCIDM_SHVIEW_PROPERTIES: + if (This->bDesktop) { + ShellExecuteA(lpcmi->hwnd, "open", "rundll32.exe shell32.dll,Control_RunDLL desk.cpl", NULL, NULL, SW_SHOWNORMAL); + } else { + FIXME("launch item properties dialog\n"); + } + break; + default: /* if it's a id just pass it to the parent shv */ - SendMessageA(hWndSV, WM_COMMAND, MAKEWPARAM(LOWORD(lpcmi->lpVerb), 0),0 ); + if (hWndSV) SendMessageA(hWndSV, WM_COMMAND, MAKEWPARAM(LOWORD(lpcmi->lpVerb), 0),0 ); break; } }