Title: [100905] trunk
Revision
100905
Author
[email protected]
Date
2011-11-21 05:28:27 -0800 (Mon, 21 Nov 2011)

Log Message

[Qt] Add WebView.view attached property support for dialogs in QML
https://bugs.webkit.org/show_bug.cgi?id=72825

Reviewed by Simon Hausmann.

.:

Export QQuickWebViewAttached.

* Source/qtwebkit-export.map:

Source/WebKit2:

When creating new dialogs, fill their WebView.view attached property
with the WebView that's creating them. This follows the same pattern
as QtQuick's ListView, enabling the usage of the same dialog component
for different WebViews.

* UIProcess/API/qt/qquickwebview.cpp:
(QQuickWebViewPrivate::runJavaScriptAlert):
(QQuickWebViewPrivate::runJavaScriptConfirm):
(QQuickWebViewPrivate::runJavaScriptPrompt):
(QQuickWebViewPrivate::setViewInAttachedProperties):
(QQuickWebViewAttached::QQuickWebViewAttached):
(QQuickWebViewAttached::setView):
(QQuickWebView::qmlAttachedProperties):
* UIProcess/API/qt/qquickwebview_p.h:
* UIProcess/API/qt/qquickwebview_p_p.h:
* UIProcess/API/qt/tests/qmltests/WebView/tst_javaScriptDialogs.qml:
* UIProcess/qt/QtDialogRunner.h:
(QtDialogRunner::dialog):

Modified Paths

Diff

Modified: trunk/ChangeLog (100904 => 100905)


--- trunk/ChangeLog	2011-11-21 13:20:30 UTC (rev 100904)
+++ trunk/ChangeLog	2011-11-21 13:28:27 UTC (rev 100905)
@@ -1,3 +1,14 @@
+2011-11-21  Caio Marcelo de Oliveira Filho  <[email protected]>
+
+        [Qt] Add WebView.view attached property support for dialogs in QML
+        https://bugs.webkit.org/show_bug.cgi?id=72825
+
+        Reviewed by Simon Hausmann.
+
+        Export QQuickWebViewAttached.
+
+        * Source/qtwebkit-export.map:
+
 2011-11-21  Noel Gordon  <[email protected]>
 
         Update .gitignore for latest WebKitLibraries

Modified: trunk/Source/WebKit2/ChangeLog (100904 => 100905)


--- trunk/Source/WebKit2/ChangeLog	2011-11-21 13:20:30 UTC (rev 100904)
+++ trunk/Source/WebKit2/ChangeLog	2011-11-21 13:28:27 UTC (rev 100905)
@@ -1,3 +1,29 @@
+2011-11-21  Caio Marcelo de Oliveira Filho  <[email protected]>
+
+        [Qt] Add WebView.view attached property support for dialogs in QML
+        https://bugs.webkit.org/show_bug.cgi?id=72825
+
+        Reviewed by Simon Hausmann.
+
+        When creating new dialogs, fill their WebView.view attached property
+        with the WebView that's creating them. This follows the same pattern
+        as QtQuick's ListView, enabling the usage of the same dialog component
+        for different WebViews.
+
+        * UIProcess/API/qt/qquickwebview.cpp:
+        (QQuickWebViewPrivate::runJavaScriptAlert):
+        (QQuickWebViewPrivate::runJavaScriptConfirm):
+        (QQuickWebViewPrivate::runJavaScriptPrompt):
+        (QQuickWebViewPrivate::setViewInAttachedProperties):
+        (QQuickWebViewAttached::QQuickWebViewAttached):
+        (QQuickWebViewAttached::setView):
+        (QQuickWebView::qmlAttachedProperties):
+        * UIProcess/API/qt/qquickwebview_p.h:
+        * UIProcess/API/qt/qquickwebview_p_p.h:
+        * UIProcess/API/qt/tests/qmltests/WebView/tst_javaScriptDialogs.qml:
+        * UIProcess/qt/QtDialogRunner.h:
+        (QtDialogRunner::dialog):
+
 2011-11-21  Jochen Eisinger  <[email protected]>
 
         Implement Meta referrer

Modified: trunk/Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp (100904 => 100905)


--- trunk/Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp	2011-11-21 13:20:30 UTC (rev 100904)
+++ trunk/Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp	2011-11-21 13:28:27 UTC (rev 100905)
@@ -231,6 +231,7 @@
     QtDialogRunner dialogRunner;
     if (!dialogRunner.initForAlert(alertDialog, q, alertText))
         return;
+    setViewInAttachedProperties(dialogRunner.dialog());
 
     disableMouseEvents();
     dialogRunner.exec();
@@ -246,6 +247,7 @@
     QtDialogRunner dialogRunner;
     if (!dialogRunner.initForConfirm(confirmDialog, q, message))
         return true;
+    setViewInAttachedProperties(dialogRunner.dialog());
 
     disableMouseEvents();
     dialogRunner.exec();
@@ -267,6 +269,7 @@
         ok = true;
         return defaultValue;
     }
+    setViewInAttachedProperties(dialogRunner.dialog());
 
     disableMouseEvents();
     dialogRunner.exec();
@@ -337,6 +340,13 @@
         initializeTouch(q);
 }
 
+void QQuickWebViewPrivate::setViewInAttachedProperties(QObject* object)
+{
+    Q_Q(QQuickWebView);
+    QQuickWebViewAttached* attached = static_cast<QQuickWebViewAttached*>(qmlAttachedPropertiesObject<QQuickWebView>(object));
+    attached->setView(q);
+}
+
 static QtPolicyInterface::PolicyAction toPolicyAction(QQuickWebView::NavigationPolicy policy)
 {
     switch (policy) {
@@ -385,6 +395,21 @@
     QObject::connect(pageProxy, SIGNAL(receivedMessageFromNavigatorQtObject(QVariantMap)), q, SIGNAL(messageReceived(QVariantMap)));
 }
 
+QQuickWebViewAttached::QQuickWebViewAttached(QObject* object)
+    : QObject(object)
+    , m_view(0)
+{
+
+}
+
+void QQuickWebViewAttached::setView(QQuickWebView* view)
+{
+    if (m_view == view)
+        return;
+    m_view = view;
+    emit viewChanged();
+}
+
 QQuickWebViewExperimental::QQuickWebViewExperimental(QQuickWebView *webView)
     : QObject(webView)
     , q_ptr(webView)
@@ -567,6 +592,11 @@
     return m_experimental;
 }
 
+QQuickWebViewAttached* QQuickWebView::qmlAttachedProperties(QObject* object)
+{
+    return new QQuickWebViewAttached(object);
+}
+
 void QQuickWebView::geometryChanged(const QRectF& newGeometry, const QRectF& oldGeometry)
 {
     Q_D(QQuickWebView);

Modified: trunk/Source/WebKit2/UIProcess/API/qt/qquickwebview_p.h (100904 => 100905)


--- trunk/Source/WebKit2/UIProcess/API/qt/qquickwebview_p.h	2011-11-21 13:20:30 UTC (rev 100904)
+++ trunk/Source/WebKit2/UIProcess/API/qt/qquickwebview_p.h	2011-11-21 13:28:27 UTC (rev 100905)
@@ -26,6 +26,7 @@
 
 class QDeclarativeComponent;
 class QQuickWebPage;
+class QQuickWebViewAttached;
 class QQuickWebViewPrivate;
 class QQuickWebViewExperimental;
 class QWebDownloadItem;
@@ -86,6 +87,7 @@
     QQuickWebPage* page();
 
     QQuickWebViewExperimental* experimental() const;
+    static QQuickWebViewAttached* qmlAttachedProperties(QObject*);
 
 public Q_SLOTS:
     void load(const QUrl&);
@@ -136,6 +138,24 @@
 
 QML_DECLARE_TYPE(QQuickWebView)
 
+class QWEBKIT_EXPORT QQuickWebViewAttached : public QObject {
+    Q_OBJECT
+    Q_PROPERTY(QQuickWebView* view READ view NOTIFY viewChanged FINAL)
+
+public:
+    QQuickWebViewAttached(QObject* object);
+    QQuickWebView* view() const { return m_view; }
+    void setView(QQuickWebView*);
+
+Q_SIGNALS:
+    void viewChanged();
+
+private:
+    QQuickWebView* m_view;
+};
+
+QML_DECLARE_TYPEINFO(QQuickWebView, QML_HAS_ATTACHED_PROPERTIES)
+
 class QWEBKIT_EXPORT QQuickWebViewExperimental : public QObject {
     Q_OBJECT
     Q_PROPERTY(QDeclarativeComponent* alertDialog READ alertDialog WRITE setAlertDialog NOTIFY alertDialogChanged)

Modified: trunk/Source/WebKit2/UIProcess/API/qt/qquickwebview_p_p.h (100904 => 100905)


--- trunk/Source/WebKit2/UIProcess/API/qt/qquickwebview_p_p.h	2011-11-21 13:20:30 UTC (rev 100904)
+++ trunk/Source/WebKit2/UIProcess/API/qt/qquickwebview_p_p.h	2011-11-21 13:28:27 UTC (rev 100905)
@@ -109,6 +109,8 @@
 
     bool isTransitioningToNewPage() const { return transitioningToNewPage; }
 
+    void setViewInAttachedProperties(QObject*);
+
     QScopedPointer<QQuickWebPage> pageView;
     QScopedPointer<QtViewportInteractionEngine> interactionEngine;
 

Modified: trunk/Source/WebKit2/UIProcess/API/qt/tests/qmltests/WebView/tst_javaScriptDialogs.qml (100904 => 100905)


--- trunk/Source/WebKit2/UIProcess/API/qt/tests/qmltests/WebView/tst_javaScriptDialogs.qml	2011-11-21 13:20:30 UTC (rev 100904)
+++ trunk/Source/WebKit2/UIProcess/API/qt/tests/qmltests/WebView/tst_javaScriptDialogs.qml	2011-11-21 13:28:27 UTC (rev 100905)
@@ -16,7 +16,8 @@
             running: true
             interval: 1
             onTriggered: {
-                webView.messageFromAlertDialog = message
+                // Testing both attached property and id defined in the Component context.
+                parent.WebView.view.messageFromAlertDialog = message
                 webView.modelMessageEqualsMessage = Boolean(model.message == message)
                 model.dismiss()
             }
@@ -28,7 +29,7 @@
             running: true
             interval: 1
             onTriggered: {
-                webView.confirmCount += 1
+                parent.WebView.view.confirmCount += 1
                 if (message == "ACCEPT")
                     model.accept()
                 else
@@ -42,7 +43,7 @@
             running: true
             interval: 1
             onTriggered: {
-                webView.promptCount += 1
+                parent.WebView.view.promptCount += 1
                 if (message == "REJECT")
                     model.reject()
                 else {

Modified: trunk/Source/WebKit2/UIProcess/qt/QtDialogRunner.h (100904 => 100905)


--- trunk/Source/WebKit2/UIProcess/qt/QtDialogRunner.h	2011-11-21 13:20:30 UTC (rev 100904)
+++ trunk/Source/WebKit2/UIProcess/qt/QtDialogRunner.h	2011-11-21 13:28:27 UTC (rev 100905)
@@ -39,6 +39,8 @@
     bool initForConfirm(QDeclarativeComponent*, QQuickItem* dialogParent, const QString& message);
     bool initForPrompt(QDeclarativeComponent*, QQuickItem* dialogParent, const QString& message, const QString& defaultValue);
 
+    QQuickItem* dialog() const { return m_dialog.get(); }
+
     bool wasAccepted() const { return m_wasAccepted; }
     QString result() const { return m_result; }
 

Modified: trunk/Source/qtwebkit-export.map (100904 => 100905)


--- trunk/Source/qtwebkit-export.map	2011-11-21 13:20:30 UTC (rev 100904)
+++ trunk/Source/qtwebkit-export.map	2011-11-21 13:28:27 UTC (rev 100905)
@@ -108,6 +108,9 @@
         *QQuickWebViewPrivateExtension;
         non-virtual?thunk?to?QQuickWebViewPrivateExtension*;
         QQuickWebViewPrivateExtension::*;
+        *QQuickWebViewAttached;
+        non-virtual?thunk?to?QQuickWebViewAttached*;
+        QQuickWebViewAttached::*;
         *QQuickWebViewExperimental;
         non-virtual?thunk?to?QQuickWebViewExperimental*;
         QQuickWebViewExperimental::*;
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to