Index: chrome/browser/ui/views/website_settings/permission_selector_view.cc |
diff --git a/chrome/browser/ui/views/website_settings/permission_selector_view.cc b/chrome/browser/ui/views/website_settings/permission_selector_view.cc |
index f7a790e3954196db0b4883c84f20ddf4a97e93d7..3bb4cc9a2a765cad97551ada7dfbc37085cbfb2e 100644 |
--- a/chrome/browser/ui/views/website_settings/permission_selector_view.cc |
+++ b/chrome/browser/ui/views/website_settings/permission_selector_view.cc |
@@ -94,8 +94,14 @@ class PermissionMenuButton : public views::MenuButton, |
PermissionMenuModel* model); |
virtual ~PermissionMenuButton(); |
+ // Overridden from views::MenuButton. |
+ virtual gfx::Size GetPreferredSize() OVERRIDE; |
+ |
+ // Overridden from views::TextButton. |
+ virtual void SetText(const string16& text) OVERRIDE; |
+ |
private: |
- // Overridden from views::MenuButtonListener: |
+ // Overridden from views::MenuButtonListener. |
virtual void OnMenuButtonClicked(View* source, |
const gfx::Point& point) OVERRIDE; |
@@ -158,7 +164,7 @@ void PermissionMenuModel::ExecuteCommand(int command_id) { |
} |
/////////////////////////////////////////////////////////////////////////////// |
-// PermissionMenuModel |
+// PermissionMenuButton |
/////////////////////////////////////////////////////////////////////////////// |
PermissionMenuButton::PermissionMenuButton(const string16& text, |
@@ -170,6 +176,27 @@ PermissionMenuButton::PermissionMenuButton(const string16& text, |
PermissionMenuButton::~PermissionMenuButton() { |
} |
+gfx::Size PermissionMenuButton::GetPreferredSize() { |
+ gfx::Insets insets = GetInsets(); |
+ // Scale the button to the current text size. |
+ gfx::Size prefsize(text_size_.width() + insets.width(), |
+ text_size_.height() + insets.height()); |
+ if (max_width_ > 0) |
+ prefsize.set_width(std::min(max_width_, prefsize.width())); |
+ if (show_menu_marker()) { |
+ prefsize.Enlarge(menu_marker()->width() + |
+ views::MenuButton::kMenuMarkerPaddingLeft + |
+ views::MenuButton::kMenuMarkerPaddingRight, |
+ 0); |
+ } |
+ return prefsize; |
+} |
+ |
+void PermissionMenuButton::SetText(const string16& text) { |
+ MenuButton::SetText(text); |
+ SizeToPreferredSize(); |
+} |
+ |
void PermissionMenuButton::OnMenuButtonClicked(View* source, |
const gfx::Point& point) { |
views::MenuModelAdapter menu_model_adapter(menu_model_); |
@@ -286,5 +313,14 @@ ContentSettingsType PermissionSelectorView::GetPermissionType() const { |
return menu_button_model_->site_permission(); |
} |
+void PermissionSelectorView::ChildPreferredSizeChanged(View* child) { |
+ SizeToPreferredSize(); |
+ // FIXME: The parent is only a plain |View| that is used as a |
+ // container/box/panel. The SizeToPreferredSize method of the parent is |
+ // called here directly in order not to implement a custom |View| class with |
+ // its own implementation of the ChildPreferredSizeChanged method. |
+ parent()->SizeToPreferredSize(); |
+} |
+ |
PermissionSelectorView::~PermissionSelectorView() { |
} |