summaryrefslogtreecommitdiffstats
path: root/ui/views
diff options
context:
space:
mode:
authoryoichio@chromium.org <yoichio@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-03-14 17:24:08 +0000
committeryoichio@chromium.org <yoichio@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-03-14 17:24:08 +0000
commitc4bf51469712fc583dc73d9a02019f3411216e85 (patch)
treedd5d95b7eb05bcf87e14819cc618353257befac5 /ui/views
parent1fd257aa8a206d829eee69eb6bfd76702b357980 (diff)
downloadchromium_src-c4bf51469712fc583dc73d9a02019f3411216e85.zip
chromium_src-c4bf51469712fc583dc73d9a02019f3411216e85.tar.gz
chromium_src-c4bf51469712fc583dc73d9a02019f3411216e85.tar.bz2
bookmarks: Show context menu on empty bookmark folder.
BUG=110939 TEST=interactive_ui_tests Review URL: https://chromiumcodereview.appspot.com/12558006 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@188110 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ui/views')
-rw-r--r--ui/views/controls/menu/menu_controller.cc14
-rw-r--r--ui/views/controls/menu/menu_host_root_view.cc11
-rw-r--r--ui/views/controls/menu/menu_host_root_view.h3
3 files changed, 24 insertions, 4 deletions
diff --git a/ui/views/controls/menu/menu_controller.cc b/ui/views/controls/menu/menu_controller.cc
index c4e19f0..d9887bf 100644
--- a/ui/views/controls/menu/menu_controller.cc
+++ b/ui/views/controls/menu/menu_controller.cc
@@ -462,9 +462,17 @@ void MenuController::OnMouseReleased(SubmenuView* source,
possible_drag_ = false;
DCHECK(blocking_run_);
MenuPart part = GetMenuPart(source, event.location());
- if (event.IsRightMouseButton() && (part.type == MenuPart::MENU_ITEM &&
- part.menu)) {
- if (ShowContextMenu(part.menu, source, event))
+ if (event.IsRightMouseButton() && part.type == MenuPart::MENU_ITEM) {
+ MenuItemView* menu = part.menu;
+ // |menu| is NULL means this event is from an empty menu or a separator.
+ // If it is from an empty menu, use parent context menu instead of that.
+ if (menu == NULL &&
+ part.submenu->child_count() == 1 &&
+ part.submenu->child_at(0)->id()
+ == views::MenuItemView::kEmptyMenuItemViewID)
+ menu = part.parent;
+
+ if (menu != NULL && ShowContextMenu(menu, source, event))
return;
}
diff --git a/ui/views/controls/menu/menu_host_root_view.cc b/ui/views/controls/menu/menu_host_root_view.cc
index fd165a8..0d903dc 100644
--- a/ui/views/controls/menu/menu_host_root_view.cc
+++ b/ui/views/controls/menu/menu_host_root_view.cc
@@ -5,6 +5,7 @@
#include "ui/views/controls/menu/menu_host_root_view.h"
#include "ui/views/controls/menu/menu_controller.h"
+#include "ui/views/controls/menu/menu_item_view.h"
#include "ui/views/controls/menu/submenu_view.h"
namespace views {
@@ -19,7 +20,9 @@ MenuHostRootView::MenuHostRootView(Widget* widget,
bool MenuHostRootView::OnMousePressed(const ui::MouseEvent& event) {
forward_drag_to_menu_controller_ =
!GetLocalBounds().Contains(event.location()) ||
- !RootView::OnMousePressed(event);
+ !RootView::OnMousePressed(event) ||
+ DoesEventTargetEmptyMenuItem(event);
+
if (forward_drag_to_menu_controller_ && GetMenuController())
GetMenuController()->OnMousePressed(submenu_, event);
return true;
@@ -77,4 +80,10 @@ MenuController* MenuHostRootView::GetMenuController() {
return submenu_ ? submenu_->GetMenuItem()->GetMenuController() : NULL;
}
+bool MenuHostRootView::DoesEventTargetEmptyMenuItem(
+ const ui::MouseEvent& event) {
+ View* view = GetEventHandlerForPoint(event.location());
+ return view && view->id() == MenuItemView::kEmptyMenuItemViewID;
+}
+
} // namespace views
diff --git a/ui/views/controls/menu/menu_host_root_view.h b/ui/views/controls/menu/menu_host_root_view.h
index 2b8d6ba5..16f59ef 100644
--- a/ui/views/controls/menu/menu_host_root_view.h
+++ b/ui/views/controls/menu/menu_host_root_view.h
@@ -38,6 +38,9 @@ class MenuHostRootView : public internal::RootView {
// Returns the MenuController for this MenuHostRootView.
MenuController* GetMenuController();
+ // Returns true if event targets EmptyMenu.
+ bool DoesEventTargetEmptyMenuItem(const ui::MouseEvent& event);
+
// The SubmenuView we contain.
SubmenuView* submenu_;