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