[BROWSEUI] CShellBrowser: Don't pass any parameters to Initialize. Let users use the BrowseObject method instead.

This commit is contained in:
Giannis Adamopoulos 2018-11-24 19:41:42 +02:00
parent f05d01ec2f
commit 62c33fbf69
3 changed files with 33 additions and 26 deletions

View file

@ -17,7 +17,7 @@ HRESULT CExplorerBand_CreateInstance(REFIID riid, LPVOID *ppv);
HRESULT CInternetToolbar_CreateInstance(REFIID riid, void **ppv); HRESULT CInternetToolbar_CreateInstance(REFIID riid, void **ppv);
HRESULT CMergedFolder_CreateInstance(REFIID riid, void **ppv); HRESULT CMergedFolder_CreateInstance(REFIID riid, void **ppv);
HRESULT CMenuBand_CreateInstance(REFIID iid, LPVOID *ppv); HRESULT CMenuBand_CreateInstance(REFIID iid, LPVOID *ppv);
HRESULT CShellBrowser_CreateInstance(LPITEMIDLIST pidl, DWORD dwFlags, REFIID riid, void **ppv); HRESULT CShellBrowser_CreateInstance(REFIID riid, void **ppv);
HRESULT CTravelLog_CreateInstance(REFIID riid, void **ppv); HRESULT CTravelLog_CreateInstance(REFIID riid, void **ppv);
HRESULT CBaseBar_CreateInstance(REFIID riid, void **ppv, BOOL vertical); HRESULT CBaseBar_CreateInstance(REFIID riid, void **ppv, BOOL vertical);
HRESULT CBaseBarSite_CreateInstance(REFIID riid, void **ppv, BOOL bVertical); HRESULT CBaseBarSite_CreateInstance(REFIID riid, void **ppv, BOOL bVertical);

View file

@ -343,7 +343,6 @@ cleanup0:
static HRESULT ExplorerMessageLoop(IEThreadParamBlock * parameters) static HRESULT ExplorerMessageLoop(IEThreadParamBlock * parameters)
{ {
CComPtr<IBrowserService2> browser;
HRESULT hResult; HRESULT hResult;
MSG Msg; MSG Msg;
BOOL Ret; BOOL Ret;
@ -366,26 +365,33 @@ static HRESULT ExplorerMessageLoop(IEThreadParamBlock * parameters)
ILRemoveLastID(parameters->directoryPIDL); ILRemoveLastID(parameters->directoryPIDL);
} }
hResult = CShellBrowser_CreateInstance(parameters->directoryPIDL, wFlags, IID_PPV_ARG(IBrowserService2, &browser)); CComPtr<IShellBrowser> psb;
hResult = CShellBrowser_CreateInstance(IID_PPV_ARG(IShellBrowser, &psb));
if (FAILED_UNEXPECTEDLY(hResult))
return hResult;
hResult = psb->BrowseObject(parameters->directoryPIDL, wFlags);
if (FAILED_UNEXPECTEDLY(hResult)) if (FAILED_UNEXPECTEDLY(hResult))
return hResult; return hResult;
if (pidlSelect != NULL) if (pidlSelect != NULL)
{
CComPtr<IShellBrowser> pisb;
hResult = browser->QueryInterface(IID_PPV_ARG(IShellBrowser, &pisb));
if (SUCCEEDED(hResult))
{ {
CComPtr<IShellView> shellView; CComPtr<IShellView> shellView;
hResult = pisb->QueryActiveShellView(&shellView); hResult = psb->QueryActiveShellView(&shellView);
if (SUCCEEDED(hResult)) if (SUCCEEDED(hResult))
{ {
shellView->SelectItem(pidlSelect, SVSI_SELECT|SVSI_ENSUREVISIBLE); shellView->SelectItem(pidlSelect, SVSI_SELECT|SVSI_ENSUREVISIBLE);
} }
}
ILFree(pidlSelect); ILFree(pidlSelect);
} }
CComPtr<IBrowserService2> browser;
hResult = psb->QueryInterface(IID_PPV_ARG(IBrowserService2, &browser));
if (FAILED_UNEXPECTEDLY(hResult))
return hResult;
psb.Release();
while ((Ret = GetMessage(&Msg, NULL, 0, 0)) != 0) while ((Ret = GetMessage(&Msg, NULL, 0, 0)) != 0)
{ {
if (Ret == -1) if (Ret == -1)
@ -617,7 +623,7 @@ BOOL WINAPI SHCreateFromDesktop(ExplorerCommandLineParseResults * parseResults)
} }
parameters->dwFlags = parseResults->dwFlags; parameters->dwFlags = parseResults->dwFlags;
parameters->offset8 = parseResults->offsetC; parameters->offset8 = parseResults->nCmdShow;
LPITEMIDLIST pidl = parseResults->pidlPath ? ILClone(parseResults->pidlPath) : NULL; LPITEMIDLIST pidl = parseResults->pidlPath ? ILClone(parseResults->pidlPath) : NULL;
if (!pidl && parseResults->dwFlags & SH_EXPLORER_CMDLINE_FLAG_STRING) if (!pidl && parseResults->dwFlags & SH_EXPLORER_CMDLINE_FLAG_STRING)

View file

@ -323,7 +323,7 @@ public:
CShellBrowser(); CShellBrowser();
~CShellBrowser(); ~CShellBrowser();
HRESULT Initialize(LPITEMIDLIST pidl, DWORD dwFlags); HRESULT Initialize();
public: public:
HRESULT BrowseToPIDL(LPCITEMIDLIST pidl, long flags); HRESULT BrowseToPIDL(LPCITEMIDLIST pidl, long flags);
HRESULT BrowseToPath(IShellFolder *newShellFolder, LPCITEMIDLIST absolutePIDL, HRESULT BrowseToPath(IShellFolder *newShellFolder, LPCITEMIDLIST absolutePIDL,
@ -723,7 +723,7 @@ CShellBrowser::~CShellBrowser()
DSA_Destroy(menuDsa); DSA_Destroy(menuDsa);
} }
HRESULT CShellBrowser::Initialize(LPITEMIDLIST pidl, DWORD dwFlags) HRESULT CShellBrowser::Initialize()
{ {
CComPtr<IPersistStreamInit> persistStreamInit; CComPtr<IPersistStreamInit> persistStreamInit;
HRESULT hResult; HRESULT hResult;
@ -792,15 +792,8 @@ HRESULT CShellBrowser::Initialize(LPITEMIDLIST pidl, DWORD dwFlags)
fStatusBarVisible = true; fStatusBarVisible = true;
// browse
hResult = BrowseToPIDL(pidl, BTP_UPDATE_NEXT_HISTORY);
if (FAILED_UNEXPECTEDLY(hResult))
return hResult;
if ((dwFlags & SBSP_EXPLOREMODE) != NULL)
ShowBand(CLSID_ExplorerBand, true);
ShowWindow(SW_SHOWNORMAL); ShowWindow(SW_SHOWNORMAL);
UpdateWindow();
return S_OK; return S_OK;
} }
@ -1009,6 +1002,11 @@ HRESULT CShellBrowser::BrowseToPath(IShellFolder *newShellFolder,
saveCurrentShellView->DestroyViewWindow(); saveCurrentShellView->DestroyViewWindow();
fCurrentShellViewWindow = newShellViewWindow; fCurrentShellViewWindow = newShellViewWindow;
if (previousView == NULL)
{
RepositionBars();
}
// no use // no use
saveCurrentShellView.Release(); saveCurrentShellView.Release();
saveCurrentShellFolder.Release(); saveCurrentShellFolder.Release();
@ -2252,7 +2250,10 @@ HRESULT STDMETHODCALLTYPE CShellBrowser::BrowseObject(LPCITEMIDLIST pidl, UINT w
if ((wFlags & SBSP_EXPLOREMODE) != NULL) if ((wFlags & SBSP_EXPLOREMODE) != NULL)
ShowBand(CLSID_ExplorerBand, true); ShowBand(CLSID_ExplorerBand, true);
return BrowseToPIDL(pidl, BTP_UPDATE_CUR_HISTORY | BTP_UPDATE_NEXT_HISTORY); long flags = BTP_UPDATE_NEXT_HISTORY;
if (fTravelLog)
flags |= BTP_UPDATE_CUR_HISTORY;
return BrowseToPIDL(pidl, flags);
} }
HRESULT STDMETHODCALLTYPE CShellBrowser::GetViewStateStream(DWORD grfMode, IStream **ppStrm) HRESULT STDMETHODCALLTYPE CShellBrowser::GetViewStateStream(DWORD grfMode, IStream **ppStrm)
@ -3782,7 +3783,7 @@ LRESULT CShellBrowser::RelayCommands(UINT uMsg, WPARAM wParam, LPARAM lParam, BO
return 0; return 0;
} }
HRESULT CShellBrowser_CreateInstance(LPITEMIDLIST pidl, DWORD dwFlags, REFIID riid, void **ppv) HRESULT CShellBrowser_CreateInstance(REFIID riid, void **ppv)
{ {
return ShellObjectCreatorInit<CShellBrowser>(pidl, dwFlags, riid, ppv); return ShellObjectCreatorInit<CShellBrowser>(riid, ppv);
} }