mirror of
https://github.com/reactos/reactos.git
synced 2025-02-22 16:36:33 +00:00
[BROWSEUI]
* Moved some code from ParseNow into Execute, pending future improvements to the code flow. svn path=/branches/shell-experiments/; revision=63378
This commit is contained in:
parent
564f732c7c
commit
24010ffd80
4 changed files with 62 additions and 15 deletions
|
@ -525,6 +525,7 @@ LRESULT CAddressBand::OnNotifyClick(WPARAM wParam, NMHDR *notifyHeader, BOOL &bH
|
||||||
if (notifyHeader->hwndFrom == fGoButton)
|
if (notifyHeader->hwndFrom == fGoButton)
|
||||||
{
|
{
|
||||||
fAddressEditBox->ParseNow(0);
|
fAddressEditBox->ParseNow(0);
|
||||||
|
fAddressEditBox->Execute(0);
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -68,17 +68,25 @@ HRESULT STDMETHODCALLTYPE CAddressEditBox::Refresh(long param8)
|
||||||
|
|
||||||
HRESULT STDMETHODCALLTYPE CAddressEditBox::Init(HWND comboboxEx, HWND editControl, long param14, IUnknown *param18)
|
HRESULT STDMETHODCALLTYPE CAddressEditBox::Init(HWND comboboxEx, HWND editControl, long param14, IUnknown *param18)
|
||||||
{
|
{
|
||||||
|
CComPtr<IBrowserService> browserService;
|
||||||
|
|
||||||
fCombobox.SubclassWindow(comboboxEx);
|
fCombobox.SubclassWindow(comboboxEx);
|
||||||
fEditWindow.SubclassWindow(editControl);
|
fEditWindow.SubclassWindow(editControl);
|
||||||
fSite = param18;
|
fSite = param18;
|
||||||
return S_OK;
|
|
||||||
|
// take advice to watch events
|
||||||
|
HRESULT hResult = IUnknown_QueryService(param18, SID_SShellBrowser, IID_PPV_ARG(IBrowserService, &browserService));
|
||||||
|
if (SUCCEEDED(hResult))
|
||||||
|
{
|
||||||
|
if (SUCCEEDED(hResult))
|
||||||
|
hResult = AtlAdvise(browserService, static_cast<IDispatch *>(this), DIID_DWebBrowserEvents, &fAdviseCookie);
|
||||||
|
}
|
||||||
|
|
||||||
|
return hResult;
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT STDMETHODCALLTYPE CAddressEditBox::SetCurrentDir(long paramC)
|
HRESULT STDMETHODCALLTYPE CAddressEditBox::SetCurrentDir(long paramC)
|
||||||
{
|
{
|
||||||
LPWSTR strC = reinterpret_cast<LPWSTR>(paramC);
|
|
||||||
fEditWindow.SetWindowText(strC);
|
|
||||||
|
|
||||||
return E_NOTIMPL;
|
return E_NOTIMPL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -86,7 +94,6 @@ HRESULT STDMETHODCALLTYPE CAddressEditBox::ParseNow(long paramC)
|
||||||
{
|
{
|
||||||
WCHAR address[4096];
|
WCHAR address[4096];
|
||||||
ULONG eaten;
|
ULONG eaten;
|
||||||
LPITEMIDLIST pidl;
|
|
||||||
ULONG attributes;
|
ULONG attributes;
|
||||||
HRESULT hr;
|
HRESULT hr;
|
||||||
HWND topLevelWindow;
|
HWND topLevelWindow;
|
||||||
|
@ -100,17 +107,39 @@ HRESULT STDMETHODCALLTYPE CAddressEditBox::ParseNow(long paramC)
|
||||||
|
|
||||||
CComPtr<IShellFolder> psfDesktop;
|
CComPtr<IShellFolder> psfDesktop;
|
||||||
hr = SHGetDesktopFolder(&psfDesktop);
|
hr = SHGetDesktopFolder(&psfDesktop);
|
||||||
hr = psfDesktop->ParseDisplayName(topLevelWindow, NULL, address, &eaten, &pidl, &attributes);
|
hr = psfDesktop->ParseDisplayName(topLevelWindow, NULL, address, &eaten, &pidlLastParsed, &attributes);
|
||||||
if (SUCCEEDED(hr))
|
|
||||||
{
|
|
||||||
hr = pisb->BrowseObject(pidl, 0);
|
|
||||||
}
|
|
||||||
return hr;
|
return hr;
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT STDMETHODCALLTYPE CAddressEditBox::Execute(long paramC)
|
HRESULT STDMETHODCALLTYPE CAddressEditBox::Execute(long paramC)
|
||||||
{
|
{
|
||||||
return E_NOTIMPL;
|
HRESULT hr;
|
||||||
|
|
||||||
|
if (!pidlLastParsed)
|
||||||
|
return E_FAIL;
|
||||||
|
|
||||||
|
CComPtr<IShellBrowser> pisb;
|
||||||
|
hr = IUnknown_QueryService(fSite, SID_SShellBrowser, IID_PPV_ARG(IShellBrowser, &pisb));
|
||||||
|
if (SUCCEEDED(hr))
|
||||||
|
{
|
||||||
|
hr = pisb->BrowseObject(pidlLastParsed, 0);
|
||||||
|
if (FAILED(hr))
|
||||||
|
{
|
||||||
|
HWND topLevelWindow;
|
||||||
|
LPCITEMIDLIST pidlChild;
|
||||||
|
CComPtr<IShellFolder> sf;
|
||||||
|
CComPtr<IShellBrowser> pisb;
|
||||||
|
|
||||||
|
hr = IUnknown_QueryService(fSite, SID_SShellBrowser, IID_PPV_ARG(IShellBrowser, &pisb));
|
||||||
|
|
||||||
|
IUnknown_GetWindow(pisb, &topLevelWindow);
|
||||||
|
|
||||||
|
hr = SHBindToParent(pidlLastParsed, IID_PPV_ARG(IShellFolder, &sf), &pidlChild);
|
||||||
|
|
||||||
|
SHInvokeDefaultCommand(topLevelWindow, sf, pidlChild);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return hr;
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT STDMETHODCALLTYPE CAddressEditBox::Save(long paramC)
|
HRESULT STDMETHODCALLTYPE CAddressEditBox::Save(long paramC)
|
||||||
|
@ -127,7 +156,11 @@ HRESULT STDMETHODCALLTYPE CAddressEditBox::OnWinEvent(
|
||||||
|
|
||||||
HRESULT STDMETHODCALLTYPE CAddressEditBox::IsWindowOwner(HWND hWnd)
|
HRESULT STDMETHODCALLTYPE CAddressEditBox::IsWindowOwner(HWND hWnd)
|
||||||
{
|
{
|
||||||
return E_NOTIMPL;
|
if (fCombobox.m_hWnd == hWnd)
|
||||||
|
return S_OK;
|
||||||
|
if (fEditWindow.m_hWnd == hWnd)
|
||||||
|
return S_OK;
|
||||||
|
return S_FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT STDMETHODCALLTYPE CAddressEditBox::QueryStatus(
|
HRESULT STDMETHODCALLTYPE CAddressEditBox::QueryStatus(
|
||||||
|
@ -161,8 +194,16 @@ HRESULT STDMETHODCALLTYPE CAddressEditBox::GetIDsOfNames(
|
||||||
HRESULT STDMETHODCALLTYPE CAddressEditBox::Invoke(DISPID dispIdMember, REFIID riid, LCID lcid,
|
HRESULT STDMETHODCALLTYPE CAddressEditBox::Invoke(DISPID dispIdMember, REFIID riid, LCID lcid,
|
||||||
WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
|
WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
|
||||||
{
|
{
|
||||||
// on navigate complete, change edit section of combobox
|
if (pDispParams == NULL)
|
||||||
return E_NOTIMPL;
|
return E_INVALIDARG;
|
||||||
|
|
||||||
|
switch (dispIdMember)
|
||||||
|
{
|
||||||
|
case DISPID_NAVIGATECOMPLETE2:
|
||||||
|
case DISPID_DOCUMENTCOMPLETE:
|
||||||
|
pidlLastParsed = NULL;
|
||||||
|
}
|
||||||
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT STDMETHODCALLTYPE CAddressEditBox::GetClassID(CLSID *pClassID)
|
HRESULT STDMETHODCALLTYPE CAddressEditBox::GetClassID(CLSID *pClassID)
|
||||||
|
|
|
@ -35,7 +35,9 @@ class CAddressEditBox :
|
||||||
private:
|
private:
|
||||||
CContainedWindow fCombobox;
|
CContainedWindow fCombobox;
|
||||||
CContainedWindow fEditWindow;
|
CContainedWindow fEditWindow;
|
||||||
CComPtr<IUnknown> fSite;
|
DWORD fAdviseCookie;
|
||||||
|
CComPtr<IUnknown> fSite;
|
||||||
|
LPITEMIDLIST pidlLastParsed;
|
||||||
public:
|
public:
|
||||||
CAddressEditBox();
|
CAddressEditBox();
|
||||||
~CAddressEditBox();
|
~CAddressEditBox();
|
||||||
|
|
|
@ -826,6 +826,9 @@ HRESULT CShellBrowser::BrowseToPIDL(LPCITEMIDLIST pidl, long flags)
|
||||||
// called by shell view to browse to new folder
|
// called by shell view to browse to new folder
|
||||||
// also called by explorer band to navigate to new folder
|
// also called by explorer band to navigate to new folder
|
||||||
hResult = SHBindToFolder(pidl, &newFolder);
|
hResult = SHBindToFolder(pidl, &newFolder);
|
||||||
|
if (FAILED(hResult))
|
||||||
|
return hResult;
|
||||||
|
|
||||||
newFolderSettings.ViewMode = FVM_ICON;
|
newFolderSettings.ViewMode = FVM_ICON;
|
||||||
newFolderSettings.fFlags = 0;
|
newFolderSettings.fFlags = 0;
|
||||||
hResult = BrowseToPath(newFolder, pidl, &newFolderSettings, flags);
|
hResult = BrowseToPath(newFolder, pidl, &newFolderSettings, flags);
|
||||||
|
|
Loading…
Reference in a new issue