Skip to content

Commit

Permalink
Merge pull request #12903 from brave/toolbar-button-panels-close
Browse files Browse the repository at this point in the history
Ensure panels opened via toolbar buttons get closed when clicked again (shields, vpn, wallet)
  • Loading branch information
petemill committed Apr 22, 2022
1 parent 7a5838a commit 746cc37
Show file tree
Hide file tree
Showing 6 changed files with 43 additions and 2 deletions.
10 changes: 10 additions & 0 deletions browser/ui/views/brave_actions/brave_shields_action_view.cc
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,16 @@ BraveShieldsActionView::BraveShieldsActionView(Profile* profile,
SetHorizontalAlignment(gfx::ALIGN_CENTER);
ink_drop->SetVisibleOpacity(kToolbarInkDropVisibleOpacity);
tab_strip_model_->AddObserver(this);

// The MenuButtonController makes sure the panel closes when clicked if the
// panel is already open.
auto menu_button_controller = std::make_unique<views::MenuButtonController>(
this,
base::BindRepeating(&BraveShieldsActionView::ButtonPressed,
base::Unretained(this)),
std::make_unique<views::Button::DefaultButtonControllerDelegate>(this));
menu_button_controller_ = menu_button_controller.get();
SetButtonController(std::move(menu_button_controller));
}

BraveShieldsActionView::~BraveShieldsActionView() {
Expand Down
2 changes: 2 additions & 0 deletions browser/ui/views/brave_actions/brave_shields_action_view.h
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
#include "chrome/browser/ui/tabs/tab_strip_model_observer.h"
#include "chrome/browser/ui/views/bubble/webui_bubble_manager.h"
#include "ui/views/controls/button/label_button.h"
#include "ui/views/controls/button/menu_button_controller.h"

class TabStripModel;
class IconWithBadgeImageSource;
Expand Down Expand Up @@ -50,6 +51,7 @@ class BraveShieldsActionView
const TabStripModelChange& change,
const TabStripSelectionChange& selection) override;

raw_ptr<views::MenuButtonController> menu_button_controller_ = nullptr;
Profile* profile_ = nullptr;
TabStripModel* tab_strip_model_ = nullptr;
std::unique_ptr<WebUIBubbleManagerT<ShieldsPanelUI>> webui_bubble_manager_;
Expand Down
14 changes: 13 additions & 1 deletion browser/ui/views/toolbar/brave_vpn_button.cc
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,9 @@ BraveVPNButton::BraveVPNButton(Browser* browser)
: ToolbarButton(base::BindRepeating(&BraveVPNButton::OnButtonPressed,
base::Unretained(this)),
std::make_unique<VPNButtonMenuModel>(browser),
nullptr),
nullptr,
false), // Long-pressing is not intended for something that
// already shows a panel on click
browser_(browser),
service_(BraveVpnServiceFactory::GetForProfile(browser_->profile())) {
DCHECK(service_);
Expand All @@ -120,6 +122,16 @@ BraveVPNButton::BraveVPNButton(Browser* browser)
this, std::make_unique<BraveVPNButtonHighlightPathGenerator>(
GetToolbarInkDropInsets(this)));

// The MenuButtonController makes sure the panel closes when clicked if the
// panel is already open.
auto menu_button_controller = std::make_unique<views::MenuButtonController>(
this,
base::BindRepeating(&BraveVPNButton::OnButtonPressed,
base::Unretained(this)),
std::make_unique<views::Button::DefaultButtonControllerDelegate>(this));
menu_button_controller_ = menu_button_controller.get();
SetButtonController(std::move(menu_button_controller));

label()->SetText(brave_l10n::GetLocalizedResourceUTF16String(
IDS_BRAVE_VPN_TOOLBAR_BUTTON_TEXT));
gfx::FontList font_list = views::Label::GetDefaultFontList();
Expand Down
2 changes: 2 additions & 0 deletions browser/ui/views/toolbar/brave_vpn_button.h
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
#include "brave/components/brave_vpn/brave_vpn_service_observer.h"
#include "chrome/browser/ui/views/toolbar/toolbar_button.h"
#include "ui/base/metadata/metadata_header_macros.h"
#include "ui/views/controls/button/menu_button_controller.h"

class BraveVpnServiceDesktop;
class Browser;
Expand Down Expand Up @@ -38,6 +39,7 @@ class BraveVPNButton : public ToolbarButton, public BraveVPNServiceObserver {

Browser* browser_ = nullptr;
BraveVpnServiceDesktop* service_ = nullptr;
raw_ptr<views::MenuButtonController> menu_button_controller_ = nullptr;
};

#endif // BRAVE_BROWSER_UI_VIEWS_TOOLBAR_BRAVE_VPN_BUTTON_H_
15 changes: 14 additions & 1 deletion browser/ui/views/toolbar/wallet_button.cc
Original file line number Diff line number Diff line change
Expand Up @@ -73,14 +73,27 @@ WalletButton::WalletButton(View* backup_anchor_view, PrefService* prefs)
: ToolbarButton(base::BindRepeating(&WalletButton::OnWalletPressed,
base::Unretained(this)),
std::make_unique<WalletButtonMenuModel>(prefs),
nullptr),
nullptr,
false), // Long-pressing is not intended for something that
// already shows a panel on click
prefs_(prefs),
backup_anchor_view_(backup_anchor_view) {
pref_change_registrar_.Init(prefs_);
pref_change_registrar_.Add(
kShowWalletIconOnToolbar,
base::BindRepeating(&WalletButton::OnPreferenceChanged,
base::Unretained(this)));

// The MenuButtonController makes sure the panel closes when clicked if the
// panel is already open.
auto menu_button_controller = std::make_unique<views::MenuButtonController>(
this,
base::BindRepeating(&WalletButton::OnWalletPressed,
base::Unretained(this)),
std::make_unique<views::Button::DefaultButtonControllerDelegate>(this));
menu_button_controller_ = menu_button_controller.get();
SetButtonController(std::move(menu_button_controller));

UpdateVisibility();
}

Expand Down
2 changes: 2 additions & 0 deletions browser/ui/views/toolbar/wallet_button.h
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
#include "chrome/browser/ui/views/toolbar/toolbar_button.h"
#include "components/prefs/pref_change_registrar.h"
#include "ui/base/metadata/metadata_header_macros.h"
#include "ui/views/controls/button/menu_button_controller.h"

class PrefService;

Expand Down Expand Up @@ -42,6 +43,7 @@ class WalletButton : public ToolbarButton {
void OnWalletPressed(const ui::Event& event);

raw_ptr<PrefService> prefs_ = nullptr;
raw_ptr<views::MenuButtonController> menu_button_controller_ = nullptr;
raw_ptr<views::View> backup_anchor_view_ = nullptr;
PrefChangeRegistrar pref_change_registrar_;
};
Expand Down

0 comments on commit 746cc37

Please sign in to comment.