[SHELL32]
authorGiannis Adamopoulos <gadamopoulos@reactos.org>
Sun, 6 Nov 2016 20:47:21 +0000 (20:47 +0000)
committerGiannis Adamopoulos <gadamopoulos@reactos.org>
Sun, 6 Nov 2016 20:47:21 +0000 (20:47 +0000)
- CDefView: Correct the check for SVSI_EDIT because SVSI_EDIT implies SVSI_SELECT. This actualyl fixes SVSI_SELECT to not cause a rename.

[BROWSEUI]
- ExplorerMessageLoop: Implement the /select parameter for explorer.

svn path=/trunk/; revision=73158

reactos/dll/win32/browseui/desktopipc.cpp
reactos/dll/win32/shell32/CDefView.cpp

index fbe7eb2..4afb992 100644 (file)
@@ -357,14 +357,40 @@ static HRESULT ExplorerMessageLoop(IEThreadParamBlock * parameters)
     if (parameters && parameters->offsetF8)
         parameters->offsetF8->AddRef();
 
+    /* Handle /e parameter */
      UINT wFlags = 0;
      if ((parameters->dwFlags & SH_EXPLORER_CMDLINE_FLAG_E))
         wFlags |= SBSP_EXPLOREMODE;
 
+    /* Handle /select parameter */
+    PUITEMID_CHILD pidlSelect = NULL;
+    if ((parameters->dwFlags & SH_EXPLORER_CMDLINE_FLAG_SELECT) && 
+        (ILGetNext(parameters->directoryPIDL) != NULL))
+    {
+        pidlSelect = ILClone(ILFindLastID(parameters->directoryPIDL));
+        ILRemoveLastID(parameters->directoryPIDL);
+    }
+
     hResult = CShellBrowser_CreateInstance(parameters->directoryPIDL, wFlags, IID_PPV_ARG(IBrowserService2, &browser));
     if (FAILED_UNEXPECTEDLY(hResult))
         return hResult;
 
+    if (pidlSelect != NULL)
+    {
+        CComPtr<IShellBrowser> pisb;
+        hResult = browser->QueryInterface(IID_PPV_ARG(IShellBrowser, &pisb));
+        if (SUCCEEDED(hResult))
+        {
+            CComPtr<IShellView> shellView;
+            hResult = pisb->QueryActiveShellView(&shellView);
+            if (SUCCEEDED(hResult))
+            {
+                shellView->SelectItem(pidlSelect, SVSI_SELECT|SVSI_ENSUREVISIBLE);
+            }
+        }
+        ILFree(pidlSelect);
+    }
+
     while ((Ret = GetMessage(&Msg, NULL, 0, 0)) != 0)
     {
         if (Ret == -1)
index d28068b..220aea3 100644 (file)
@@ -2203,7 +2203,7 @@ HRESULT WINAPI CDefView::SelectItem(PCUITEMID_CHILD pidl, UINT uFlags)
         lvItem.iItem++;
     }
 
-    if(uFlags & SVSI_EDIT)
+    if((uFlags & SVSI_EDIT) == SVSI_EDIT)
         m_ListView.EditLabel(i);
 
     return S_OK;