Skip to content

Commit 5af47c9

Browse files
authored
[BROWSEUI] Set AddressBand Go button checkbox state correctly in menu (reactos#7771)
CORE-20018
1 parent 5461abe commit 5af47c9

File tree

6 files changed

+43
-10
lines changed

6 files changed

+43
-10
lines changed

dll/win32/browseui/addressband.cpp

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,9 @@ Implements the navigation band of the cabinet window
3737
Implement Save
3838
*/
3939

40+
// Unique GUID of the DLL where this CAddressBand is implemented so we can tell if it's really us
41+
static const GUID THISMODULE_GUID = { 0x60ebab6e, 0x2e4b, 0x42f6, { 0x8a,0xbc,0x80,0x73,0x1c,0xa6,0x42,0x02} };
42+
4043
CAddressBand::CAddressBand()
4144
{
4245
fEditControl = NULL;
@@ -49,6 +52,20 @@ CAddressBand::~CAddressBand()
4952
{
5053
}
5154

55+
BOOL CAddressBand::ShouldShowGoButton()
56+
{
57+
return SHRegGetBoolUSValueW(L"Software\\Microsoft\\Internet Explorer\\Main", L"ShowGoButton", FALSE, TRUE);
58+
}
59+
60+
BOOL CAddressBand::IsGoButtonVisible(IUnknown *pUnkBand)
61+
{
62+
CComPtr<IAddressBand> pAB;
63+
IUnknown_QueryService(pUnkBand, THISMODULE_GUID, IID_PPV_ARG(IAddressBand, &pAB));
64+
if (pAB)
65+
return static_cast<CAddressBand*>(pAB.p)->fGoButtonShown;
66+
return ShouldShowGoButton(); // We don't know, return the global state
67+
}
68+
5269
void CAddressBand::FocusChange(BOOL bFocus)
5370
{
5471
// m_bFocus = bFocus;
@@ -168,7 +185,7 @@ HRESULT STDMETHODCALLTYPE CAddressBand::SetSite(IUnknown *pUnkSite)
168185
if (FAILED_UNEXPECTEDLY(hResult))
169186
return hResult;
170187

171-
fGoButtonShown = SHRegGetBoolUSValueW(L"Software\\Microsoft\\Internet Explorer\\Main", L"ShowGoButton", FALSE, TRUE);
188+
fGoButtonShown = ShouldShowGoButton();
172189
if (fGoButtonShown)
173190
CreateGoButton();
174191

@@ -365,7 +382,7 @@ HRESULT STDMETHODCALLTYPE CAddressBand::OnWinEvent(
365382
case WM_COMMAND:
366383
if (wParam == IDM_TOOLBARS_GOBUTTON)
367384
{
368-
fGoButtonShown = !SHRegGetBoolUSValueW(L"Software\\Microsoft\\Internet Explorer\\Main", L"ShowGoButton", FALSE, TRUE);
385+
fGoButtonShown = !IsGoButtonVisible(static_cast<IAddressBand*>(this));
369386
SHRegSetUSValueW(L"Software\\Microsoft\\Internet Explorer\\Main", L"ShowGoButton", REG_SZ, fGoButtonShown ? (LPVOID)L"yes" : (LPVOID)L"no", fGoButtonShown ? 8 : 6, SHREGSET_FORCE_HKCU);
370387
if (!fGoButton)
371388
CreateGoButton();
@@ -421,6 +438,8 @@ HRESULT STDMETHODCALLTYPE CAddressBand::Refresh(long param8)
421438

422439
HRESULT STDMETHODCALLTYPE CAddressBand::QueryService(REFGUID guidService, REFIID riid, void **ppvObject)
423440
{
441+
if (guidService == THISMODULE_GUID)
442+
return QueryInterface(riid, ppvObject);
424443
return E_NOTIMPL;
425444
}
426445

dll/win32/browseui/addressband.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,9 @@ class CAddressBand :
5151
void FocusChange(BOOL bFocus);
5252
void CreateGoButton();
5353
public:
54+
static BOOL ShouldShowGoButton();
55+
static BOOL IsGoButtonVisible(IUnknown *pUnkBand);
56+
5457
// *** IDeskBand methods ***
5558
STDMETHOD(GetBandInfo)(DWORD dwBandID, DWORD dwViewMode, DESKBANDINFO *pdbi) override;
5659

dll/win32/browseui/internettoolbar.cpp

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -658,6 +658,16 @@ HRESULT CInternetToolbar::EnumBands(UINT Index, int *pBandId, IUnknown **ppUnkBa
658658
return *ppUnkBand ? S_OK : S_FALSE;
659659
}
660660

661+
HRESULT CInternetToolbar::QIBand(int BandID, REFIID riid, void **ppv)
662+
{
663+
IUnknown *pUnk; // Not ref. counted
664+
int temp = (UINT) SendMessageW(fMainReBar, RB_IDTOINDEX, BandID, 0);
665+
if (EnumBands(temp, &temp, &pUnk) == S_OK)
666+
return pUnk->QueryInterface(riid, ppv);
667+
*ppv = NULL;
668+
return E_NOINTERFACE;
669+
}
670+
661671
HRESULT CInternetToolbar::ReserveBorderSpace(LONG maxHeight)
662672
{
663673
CComPtr<IDockingWindowSite> dockingWindowSite;
@@ -1746,6 +1756,7 @@ LRESULT CInternetToolbar::OnContextMenu(UINT uMsg, WPARAM wParam, LPARAM lParam,
17461756
RBHITTESTINFO hitTestInfo;
17471757
REBARBANDINFOW rebarBandInfo;
17481758
int bandID;
1759+
CComPtr<IAddressBand> pAddress;
17491760

17501761
clickLocation.x = LOWORD(lParam);
17511762
clickLocation.y = HIWORD(lParam);
@@ -1780,6 +1791,8 @@ LRESULT CInternetToolbar::OnContextMenu(UINT uMsg, WPARAM wParam, LPARAM lParam,
17801791
case ITBBID_ADDRESSBAND: // navigation band
17811792
DeleteMenu(contextMenu, IDM_TOOLBARS_CUSTOMIZE, MF_BYCOMMAND);
17821793
DeleteMenu(contextMenu, IDM_TOOLBARS_TEXTLABELS, MF_BYCOMMAND);
1794+
QIBand(ITBBID_ADDRESSBAND, IID_PPV_ARG(IAddressBand, &pAddress));
1795+
pSettings->fShowGoButton = CAddressBand::IsGoButtonVisible(pAddress);
17831796
break;
17841797
default:
17851798
break;

dll/win32/browseui/internettoolbar.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,7 @@ class CInternetToolbar :
103103
virtual ~CInternetToolbar();
104104
void AddDockItem(IUnknown *newItem, int bandID, int flags);
105105
HRESULT EnumBands(UINT Index, int *pBandId, IUnknown **ppUnkBand);
106+
HRESULT QIBand(int BandID, REFIID riid, void **ppv);
106107
HRESULT ReserveBorderSpace(LONG maxHeight = -1);
107108
HRESULT CreateMenuBar(IShellMenu **menuBar);
108109
HRESULT CreateToolsBar(IUnknown **toolsBar);

dll/win32/browseui/settings.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,7 @@ void ShellSettings::Load()
2626
fStatusBarVisible = SHRegGetBoolUSValueW(L"Software\\Microsoft\\Internet Explorer\\Main",
2727
L"StatusBarOther", FALSE, TRUE);
2828

29-
fShowGoButton = SHRegGetBoolUSValueW(L"Software\\Microsoft\\Internet Explorer\\Main",
30-
L"ShowGoButton", FALSE, TRUE);
29+
fShowGoButton = CAddressBand::ShouldShowGoButton();
3130

3231
fLocked = SHRegGetBoolUSValueW(L"Software\\Microsoft\\Internet Explorer\\Toolbar",
3332
L"Locked", FALSE, TRUE);

dll/win32/browseui/shellbrowser.cpp

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1196,11 +1196,8 @@ HRESULT CShellBrowser::GetMenuBand(REFIID riid, void **shellMenu)
11961196
if (FAILED_UNEXPECTEDLY(hResult))
11971197
return hResult;
11981198

1199-
hResult = bandSite->QueryBand(1, &deskBand, NULL, NULL, 0);
1200-
if (FAILED_UNEXPECTEDLY(hResult))
1201-
return hResult;
1202-
1203-
return deskBand->QueryInterface(riid, shellMenu);
1199+
hResult = bandSite->QueryBand(ITBBID_MENUBAND, &deskBand, NULL, NULL, 0);
1200+
return FAILED(hResult) ? hResult : deskBand->QueryInterface(riid, shellMenu); // It is expected that this might fail during WM_DESTROY
12041201
}
12051202

12061203
HRESULT CShellBrowser::GetBaseBar(bool vertical, REFIID riid, void **theBaseBar)
@@ -2097,7 +2094,7 @@ HRESULT STDMETHODCALLTYPE CShellBrowser::QueryStatus(const GUID *pguidCmdGroup,
20972094
{
20982095
case IDM_GOTO_UPONELEVEL:
20992096
prgCmds->cmdf = OLECMDF_SUPPORTED;
2100-
if (fCurrentDirectoryPIDL->mkid.cb != 0)
2097+
if (!_ILIsDesktop(fCurrentDirectoryPIDL))
21012098
prgCmds->cmdf |= OLECMDF_ENABLED;
21022099
break;
21032100
}
@@ -3696,6 +3693,7 @@ LRESULT CShellBrowser::OnDestroy(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &
36963693

36973694
fCurrentShellFolder.Release();
36983695
ILFree(fCurrentDirectoryPIDL);
3696+
fCurrentDirectoryPIDL = NULL;
36993697
::DestroyWindow(fStatusBar);
37003698
DestroyMenu(fCurrentMenuBar);
37013699
}

0 commit comments

Comments
 (0)