Index: chrome/browser/ui/views/website_settings/permission_selector_row.cc |
diff --git a/chrome/browser/ui/views/website_settings/permission_selector_row.cc b/chrome/browser/ui/views/website_settings/permission_selector_row.cc |
index 6554daec10b2769623e71d0723b3d44fcfe9f88c..7fca592e5f86dfbf5df8e27face887571a529fc3 100644 |
--- a/chrome/browser/ui/views/website_settings/permission_selector_row.cc |
+++ b/chrome/browser/ui/views/website_settings/permission_selector_row.cc |
@@ -26,11 +26,6 @@ |
#include "ui/views/view.h" |
#include "ui/views/widget/widget.h" |
-namespace { |
-// Minimum distance between the label and its corresponding menu. |
-const int kMinSeparationBetweenLabelAndMenu = 16; |
-} // namespace |
- |
namespace internal { |
// The |PermissionMenuButton| provides a menu for selecting a setting a |
@@ -74,6 +69,12 @@ PermissionMenuButton::PermissionMenuButton(const base::string16& text, |
PermissionMenuModel* model, |
bool show_menu_marker) |
: MenuButton(text, this, show_menu_marker), menu_model_(model) { |
+ // Since PermissionMenuButtons are added to a GridLayout, they are not always |
+ // sized to their preferred size. Disclosure arrows are always right-aligned, |
+ // so if the text is not right-aligned, awkward space appears between the text |
+ // and the arrow. |
+ SetHorizontalAlignment(gfx::ALIGN_RIGHT); |
+ |
// Update the themed border before the NativeTheme is applied. Usually this |
// happens in a call to LabelButton::OnNativeThemeChanged(). However, if |
// PermissionMenuButton called that from its override, the NativeTheme would |
@@ -232,39 +233,19 @@ void PermissionCombobox::OnPerformAction(Combobox* combobox) { |
PermissionSelectorRow::PermissionSelectorRow( |
Profile* profile, |
const GURL& url, |
- const WebsiteSettingsUI::PermissionInfo& permission) |
+ const WebsiteSettingsUI::PermissionInfo& permission, |
+ views::GridLayout* layout) |
: profile_(profile), icon_(NULL), menu_button_(NULL), combobox_(NULL) { |
- views::GridLayout* layout = new views::GridLayout(this); |
- SetLayoutManager(layout); |
- const int column_set_id = 0; |
- views::ColumnSet* column_set = layout->AddColumnSet(column_set_id); |
- column_set->AddColumn(views::GridLayout::FILL, views::GridLayout::FILL, 0, |
- views::GridLayout::FIXED, kPermissionIconColumnWidth, |
- 0); |
- column_set->AddPaddingColumn(0, kPermissionIconMarginLeft); |
- column_set->AddColumn(views::GridLayout::FILL, views::GridLayout::FILL, 0, |
- views::GridLayout::USE_PREF, 0, 0); |
- column_set->AddPaddingColumn(1, kMinSeparationBetweenLabelAndMenu); |
- column_set->AddColumn(views::GridLayout::TRAILING, views::GridLayout::FILL, 0, |
- views::GridLayout::USE_PREF, 0, 0); |
- |
- layout->StartRow(1, column_set_id); |
// Create the permission icon. |
icon_ = new NonAccessibleImageView(); |
const gfx::Image& image = WebsiteSettingsUI::GetPermissionIcon(permission); |
icon_->SetImage(image.ToImageSkia()); |
- layout->AddView(icon_, |
- 1, |
- 1, |
- views::GridLayout::CENTER, |
+ layout->AddView(icon_, 1, 1, views::GridLayout::CENTER, |
views::GridLayout::CENTER); |
// Create the label that displays the permission type. |
- views::Label* label = new views::Label( |
+ label_ = new views::Label( |
WebsiteSettingsUI::PermissionTypeToUIString(permission.type)); |
- layout->AddView(label, |
- 1, |
- 1, |
- views::GridLayout::LEADING, |
+ layout->AddView(label_, 1, 1, views::GridLayout::LEADING, |
views::GridLayout::CENTER); |
// Create the menu model. |
menu_model_.reset(new PermissionMenuModel( |
@@ -290,10 +271,6 @@ void PermissionSelectorRow::AddObserver( |
observer_list_.AddObserver(observer); |
} |
-void PermissionSelectorRow::ChildPreferredSizeChanged(View* child) { |
- Layout(); |
-} |
- |
PermissionSelectorRow::~PermissionSelectorRow() { |
// Gross. On paper the Combobox and the ComboboxModelAdapter are both owned by |
// this class, but actually, the Combobox is owned by View and will be |
@@ -306,7 +283,7 @@ PermissionSelectorRow::~PermissionSelectorRow() { |
// Technically, the MenuButton has the same problem, but MenuButton doesn't |
// use its model in its destructor. |
if (combobox_) |
- RemoveChildView(combobox_); |
+ combobox_->parent()->RemoveChildView(combobox_); |
} |
void PermissionSelectorRow::InitializeMenuButtonView( |
@@ -352,6 +329,10 @@ void PermissionSelectorRow::PermissionChanged( |
profile_, permission.type, permission.setting, |
permission.default_setting, content_settings::SETTING_SOURCE_USER)); |
menu_button_->SizeToPreferredSize(); |
+ // Re-layout will be done at the |WebsiteSettingsPopupView| level, since |
+ // that view may need to resize itself to accomodate the new sizes of its |
+ // contents. |
+ menu_button_->InvalidateLayout(); |
} else if (combobox_) { |
bool use_default = permission.setting == CONTENT_SETTING_DEFAULT; |
combobox_->UpdateSelectedIndex(use_default); |
@@ -360,3 +341,11 @@ void PermissionSelectorRow::PermissionChanged( |
for (PermissionSelectorRowObserver& observer : observer_list_) |
observer.OnPermissionChanged(permission); |
} |
+ |
+views::View* PermissionSelectorRow::button() { |
+ // These casts are required because the two arms of a ?: cannot have different |
+ // types T1 and T2, even if the resulting value of the ?: is about to be a T |
+ // and T1 and T2 are both subtypes of T. |
+ return menu_button_ ? static_cast<views::View*>(menu_button_) |
+ : static_cast<views::View*>(combobox_); |
+} |