diff options
Diffstat (limited to 'chrome/browser/gtk')
-rw-r--r-- | chrome/browser/gtk/bookmark_menu_controller_gtk.cc | 16 | ||||
-rw-r--r-- | chrome/browser/gtk/bookmark_menu_controller_gtk.h | 11 |
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*); |