From 95a46221f3add0338d0f5c53b92ef4e94b5e30e0 Mon Sep 17 00:00:00 2001 From: "estade@chromium.org" Date: Thu, 12 Nov 2009 21:53:06 +0000 Subject: Fix bug where crossing events (mouse enter, mouse leave) were being sent when the mouse button is down, causing duplicate events that caused serious problems with drag and drop of selections in gmail, plus other problems. The crossing events should still be sent when the mouse button is not down. BUG=27264 TEST=confirmed that gmail bug is no longer reproducible; trybot succeeded patch by Dominic Mazzoni original review: http://codereview.chromium.org/387038 Review URL: http://codereview.chromium.org/389024 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@31835 0039d316-1c4b-4281-b951-d872f2087c98 --- .../renderer_host/render_widget_host_view_gtk.cc | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/chrome/browser/renderer_host/render_widget_host_view_gtk.cc b/chrome/browser/renderer_host/render_widget_host_view_gtk.cc index e5fe05e..f91a18c 100644 --- a/chrome/browser/renderer_host/render_widget_host_view_gtk.cc +++ b/chrome/browser/renderer_host/render_widget_host_view_gtk.cc @@ -257,8 +257,22 @@ class RenderWidgetHostViewGtkWidget { static gboolean CrossingEvent(GtkWidget* widget, GdkEventCrossing* event, RenderWidgetHostViewGtk* host_view) { - host_view->GetRenderWidgetHost()->ForwardMouseEvent( - WebInputEventFactory::mouseEvent(event)); + const int any_button_mask = + GDK_BUTTON1_MASK | + GDK_BUTTON2_MASK | + GDK_BUTTON3_MASK | + GDK_BUTTON4_MASK | + GDK_BUTTON5_MASK; + + // Only forward crossing events if the mouse button is not down. + // (When the mouse button is down, the proper events are already being + // sent by ButtonPressReleaseEvent and MouseMoveEvent, above, and if we + // additionally send this crossing event with the state indicating the + // button is down, it causes problems with drag and drop in WebKit.) + if (!(event->state & any_button_mask)) { + host_view->GetRenderWidgetHost()->ForwardMouseEvent( + WebInputEventFactory::mouseEvent(event)); + } return FALSE; } -- cgit v1.1