ShellView (IOleCommandTarget) fix

Robert Shearman R.J.Shearman at warwick.ac.uk
Mon Jan 20 11:37:42 CST 2003


The problem at the moment with our IOleCommandTarget::QueryStatus
implementation is that we don't do *anything* with the parameters passed in.
The docs say that we should clear the cmdID for each prgCmds to indicate
that we don't support it, otherwise Explorer calls Exec expecting it to
succeed. This patch also includes two cases of Exec that do succeed on
Windows, but I'm not sure what they mean (they don't seem to match the
OLECMDID_* defines in the headers).

ChangeLog:
- Clear bits in structure passed to IOleCommandTarget_QueryStatus to show
that we don't support any Exec's
- Add two Exec cases that were found during testing

Rob
-------------- next part --------------
Index: dlls/shell32/shlview.c
===================================================================
RCS file: /home/wine/wine/dlls/shell32/shlview.c,v
retrieving revision 1.73
diff -u -r1.73 shlview.c
--- dlls/shell32/shlview.c	8 Jan 2003 21:09:26 -0000	1.73
+++ dlls/shell32/shlview.c	19 Jan 2003 03:00:09 -0000
@@ -1932,11 +1937,20 @@
 	OLECMD * prgCmds,
 	OLECMDTEXT* pCmdText)
 {
-	_ICOM_THIS_From_IOleCommandTarget(IShellViewImpl, iface);
+    int i;
+    _ICOM_THIS_From_IOleCommandTarget(IShellViewImpl, iface);
 
-	FIXME("(%p)->(%p(%s) 0x%08lx %p %p\n",
+    FIXME("(%p)->(%p(%s) 0x%08lx %p %p\n",
               This, pguidCmdGroup, debugstr_guid(pguidCmdGroup), cCmds, prgCmds, pCmdText);
-	return E_NOTIMPL;
+
+    if (!prgCmds)
+        return E_POINTER;
+    for (i = 0; i < cCmds; i++)
+    {
+        FIXME("\tprgCmds[%d].cmdID = %ld\n", i, prgCmds[i].cmdID);
+        prgCmds[i].cmdf = 0;
+    }
+    return OLECMDERR_E_UNKNOWNGROUP;
 }
 
 /**********************************************************
@@ -1956,7 +1970,17 @@
 
 	FIXME("(%p)->(\n\tTarget GUID:%s Command:0x%08lx Opt:0x%08lx %p %p)\n",
               This, debugstr_guid(pguidCmdGroup), nCmdID, nCmdexecopt, pvaIn, pvaOut);
-	return E_NOTIMPL;
+
+	if (IsEqualIID(pguidCmdGroup, &CGID_Explorer) &&
+	   (nCmdID == 0x29) &&
+	   (nCmdexecopt == 4) && pvaOut)
+	   return S_OK;
+	if (IsEqualIID(pguidCmdGroup, &CGID_ShellDocView) &&
+	   (nCmdID == 9) &&
+	   (nCmdexecopt == 0))
+	   return 1;
+
+	return OLECMDERR_E_UNKNOWNGROUP;
 }
 
 static ICOM_VTABLE(IOleCommandTarget) ctvt =


More information about the wine-patches mailing list