[SCM] WebKit Debian packaging branch, debian/experimental, updated. upstream/1.3.3-10851-g50815da
commit-queue at webkit.org
commit-queue at webkit.org
Wed Dec 22 18:45:25 UTC 2010
The following commit has been merged in the debian/experimental branch:
commit 57c83312250bfe1be3a35c7834da2f7e1d5351d6
Author: commit-queue at webkit.org <commit-queue at webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date: Fri Dec 17 10:51:35 2010 +0000
2010-12-17 Yi Shen <yi.4.shen at nokia.com>
Reviewed by Kenneth Rohde Christiansen.
[Qt] QWebPage sends out a RequestSoftwareInputPanel event
incorrectly in particular case
https://bugs.webkit.org/show_bug.cgi?id=50419
Add HitTestResult check before firing RequestSoftwareInputPanel event.
* Api/qwebpage.cpp:
(QWebPagePrivate::mouseReleaseEvent):
(QWebPagePrivate::handleSoftwareInputPanel):
* Api/qwebpage_p.h:
* tests/qwebpage/tst_qwebpage.cpp:
(clickOnPage):
(tst_QWebPage::inputMethods):
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@74243 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/WebKit/qt/Api/qwebpage.cpp b/WebKit/qt/Api/qwebpage.cpp
index 3e5160b..e82bd45 100644
--- a/WebKit/qt/Api/qwebpage.cpp
+++ b/WebKit/qt/Api/qwebpage.cpp
@@ -759,10 +759,10 @@ void QWebPagePrivate::mouseReleaseEvent(T *ev)
ev->setAccepted(accepted);
handleClipboard(ev, ev->button());
- handleSoftwareInputPanel(ev->button());
+ handleSoftwareInputPanel(ev->button(), QPointF(ev->pos()).toPoint());
}
-void QWebPagePrivate::handleSoftwareInputPanel(Qt::MouseButton button)
+void QWebPagePrivate::handleSoftwareInputPanel(Qt::MouseButton button, const QPoint& pos)
{
Frame* frame = page->focusController()->focusedFrame();
if (!frame)
@@ -774,8 +774,11 @@ void QWebPagePrivate::handleSoftwareInputPanel(Qt::MouseButton button)
QStyle::RequestSoftwareInputPanel behavior = QStyle::RequestSoftwareInputPanel(
client->ownerWidget()->style()->styleHint(QStyle::SH_RequestSoftwareInputPanel));
if (!clickCausedFocus || behavior == QStyle::RSIP_OnMouseClick) {
- QEvent event(QEvent::RequestSoftwareInputPanel);
- QApplication::sendEvent(client->ownerWidget(), &event);
+ HitTestResult result = frame->eventHandler()->hitTestResultAtPoint(frame->view()->windowToContents(pos), false);
+ if (result.isContentEditable()) {
+ QEvent event(QEvent::RequestSoftwareInputPanel);
+ QApplication::sendEvent(client->ownerWidget(), &event);
+ }
}
}
diff --git a/WebKit/qt/Api/qwebpage_p.h b/WebKit/qt/Api/qwebpage_p.h
index e062ba3..dc6da7e 100644
--- a/WebKit/qt/Api/qwebpage_p.h
+++ b/WebKit/qt/Api/qwebpage_p.h
@@ -125,7 +125,7 @@ public:
void shortcutOverrideEvent(QKeyEvent*);
void leaveEvent(QEvent*);
void handleClipboard(QEvent*, Qt::MouseButton);
- void handleSoftwareInputPanel(Qt::MouseButton);
+ void handleSoftwareInputPanel(Qt::MouseButton, const QPoint&);
bool handleScrolling(QKeyEvent*, WebCore::Frame*);
// Returns whether the default action was cancelled in the JS event handler
diff --git a/WebKit/qt/ChangeLog b/WebKit/qt/ChangeLog
index 879456e..b53c7f0 100644
--- a/WebKit/qt/ChangeLog
+++ b/WebKit/qt/ChangeLog
@@ -1,3 +1,21 @@
+2010-12-17 Yi Shen <yi.4.shen at nokia.com>
+
+ Reviewed by Kenneth Rohde Christiansen.
+
+ [Qt] QWebPage sends out a RequestSoftwareInputPanel event
+ incorrectly in particular case
+ https://bugs.webkit.org/show_bug.cgi?id=50419
+
+ Add HitTestResult check before firing RequestSoftwareInputPanel event.
+
+ * Api/qwebpage.cpp:
+ (QWebPagePrivate::mouseReleaseEvent):
+ (QWebPagePrivate::handleSoftwareInputPanel):
+ * Api/qwebpage_p.h:
+ * tests/qwebpage/tst_qwebpage.cpp:
+ (clickOnPage):
+ (tst_QWebPage::inputMethods):
+
2010-12-17 Eric Seidel <eric at webkit.org>
Unreviewed, rolling out r74229.
diff --git a/WebKit/qt/tests/qwebpage/tst_qwebpage.cpp b/WebKit/qt/tests/qwebpage/tst_qwebpage.cpp
index 301a050..4645a06 100644
--- a/WebKit/qt/tests/qwebpage/tst_qwebpage.cpp
+++ b/WebKit/qt/tests/qwebpage/tst_qwebpage.cpp
@@ -1392,6 +1392,14 @@ static bool inputMethodEnabled(QObject* object)
return false;
}
+static void clickOnPage(QWebPage* page, const QPoint& position)
+{
+ QMouseEvent evpres(QEvent::MouseButtonPress, position, Qt::LeftButton, Qt::NoButton, Qt::NoModifier);
+ page->event(&evpres);
+ QMouseEvent evrel(QEvent::MouseButtonRelease, position, Qt::LeftButton, Qt::NoButton, Qt::NoModifier);
+ page->event(&evrel);
+}
+
void tst_QWebPage::inputMethods()
{
QFETCH(QString, viewType);
@@ -1428,11 +1436,9 @@ void tst_QWebPage::inputMethods()
EventSpy viewEventSpy(container);
QWebElementCollection inputs = page->mainFrame()->documentElement().findAll("input");
+ QPoint textInputCenter = inputs.at(0).geometry().center();
- QMouseEvent evpres(QEvent::MouseButtonPress, inputs.at(0).geometry().center(), Qt::LeftButton, Qt::NoButton, Qt::NoModifier);
- page->event(&evpres);
- QMouseEvent evrel(QEvent::MouseButtonRelease, inputs.at(0).geometry().center(), Qt::LeftButton, Qt::NoButton, Qt::NoModifier);
- page->event(&evrel);
+ clickOnPage(page, textInputCenter);
// This part of the test checks if the SIP (Software Input Panel) is triggered,
// which normally happens on mobile platforms, when a user input form receives
@@ -1457,8 +1463,7 @@ void tst_QWebPage::inputMethods()
QVERIFY(!viewEventSpy.contains(QEvent::RequestSoftwareInputPanel));
viewEventSpy.clear();
- page->event(&evpres);
- page->event(&evrel);
+ clickOnPage(page, textInputCenter);
QVERIFY(viewEventSpy.contains(QEvent::RequestSoftwareInputPanel));
//ImMicroFocus
@@ -1560,8 +1565,7 @@ void tst_QWebPage::inputMethods()
// LEFT to RIGHT selection
// Deselect the selection by sending MouseButtonPress events
// This moves the current cursor to the end of the text
- page->event(&evpres);
- page->event(&evrel);
+ clickOnPage(page, textInputCenter);
{
QList<QInputMethodEvent::Attribute> attributes;
@@ -1609,8 +1613,7 @@ void tst_QWebPage::inputMethods()
//RIGHT to LEFT selection
//Deselect the selection (this moves the current cursor to the end of the text)
- page->event(&evpres);
- page->event(&evrel);
+ clickOnPage(page, textInputCenter);
//ImAnchorPosition
variant = page->inputMethodQuery(Qt::ImAnchorPosition);
@@ -1657,28 +1660,20 @@ void tst_QWebPage::inputMethods()
//END - Tests for Selection when the Editor is not in Composition mode
//ImhHiddenText
- QMouseEvent evpresPassword(QEvent::MouseButtonPress, inputs.at(1).geometry().center(), Qt::LeftButton, Qt::NoButton, Qt::NoModifier);
- page->event(&evpresPassword);
- QMouseEvent evrelPassword(QEvent::MouseButtonRelease, inputs.at(1).geometry().center(), Qt::LeftButton, Qt::NoButton, Qt::NoModifier);
- page->event(&evrelPassword);
+ QPoint passwordInputCenter = inputs.at(1).geometry().center();
+ clickOnPage(page, passwordInputCenter);
QVERIFY(inputMethodEnabled(view));
QVERIFY(inputMethodHints(view) & Qt::ImhHiddenText);
- page->event(&evpres);
- page->event(&evrel);
+ clickOnPage(page, textInputCenter);
QVERIFY(!(inputMethodHints(view) & Qt::ImhHiddenText));
page->mainFrame()->setHtml("<html><body><p>nothing to input here");
viewEventSpy.clear();
QWebElement para = page->mainFrame()->findFirstElement("p");
- {
- QMouseEvent evpres(QEvent::MouseButtonPress, para.geometry().center(), Qt::LeftButton, Qt::NoButton, Qt::NoModifier);
- page->event(&evpres);
- QMouseEvent evrel(QEvent::MouseButtonRelease, para.geometry().center(), Qt::LeftButton, Qt::NoButton, Qt::NoModifier);
- page->event(&evrel);
- }
+ clickOnPage(page, para.geometry().center());
QVERIFY(!viewEventSpy.contains(QEvent::RequestSoftwareInputPanel));
@@ -2004,6 +1999,15 @@ void tst_QWebPage::inputMethods()
anchorPosition = variant.toInt();
QCOMPARE(anchorPosition, 12);
+ // Check sending RequestSoftwareInputPanel event
+ page->mainFrame()->setHtml("<html><body>" \
+ "<input type='text' id='input5' value='QtWebKit inputMethod'/>" \
+ "<div id='btnDiv' onclick='i=document.getElementById("input5"); i.focus();'>abc</div>"\
+ "</body></html>");
+ QWebElement inputElement = page->mainFrame()->findFirstElement("div");
+ clickOnPage(page, inputElement.geometry().center());
+
+ QVERIFY(!viewEventSpy.contains(QEvent::RequestSoftwareInputPanel));
delete container;
}
--
WebKit Debian packaging
More information about the Pkg-webkit-commits
mailing list