Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1179)

Unified Diff: chrome/browser/ui/views/website_settings/permissions_bubble_view.cc

Issue 962453002: Update permission bubble anchor when omnibar is hidden (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Update Fullscreen Parent Created 5 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/ui/views/website_settings/permissions_bubble_view.cc
diff --git a/chrome/browser/ui/views/website_settings/permissions_bubble_view.cc b/chrome/browser/ui/views/website_settings/permissions_bubble_view.cc
index 1bf465a5a919e62c962bdd7ecf46be4c7c8225bb..06802638a2cc3d1ebcd2e28278599c5a30126542 100644
--- a/chrome/browser/ui/views/website_settings/permissions_bubble_view.cc
+++ b/chrome/browser/ui/views/website_settings/permissions_bubble_view.cc
@@ -16,6 +16,7 @@
#include "ui/base/resource/resource_bundle.h"
#include "ui/gfx/text_constants.h"
#include "ui/views/bubble/bubble_delegate.h"
+#include "ui/views/bubble/bubble_frame_view.h"
#include "ui/views/controls/button/checkbox.h"
#include "ui/views/controls/button/label_button.h"
#include "ui/views/controls/button/label_button_border.h"
@@ -140,7 +141,8 @@ class PermissionsBubbleDelegateView : public views::BubbleDelegateView,
public PermissionCombobox::Listener {
public:
PermissionsBubbleDelegateView(
- views::View* anchor,
+ views::View* anchor_view,
+ views::BubbleBorder::Arrow anchor_arrow,
PermissionBubbleViewViews* owner,
const std::string& languages,
const std::vector<PermissionBubbleRequest*>& requests,
@@ -163,6 +165,11 @@ class PermissionsBubbleDelegateView : public views::BubbleDelegateView,
// PermissionCombobox::Listener:
void PermissionSelectionChanged(int index, bool allowed) override;
+ // Updates the anchor's arrow and view. Also repositions the bubble so it's
+ // displayed in the correct location.
+ void UpdateAnchor(views::View* anchor_view,
+ views::BubbleBorder::Arrow anchor_arrow);
+
private:
PermissionBubbleViewViews* owner_;
views::Button* allow_;
@@ -176,12 +183,13 @@ class PermissionsBubbleDelegateView : public views::BubbleDelegateView,
};
PermissionsBubbleDelegateView::PermissionsBubbleDelegateView(
- views::View* anchor,
+ views::View* anchor_view,
+ views::BubbleBorder::Arrow anchor_arrow,
PermissionBubbleViewViews* owner,
const std::string& languages,
const std::vector<PermissionBubbleRequest*>& requests,
const std::vector<bool>& accept_state)
- : views::BubbleDelegateView(anchor, views::BubbleBorder::TOP_LEFT),
+ : views::BubbleDelegateView(anchor_view, anchor_arrow),
owner_(owner),
allow_(NULL),
deny_(NULL),
@@ -349,13 +357,32 @@ void PermissionsBubbleDelegateView::PermissionSelectionChanged(
owner_->Toggle(index, allowed);
}
+void PermissionsBubbleDelegateView::UpdateAnchor(
+ views::View* anchor_view,
+ views::BubbleBorder::Arrow anchor_arrow) {
+ set_arrow(anchor_arrow);
+
+ // Update the border in the bubble: will either add or remove the arrow.
+ views::BubbleFrameView* frame = static_cast<views::BubbleFrameView*>(
msw 2015/03/11 22:25:30 nit: use BubbleDelegateView::GetBubbleFrameView()
hcarmona 2015/03/12 18:43:33 Done.
+ GetWidget()->non_client_view()->frame_view());
+ views::BubbleBorder::Arrow adjusted_arrow = anchor_arrow;
+ if (base::i18n::IsRTL())
+ adjusted_arrow = views::BubbleBorder::horizontal_mirror(adjusted_arrow);
+ frame->SetBubbleBorder(scoped_ptr<views::BubbleBorder>(
+ new views::BubbleBorder(adjusted_arrow, shadow(), color())));
msw 2015/03/11 22:25:31 nit: outdent 2 spaces.
hcarmona 2015/03/12 18:43:33 Done.
+
+ // Reposition the bubble based on the updated arrow and view.
+ SetAnchorView(anchor_view);
+}
+
+
msw 2015/03/11 22:25:31 nit: remove extra blank line.
hcarmona 2015/03/12 18:43:33 Done.
//////////////////////////////////////////////////////////////////////////////
// PermissionBubbleViewViews
PermissionBubbleViewViews::PermissionBubbleViewViews(
- views::View* anchor_view,
const std::string& languages)
- : anchor_view_(anchor_view),
+ : anchor_view_(NULL),
msw 2015/03/11 22:25:30 nit: nullptr here and elsewhere.
hcarmona 2015/03/12 18:43:33 Done.
+ anchor_arrow_(views::BubbleBorder::NONE),
delegate_(NULL),
bubble_delegate_(NULL),
languages_(languages) {}
@@ -365,6 +392,18 @@ PermissionBubbleViewViews::~PermissionBubbleViewViews() {
delegate_->SetView(NULL);
}
+void PermissionBubbleViewViews::SetAnchor(
+ views::View* view,
+ views::BubbleBorder::Arrow arrow) {
+ // These values will be used to create any new bubble.
+ anchor_view_ = view;
+ anchor_arrow_ = arrow;
+
+ // If there is a bubble visible, it should be updated.
+ if (IsVisible())
+ bubble_delegate_->UpdateAnchor(view, arrow);
+}
+
void PermissionBubbleViewViews::SetDelegate(Delegate* delegate) {
delegate_ = delegate;
}
@@ -376,8 +415,8 @@ void PermissionBubbleViewViews::Show(
bubble_delegate_->Close();
bubble_delegate_ =
- new PermissionsBubbleDelegateView(anchor_view_, this, languages_,
- requests, values);
+ new PermissionsBubbleDelegateView(anchor_view_, anchor_arrow_, this,
+ languages_, requests, values);
views::BubbleDelegateView::CreateBubble(bubble_delegate_)->Show();
bubble_delegate_->SizeToContents();
}

Powered by Google App Engine
This is Rietveld 408576698