| Index: chrome/browser/gtk/back_forward_button_gtk.cc
|
| ===================================================================
|
| --- chrome/browser/gtk/back_forward_button_gtk.cc (revision 18718)
|
| +++ chrome/browser/gtk/back_forward_button_gtk.cc (working copy)
|
| @@ -12,6 +12,7 @@
|
| #include "chrome/browser/browser.h"
|
| #include "chrome/browser/gtk/back_forward_menu_model_gtk.h"
|
| #include "chrome/browser/gtk/menu_gtk.h"
|
| +#include "chrome/common/gtk_util.h"
|
| #include "grit/generated_resources.h"
|
| #include "grit/theme_resources.h"
|
|
|
| @@ -21,6 +22,7 @@
|
| BackForwardButtonGtk::BackForwardButtonGtk(Browser* browser, bool is_forward)
|
| : browser_(browser),
|
| is_forward_(is_forward),
|
| + last_release_event_flags_(0),
|
| show_menu_factory_(this) {
|
| int normal, active, highlight, depressed, tooltip;
|
| if (is_forward) {
|
| @@ -49,6 +51,8 @@
|
| G_CALLBACK(OnClick), this);
|
| g_signal_connect(widget(), "button-press-event",
|
| G_CALLBACK(OnButtonPress), this);
|
| + g_signal_connect(widget(), "button-release-event",
|
| + G_CALLBACK(OnButtonRelease), this);
|
| gtk_widget_add_events(widget(), GDK_POINTER_MOTION_MASK);
|
| g_signal_connect(widget(), "motion-notify-event",
|
| G_CALLBACK(OnMouseMove), this);
|
| @@ -57,6 +61,8 @@
|
| // default of right aligned.
|
| g_object_set_data(G_OBJECT(widget()), "left-align-popup",
|
| reinterpret_cast<void*>(true));
|
| +
|
| + gtk_util::SetButtonTriggersNavigation(widget());
|
| }
|
|
|
| BackForwardButtonGtk::~BackForwardButtonGtk() {
|
| @@ -83,13 +89,18 @@
|
| BackForwardButtonGtk* button) {
|
| button->show_menu_factory_.RevokeAll();
|
|
|
| - button->browser_->ExecuteCommand(button->is_forward_ ?
|
| - IDC_FORWARD : IDC_BACK);
|
| + DCHECK(button->last_release_event_flags_ != 0);
|
| + button->browser_->ExecuteCommandWithDisposition(
|
| + button->is_forward_ ? IDC_FORWARD : IDC_BACK,
|
| + event_utils::DispositionFromEventFlags(
|
| + button->last_release_event_flags_));
|
| }
|
|
|
| // static
|
| gboolean BackForwardButtonGtk::OnButtonPress(GtkWidget* widget,
|
| GdkEventButton* event, BackForwardButtonGtk* button) {
|
| + button->last_release_event_flags_ = 0;
|
| +
|
| if (event->button != 1)
|
| return FALSE;
|
|
|
| @@ -102,6 +113,13 @@
|
| }
|
|
|
| // static
|
| +gboolean BackForwardButtonGtk::OnButtonRelease(GtkWidget* widget,
|
| + GdkEventButton* event, BackForwardButtonGtk* button) {
|
| + button->last_release_event_flags_ = event->state;
|
| + return FALSE;
|
| +}
|
| +
|
| +// static
|
| gboolean BackForwardButtonGtk::OnMouseMove(GtkWidget* widget,
|
| GdkEventMotion* event, BackForwardButtonGtk* button) {
|
| // If we aren't waiting to show the back forward menu, do nothing.
|
|
|