[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(&quot;input5&quot;); 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