Title: [104584] trunk
Revision
104584
Author
[email protected]
Date
2012-01-10 08:47:59 -0800 (Tue, 10 Jan 2012)

Log Message

Unreviewed, rolling out r104572.
http://trac.webkit.org/changeset/104572
https://bugs.webkit.org/show_bug.cgi?id=75967

It broke zillion tests (Requested by Ossy on #webkit).

Patch by Sheriff Bot <[email protected]> on 2012-01-10

Tools:

* DumpRenderTree/qt/EventSenderQt.cpp:
(EventSender::EventSender):
(EventSender::sendOrQueueEvent):
(EventSender::replaySavedEvents):
(EventSender::eventFilter):
* DumpRenderTree/qt/EventSenderQt.h:

LayoutTests:

* platform/qt-wk1/Skipped:

Modified Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (104583 => 104584)


--- trunk/LayoutTests/ChangeLog	2012-01-10 16:45:55 UTC (rev 104583)
+++ trunk/LayoutTests/ChangeLog	2012-01-10 16:47:59 UTC (rev 104584)
@@ -1,3 +1,13 @@
+2012-01-10  Sheriff Bot  <[email protected]>
+
+        Unreviewed, rolling out r104572.
+        http://trac.webkit.org/changeset/104572
+        https://bugs.webkit.org/show_bug.cgi?id=75967
+
+        It broke zillion tests (Requested by Ossy on #webkit).
+
+        * platform/qt-wk1/Skipped:
+
 2012-01-10  John Knottenbelt  <[email protected]>
 
         [Chromium] Clean up test expectations for mac.

Modified: trunk/LayoutTests/platform/qt-wk1/Skipped (104583 => 104584)


--- trunk/LayoutTests/platform/qt-wk1/Skipped	2012-01-10 16:45:55 UTC (rev 104583)
+++ trunk/LayoutTests/platform/qt-wk1/Skipped	2012-01-10 16:47:59 UTC (rev 104584)
@@ -1,5 +1,9 @@
 # Tests failing on WK1 only (working on WK2)
 
+# New test introduced in r102048 fails on Qt-WK1
+# https://bugs.webkit.org/show_bug.cgi?id=73366
+fast/events/dont-loose-last-event.html
+
 # This has been fixed only on qt-wk2
 # https://bugs.webkit.org/show_bug.cgi?id=45666
 fast/events/click-count.html

Modified: trunk/Tools/ChangeLog (104583 => 104584)


--- trunk/Tools/ChangeLog	2012-01-10 16:45:55 UTC (rev 104583)
+++ trunk/Tools/ChangeLog	2012-01-10 16:47:59 UTC (rev 104584)
@@ -1,3 +1,18 @@
+2012-01-10  Sheriff Bot  <[email protected]>
+
+        Unreviewed, rolling out r104572.
+        http://trac.webkit.org/changeset/104572
+        https://bugs.webkit.org/show_bug.cgi?id=75967
+
+        It broke zillion tests (Requested by Ossy on #webkit).
+
+        * DumpRenderTree/qt/EventSenderQt.cpp:
+        (EventSender::EventSender):
+        (EventSender::sendOrQueueEvent):
+        (EventSender::replaySavedEvents):
+        (EventSender::eventFilter):
+        * DumpRenderTree/qt/EventSenderQt.h:
+
 2012-01-10  Hugo Parente Lima  <[email protected]>
 
         [Qt] fast/events/dont-loose-last-event test fails on WK1

Modified: trunk/Tools/DumpRenderTree/qt/EventSenderQt.cpp (104583 => 104584)


--- trunk/Tools/DumpRenderTree/qt/EventSenderQt.cpp	2012-01-10 16:45:55 UTC (rev 104583)
+++ trunk/Tools/DumpRenderTree/qt/EventSenderQt.cpp	2012-01-10 16:47:59 UTC (rev 104584)
@@ -45,6 +45,8 @@
 // Hence Qt DRT adopts a fixed zoom-factor (1.2) for compatibility.
 #define ZOOM_STEP           1.2
 
+#define DRT_MESSAGE_DONE (QEvent::User + 1)
+
 struct DRTEventQueue {
     QEvent* m_event;
     int m_delay;
@@ -52,18 +54,21 @@
 
 static DRTEventQueue eventQueue[1024];
 static unsigned endOfQueue;
-static bool isReplayingEvents;
+static unsigned startOfQueue;
 
 EventSender::EventSender(QWebPage* parent)
     : QObject(parent)
 {
     m_page = parent;
+    m_mouseButtonPressed = false;
+    m_drag = false;
     memset(eventQueue, 0, sizeof(eventQueue));
     endOfQueue = 0;
-    isReplayingEvents = false;
+    startOfQueue = 0;
     m_eventLoop = 0;
     m_currentButton = 0;
     resetClickCount();
+    m_page->view()->installEventFilter(this);
     // So that we can match Scrollbar::pixelsPerLineStep() in WheelEventQt.cpp and
     // pass fast/events/platform-wheelevent-in-scrolling-div.html
     QApplication::setWheelScrollLines(2);
@@ -554,34 +559,73 @@
     // 2. A delay was set-up by leapForward().
     // 3. A call to mouseMoveTo while the mouse button is pressed could initiate a drag operation, and that does not return until mouseUp is processed.
     // To be safe and avoid a deadlock, this event is queued.
-    if (!endOfQueue && !eventQueue[endOfQueue].m_delay) {
+    if (endOfQueue == startOfQueue && !eventQueue[endOfQueue].m_delay && (!(m_mouseButtonPressed && (m_eventLoop && event->type() == QEvent::MouseButtonRelease)))) {
         sendEvent(m_page->view(), event);
         delete event;
         return;
     }
     eventQueue[endOfQueue++].m_event = event;
     eventQueue[endOfQueue].m_delay = 0;
-    replaySavedEvents();
+    replaySavedEvents(event->type() != QEvent::MouseMove);
 }
 
-void EventSender::replaySavedEvents()
+void EventSender::replaySavedEvents(bool flush)
 {
-    if (isReplayingEvents)
+    if (startOfQueue < endOfQueue) {
+        // First send all the events that are ready to be sent
+        while (!eventQueue[startOfQueue].m_delay && startOfQueue < endOfQueue) {
+            QEvent* ev = eventQueue[startOfQueue++].m_event;
+            postEvent(m_page->view(), ev);
+        }
+        if (startOfQueue == endOfQueue) {
+            // Reset the queue
+            startOfQueue = 0;
+            endOfQueue = 0;
+        } else {
+            QTest::qWait(eventQueue[startOfQueue].m_delay);
+            eventQueue[startOfQueue].m_delay = 0;
+        }
+    }
+    if (!flush)
         return;
 
-    isReplayingEvents = true;
-    int i = 0;
+    // Send a marker event, it will tell us when it is safe to exit the new event loop
+    QEvent* drtEvent = new QEvent((QEvent::Type)DRT_MESSAGE_DONE);
+    QApplication::postEvent(m_page->view(), drtEvent);
 
-    while (i < endOfQueue) {
-        DRTEventQueue& ev = eventQueue[i];
+    // Start an event loop for async handling of Drag & Drop
+    m_eventLoop = new QEventLoop;
+    m_eventLoop->exec();
+    delete m_eventLoop;
+    m_eventLoop = 0;
+}
 
-        if (ev.m_delay)
-            QTest::qWait(ev.m_delay);
-        i++;
-        sendEvent(m_page->view(), ev.m_event);
-        delete ev.m_event;
-        ev.m_delay = 0;
+bool EventSender::eventFilter(QObject* watched, QEvent* event)
+{
+    if (watched != m_page->view())
+        return false;
+    switch (event->type()) {
+    case QEvent::Leave:
+        return true;
+    case QEvent::MouseButtonPress:
+    case QEvent::GraphicsSceneMousePress:
+        m_mouseButtonPressed = true;
+        break;
+    case QEvent::MouseMove:
+    case QEvent::GraphicsSceneMouseMove:
+        if (m_mouseButtonPressed)
+            m_drag = true;
+        break;
+    case QEvent::MouseButtonRelease:
+    case QEvent::GraphicsSceneMouseRelease:
+        m_mouseButtonPressed = false;
+        m_drag = false;
+        break;
+    case DRT_MESSAGE_DONE:
+        m_eventLoop->exit();
+        return true;
     }
+    return false;
 }
 
 void EventSender::timerEvent(QTimerEvent* ev)

Modified: trunk/Tools/DumpRenderTree/qt/EventSenderQt.h (104583 => 104584)


--- trunk/Tools/DumpRenderTree/qt/EventSenderQt.h	2012-01-10 16:45:55 UTC (rev 104583)
+++ trunk/Tools/DumpRenderTree/qt/EventSenderQt.h	2012-01-10 16:47:59 UTC (rev 104584)
@@ -51,6 +51,7 @@
     Q_OBJECT
 public:
     EventSender(QWebPage* parent);
+    virtual bool eventFilter(QObject* watched, QEvent* event);
     void resetClickCount() { m_clickCount = 0; }
 
 public slots:
@@ -93,13 +94,15 @@
 private:
     void sendTouchEvent(QEvent::Type);
     void sendOrQueueEvent(QEvent*);
-    void replaySavedEvents();
+    void replaySavedEvents(bool flush);
     QPoint m_mousePos;
     QPoint m_clickPos;
     Qt::MouseButtons m_mouseButtons;
     QWebPage* m_page;
     int m_clickCount;
     int m_currentButton;
+    bool m_mouseButtonPressed;
+    bool m_drag;
     QEventLoop* m_eventLoop;
     QWebFrame* frameUnderMouse() const;
     QBasicTimer m_clickTimer;
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to