launch display properties dialog via desktop context menu Modified: trunk/reactos/lib/shell32/shell32_main.h Modified: trunk/reactos/lib/shell32/shfldr_desktop.c Modified: trunk/reactos/lib/shell32/shlview.c Modified: trunk/reactos/lib/shell32/shv_bg_cmenu.c _____
Modified: trunk/reactos/lib/shell32/shell32_main.h --- trunk/reactos/lib/shell32/shell32_main.h 2005-03-13 15:30:29 UTC (rev 14011) +++ trunk/reactos/lib/shell32/shell32_main.h 2005-03-13 15:43:02 UTC (rev 14012) @@ -81,7 +81,7 @@
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); _____
Modified: trunk/reactos/lib/shell32/shfldr_desktop.c --- trunk/reactos/lib/shell32/shfldr_desktop.c 2005-03-13 15:30:29 UTC (rev 14011) +++ trunk/reactos/lib/shell32/shfldr_desktop.c 2005-03-13 15:43:02 UTC (rev 14012) @@ -473,32 +473,48 @@
if (ppvOut) { *ppvOut = NULL;
- if (IsEqualIID (riid, &IID_IContextMenu)) { - pObj = (LPUNKNOWN) ISvItemCm_Constructor ((IShellFolder *) iface, This->pidlRoot, apidl, cidl); - hr = S_OK; - } else if (IsEqualIID (riid, &IID_IDataObject) && (cidl >= 1)) { - pObj = (LPUNKNOWN) IDataObject_Constructor (hwndOwner, This->pidlRoot, apidl, cidl); - hr = S_OK; - } else if (IsEqualIID (riid, &IID_IExtractIconA) && (cidl == 1)) { - pidl = ILCombine (This->pidlRoot, apidl[0]); - pObj = (LPUNKNOWN) IExtractIconA_Constructor (pidl); - SHFree (pidl); - hr = S_OK; - } else if (IsEqualIID (riid, &IID_IExtractIconW) && (cidl == 1)) { - pidl = ILCombine (This->pidlRoot, apidl[0]); - pObj = (LPUNKNOWN) IExtractIconW_Constructor (pidl); - SHFree (pidl); - hr = S_OK; - } else if (IsEqualIID (riid, &IID_IDropTarget) && (cidl >= 1)) { - hr = IShellFolder_QueryInterface (iface, &IID_IDropTarget, (LPVOID *) & pObj); - } else if ((IsEqualIID(riid,&IID_IShellLinkW) || IsEqualIID(riid,&IID_IShellLinkA)) - && (cidl == 1)) { - pidl = ILCombine (This->pidlRoot, apidl[0]); - hr = IShellLink_ConstructFromFile(NULL, riid, pidl, (LPVOID*)&pObj); - SHFree (pidl); - } else { - hr = E_NOINTERFACE; - } + if (IsEqualIID (riid, &IID_IDataObject) && (cidl >= 1)) + { + pObj = (LPUNKNOWN) IDataObject_Constructor( hwndOwner, + This->pidlRoot, apidl, cidl); + hr = S_OK; + } + else if ((IsEqualIID(riid,&IID_IShellLinkW) || + IsEqualIID(riid,&IID_IShellLinkA)) && (cidl == 1)) + { + pidl = ILCombine (This->pidlRoot, apidl[0]); + hr = IShellLink_ConstructFromFile(NULL, riid, pidl, (LPVOID*)&pObj); + SHFree (pidl); + } + else if (IsEqualIID (riid, &IID_IContextMenu)) + { + 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_IExtractIconA) && (cidl == 1)) + { + pidl = ILCombine (This->pidlRoot, apidl[0]); + pObj = (LPUNKNOWN) IExtractIconA_Constructor (pidl); + SHFree (pidl); + hr = S_OK; + } + else if (IsEqualIID (riid, &IID_IExtractIconW) && (cidl == 1)) + { + pidl = ILCombine (This->pidlRoot, apidl[0]); + pObj = (LPUNKNOWN) IExtractIconW_Constructor (pidl); + SHFree (pidl); + hr = S_OK; + } + else if (IsEqualIID (riid, &IID_IDropTarget) && (cidl >= 1)) + { + hr = IShellFolder_QueryInterface (iface, + &IID_IDropTarget, (LPVOID *) & pObj); + } + else + hr = E_NOINTERFACE;
if (SUCCEEDED(hr) && !pObj) hr = E_OUTOFMEMORY; _____
Modified: trunk/reactos/lib/shell32/shlview.c --- trunk/reactos/lib/shell32/shlview.c 2005-03-13 15:30:29 UTC (rev 14011) +++ trunk/reactos/lib/shell32/shlview.c 2005-03-13 15:43:02 UTC (rev 14012) @@ -988,7 +988,7 @@
{ 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 @@ switch(uItem) { case SVGIO_BACKGROUND: - *ppvOut = ISvBgCm_Constructor(This->pSFParent); + *ppvOut = ISvBgCm_Constructor(This->pSFParent, FALSE); break;
case SVGIO_SELECTION: _____
Modified: trunk/reactos/lib/shell32/shv_bg_cmenu.c --- trunk/reactos/lib/shell32/shv_bg_cmenu.c 2005-03-13 15:30:29 UTC (rev 14011) +++ trunk/reactos/lib/shell32/shv_bg_cmenu.c 2005-03-13 15:43:02 UTC (rev 14012) @@ -46,6 +46,7 @@
IContextMenu2Vtbl *lpVtbl; IShellFolder* pSFParent; DWORD ref; + BOOL bDesktop; } BgCmImpl;
@@ -54,7 +55,7 @@
/*********************************************************************** *** * ISVBgCm_Constructor() */ -IContextMenu2 *ISvBgCm_Constructor(IShellFolder* pSFParent) +IContextMenu2 *ISvBgCm_Constructor(IShellFolder* pSFParent, BOOL bDesktop) { BgCmImpl* cm;
@@ -62,6 +63,7 @@ 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 @@ 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; } }