From 0814bc5358c2dfbeb2aaba0f18cbdd98cc1be645 Mon Sep 17 00:00:00 2001 From: Giannis Adamopoulos Date: Sun, 6 Nov 2016 20:47:21 +0000 Subject: [PATCH] [SHELL32] - 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 | 26 +++++++++++++++++++++++ reactos/dll/win32/shell32/CDefView.cpp | 2 +- 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/reactos/dll/win32/browseui/desktopipc.cpp b/reactos/dll/win32/browseui/desktopipc.cpp index fbe7eb2314e..4afb9929e70 100644 --- a/reactos/dll/win32/browseui/desktopipc.cpp +++ b/reactos/dll/win32/browseui/desktopipc.cpp @@ -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 pisb; + hResult = browser->QueryInterface(IID_PPV_ARG(IShellBrowser, &pisb)); + if (SUCCEEDED(hResult)) + { + CComPtr 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) diff --git a/reactos/dll/win32/shell32/CDefView.cpp b/reactos/dll/win32/shell32/CDefView.cpp index d28068b36ad..220aea37ff3 100644 --- a/reactos/dll/win32/shell32/CDefView.cpp +++ b/reactos/dll/win32/shell32/CDefView.cpp @@ -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; -- 2.17.1