Changeset 65915 in webkit


Ignore:
Timestamp:
Aug 24, 2010 11:08:15 AM (14 years ago)
Author:
Martin Robinson
Message:

2010-08-24 Martin Robinson <mrobinson@igalia.com>

Reviewed by Xan Lopez.

[GTK] GTK3: EventSender and API tests should use gdk_event_new when synthesizing events
https://bugs.webkit.org/show_bug.cgi?id=44534

  • tests/testcopyandpaste.c: (runPasteTestCallback): Switch to using gdk_event_new and also reference the GdkWindow. when setting it on the event. It is dereferenced by gdk_event_free(...).
  • tests/testhittestresult.c: (load_status_cb): Switch to using gdk_event_new.

2010-08-24 Martin Robinson <mrobinson@igalia.com>

Reviewed by Xan Lopez.

[GTK] GTK3: EventSender and API tests should use gdk_event_new when synthesizing events
https://bugs.webkit.org/show_bug.cgi?id=44534

  • DumpRenderTree/gtk/EventSender.cpp: (prepareMouseButtonEvent): Use gdk_event_new and reference the reference the GdkWindow when setting it on the event. It is dereferenced by gdk_event_free(...). (contextClickCallback): Ditto. (mouseDownCallback): Ditto. (mouseUpCallback): Ditto. (mouseMoveToCallback): Ditto. (mouseWheelToCallback): Ditto. (sendOrQueueEvent): Take a GdkEvent* instead of a GdkEvent. (dispatchEvent): Ditto. Also free the event when we are done with it. (keyDownCallback): Use gdk_event_new and reference the GdkWindow.
Location:
trunk
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/WebKit/gtk/ChangeLog

    r65899 r65915  
     12010-08-24  Martin Robinson  <mrobinson@igalia.com>
     2
     3        Reviewed by Xan Lopez.
     4
     5        [GTK] GTK3: EventSender and API tests should use gdk_event_new when synthesizing events
     6        https://bugs.webkit.org/show_bug.cgi?id=44534
     7
     8        * tests/testcopyandpaste.c:
     9        (runPasteTestCallback): Switch to using gdk_event_new and also reference the GdkWindow.
     10        when setting it on the event. It is dereferenced by gdk_event_free(...).
     11        * tests/testhittestresult.c:
     12        (load_status_cb): Switch to using gdk_event_new.
     13
    1142010-08-24  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>
    215
  • trunk/WebKit/gtk/tests/testcopyandpaste.c

    r62002 r65915  
    129129{
    130130    // Simulate a paste keyboard sequence.
    131     GdkEvent event;
    132     memset(&event, 0, sizeof(event));
    133     event.key.keyval = gdk_unicode_to_keyval('v');
    134     event.key.state = GDK_CONTROL_MASK;
    135     event.key.window = gtk_widget_get_window(GTK_WIDGET(currentFixture->webView));
     131    GdkEvent* event = gdk_event_new(GDK_KEY_PRESS);
     132    event->key.keyval = gdk_unicode_to_keyval('v');
     133    event->key.state = GDK_CONTROL_MASK;
     134    event->key.window = gtk_widget_get_window(GTK_WIDGET(currentFixture->webView));
     135    g_object_ref(event->key.window);
    136136    GdkKeymapKey* keys;
    137137    gint n_keys;
    138     if (gdk_keymap_get_entries_for_keyval(gdk_keymap_get_default(), event.key.keyval, &keys, &n_keys)) {
    139         event.key.hardware_keycode = keys[0].keycode;
     138    if (gdk_keymap_get_entries_for_keyval(gdk_keymap_get_default(), event->key.keyval, &keys, &n_keys)) {
     139        event->key.hardware_keycode = keys[0].keycode;
    140140        g_free(keys);
    141141    }
    142     event.key.type = GDK_KEY_PRESS;
    143     gtk_main_do_event(&event);
    144     event.key.type = GDK_KEY_RELEASE;
    145     gtk_main_do_event(&event);
     142
     143    gtk_main_do_event(event);
     144    event->key.type = GDK_KEY_RELEASE;
     145    gtk_main_do_event(event);
     146    gdk_event_free(event);
    146147
    147148    JSStringRef scriptString = JSStringCreateWithUTF8CString("document.body.innerHTML;");
  • trunk/WebKit/gtk/tests/testhittestresult.c

    r60834 r65915  
    8282        WebKitHitTestResult* result;
    8383        guint context;
    84         GdkEventButton event;
     84        GdkEvent* event = gdk_event_new(GDK_BUTTON_PRESS);
    8585        WebKitDOMNode* node;
    8686
    87         event.type = GDK_BUTTON_PRESS;
    8887        /* Close enough to 0,0 */
    89         event.x = 5;
    90         event.y = 5;
     88        event->button.x = 5;
     89        event->button.y = 5;
    9190
    92         result = webkit_web_view_get_hit_test_result(webView, &event);
     91        result = webkit_web_view_get_hit_test_result(webView, (GdkEventButton*) event);
     92        gdk_event_free(event);
    9393        g_assert(result);
    9494
  • trunk/WebKitTools/ChangeLog

    r65883 r65915  
     12010-08-24  Martin Robinson  <mrobinson@igalia.com>
     2
     3        Reviewed by Xan Lopez.
     4
     5        [GTK] GTK3: EventSender and API tests should use gdk_event_new when synthesizing events
     6        https://bugs.webkit.org/show_bug.cgi?id=44534
     7
     8        * DumpRenderTree/gtk/EventSender.cpp:
     9        (prepareMouseButtonEvent): Use gdk_event_new and reference the reference the GdkWindow
     10        when setting it on the event. It is dereferenced by gdk_event_free(...).
     11        (contextClickCallback): Ditto.
     12        (mouseDownCallback): Ditto.
     13        (mouseUpCallback): Ditto.
     14        (mouseMoveToCallback): Ditto.
     15        (mouseWheelToCallback): Ditto.
     16        (sendOrQueueEvent): Take a GdkEvent* instead of a GdkEvent.
     17        (dispatchEvent): Ditto. Also free the event when we are done with it.
     18        (keyDownCallback): Use gdk_event_new and reference the GdkWindow.
     19
    1202010-08-24  Andras Becsi  <abecsi@webkit.org>
    221
  • trunk/WebKitTools/DumpRenderTree/gtk/EventSender.cpp

    r65841 r65915  
    6464
    6565struct DelayedMessage {
    66     GdkEvent event;
     66    GdkEvent* event;
    6767    gulong delay;
    6868};
     
    8383};
    8484
    85 static void sendOrQueueEvent(GdkEvent, bool = true);
    86 static void dispatchEvent(GdkEvent event);
     85static void sendOrQueueEvent(GdkEvent*, bool = true);
     86static void dispatchEvent(GdkEvent* event);
    8787static guint getStateFlags();
    8888
     
    153153
    154154    // fast/events/mouse-click-events expects the 4th button
    155     // to be event.button = 1, so send a middle-button event.
     155    // to be event->button = 1, so send a middle-button event.
    156156    else if (eventSenderButtonNumber == 3)
    157157        gdkButtonNumber = 2;
    158158
    159     memset(event, 0, sizeof(event));
    160159    event->button.button = gdkButtonNumber;
    161160    event->button.x = lastMousePositionX;
    162161    event->button.y = lastMousePositionY;
    163162    event->button.window = gtk_widget_get_window(GTK_WIDGET(view));
     163    g_object_ref(event->button.window);
    164164    event->button.device = gdk_device_get_core_pointer();
    165165    event->button.state = getStateFlags();
     
    177177static JSValueRef contextClickCallback(JSContextRef context, JSObjectRef function, JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
    178178{
    179     GdkEvent event;
    180     if (!prepareMouseButtonEvent(&event, 2))
    181         return JSValueMakeUndefined(context);
    182 
    183     event.type = GDK_BUTTON_PRESS;
     179    GdkEvent* event = gdk_event_new(GDK_BUTTON_PRESS);
     180    if (!prepareMouseButtonEvent(event, 2))
     181        return JSValueMakeUndefined(context);
     182
    184183    sendOrQueueEvent(event);
    185     event.type = GDK_BUTTON_RELEASE;
     184    event->type = GDK_BUTTON_RELEASE;
    186185    sendOrQueueEvent(event);
    187186
     
    208207    }
    209208
    210     GdkEvent event;
    211     if (!prepareMouseButtonEvent(&event, button))
    212         return JSValueMakeUndefined(context);
    213 
    214     buttonCurrentlyDown = event.button.button;
     209    GdkEvent* event = gdk_event_new(GDK_BUTTON_PRESS);
     210    if (!prepareMouseButtonEvent(event, button))
     211        return JSValueMakeUndefined(context);
     212
     213    buttonCurrentlyDown = event->button.button;
    215214
    216215    // Normally GDK will send both GDK_BUTTON_PRESS and GDK_2BUTTON_PRESS for
     
    222221    // appropriate events onto the event queue and this work-around should be
    223222    // removed.
    224     updateClickCount(event.button.button);
     223    updateClickCount(event->button.button);
    225224    if (clickCount == 2)
    226         event.type = GDK_2BUTTON_PRESS;
     225        event->type = GDK_2BUTTON_PRESS;
    227226    else if (clickCount == 3)
    228         event.type = GDK_3BUTTON_PRESS;
    229     else
    230         event.type = GDK_BUTTON_PRESS;
     227        event->type = GDK_3BUTTON_PRESS;
    231228
    232229    sendOrQueueEvent(event);
     
    253250    }
    254251
    255     GdkEvent event;
    256     if (!prepareMouseButtonEvent(&event, button))
     252    GdkEvent* event = gdk_event_new(GDK_BUTTON_RELEASE);
     253    if (!prepareMouseButtonEvent(event, button))
    257254        return JSValueMakeUndefined(context);
    258255
     
    263260    buttonCurrentlyDown = 0;
    264261
    265     event.type = GDK_BUTTON_RELEASE;
    266262    sendOrQueueEvent(event);
    267263    return JSValueMakeUndefined(context);
     
    282278    g_return_val_if_fail((!exception || !*exception), JSValueMakeUndefined(context));
    283279
    284     GdkEvent event;
    285     memset(&event, 0, sizeof(event));
    286     event.type = GDK_MOTION_NOTIFY;
    287     event.motion.x = lastMousePositionX;
    288     event.motion.y = lastMousePositionY;
    289 
    290     event.motion.time = GDK_CURRENT_TIME;
    291     event.motion.window = gtk_widget_get_window(GTK_WIDGET(view));
    292     event.motion.device = gdk_device_get_core_pointer();
    293     event.motion.state = getStateFlags();
    294     event.motion.axes = 0;
     280    GdkEvent* event = gdk_event_new(GDK_MOTION_NOTIFY);
     281    event->motion.x = lastMousePositionX;
     282    event->motion.y = lastMousePositionY;
     283
     284    event->motion.time = GDK_CURRENT_TIME;
     285    event->motion.window = gtk_widget_get_window(GTK_WIDGET(view));
     286    g_object_ref(event->motion.window);
     287    event->motion.device = gdk_device_get_core_pointer();
     288    event->motion.state = getStateFlags();
     289    event->motion.axes = 0;
    295290
    296291    int xRoot, yRoot;
    297292    gdk_window_get_root_coords(gtk_widget_get_window(GTK_WIDGET(view)), lastMousePositionX, lastMousePositionY, &xRoot, &yRoot);
    298     event.motion.x_root = xRoot;
    299     event.motion.y_root = yRoot;
     293    event->motion.x_root = xRoot;
     294    event->motion.y_root = yRoot;
    300295
    301296    sendOrQueueEvent(event, false);
     
    320315    g_return_val_if_fail((!vertical || !horizontal), JSValueMakeUndefined(context));
    321316
    322     GdkEvent event;
    323     event.type = GDK_SCROLL;
    324     event.scroll.x = lastMousePositionX;
    325     event.scroll.y = lastMousePositionY;
    326     event.scroll.time = GDK_CURRENT_TIME;
    327     event.scroll.window = gtk_widget_get_window(GTK_WIDGET(view));
     317    GdkEvent* event = gdk_event_new(GDK_SCROLL);
     318    event->scroll.x = lastMousePositionX;
     319    event->scroll.y = lastMousePositionY;
     320    event->scroll.time = GDK_CURRENT_TIME;
     321    event->scroll.window = gtk_widget_get_window(GTK_WIDGET(view));
     322    g_object_ref(event->scroll.window);
    328323
    329324    if (horizontal < 0)
    330         event.scroll.direction = GDK_SCROLL_LEFT;
     325        event->scroll.direction = GDK_SCROLL_LEFT;
    331326    else if (horizontal > 0)
    332         event.scroll.direction = GDK_SCROLL_RIGHT;
     327        event->scroll.direction = GDK_SCROLL_RIGHT;
    333328    else if (vertical < 0)
    334         event.scroll.direction = GDK_SCROLL_UP;
     329        event->scroll.direction = GDK_SCROLL_UP;
    335330    else if (vertical > 0)
    336         event.scroll.direction = GDK_SCROLL_DOWN;
     331        event->scroll.direction = GDK_SCROLL_DOWN;
    337332    else
    338333        g_assert_not_reached();
     
    351346}
    352347
    353 static void sendOrQueueEvent(GdkEvent event, bool shouldReplaySavedEvents)
     348static void sendOrQueueEvent(GdkEvent* event, bool shouldReplaySavedEvents)
    354349{
    355350    // Mouse move events are queued if the previous event was queued or if a
     
    367362}
    368363
    369 static void dispatchEvent(GdkEvent event)
     364static void dispatchEvent(GdkEvent* event)
    370365{
    371366    webkit_web_frame_layout(mainFrame);
    372367    WebKitWebView* view = webkit_web_frame_get_web_view(mainFrame);
    373     if (!view)
     368    if (!view) {
     369        gdk_event_free(event);
    374370        return;
    375 
    376     gtk_main_do_event(&event);
    377 
    378     if (!currentDragSourceContext)
     371    }
     372
     373    gtk_main_do_event(event);
     374
     375    if (!currentDragSourceContext) {
     376        gdk_event_free(event);
    379377        return;
    380 
    381     if (event.type == GDK_MOTION_NOTIFY) {
     378    }
     379
     380    if (event->type == GDK_MOTION_NOTIFY) {
    382381        // WebKit has called gtk_drag_start(), but because the main loop isn't
    383382        // running GDK internals don't know that the drag has started yet. Pump
     
    390389        GdkWindow* parentWidgetWindow = gtk_widget_get_window(parentWidget);
    391390        gdk_drag_motion(currentDragSourceContext, parentWidgetWindow, GDK_DRAG_PROTO_XDND,
    392             event.motion.x_root, event.motion.y_root,
     391            event->motion.x_root, event->motion.y_root,
    393392            gdk_drag_context_get_selected_action(currentDragSourceContext),
    394393            gdk_drag_context_get_actions(currentDragSourceContext),
    395394            GDK_CURRENT_TIME);
    396395
    397     } else if (currentDragSourceContext && event.type == GDK_BUTTON_RELEASE) {
     396    } else if (currentDragSourceContext && event->type == GDK_BUTTON_RELEASE) {
    398397        // We've released the mouse button, we should just be able to spin the
    399398        // event loop here and have GTK+ send the appropriate notifications for
     
    403402    }
    404403
     404    gdk_event_free(event);
    405405}
    406406
     
    552552
    553553    // create and send the event
    554     GdkEvent event;
    555     memset(&event, 0, sizeof(event));
    556     event.key.keyval = gdkKeySym;
    557     event.key.state = state;
    558     event.key.window = gtk_widget_get_window(GTK_WIDGET(view));
     554    GdkEvent* event = gdk_event_new(GDK_KEY_PRESS);
     555    event->key.keyval = gdkKeySym;
     556    event->key.state = state;
     557    event->key.window = gtk_widget_get_window(GTK_WIDGET(view));
     558    g_object_ref(event->key.window);
    559559
    560560    // When synthesizing an event, an invalid hardware_keycode value
     
    563563    gint n_keys;
    564564    if (gdk_keymap_get_entries_for_keyval(gdk_keymap_get_default(), gdkKeySym, &keys, &n_keys)) {
    565         event.key.hardware_keycode = keys[0].keycode;
     565        event->key.hardware_keycode = keys[0].keycode;
    566566        g_free(keys);
    567567    }
    568568
    569     event.key.type = GDK_KEY_PRESS;
    570569    dispatchEvent(event);
    571570
    572     event.key.type = GDK_KEY_RELEASE;
     571    event->key.type = GDK_KEY_RELEASE;
    573572    dispatchEvent(event);
    574573
Note: See TracChangeset for help on using the changeset viewer.