[SCM] WebKit Debian packaging branch, debian/experimental, updated. upstream/1.3.3-9427-gc2be6fc

mrobinson at webkit.org mrobinson at webkit.org
Wed Dec 22 12:29:19 UTC 2010


The following commit has been merged in the debian/experimental branch:
commit 2227d9e366f827345ea2971d5378f9db6bcd274e
Author: mrobinson at webkit.org <mrobinson at webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date:   Tue Aug 24 18:08:15 2010 +0000

    2010-08-24  Martin Robinson  <mrobinson at 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 at 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.
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@65915 268f45cc-cd09-0410-ab3c-d52691b4dbfc

diff --git a/WebKit/gtk/ChangeLog b/WebKit/gtk/ChangeLog
index ec0801c..6621fe5 100644
--- a/WebKit/gtk/ChangeLog
+++ b/WebKit/gtk/ChangeLog
@@ -1,3 +1,16 @@
+2010-08-24  Martin Robinson  <mrobinson at 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  Gustavo Noronha Silva  <gustavo.noronha at collabora.co.uk>
 
         Rubber-stamped by Xan Lopez.
diff --git a/WebKit/gtk/tests/testcopyandpaste.c b/WebKit/gtk/tests/testcopyandpaste.c
index 0ef91d1..f3b1783 100644
--- a/WebKit/gtk/tests/testcopyandpaste.c
+++ b/WebKit/gtk/tests/testcopyandpaste.c
@@ -128,21 +128,22 @@ static CopyAndPasteFixture* currentFixture;
 static JSValueRef runPasteTestCallback(JSContextRef context, JSObjectRef function, JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
 {
     // Simulate a paste keyboard sequence.
-    GdkEvent event;
-    memset(&event, 0, sizeof(event));
-    event.key.keyval = gdk_unicode_to_keyval('v');
-    event.key.state = GDK_CONTROL_MASK;
-    event.key.window = gtk_widget_get_window(GTK_WIDGET(currentFixture->webView));
+    GdkEvent* event = gdk_event_new(GDK_KEY_PRESS);
+    event->key.keyval = gdk_unicode_to_keyval('v');
+    event->key.state = GDK_CONTROL_MASK;
+    event->key.window = gtk_widget_get_window(GTK_WIDGET(currentFixture->webView));
+    g_object_ref(event->key.window);
     GdkKeymapKey* keys;
     gint n_keys;
-    if (gdk_keymap_get_entries_for_keyval(gdk_keymap_get_default(), event.key.keyval, &keys, &n_keys)) {
-        event.key.hardware_keycode = keys[0].keycode;
+    if (gdk_keymap_get_entries_for_keyval(gdk_keymap_get_default(), event->key.keyval, &keys, &n_keys)) {
+        event->key.hardware_keycode = keys[0].keycode;
         g_free(keys);
     }
-    event.key.type = GDK_KEY_PRESS;
-    gtk_main_do_event(&event);
-    event.key.type = GDK_KEY_RELEASE;
-    gtk_main_do_event(&event);
+
+    gtk_main_do_event(event);
+    event->key.type = GDK_KEY_RELEASE;
+    gtk_main_do_event(event);
+    gdk_event_free(event);
 
     JSStringRef scriptString = JSStringCreateWithUTF8CString("document.body.innerHTML;");
     JSValueRef value = JSEvaluateScript(context, scriptString, 0, 0, 0, 0);
diff --git a/WebKit/gtk/tests/testhittestresult.c b/WebKit/gtk/tests/testhittestresult.c
index 89fe95c..0d7fb05 100644
--- a/WebKit/gtk/tests/testhittestresult.c
+++ b/WebKit/gtk/tests/testhittestresult.c
@@ -81,15 +81,15 @@ load_status_cb(WebKitWebView* webView,
     if (status == WEBKIT_LOAD_FINISHED) {
         WebKitHitTestResult* result;
         guint context;
-        GdkEventButton event;
+        GdkEvent* event = gdk_event_new(GDK_BUTTON_PRESS);
         WebKitDOMNode* node;
 
-        event.type = GDK_BUTTON_PRESS;
         /* Close enough to 0,0 */
-        event.x = 5;
-        event.y = 5;
+        event->button.x = 5;
+        event->button.y = 5;
 
-        result = webkit_web_view_get_hit_test_result(webView, &event);
+        result = webkit_web_view_get_hit_test_result(webView, (GdkEventButton*) event);
+        gdk_event_free(event);
         g_assert(result);
 
         g_object_get(result, "context", &context, NULL);
diff --git a/WebKitTools/ChangeLog b/WebKitTools/ChangeLog
index 166194b..5cd3b89 100644
--- a/WebKitTools/ChangeLog
+++ b/WebKitTools/ChangeLog
@@ -1,3 +1,22 @@
+2010-08-24  Martin Robinson  <mrobinson at 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.
+
 2010-08-24  Andras Becsi  <abecsi at webkit.org>
 
         [Qt] WebKit2 build fix.
diff --git a/WebKitTools/DumpRenderTree/gtk/EventSender.cpp b/WebKitTools/DumpRenderTree/gtk/EventSender.cpp
index 546d8ce..399a6cc 100644
--- a/WebKitTools/DumpRenderTree/gtk/EventSender.cpp
+++ b/WebKitTools/DumpRenderTree/gtk/EventSender.cpp
@@ -63,7 +63,7 @@ static int clickCount;
 GdkDragContext* currentDragSourceContext;
 
 struct DelayedMessage {
-    GdkEvent event;
+    GdkEvent* event;
     gulong delay;
 };
 
@@ -82,8 +82,8 @@ enum KeyLocationCode {
     DOM_KEY_LOCATION_NUMPAD        = 0x03
 };
 
-static void sendOrQueueEvent(GdkEvent, bool = true);
-static void dispatchEvent(GdkEvent event);
+static void sendOrQueueEvent(GdkEvent*, bool = true);
+static void dispatchEvent(GdkEvent* event);
 static guint getStateFlags();
 
 #if !GTK_CHECK_VERSION(2, 17, 3)
@@ -152,15 +152,15 @@ bool prepareMouseButtonEvent(GdkEvent* event, int eventSenderButtonNumber)
         gdkButtonNumber = eventSenderButtonNumber + 1;
 
     // fast/events/mouse-click-events expects the 4th button
-    // to be event.button = 1, so send a middle-button event.
+    // to be event->button = 1, so send a middle-button event.
     else if (eventSenderButtonNumber == 3)
         gdkButtonNumber = 2;
 
-    memset(event, 0, sizeof(event));
     event->button.button = gdkButtonNumber;
     event->button.x = lastMousePositionX;
     event->button.y = lastMousePositionY;
     event->button.window = gtk_widget_get_window(GTK_WIDGET(view));
+    g_object_ref(event->button.window);
     event->button.device = gdk_device_get_core_pointer();
     event->button.state = getStateFlags();
     event->button.time = GDK_CURRENT_TIME;
@@ -176,13 +176,12 @@ bool prepareMouseButtonEvent(GdkEvent* event, int eventSenderButtonNumber)
 
 static JSValueRef contextClickCallback(JSContextRef context, JSObjectRef function, JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
 {
-    GdkEvent event;
-    if (!prepareMouseButtonEvent(&event, 2))
+    GdkEvent* event = gdk_event_new(GDK_BUTTON_PRESS);
+    if (!prepareMouseButtonEvent(event, 2))
         return JSValueMakeUndefined(context);
 
-    event.type = GDK_BUTTON_PRESS;
     sendOrQueueEvent(event);
-    event.type = GDK_BUTTON_RELEASE;
+    event->type = GDK_BUTTON_RELEASE;
     sendOrQueueEvent(event);
 
     return JSValueMakeUndefined(context);
@@ -207,11 +206,11 @@ static JSValueRef mouseDownCallback(JSContextRef context, JSObjectRef function,
         g_return_val_if_fail((!exception || !*exception), JSValueMakeUndefined(context));
     }
 
-    GdkEvent event;
-    if (!prepareMouseButtonEvent(&event, button))
+    GdkEvent* event = gdk_event_new(GDK_BUTTON_PRESS);
+    if (!prepareMouseButtonEvent(event, button))
         return JSValueMakeUndefined(context);
 
-    buttonCurrentlyDown = event.button.button;
+    buttonCurrentlyDown = event->button.button;
 
     // Normally GDK will send both GDK_BUTTON_PRESS and GDK_2BUTTON_PRESS for
     // the second button press during double-clicks. WebKit GTK+ selectively
@@ -221,13 +220,11 @@ static JSValueRef mouseDownCallback(JSContextRef context, JSObjectRef function,
     // it here. Eventually this code should probably figure out a way to get all
     // appropriate events onto the event queue and this work-around should be
     // removed.
-    updateClickCount(event.button.button);
+    updateClickCount(event->button.button);
     if (clickCount == 2)
-        event.type = GDK_2BUTTON_PRESS;
+        event->type = GDK_2BUTTON_PRESS;
     else if (clickCount == 3)
-        event.type = GDK_3BUTTON_PRESS;
-    else
-        event.type = GDK_BUTTON_PRESS;
+        event->type = GDK_3BUTTON_PRESS;
 
     sendOrQueueEvent(event);
     return JSValueMakeUndefined(context);
@@ -252,8 +249,8 @@ static JSValueRef mouseUpCallback(JSContextRef context, JSObjectRef function, JS
         g_return_val_if_fail((!exception || !*exception), JSValueMakeUndefined(context));
     }
 
-    GdkEvent event;
-    if (!prepareMouseButtonEvent(&event, button))
+    GdkEvent* event = gdk_event_new(GDK_BUTTON_RELEASE);
+    if (!prepareMouseButtonEvent(event, button))
         return JSValueMakeUndefined(context);
 
     lastClickPositionX = lastMousePositionX;
@@ -262,7 +259,6 @@ static JSValueRef mouseUpCallback(JSContextRef context, JSObjectRef function, JS
     lastClickTimeOffset = timeOffset;
     buttonCurrentlyDown = 0;
 
-    event.type = GDK_BUTTON_RELEASE;
     sendOrQueueEvent(event);
     return JSValueMakeUndefined(context);
 }
@@ -281,22 +277,21 @@ static JSValueRef mouseMoveToCallback(JSContextRef context, JSObjectRef function
     lastMousePositionY = (int)JSValueToNumber(context, arguments[1], exception);
     g_return_val_if_fail((!exception || !*exception), JSValueMakeUndefined(context));
 
-    GdkEvent event;
-    memset(&event, 0, sizeof(event));
-    event.type = GDK_MOTION_NOTIFY;
-    event.motion.x = lastMousePositionX;
-    event.motion.y = lastMousePositionY;
+    GdkEvent* event = gdk_event_new(GDK_MOTION_NOTIFY);
+    event->motion.x = lastMousePositionX;
+    event->motion.y = lastMousePositionY;
 
-    event.motion.time = GDK_CURRENT_TIME;
-    event.motion.window = gtk_widget_get_window(GTK_WIDGET(view));
-    event.motion.device = gdk_device_get_core_pointer();
-    event.motion.state = getStateFlags();
-    event.motion.axes = 0;
+    event->motion.time = GDK_CURRENT_TIME;
+    event->motion.window = gtk_widget_get_window(GTK_WIDGET(view));
+    g_object_ref(event->motion.window);
+    event->motion.device = gdk_device_get_core_pointer();
+    event->motion.state = getStateFlags();
+    event->motion.axes = 0;
 
     int xRoot, yRoot;
     gdk_window_get_root_coords(gtk_widget_get_window(GTK_WIDGET(view)), lastMousePositionX, lastMousePositionY, &xRoot, &yRoot);
-    event.motion.x_root = xRoot;
-    event.motion.y_root = yRoot;
+    event->motion.x_root = xRoot;
+    event->motion.y_root = yRoot;
 
     sendOrQueueEvent(event, false);
     return JSValueMakeUndefined(context);
@@ -319,21 +314,21 @@ static JSValueRef mouseWheelToCallback(JSContextRef context, JSObjectRef functio
     // GTK+ doesn't support multiple direction scrolls in the same event!
     g_return_val_if_fail((!vertical || !horizontal), JSValueMakeUndefined(context));
 
-    GdkEvent event;
-    event.type = GDK_SCROLL;
-    event.scroll.x = lastMousePositionX;
-    event.scroll.y = lastMousePositionY;
-    event.scroll.time = GDK_CURRENT_TIME;
-    event.scroll.window = gtk_widget_get_window(GTK_WIDGET(view));
+    GdkEvent* event = gdk_event_new(GDK_SCROLL);
+    event->scroll.x = lastMousePositionX;
+    event->scroll.y = lastMousePositionY;
+    event->scroll.time = GDK_CURRENT_TIME;
+    event->scroll.window = gtk_widget_get_window(GTK_WIDGET(view));
+    g_object_ref(event->scroll.window);
 
     if (horizontal < 0)
-        event.scroll.direction = GDK_SCROLL_LEFT;
+        event->scroll.direction = GDK_SCROLL_LEFT;
     else if (horizontal > 0)
-        event.scroll.direction = GDK_SCROLL_RIGHT;
+        event->scroll.direction = GDK_SCROLL_RIGHT;
     else if (vertical < 0)
-        event.scroll.direction = GDK_SCROLL_UP;
+        event->scroll.direction = GDK_SCROLL_UP;
     else if (vertical > 0)
-        event.scroll.direction = GDK_SCROLL_DOWN;
+        event->scroll.direction = GDK_SCROLL_DOWN;
     else
         g_assert_not_reached();
 
@@ -350,7 +345,7 @@ static JSValueRef beginDragWithFilesCallback(JSContextRef context, JSObjectRef f
     return JSValueMakeUndefined(context);
 }
 
-static void sendOrQueueEvent(GdkEvent event, bool shouldReplaySavedEvents)
+static void sendOrQueueEvent(GdkEvent* event, bool shouldReplaySavedEvents)
 {
     // Mouse move events are queued if the previous event was queued or if a
     // delay was set up by leapForward().
@@ -366,19 +361,23 @@ static void sendOrQueueEvent(GdkEvent event, bool shouldReplaySavedEvents)
     dispatchEvent(event);
 }
 
-static void dispatchEvent(GdkEvent event)
+static void dispatchEvent(GdkEvent* event)
 {
     webkit_web_frame_layout(mainFrame);
     WebKitWebView* view = webkit_web_frame_get_web_view(mainFrame);
-    if (!view)
+    if (!view) {
+        gdk_event_free(event);
         return;
+    }
 
-    gtk_main_do_event(&event);
+    gtk_main_do_event(event);
 
-    if (!currentDragSourceContext)
+    if (!currentDragSourceContext) {
+        gdk_event_free(event);
         return;
+    }
 
-    if (event.type == GDK_MOTION_NOTIFY) {
+    if (event->type == GDK_MOTION_NOTIFY) {
         // WebKit has called gtk_drag_start(), but because the main loop isn't
         // running GDK internals don't know that the drag has started yet. Pump
         // the main loop a little bit so that GDK is in the correct state.
@@ -389,12 +388,12 @@ static void dispatchEvent(GdkEvent event)
         GtkWidget* parentWidget = gtk_widget_get_parent(GTK_WIDGET(view));
         GdkWindow* parentWidgetWindow = gtk_widget_get_window(parentWidget);
         gdk_drag_motion(currentDragSourceContext, parentWidgetWindow, GDK_DRAG_PROTO_XDND,
-            event.motion.x_root, event.motion.y_root,
+            event->motion.x_root, event->motion.y_root,
             gdk_drag_context_get_selected_action(currentDragSourceContext),
             gdk_drag_context_get_actions(currentDragSourceContext),
             GDK_CURRENT_TIME);
 
-    } else if (currentDragSourceContext && event.type == GDK_BUTTON_RELEASE) {
+    } else if (currentDragSourceContext && event->type == GDK_BUTTON_RELEASE) {
         // We've released the mouse button, we should just be able to spin the
         // event loop here and have GTK+ send the appropriate notifications for
         // the end of the drag.
@@ -402,6 +401,7 @@ static void dispatchEvent(GdkEvent event)
             gtk_main_iteration();
     }
 
+    gdk_event_free(event);
 }
 
 void replaySavedEvents()
@@ -551,25 +551,24 @@ static JSValueRef keyDownCallback(JSContextRef context, JSObjectRef function, JS
         return JSValueMakeUndefined(context);
 
     // create and send the event
-    GdkEvent event;
-    memset(&event, 0, sizeof(event));
-    event.key.keyval = gdkKeySym;
-    event.key.state = state;
-    event.key.window = gtk_widget_get_window(GTK_WIDGET(view));
+    GdkEvent* event = gdk_event_new(GDK_KEY_PRESS);
+    event->key.keyval = gdkKeySym;
+    event->key.state = state;
+    event->key.window = gtk_widget_get_window(GTK_WIDGET(view));
+    g_object_ref(event->key.window);
 
     // When synthesizing an event, an invalid hardware_keycode value
     // can cause it to be badly processed by Gtk+.
     GdkKeymapKey* keys;
     gint n_keys;
     if (gdk_keymap_get_entries_for_keyval(gdk_keymap_get_default(), gdkKeySym, &keys, &n_keys)) {
-        event.key.hardware_keycode = keys[0].keycode;
+        event->key.hardware_keycode = keys[0].keycode;
         g_free(keys);
     }
 
-    event.key.type = GDK_KEY_PRESS;
     dispatchEvent(event);
 
-    event.key.type = GDK_KEY_RELEASE;
+    event->key.type = GDK_KEY_RELEASE;
     dispatchEvent(event);
 
     return JSValueMakeUndefined(context);

-- 
WebKit Debian packaging



More information about the Pkg-webkit-commits mailing list