Changeset 51364 in webkit


Ignore:
Timestamp:
Nov 24, 2009 3:46:21 PM (14 years ago)
Author:
eric@webkit.org
Message:

2009-11-24 Evan Stade <estade@chromium.org>

Reviewed by David Levin.

Linux Chromium sends too many click events
https://bugs.webkit.org/show_bug.cgi?id=31841

Manually count number of clicks for double/triple click events. This
makes us match Firefox on http://www.quirksmode.org/js/events_mouse.html
Chromium side of this patch is here:
http://codereview.chromium.org/431031/show

  • src/gtk/WebInputEventFactory.cpp: (WebKit::WebInputEventFactory::mouseEvent):
Location:
trunk/WebKit/chromium
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/WebKit/chromium/ChangeLog

    r51350 r51364  
     12009-11-24  Evan Stade  <estade@chromium.org>
     2
     3        Reviewed by David Levin.
     4
     5        Linux Chromium sends too many click events
     6        https://bugs.webkit.org/show_bug.cgi?id=31841
     7
     8        Manually count number of clicks for double/triple click events. This
     9        makes us match Firefox on http://www.quirksmode.org/js/events_mouse.html
     10        Chromium side of this patch is here:
     11        http://codereview.chromium.org/431031/show
     12
     13        * src/gtk/WebInputEventFactory.cpp:
     14        (WebKit::WebInputEventFactory::mouseEvent):
     15
    1162009-11-24  Darin Fisher  <darin@chromium.org>
    217
  • trunk/WebKit/chromium/src/gtk/WebInputEventFactory.cpp

    r50750 r51364  
    3939#include <gdk/gdk.h>
    4040#include <gdk/gdkkeysyms.h>
     41#include <gtk/gtk.h>
    4142#include <gtk/gtkversion.h>
    4243
    4344#include <wtf/Assertions.h>
     45
     46namespace {
     47
     48gint getDoubleClickTime()
     49{
     50    static GtkSettings* settings = gtk_settings_get_default();
     51    gint doubleClickTime = 250;
     52    g_object_get(G_OBJECT(settings), "gtk-double-click-time", &doubleClickTime, 0);
     53    return doubleClickTime;
     54}
     55
     56}  // namespace
    4457
    4558namespace WebKit {
     
    322335
    323336    switch (event->type) {
    324     case GDK_3BUTTON_PRESS:
    325         ++result.clickCount;
    326         // fallthrough
    327     case GDK_2BUTTON_PRESS:
    328         ++result.clickCount;
    329         // fallthrough
    330337    case GDK_BUTTON_PRESS:
    331338        result.type = WebInputEvent::MouseDown;
    332         ++result.clickCount;
    333339        break;
    334340    case GDK_BUTTON_RELEASE:
    335341        result.type = WebInputEvent::MouseUp;
    336342        break;
    337 
     343    case GDK_3BUTTON_PRESS:
     344    case GDK_2BUTTON_PRESS:
    338345    default:
    339346        ASSERT_NOT_REACHED();
    340347    };
     348
     349    if (GDK_BUTTON_PRESS == event->type) {
     350        static int numClicks = 0;
     351        static GdkWindow* eventWindow = 0;
     352        static gint lastLeftClickTime = 0;
     353
     354        gint time_diff = event->time - lastLeftClickTime;
     355        if (eventWindow == event->window && time_diff < getDoubleClickTime())
     356            numClicks++;
     357        else
     358            numClicks = 1;
     359
     360        result.clickCount = numClicks;
     361        eventWindow = event->window;
     362        lastLeftClickTime = event->time;
     363    }
    341364
    342365    result.button = WebMouseEvent::ButtonNone;
Note: See TracChangeset for help on using the changeset viewer.