summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorsky@chromium.org <sky@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-10-27 23:29:21 +0000
committersky@chromium.org <sky@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-10-27 23:29:21 +0000
commit48abb0046f935690ea83d0290dc6ff0a60d99b27 (patch)
treeeac7932bef4a68aab43c67c7a64eafcb85ea91f8
parentb1d3f6c4485f7a1f0587dcb203339a45325fb419 (diff)
downloadchromium_src-48abb0046f935690ea83d0290dc6ff0a60d99b27.zip
chromium_src-48abb0046f935690ea83d0290dc6ff0a60d99b27.tar.gz
chromium_src-48abb0046f935690ea83d0290dc6ff0a60d99b27.tar.bz2
Lands http://codereview.chromium.org/291006 for Pierre:
Open all bookmarks in a bookmark menu folder according to the window disposition derived from the event flags. This is currently only possible with a middle click on the top level bookmark bar button. BUG=19597 TEST=Control click a folder on your bookmark bar, and thorougly test bookmark bar, especially with folders. Review URL: http://codereview.chromium.org/334047 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@30281 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--chrome/browser/views/bookmark_bar_view.cc12
-rw-r--r--chrome/browser/views/bookmark_menu_controller_views.cc14
-rw-r--r--views/controls/button/menu_button.cc4
-rw-r--r--views/controls/menu/menu_controller.cc6
4 files changed, 26 insertions, 10 deletions
diff --git a/chrome/browser/views/bookmark_bar_view.cc b/chrome/browser/views/bookmark_bar_view.cc
index 2e9b167..492f323c 100644
--- a/chrome/browser/views/bookmark_bar_view.cc
+++ b/chrome/browser/views/bookmark_bar_view.cc
@@ -227,9 +227,15 @@ class BookmarkFolderButton : public views::MenuButton {
}
virtual bool IsTriggerableEvent(const views::MouseEvent& e) {
- // This is hard coded to avoid potential notification on left mouse down,
- // which we want to show the menu.
- return e.IsMiddleMouseButton();
+ // Left clicks should show the menu contents and right clicks should show
+ // the context menu. They should not trigger the opening of underlying urls.
+ if (e.GetFlags() == views::MouseEvent::EF_LEFT_BUTTON_DOWN ||
+ e.GetFlags() == views::MouseEvent::EF_RIGHT_BUTTON_DOWN)
+ return false;
+
+ WindowOpenDisposition disposition(
+ event_utils::DispositionFromEventFlags(e.GetFlags()));
+ return disposition != CURRENT_TAB;
}
virtual void Paint(gfx::Canvas *canvas) {
diff --git a/chrome/browser/views/bookmark_menu_controller_views.cc b/chrome/browser/views/bookmark_menu_controller_views.cc
index 80bf767..45620f7 100644
--- a/chrome/browser/views/bookmark_menu_controller_views.cc
+++ b/chrome/browser/views/bookmark_menu_controller_views.cc
@@ -89,10 +89,16 @@ bool BookmarkMenuController::IsTriggerableEvent(const views::MouseEvent& e) {
void BookmarkMenuController::ExecuteCommand(int id, int mouse_event_flags) {
DCHECK(page_navigator_);
DCHECK(menu_id_to_node_map_.find(id) != menu_id_to_node_map_.end());
- GURL url = menu_id_to_node_map_[id]->GetURL();
- page_navigator_->OpenURL(
- url, GURL(), event_utils::DispositionFromEventFlags(mouse_event_flags),
- PageTransition::AUTO_BOOKMARK);
+
+ const BookmarkNode* node = menu_id_to_node_map_[id];
+ std::vector<const BookmarkNode*> selection;
+ selection.push_back(node);
+
+ WindowOpenDisposition initial_disposition =
+ event_utils::DispositionFromEventFlags(mouse_event_flags);
+
+ bookmark_utils::OpenAll(parent_, profile_, page_navigator_, selection,
+ initial_disposition);
}
bool BookmarkMenuController::GetDropFormats(
diff --git a/views/controls/button/menu_button.cc b/views/controls/button/menu_button.cc
index e457304..ced0942 100644
--- a/views/controls/button/menu_button.cc
+++ b/views/controls/button/menu_button.cc
@@ -189,8 +189,8 @@ bool MenuButton::OnMousePressed(const MouseEvent& e) {
void MenuButton::OnMouseReleased(const MouseEvent& e,
bool canceled) {
if (GetDragOperations(e.x(), e.y()) != DragDropTypes::DRAG_NONE &&
- state() != BS_DISABLED && !canceled && !InDrag() &&
- e.IsOnlyLeftMouseButton() && HitTest(e.location())) {
+ state() != BS_DISABLED && !canceled && !InDrag() && !IsTriggerableEvent(e)
+ && HitTest(e.location())) {
Activate();
} else {
TextButton::OnMouseReleased(e, canceled);
diff --git a/views/controls/menu/menu_controller.cc b/views/controls/menu/menu_controller.cc
index 4388d91..ef33bc7 100644
--- a/views/controls/menu/menu_controller.cc
+++ b/views/controls/menu/menu_controller.cc
@@ -439,7 +439,11 @@ void MenuController::OnMouseReleased(SubmenuView* source,
return;
}
- if (!part.is_scroll() && part.menu && !part.menu->HasSubmenu()) {
+ // We can use Ctrl+click or the middle mouse button to recursively open urls
+ // for selected folder menu items. If it's only a left click, show the
+ // contents of the folder.
+ if (!part.is_scroll() && part.menu && !(part.menu->HasSubmenu() &&
+ (event.GetFlags() == MouseEvent::EF_LEFT_BUTTON_DOWN))) {
if (part.menu->GetDelegate()->IsTriggerableEvent(event)) {
Accept(part.menu, event.GetFlags());
return;