Index: views/controls/menu/submenu_view.cc |
diff --git a/views/controls/menu/submenu_view.cc b/views/controls/menu/submenu_view.cc |
index 52c91019ed0961b386499b53e27382f4357b9b7a..d7cf64cf390d3841d1249721481114691c87021d 100644 |
--- a/views/controls/menu/submenu_view.cc |
+++ b/views/controls/menu/submenu_view.cc |
@@ -5,6 +5,7 @@ |
#include "views/controls/menu/submenu_view.h" |
#include "gfx/canvas.h" |
+#include "views/controls/menu/menu_config.h" |
#include "views/controls/menu/menu_controller.h" |
#include "views/controls/menu/menu_host.h" |
#include "views/controls/menu/menu_scroll_view_container.h" |
@@ -26,7 +27,8 @@ SubmenuView::SubmenuView(MenuItemView* parent) |
host_(NULL), |
drop_item_(NULL), |
drop_position_(MenuDelegate::DROP_NONE), |
- scroll_view_container_(NULL) { |
+ scroll_view_container_(NULL), |
+ max_accelerator_width_(0) { |
DCHECK(parent); |
// We'll delete ourselves, otherwise the ScrollView would delete us on close. |
set_parent_owned(false); |
@@ -91,6 +93,7 @@ gfx::Size SubmenuView::GetPreferredSize() { |
if (GetChildViewCount() == 0) |
return gfx::Size(); |
+ max_accelerator_width_ = 0; |
int max_width = 0; |
int height = 0; |
for (int i = 0; i < GetChildViewCount(); ++i) { |
@@ -98,9 +101,19 @@ gfx::Size SubmenuView::GetPreferredSize() { |
gfx::Size child_pref_size = child->GetPreferredSize(); |
max_width = std::max(max_width, child_pref_size.width()); |
height += child_pref_size.height(); |
+ if (child->GetID() == MenuItemView::kMenuItemViewID) { |
+ MenuItemView* menu = static_cast<MenuItemView*>(child); |
+ max_accelerator_width_ = |
+ std::max(max_accelerator_width_, menu->GetAcceleratorTextWidth()); |
+ } |
+ } |
+ if (max_accelerator_width_ > 0) { |
+ max_accelerator_width_ += |
+ MenuConfig::instance().label_to_accelerator_padding; |
} |
gfx::Insets insets = GetInsets(); |
- return gfx::Size(max_width + insets.width(), height + insets.height()); |
+ return gfx::Size(max_width + max_accelerator_width_ + insets.width(), |
+ height + insets.height()); |
} |
void SubmenuView::DidChangeBounds(const gfx::Rect& previous, |