mirror of
https://github.com/reactos/reactos.git
synced 2024-10-01 06:57:08 +00:00
[BROWSEUI] GetControlWindow must support FCW_TREE for DefView usage (#6781)
Support GetControlWindow, ShowControlWindow and IsControlWindowShown for TREE and STATUS in the Shell Browser so DefView can set CMF_EXPLORE correctly.
This commit is contained in:
parent
190b3da95d
commit
9e8214fa13
|
@ -1970,7 +1970,7 @@ HRESULT STDMETHODCALLTYPE CShellBrowser::QueryStatus(const GUID *pguidCmdGroup,
|
||||||
if (IsEqualCLSID(CLSID_SH_FavBand, fCurrentVertBar))
|
if (IsEqualCLSID(CLSID_SH_FavBand, fCurrentVertBar))
|
||||||
prgCmds->cmdf |= OLECMDF_LATCHED;
|
prgCmds->cmdf |= OLECMDF_LATCHED;
|
||||||
break;
|
break;
|
||||||
case 0x23: // folders
|
case SBCMDID_EXPLORERBARFOLDERS: // folders
|
||||||
prgCmds->cmdf = OLECMDF_SUPPORTED | OLECMDF_ENABLED;
|
prgCmds->cmdf = OLECMDF_SUPPORTED | OLECMDF_ENABLED;
|
||||||
if (IsEqualCLSID(CLSID_ExplorerBand, fCurrentVertBar))
|
if (IsEqualCLSID(CLSID_ExplorerBand, fCurrentVertBar))
|
||||||
prgCmds->cmdf |= OLECMDF_LATCHED;
|
prgCmds->cmdf |= OLECMDF_LATCHED;
|
||||||
|
@ -2019,7 +2019,7 @@ HRESULT STDMETHODCALLTYPE CShellBrowser::Exec(const GUID *pguidCmdGroup, DWORD n
|
||||||
case 0x1c: //Toggle Search
|
case 0x1c: //Toggle Search
|
||||||
case 0x1d: //Toggle History
|
case 0x1d: //Toggle History
|
||||||
case 0x1e: //Toggle Favorites
|
case 0x1e: //Toggle Favorites
|
||||||
case 0x23: //Toggle Folders
|
case SBCMDID_EXPLORERBARFOLDERS: //Toggle Folders
|
||||||
const GUID* pclsid;
|
const GUID* pclsid;
|
||||||
if (nCmdID == 0x1c) pclsid = &CLSID_FileSearchBand;
|
if (nCmdID == 0x1c) pclsid = &CLSID_FileSearchBand;
|
||||||
else if (nCmdID == 0x1d) pclsid = &CLSID_SH_HistBand;
|
else if (nCmdID == 0x1d) pclsid = &CLSID_SH_HistBand;
|
||||||
|
@ -2270,9 +2270,12 @@ HRESULT STDMETHODCALLTYPE CShellBrowser::GetControlWindow(UINT id, HWND *lphwnd)
|
||||||
*lphwnd = fStatusBar;
|
*lphwnd = fStatusBar;
|
||||||
return S_OK;
|
return S_OK;
|
||||||
case FCW_TREE:
|
case FCW_TREE:
|
||||||
// find the directory browser and return it
|
{
|
||||||
// this should be used only to determine if a tree is present
|
BOOL shown;
|
||||||
return S_OK;
|
if (SUCCEEDED(IsControlWindowShown(id, &shown)) && shown)
|
||||||
|
return IUnknown_GetWindow(fClientBars[BIVerticalBaseBar].clientBar.p, lphwnd);
|
||||||
|
return S_FALSE;
|
||||||
|
}
|
||||||
case FCW_PROGRESS:
|
case FCW_PROGRESS:
|
||||||
// is this a progress dialog?
|
// is this a progress dialog?
|
||||||
return S_OK;
|
return S_OK;
|
||||||
|
@ -2459,12 +2462,47 @@ HRESULT STDMETHODCALLTYPE CShellBrowser::GetTravelLog(ITravelLog **pptl)
|
||||||
|
|
||||||
HRESULT STDMETHODCALLTYPE CShellBrowser::ShowControlWindow(UINT id, BOOL fShow)
|
HRESULT STDMETHODCALLTYPE CShellBrowser::ShowControlWindow(UINT id, BOOL fShow)
|
||||||
{
|
{
|
||||||
|
BOOL shown;
|
||||||
|
if (FAILED(IsControlWindowShown(id, &shown)))
|
||||||
|
return E_NOTIMPL;
|
||||||
|
else if (!shown == !fShow) // Negated for true boolean comparison
|
||||||
|
return S_OK;
|
||||||
|
else switch (id)
|
||||||
|
{
|
||||||
|
case FCW_STATUS:
|
||||||
|
OnToggleStatusBarVisible(0, 0, NULL, shown);
|
||||||
|
return S_OK;
|
||||||
|
case FCW_TREE:
|
||||||
|
return Exec(&CGID_Explorer, SBCMDID_EXPLORERBARFOLDERS, 0, NULL, NULL);
|
||||||
|
}
|
||||||
return E_NOTIMPL;
|
return E_NOTIMPL;
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT STDMETHODCALLTYPE CShellBrowser::IsControlWindowShown(UINT id, BOOL *pfShown)
|
HRESULT STDMETHODCALLTYPE CShellBrowser::IsControlWindowShown(UINT id, BOOL *pfShown)
|
||||||
{
|
{
|
||||||
return E_NOTIMPL;
|
HRESULT hr = S_OK;
|
||||||
|
BOOL shown = FALSE;
|
||||||
|
switch (id)
|
||||||
|
{
|
||||||
|
case FCW_STATUS:
|
||||||
|
shown = m_settings.fStatusBarVisible;
|
||||||
|
break;
|
||||||
|
case FCW_TREE:
|
||||||
|
{
|
||||||
|
OLECMD cmd = { SBCMDID_EXPLORERBARFOLDERS };
|
||||||
|
hr = QueryStatus(&CGID_Explorer, 1, &cmd, NULL);
|
||||||
|
shown = cmd.cmdf & OLECMDF_LATCHED;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
hr = E_NOTIMPL;
|
||||||
|
}
|
||||||
|
if (pfShown)
|
||||||
|
{
|
||||||
|
*pfShown = shown;
|
||||||
|
return hr;
|
||||||
|
}
|
||||||
|
return SUCCEEDED(hr) ? (shown ? S_OK : S_FALSE) : hr;
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT STDMETHODCALLTYPE CShellBrowser::IEGetDisplayName(LPCITEMIDLIST pidl, LPWSTR pwszName, UINT uFlags)
|
HRESULT STDMETHODCALLTYPE CShellBrowser::IEGetDisplayName(LPCITEMIDLIST pidl, LPWSTR pwszName, UINT uFlags)
|
||||||
|
|
|
@ -58,6 +58,31 @@ struct persistState
|
||||||
ULONG pidlSize;
|
ULONG pidlSize;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/*****************************************************************************
|
||||||
|
* CGID_Explorer (IShellBrowser OLECMD IDs)
|
||||||
|
*/
|
||||||
|
#define SBCMDID_EXPLORERBARFOLDERS 35 // Query/Toggle
|
||||||
|
#define SBCMDID_MIXEDZONE 39
|
||||||
|
#define SBCMDID_ONVIEWMOVETOTOP 60
|
||||||
|
//SBCMDID_ENABLESHOWTREE ?
|
||||||
|
//SBCMDID_SHOWCONTROL ?
|
||||||
|
//SBCMDID_CANCELNAVIGATION ?
|
||||||
|
//SBCMDID_MAYSAVECHANGES ?
|
||||||
|
//SBCMDID_SETHLINKFRAME ?
|
||||||
|
//SBCMDID_ENABLESTOP ?
|
||||||
|
//SBCMDID_SELECTHISTPIDL ?
|
||||||
|
//SBCMDID_GETPANE ? // This is in the official SDK but only the panes are defined
|
||||||
|
#define PANE_NONE ((DWORD)-1)
|
||||||
|
#define PANE_ZONE 1
|
||||||
|
#define PANE_OFFLINE 2
|
||||||
|
#define PANE_PRINTER 3
|
||||||
|
#define PANE_SSL 4
|
||||||
|
#define PANE_NAVIGATION 5
|
||||||
|
#define PANE_PROGRESS 6
|
||||||
|
#if (_WIN32_IE >= _WIN32_IE_IE60)
|
||||||
|
#define PANE_PRIVACY 7
|
||||||
|
#endif
|
||||||
|
|
||||||
/*****************************************************************************
|
/*****************************************************************************
|
||||||
* IInitializeObject interface
|
* IInitializeObject interface
|
||||||
*/
|
*/
|
||||||
|
|
Loading…
Reference in a new issue