summaryrefslogtreecommitdiffstats
path: root/chrome/browser/gtk
diff options
context:
space:
mode:
authorestade@chromium.org <estade@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-10-27 00:59:18 +0000
committerestade@chromium.org <estade@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-10-27 00:59:18 +0000
commita77e4b19a4055f6aac6e71fa5ed8a9fea20e7aca (patch)
tree97a426b28883386b83367d659c9a96cf40a1fd51 /chrome/browser/gtk
parent411d884b34453cf6aff733b244662fb67372858e (diff)
downloadchromium_src-a77e4b19a4055f6aac6e71fa5ed8a9fea20e7aca.zip
chromium_src-a77e4b19a4055f6aac6e71fa5ed8a9fea20e7aca.tar.gz
chromium_src-a77e4b19a4055f6aac6e71fa5ed8a9fea20e7aca.tar.bz2
[GTK] navigate on mouse up for middle clicks in bookmark bar submenu
BUG=60848 TEST=manual Review URL: http://codereview.chromium.org/4090006 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@63997 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/gtk')
-rw-r--r--chrome/browser/gtk/bookmark_menu_controller_gtk.cc16
-rw-r--r--chrome/browser/gtk/bookmark_menu_controller_gtk.h11
2 files changed, 16 insertions, 11 deletions
diff --git a/chrome/browser/gtk/bookmark_menu_controller_gtk.cc b/chrome/browser/gtk/bookmark_menu_controller_gtk.cc
index f966719..38fc8ef 100644
--- a/chrome/browser/gtk/bookmark_menu_controller_gtk.cc
+++ b/chrome/browser/gtk/bookmark_menu_controller_gtk.cc
@@ -140,7 +140,9 @@ void BookmarkMenuController::BuildMenu(const BookmarkNode* parent,
start_child_index < parent->GetChildCount());
g_signal_connect(menu, "button-press-event",
- G_CALLBACK(OnButtonPressedThunk), this);
+ G_CALLBACK(OnMenuButtonPressedOrReleasedThunk), this);
+ g_signal_connect(menu, "button-release-event",
+ G_CALLBACK(OnMenuButtonPressedOrReleasedThunk), this);
for (int i = start_child_index; i < parent->GetChildCount(); ++i) {
const BookmarkNode* node = parent->GetChild(i);
@@ -203,18 +205,22 @@ void BookmarkMenuController::BuildMenu(const BookmarkNode* parent,
}
}
-gboolean BookmarkMenuController::OnButtonPressed(
+gboolean BookmarkMenuController::OnMenuButtonPressedOrReleased(
GtkWidget* sender,
GdkEventButton* event) {
- if (event->button == 1)
+ // Handle middle mouse downs and right mouse ups.
+ if (!((event->button == 2 && event->type == GDK_BUTTON_RELEASE) ||
+ (event->button == 3 && event->type == GDK_BUTTON_PRESS))) {
return FALSE;
+ }
ignore_button_release_ = false;
GtkMenuShell* menu_shell = GTK_MENU_SHELL(sender);
// If the cursor is outside our bounds, pass this event up to the parent.
if (!gtk_util::WidgetContainsCursor(sender)) {
if (menu_shell->parent_menu_shell) {
- return OnButtonPressed(menu_shell->parent_menu_shell, event);
+ return OnMenuButtonPressedOrReleased(menu_shell->parent_menu_shell,
+ event);
} else {
// We are the top level menu; we can propagate no further.
return FALSE;
@@ -235,7 +241,7 @@ gboolean BookmarkMenuController::OnButtonPressed(
const BookmarkNode* node =
menu_item ? GetNodeFromMenuItem(menu_item) : NULL;
- if (event->button == 2 && node) {
+ if (event->button == 2 && node && node->is_folder()) {
bookmark_utils::OpenAll(parent_window_,
profile_, page_navigator_,
node, NEW_BACKGROUND_TAB);
diff --git a/chrome/browser/gtk/bookmark_menu_controller_gtk.h b/chrome/browser/gtk/bookmark_menu_controller_gtk.h
index 21f2bb9..cf8443c 100644
--- a/chrome/browser/gtk/bookmark_menu_controller_gtk.h
+++ b/chrome/browser/gtk/bookmark_menu_controller_gtk.h
@@ -68,12 +68,11 @@ class BookmarkMenuController : public BaseBookmarkModelObserver,
void NavigateToMenuItem(GtkWidget* menu_item,
WindowOpenDisposition disposition);
- // Button press and release events for a GtkMenu and GtkMenuItem,
- // respectively. We have to override these separate from OnMenuItemActivated
- // because we need to handle right clicks and opening bookmarks with
- // different dispositions.
- CHROMEGTK_CALLBACK_1(BookmarkMenuController, gboolean, OnButtonPressed,
- GdkEventButton*);
+ // Button press and release events for a GtkMenu.
+ CHROMEGTK_CALLBACK_1(BookmarkMenuController, gboolean,
+ OnMenuButtonPressedOrReleased, GdkEventButton*);
+
+ // Button release event for a GtkMenuItem.
CHROMEGTK_CALLBACK_1(BookmarkMenuController, gboolean, OnButtonReleased,
GdkEventButton*);