diff options
author | sky@chromium.org <sky@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-02-18 16:19:42 +0000 |
---|---|---|
committer | sky@chromium.org <sky@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-02-18 16:19:42 +0000 |
commit | 1de2056a46d9e3d081ac0e0bb8ea89c0fb646975 (patch) | |
tree | a86009ae93fa5aa8cba661070d93c378676f3f21 /views | |
parent | b5c72b82b5b19a3268ea5df60b79322f7f779027 (diff) | |
download | chromium_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.cc | 8 | ||||
-rw-r--r-- | views/controls/menu/submenu_view.cc | 10 |
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(); |