diff --git a/browser/brave_profile_prefs.cc b/browser/brave_profile_prefs.cc index 12bb27a943c..9326da5933b 100644 --- a/browser/brave_profile_prefs.cc +++ b/browser/brave_profile_prefs.cc @@ -316,7 +316,6 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry) { registry->RegisterStringPref(kBraveWalletPasswordEncryptorNonce, ""); registry->RegisterStringPref(kBraveWalletEncryptedMnemonic, ""); registry->RegisterIntegerPref(kBraveWalletDefaultKeyringAccountNum, 0); - registry->RegisterBooleanPref(kShowWalletIcon, true); registry->RegisterBooleanPref(kShowWalletIconOnToolbar, true); #endif diff --git a/browser/ui/views/toolbar/brave_toolbar_view.cc b/browser/ui/views/toolbar/brave_toolbar_view.cc index 366753c0a1a..e26c27e2bec 100644 --- a/browser/ui/views/toolbar/brave_toolbar_view.cc +++ b/browser/ui/views/toolbar/brave_toolbar_view.cc @@ -175,7 +175,8 @@ void BraveToolbarView::Init() { #if BUILDFLAG(BRAVE_WALLET_ENABLED) if (brave_wallet::IsNativeWalletEnabled()) { - wallet_ = new WalletButton(profile, profile->GetPrefs()); + wallet_ = + new WalletButton(GetAppMenuButton(), profile, profile->GetPrefs()); wallet_->SetTriggerableEventFlags(ui::EF_LEFT_MOUSE_BUTTON | ui::EF_MIDDLE_MOUSE_BUTTON); } diff --git a/browser/ui/views/toolbar/wallet_button.cc b/browser/ui/views/toolbar/wallet_button.cc index 76fc95da77d..70e386bc000 100644 --- a/browser/ui/views/toolbar/wallet_button.cc +++ b/browser/ui/views/toolbar/wallet_button.cc @@ -19,19 +19,20 @@ #include "ui/gfx/paint_vector_icon.h" #include "ui/views/metadata/metadata_impl_macros.h" -WalletButton::WalletButton(Profile* profile, PrefService* prefs) +WalletButton::WalletButton(View* backup_anchor_view, + Profile* profile, + PrefService* prefs) : ToolbarButton(base::BindRepeating(&WalletButton::OnWalletPressed, base::Unretained(this))), - webui_bubble_manager_(this, - profile, - GURL(kBraveUIWalletPanelURL), - IDS_ACCNAME_BRAVE_WALLET_BUTTON, - true), - prefs_(prefs) { + prefs_(prefs), + backup_anchor_view_(backup_anchor_view), + profile_(profile) { pref_change_registrar_.Init(prefs_); pref_change_registrar_.Add( - kShowWalletIcon, base::BindRepeating(&WalletButton::OnPreferenceChanged, - base::Unretained(this))); + kShowWalletIconOnToolbar, + base::BindRepeating(&WalletButton::OnPreferenceChanged, + base::Unretained(this))); + InitBubbleManagerAnchor(); UpdateVisibility(); auto menu_button_controller = std::make_unique( @@ -57,34 +58,45 @@ void WalletButton::UpdateImageAndText() { SetTooltipText(l10n_util::GetStringUTF16(IDS_TOOLTIP_WALLET)); } +void WalletButton::InitBubbleManagerAnchor() { + View* anchor_view = this; + if (!prefs_->GetBoolean(kShowWalletIconOnToolbar)) { + anchor_view = backup_anchor_view_; + } + webui_bubble_manager_ = std::make_unique>( + anchor_view, profile_, GURL(kBraveUIWalletPanelURL), + IDS_ACCNAME_BRAVE_WALLET_BUTTON, true); +} + void WalletButton::UpdateVisibility() { - SetVisible(prefs_->GetBoolean(kShowWalletIcon)); + SetVisible(prefs_->GetBoolean(kShowWalletIconOnToolbar)); } void WalletButton ::OnPreferenceChanged() { + InitBubbleManagerAnchor(); UpdateVisibility(); } void WalletButton::OnWidgetDestroying(views::Widget* widget) { - DCHECK_EQ(webui_bubble_manager_.GetBubbleWidget(), widget); + DCHECK_EQ(webui_bubble_manager_->GetBubbleWidget(), widget); DCHECK(bubble_widget_observation_.IsObservingSource( - webui_bubble_manager_.GetBubbleWidget())); + webui_bubble_manager_->GetBubbleWidget())); bubble_widget_observation_.Reset(); pressed_lock_.reset(); } bool WalletButton::ShowWalletBubble() { - if (webui_bubble_manager_.GetBubbleWidget()) { + if (webui_bubble_manager_->GetBubbleWidget()) { CloseWalletBubble(); return false; } - webui_bubble_manager_.ShowBubble(); + webui_bubble_manager_->ShowBubble(); // There should only ever be a single bubble widget active for the // WalletButton. DCHECK(!bubble_widget_observation_.IsObserving()); - bubble_widget_observation_.Observe(webui_bubble_manager_.GetBubbleWidget()); + bubble_widget_observation_.Observe(webui_bubble_manager_->GetBubbleWidget()); // Hold the pressed lock while the |bubble_| is active. pressed_lock_ = menu_button_controller_->TakeLock(); @@ -92,7 +104,7 @@ bool WalletButton::ShowWalletBubble() { } void WalletButton::CloseWalletBubble() { - webui_bubble_manager_.CloseBubble(); + webui_bubble_manager_->CloseBubble(); } BEGIN_METADATA(WalletButton, ToolbarButton) diff --git a/browser/ui/views/toolbar/wallet_button.h b/browser/ui/views/toolbar/wallet_button.h index 6e7367b9ffb..1552667a25c 100644 --- a/browser/ui/views/toolbar/wallet_button.h +++ b/browser/ui/views/toolbar/wallet_button.h @@ -24,7 +24,7 @@ class WalletButton : public ToolbarButton, public views::WidgetObserver { METADATA_HEADER(WalletButton); public: - WalletButton(Profile* profile, PrefService* prefs); + WalletButton(View* backup_anchor_view, Profile* profile, PrefService* prefs); ~WalletButton() override; WalletButton(const WalletButton&) = delete; @@ -37,10 +37,11 @@ class WalletButton : public ToolbarButton, public views::WidgetObserver { void CloseWalletBubble(); void UpdateImageAndText(); + void InitBubbleManagerAnchor(); void UpdateVisibility(); WebUIBubbleManager* webui_bubble_manager_for_testing() { - return &webui_bubble_manager_; + return webui_bubble_manager_.get(); } private: @@ -50,9 +51,11 @@ class WalletButton : public ToolbarButton, public views::WidgetObserver { // views::WidgetObserver: void OnWidgetDestroying(views::Widget* widget) override; - WebUIBubbleManagerT webui_bubble_manager_; + std::unique_ptr> webui_bubble_manager_; PrefService* prefs_ = nullptr; + View* backup_anchor_view_ = nullptr; + Profile* profile_; PrefChangeRegistrar pref_change_registrar_; views::MenuButtonController* menu_button_controller_ = nullptr;