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