From: hausmann Date: Wed, 7 Nov 2007 14:17:54 +0000 (+0000) Subject: Moved all the event handlers from QWebFrame into QWebPage. X-Git-Url: http://git.webkit.org/?p=WebKit-https.git;a=commitdiff_plain;h=efd042ac369d2aa25468770f49efd5c39bcf101b Moved all the event handlers from QWebFrame into QWebPage. This cleans up the public API and allows us to remove the HackWebFrame hack in DumpRenderTree. Signed-off-by: Lars Knoll git-svn-id: https://svn.webkit.org/repository/webkit/trunk@27525 268f45cc-cd09-0410-ab3c-d52691b4dbfc --- diff --git a/WebKit/qt/Api/qwebframe.cpp b/WebKit/qt/Api/qwebframe.cpp index 8ea8db5..5b24f73 100644 --- a/WebKit/qt/Api/qwebframe.cpp +++ b/WebKit/qt/Api/qwebframe.cpp @@ -262,7 +262,7 @@ void QWebFrame::layout() QPoint QWebFrame::pos() const { Q_ASSERT(d->frameView); - return d->frameView->frameGeometry().topLeft(); + return d->pos(); } QRect QWebFrame::geometry() const @@ -284,71 +284,3 @@ QString QWebFrame::evaluateJavaScript(const QString& scriptSource) return rc; } -void QWebFrame::mouseMoveEvent(QMouseEvent *ev) -{ - if (!d->frameView) - return; - - d->eventHandler->handleMouseMoveEvent(PlatformMouseEvent(ev, 0)); - const int xOffset = - d->horizontalScrollBar() ? d->horizontalScrollBar()->value() : 0; - const int yOffset = - d->verticalScrollBar() ? d->verticalScrollBar()->value() : 0; - IntPoint pt(ev->x() + xOffset, ev->y() + yOffset); - WebCore::HitTestResult result = d->eventHandler->hitTestResultAtPoint(pt, false); - WebCore::Element *link = result.URLElement(); - if (link != d->lastHoverElement) { - d->lastHoverElement = link; - emit hoveringOverLink(result.absoluteLinkURL().prettyURL(), result.title()); - } -} - -void QWebFrame::mousePressEvent(QMouseEvent *ev) -{ - if (!d->eventHandler) - return; - - if (ev->button() == Qt::RightButton) - d->eventHandler->sendContextMenuEvent(PlatformMouseEvent(ev, 1)); - else - d->eventHandler->handleMousePressEvent(PlatformMouseEvent(ev, 1)); - - //FIXME need to keep track of subframe focus for key events! - d->page->setFocus(); -} - -void QWebFrame::mouseDoubleClickEvent(QMouseEvent *ev) -{ - if (!d->eventHandler) - return; - - d->eventHandler->handleMousePressEvent(PlatformMouseEvent(ev, 2)); - - //FIXME need to keep track of subframe focus for key events! - d->page->setFocus(); -} - -void QWebFrame::mouseReleaseEvent(QMouseEvent *ev) -{ - if (!d->frameView) - return; - - d->eventHandler->handleMouseReleaseEvent(PlatformMouseEvent(ev, 0)); - - //FIXME need to keep track of subframe focus for key events! - d->page->setFocus(); -} - -void QWebFrame::wheelEvent(QWheelEvent *ev) -{ - PlatformWheelEvent wkEvent(ev); - bool accepted = false; - if (d->eventHandler) - accepted = d->eventHandler->handleWheelEvent(wkEvent); - - ev->setAccepted(accepted); - - //FIXME need to keep track of subframe focus for key events! - d->page->setFocus(); -} - diff --git a/WebKit/qt/Api/qwebframe.h b/WebKit/qt/Api/qwebframe.h index 10d10a4..7d0d12a 100644 --- a/WebKit/qt/Api/qwebframe.h +++ b/WebKit/qt/Api/qwebframe.h @@ -86,14 +86,6 @@ signals: void titleChanged(const QString &title); void hoveringOverLink(const QString &link, const QString &title); -protected: - //for dumprendertree - virtual void mouseMoveEvent(QMouseEvent*); - virtual void mousePressEvent(QMouseEvent*); - virtual void mouseDoubleClickEvent(QMouseEvent*); - virtual void mouseReleaseEvent(QMouseEvent*); - virtual void wheelEvent(QWheelEvent*); - private: friend class QWebPage; friend class QWebPagePrivate; diff --git a/WebKit/qt/Api/qwebframe_p.h b/WebKit/qt/Api/qwebframe_p.h index ab0a9c7..f4061f5 100644 --- a/WebKit/qt/Api/qwebframe_p.h +++ b/WebKit/qt/Api/qwebframe_p.h @@ -76,6 +76,9 @@ public: WebCore::PlatformScrollbar *horizontalScrollBar() const; WebCore::PlatformScrollbar *verticalScrollBar() const; + inline QPoint pos() const + { return frameView->frameGeometry().topLeft(); } + QWebFrame *q; WebCore::FrameLoaderClientQt *frameLoaderClient; WTF::RefPtr frame; diff --git a/WebKit/qt/Api/qwebpage.cpp b/WebKit/qt/Api/qwebpage.cpp index b62a123..05a7697 100644 --- a/WebKit/qt/Api/qwebpage.cpp +++ b/WebKit/qt/Api/qwebpage.cpp @@ -49,7 +49,9 @@ #include "Editor.h" #include "PlatformScrollBar.h" #include "PlatformKeyboardEvent.h" +#include "PlatformWheelEvent.h" #include "ProgressTracker.h" +#include "HitTestResult.h" #include #include @@ -117,6 +119,22 @@ void QWebPagePrivate::createMainFrame() } } +QWebFrame *QWebPagePrivate::frameAt(const QPoint &pos) const +{ + QWebFrame *frame = mainFrame; + +redo: + QList children = frame->childFrames(); + for (int i = 0; i < children.size(); ++i) { + if (children.at(i)->geometry().contains(pos)) { + frame = children.at(i); + goto redo; + } + } + if (frame->geometry().contains(pos)) + return frame; + return 0; +} QWebPage::QWebPage(QWidget *parent) : QWidget(parent) @@ -398,27 +416,79 @@ void QWebPage::paintEvent(QPaintEvent *ev) void QWebPage::mouseMoveEvent(QMouseEvent *ev) { - mainFrame()->mouseMoveEvent(ev); + QWebFramePrivate *frame = d->currentFrame(ev->pos())->d; + if (!frame->frameView) + return; + + frame->eventHandler->handleMouseMoveEvent(PlatformMouseEvent(ev, 0)); + const int xOffset = + frame->horizontalScrollBar() ? frame->horizontalScrollBar()->value() : 0; + const int yOffset = + frame->verticalScrollBar() ? frame->verticalScrollBar()->value() : 0; + IntPoint pt(ev->x() + xOffset, ev->y() + yOffset); + WebCore::HitTestResult result = frame->eventHandler->hitTestResultAtPoint(pt, false); + WebCore::Element *link = result.URLElement(); + if (link != frame->lastHoverElement) { + frame->lastHoverElement = link; + emit hoveringOverLink(result.absoluteLinkURL().prettyURL(), result.title()); + } } void QWebPage::mousePressEvent(QMouseEvent *ev) { - mainFrame()->mousePressEvent(ev); + d->frameUnderMouse = d->frameAt(ev->pos()); + QWebFramePrivate *frame = d->frameUnderMouse->d; + if (!frame->eventHandler) + return; + + if (ev->button() == Qt::RightButton) + frame->eventHandler->sendContextMenuEvent(PlatformMouseEvent(ev, 1)); + else + frame->eventHandler->handleMousePressEvent(PlatformMouseEvent(ev, 1)); + + //FIXME need to keep track of subframe focus for key events! + frame->page->setFocus(); } void QWebPage::mouseDoubleClickEvent(QMouseEvent *ev) { - mainFrame()->mouseDoubleClickEvent(ev); + QWebFramePrivate *frame = d->currentFrame(ev->pos())->d; + if (!frame->eventHandler) + return; + + frame->eventHandler->handleMousePressEvent(PlatformMouseEvent(ev, 2)); + + //FIXME need to keep track of subframe focus for key events! + frame->page->setFocus(); } void QWebPage::mouseReleaseEvent(QMouseEvent *ev) { - mainFrame()->mouseReleaseEvent(ev); + QWebFramePrivate *frame = d->currentFrame(ev->pos())->d; + if (frame->frameView) { + frame->eventHandler->handleMouseReleaseEvent(PlatformMouseEvent(ev, 0)); + + //FIXME need to keep track of subframe focus for key events! + frame->page->setFocus(); + } + d->frameUnderMouse = 0; } void QWebPage::wheelEvent(QWheelEvent *ev) { - mainFrame()->wheelEvent(ev); + QWebFramePrivate *frame = d->currentFrame(ev->pos())->d; + + bool accepted = false; + if (frame->eventHandler) { + WebCore::PlatformWheelEvent pev(ev); + accepted = frame->eventHandler->handleWheelEvent(pev); + } + + ev->setAccepted(accepted); + + //FIXME need to keep track of subframe focus for key events! + frame->page->setFocus(); + if (!ev->isAccepted()) QWidget::wheelEvent(ev); } diff --git a/WebKit/qt/Api/qwebpage_p.h b/WebKit/qt/Api/qwebpage_p.h index aa320f5..b9fe140 100644 --- a/WebKit/qt/Api/qwebpage_p.h +++ b/WebKit/qt/Api/qwebpage_p.h @@ -45,12 +45,18 @@ public: ~QWebPagePrivate(); void createMainFrame(); + QWebFrame *frameAt(const QPoint &pos) const; + WebCore::ChromeClientQt *chromeClient; WebCore::ContextMenuClientQt *contextMenuClient; WebCore::EditorClientQt *editorClient; WebCore::Page *page; QPointer mainFrame; + QPointer frameUnderMouse; + + inline QWebFrame *currentFrame(const QPoint &pos) const + { return frameUnderMouse ? static_cast(frameUnderMouse) : frameAt(pos); } QWebPage *q; QUndoStack *undoStack; diff --git a/WebKit/qt/ChangeLog b/WebKit/qt/ChangeLog index 6faf754..1624027 100644 --- a/WebKit/qt/ChangeLog +++ b/WebKit/qt/ChangeLog @@ -1,3 +1,26 @@ +2007-11-07 Simon Hausmann + + Reviewed by Lars Knoll . + + Moved all the event handlers from QWebFrame into QWebPage. + + This cleans up the public API and allows us to remove the + HackWebFrame hack in DumpRenderTree. + + + * Api/qwebframe.cpp: + (QWebFrame::pos): + * Api/qwebframe.h: + * Api/qwebframe_p.h: + * Api/qwebpage.cpp: + (QWebPagePrivate::frameAt): + (QWebPage::mouseMoveEvent): + (QWebPage::mousePressEvent): + (QWebPage::mouseDoubleClickEvent): + (QWebPage::mouseReleaseEvent): + (QWebPage::wheelEvent): + * Api/qwebpage_p.h: + 2007-11-07 Holger Freyther Reviewed by Lars Knoll . diff --git a/WebKitTools/ChangeLog b/WebKitTools/ChangeLog index 54cb7be..362a3e5 100644 --- a/WebKitTools/ChangeLog +++ b/WebKitTools/ChangeLog @@ -1,5 +1,20 @@ 2007-11-07 Simon Hausmann + Reviewed by Lars Knoll . + + Moved all the event handlers from QWebFrame into QWebPage. + + This cleans up the public API and allows us to remove the + HackWebFrame hack in DumpRenderTree. + + + * DumpRenderTree/qt/jsobjects.cpp: + (EventSender::mouseDown): + (EventSender::mouseUp): + (EventSender::mouseMoveTo): + +2007-11-07 Simon Hausmann + Reviewed by Mark. Implemented the two Javascript prompt callbacks in qt/DumpRenderTree diff --git a/WebKitTools/DumpRenderTree/qt/jsobjects.cpp b/WebKitTools/DumpRenderTree/qt/jsobjects.cpp index fae1447..5ad4521 100644 --- a/WebKitTools/DumpRenderTree/qt/jsobjects.cpp +++ b/WebKitTools/DumpRenderTree/qt/jsobjects.cpp @@ -35,25 +35,6 @@ #include "DumpRenderTree.h" extern void qt_dump_editing_callbacks(bool b); -class HackWebFrame : public QWebFrame -{ -public: - void mousePressEvent(QMouseEvent *e) { - QWebFrame::mousePressEvent(e); - } - void mouseReleaseEvent(QMouseEvent *e) { - QWebFrame::mouseReleaseEvent(e); - } - void mouseMoveEvent(QMouseEvent *e) { - QWebFrame::mouseMoveEvent(e); - } - -protected: - HackWebFrame(QWebPage *parent, QWebFrameData *frameData) : QWebFrame(parent, frameData) {} - HackWebFrame(QWebFrame *parent, QWebFrameData *frameData) : QWebFrame(parent, frameData) {} - ~HackWebFrame() {} -}; - LayoutTestController::LayoutTestController(WebCore::DumpRenderTree *drt) : QObject() , m_drt(drt) @@ -168,31 +149,24 @@ EventSender::EventSender(QWebPage *parent) void EventSender::mouseDown() { - QWebFrame *frame = frameUnderMouse(); // qDebug() << "EventSender::mouseDown" << frame; - if (!frame) - return; - QMouseEvent event(QEvent::MouseButtonPress, m_mousePos - frame->pos(), Qt::LeftButton, Qt::LeftButton, Qt::NoModifier); - static_cast(frame)->mousePressEvent(&event); + QMouseEvent event(QEvent::MouseButtonPress, m_mousePos, Qt::LeftButton, Qt::LeftButton, Qt::NoModifier); + QApplication::sendEvent(m_page, &event); } void EventSender::mouseUp() { - QWebFrame *frame = frameUnderMouse(); // qDebug() << "EventSender::mouseUp" << frame; - if (!frame) - return; - QMouseEvent event(QEvent::MouseButtonRelease, m_mousePos - frame->pos(), Qt::LeftButton, Qt::LeftButton, Qt::NoModifier); - static_cast(frame)->mouseReleaseEvent(&event); + QMouseEvent event(QEvent::MouseButtonRelease, m_mousePos, Qt::LeftButton, Qt::LeftButton, Qt::NoModifier); + QApplication::sendEvent(m_page, &event); } void EventSender::mouseMoveTo(int x, int y) { - QWebFrame *frame = frameUnderMouse(); // qDebug() << "EventSender::mouseMoveTo" << x << y; m_mousePos = QPoint(x, y); - QMouseEvent event(QEvent::MouseMove, m_mousePos - frame->pos(), Qt::NoButton, Qt::NoButton, Qt::NoModifier); - static_cast(frame)->mouseMoveEvent(&event); + QMouseEvent event(QEvent::MouseMove, m_mousePos, Qt::NoButton, Qt::NoButton, Qt::NoModifier); + QApplication::sendEvent(m_page, &event); } void EventSender::leapForward(int ms)