summaryrefslogtreecommitdiffstats
path: root/views
diff options
context:
space:
mode:
authorsky@chromium.org <sky@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-02-18 16:19:42 +0000
committersky@chromium.org <sky@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-02-18 16:19:42 +0000
commit1de2056a46d9e3d081ac0e0bb8ea89c0fb646975 (patch)
treea86009ae93fa5aa8cba661070d93c378676f3f21 /views
parentb5c72b82b5b19a3268ea5df60b79322f7f779027 (diff)
downloadchromium_src-1de2056a46d9e3d081ac0e0bb8ea89c0fb646975.zip
chromium_src-1de2056a46d9e3d081ac0e0bb8ea89c0fb646975.tar.gz
chromium_src-1de2056a46d9e3d081ac0e0bb8ea89c0fb646975.tar.bz2
Fixes bug where deleting bookmarks in bookmarks menu wouldn't always
trigger a redraw of the menu. BUG=35570 TEST=see bug Review URL: http://codereview.chromium.org/626012 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@39363 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'views')
-rw-r--r--views/controls/menu/menu_item_view.cc8
-rw-r--r--views/controls/menu/submenu_view.cc10
2 files changed, 17 insertions, 1 deletions
diff --git a/views/controls/menu/menu_item_view.cc b/views/controls/menu/menu_item_view.cc
index 20ee28e..2c243c4 100644
--- a/views/controls/menu/menu_item_view.cc
+++ b/views/controls/menu/menu_item_view.cc
@@ -256,6 +256,14 @@ void MenuItemView::ChildrenChanged() {
AddEmptyMenus();
controller->MenuChildrenChanged(this);
+
+ if (submenu_) {
+ // Force a paint and layout. This handles the case of the top level window's
+ // size remaining the same, resulting in no change to the submenu's size and
+ // no layout.
+ submenu_->Layout();
+ submenu_->SchedulePaint();
+ }
}
MenuItemView::MenuItemView(MenuItemView* parent,
diff --git a/views/controls/menu/submenu_view.cc b/views/controls/menu/submenu_view.cc
index 0170e0c..f89f51c 100644
--- a/views/controls/menu/submenu_view.cc
+++ b/views/controls/menu/submenu_view.cc
@@ -70,7 +70,15 @@ void SubmenuView::Layout() {
View* parent = GetParent();
if (!parent)
return;
- SetBounds(x(), y(), parent->width(), GetPreferredSize().height());
+
+ // Use our current y, unless it means part of the menu isn't visible anymore.
+ int pref_height = GetPreferredSize().height();
+ int new_y;
+ if (pref_height > parent->height())
+ new_y = std::max(parent->height() - pref_height, y());
+ else
+ new_y = 0;
+ SetBounds(x(), new_y, parent->width(), pref_height);
gfx::Insets insets = GetInsets();
int x = insets.left();