diff --git a/examples/quick/quicknanobrowser/quickwindow.qml b/examples/quick/quicknanobrowser/quickwindow.qml index 7ec4fc02169e1f25443a3ed8822444fccd731f7b..a3b8c405dcd42ca57823303564bebc0d84030f3f 100644 --- a/examples/quick/quicknanobrowser/quickwindow.qml +++ b/examples/quick/quicknanobrowser/quickwindow.qml @@ -62,36 +62,43 @@ ApplicationWindow { toolBar: ToolBar { id: navigationBar - RowLayout { + ColumnLayout { anchors.fill: parent + RowLayout { + ToolButton { + id: backButton + iconSource: "icons/go-previous.png" + onClicked: webEngineView.goBack() + enabled: webEngineView.canGoBack + } + ToolButton { + id: forwardButton + iconSource: "icons/go-next.png" + onClicked: webEngineView.goForward() + enabled: webEngineView.canGoForward + } + ToolButton { + id: reloadButton + iconSource: webEngineView.loading ? "icons/process-stop.png" : "icons/view-refresh.png" + onClicked: webEngineView.reload() + } + Image { + id: faviconImage + width: 16; height: 16 + } + TextField { + id: addressBar + focus: true + Layout.fillWidth: true - ToolButton { - id: backButton - iconSource: "icons/go-previous.png" - onClicked: webEngineView.goBack() - enabled: webEngineView.canGoBack + onAccepted: webEngineView.url = utils.fromUserInput(text) + } } - ToolButton { - id: forwardButton - iconSource: "icons/go-next.png" - onClicked: webEngineView.goForward() - enabled: webEngineView.canGoForward - } - ToolButton { - id: reloadButton - iconSource: webEngineView.loading ? "icons/process-stop.png" : "icons/view-refresh.png" - onClicked: webEngineView.reload() - } - Image { - id: faviconImage - width: 16; height: 16 - } - TextField { - id: addressBar - focus: true + ProgressBar { Layout.fillWidth: true - - onAccepted: webEngineView.url = utils.fromUserInput(text) + id: progressBar + minimumValue: 0 + maximumValue: 100 } } } @@ -104,5 +111,6 @@ ApplicationWindow { onUrlChanged: addressBar.text = url onIconChanged: faviconImage.source = url + onLoadProgressChanged: progressBar.value = loadProgress } } diff --git a/lib/quick/qquickwebengineview.cpp b/lib/quick/qquickwebengineview.cpp index aa942c017041785ab18175aafcc858f0a59a0aff..55d8710933839ec60c5be73bf97d564d24528712 100644 --- a/lib/quick/qquickwebengineview.cpp +++ b/lib/quick/qquickwebengineview.cpp @@ -51,6 +51,7 @@ QT_BEGIN_NAMESPACE QQuickWebEngineViewPrivate::QQuickWebEngineViewPrivate() : adapter(new WebContentsAdapter) + , loadProgress(0) { adapter->initialize(this); } @@ -87,6 +88,13 @@ void QQuickWebEngineViewPrivate::loadingStateChanged() Q_EMIT q->loadingStateChanged(); } +void QQuickWebEngineViewPrivate::loadProgressChanged(int progress) +{ + Q_Q(QQuickWebEngineView); + loadProgress = progress; + Q_EMIT q->loadProgressChanged(); +} + QRectF QQuickWebEngineViewPrivate::viewportRect() const { Q_Q(const QQuickWebEngineView); @@ -170,6 +178,12 @@ bool QQuickWebEngineView::isLoading() const return d->adapter->isLoading(); } +int QQuickWebEngineView::loadProgress() const +{ + Q_D(const QQuickWebEngineView); + return d->loadProgress; +} + QString QQuickWebEngineView::title() const { Q_D(const QQuickWebEngineView); diff --git a/lib/quick/qquickwebengineview_p.h b/lib/quick/qquickwebengineview_p.h index 1c3e27732cec1ddf0ff71aaddb2a915e81911c3c..87e7403d61521a1a44828b7b4c84b8d1849bb815 100644 --- a/lib/quick/qquickwebengineview_p.h +++ b/lib/quick/qquickwebengineview_p.h @@ -53,6 +53,7 @@ class QQuickWebEngineView : public QQuickItem { Q_PROPERTY(QUrl url READ url WRITE setUrl NOTIFY urlChanged) Q_PROPERTY(QUrl icon READ icon NOTIFY iconChanged) Q_PROPERTY(bool loading READ isLoading NOTIFY loadingStateChanged) + Q_PROPERTY(int loadProgress READ loadProgress NOTIFY loadProgressChanged) Q_PROPERTY(QString title READ title NOTIFY titleChanged) Q_PROPERTY(bool canGoBack READ canGoBack NOTIFY loadingStateChanged) Q_PROPERTY(bool canGoForward READ canGoForward NOTIFY loadingStateChanged) @@ -65,6 +66,7 @@ public: void setUrl(const QUrl&); QUrl icon() const; bool isLoading() const; + int loadProgress() const; QString title() const; bool canGoBack() const; bool canGoForward() const; @@ -80,6 +82,7 @@ Q_SIGNALS: void urlChanged(); void iconChanged(); void loadingStateChanged(); + void loadProgressChanged(); protected: void geometryChanged(const QRectF &newGeometry, const QRectF &oldGeometry); diff --git a/lib/quick/qquickwebengineview_p_p.h b/lib/quick/qquickwebengineview_p_p.h index 38621b44d85cc35c3a28810a55be6065fda0a11b..947886c441f2450e1e6631d5c4dc713605d3adf0 100644 --- a/lib/quick/qquickwebengineview_p_p.h +++ b/lib/quick/qquickwebengineview_p_p.h @@ -63,6 +63,7 @@ public: virtual void urlChanged(const QUrl&) Q_DECL_OVERRIDE; virtual void iconChanged(const QUrl&) Q_DECL_OVERRIDE; virtual void loadingStateChanged() Q_DECL_OVERRIDE; + virtual void loadProgressChanged(int progress) Q_DECL_OVERRIDE; virtual QRectF viewportRect() const Q_DECL_OVERRIDE; virtual void loadFinished(bool success) Q_DECL_OVERRIDE; virtual void focusContainer() Q_DECL_OVERRIDE; @@ -70,6 +71,7 @@ public: QExplicitlySharedDataPointer<WebContentsAdapter> adapter; QUrl icon; + int loadProgress; }; QT_END_NAMESPACE diff --git a/lib/web_contents_adapter_client.h b/lib/web_contents_adapter_client.h index ea6e5a666ecaf6f67263bb0cbb8e09b75d4258bd..39968a8a503d9ffce9c5c85e8969395efa5b3f35 100644 --- a/lib/web_contents_adapter_client.h +++ b/lib/web_contents_adapter_client.h @@ -82,6 +82,7 @@ public: virtual void urlChanged(const QUrl&) = 0; virtual void iconChanged(const QUrl&) = 0; virtual void loadingStateChanged() = 0; + virtual void loadProgressChanged(int progress) = 0; virtual QRectF viewportRect() const = 0; virtual void loadFinished(bool success) = 0; virtual void focusContainer() = 0; diff --git a/lib/web_contents_delegate_qt.cpp b/lib/web_contents_delegate_qt.cpp index 12a00481c494f49521bfd8d9527d8d6ac27c4527..877d1cafcaef2cd77a9b054d5843d3ca21dd0fec 100644 --- a/lib/web_contents_delegate_qt.cpp +++ b/lib/web_contents_delegate_qt.cpp @@ -86,6 +86,11 @@ void WebContentsDelegateQt::LoadingStateChanged(content::WebContents* source) m_viewClient->loadingStateChanged(); } +void WebContentsDelegateQt::LoadProgressChanged(content::WebContents* source, double progress) +{ + m_viewClient->loadProgressChanged(qRound(progress * 100)); +} + void WebContentsDelegateQt::DidFailLoad(int64 frame_id, const GURL &validated_url, bool is_main_frame, int error_code, const string16 &error_description, content::RenderViewHost *render_view_host) { if (is_main_frame) diff --git a/lib/web_contents_delegate_qt.h b/lib/web_contents_delegate_qt.h index 629fd5c6c35b690e5df5efb287d0a26b1a1c30ea..b9720eac2cd35b325f8b7b6d3730c8c373fcf56c 100644 --- a/lib/web_contents_delegate_qt.h +++ b/lib/web_contents_delegate_qt.h @@ -62,6 +62,7 @@ public: virtual void NavigationStateChanged(const content::WebContents* source, unsigned changed_flags); virtual void AddNewContents(content::WebContents* source, content::WebContents* new_contents, WindowOpenDisposition disposition, const gfx::Rect& initial_pos, bool user_gesture, bool* was_blocked); virtual void LoadingStateChanged(content::WebContents* source); + virtual void LoadProgressChanged(content::WebContents* source, double progress); virtual void DidFailLoad(int64 frame_id, const GURL &validated_url, bool is_main_frame, int error_code, const string16 &error_description, content::RenderViewHost *render_view_host); virtual void DidFinishLoad(int64 frame_id, const GURL &validated_url, bool is_main_frame, content::RenderViewHost *render_view_host); virtual void DidUpdateFaviconURL(int32 page_id, const std::vector<content::FaviconURL>& candidates); diff --git a/lib/widgets/Api/qwebenginepage.cpp b/lib/widgets/Api/qwebenginepage.cpp index ab3b1e675d382f106d9d19161846142cb94f78ab..8fafb3c47434d7d52d8955bdafca9f587ae1bb75 100644 --- a/lib/widgets/Api/qwebenginepage.cpp +++ b/lib/widgets/Api/qwebenginepage.cpp @@ -86,6 +86,12 @@ void QWebEnginePagePrivate::loadingStateChanged() updateNavigationActions(); } +void QWebEnginePagePrivate::loadProgressChanged(int progress) +{ + Q_Q(QWebEnginePage); + Q_EMIT q->loadProgress(progress); +} + QRectF QWebEnginePagePrivate::viewportRect() const { return view ? view->geometry() : QRectF(); diff --git a/lib/widgets/Api/qwebenginepage_p.h b/lib/widgets/Api/qwebenginepage_p.h index ad1de0047edaf57cb25a28a05397489fd02aab4b..e8f511d2d6668c7fe6b14ad68462aeba155c94ca 100644 --- a/lib/widgets/Api/qwebenginepage_p.h +++ b/lib/widgets/Api/qwebenginepage_p.h @@ -69,6 +69,7 @@ public: virtual void urlChanged(const QUrl&) Q_DECL_OVERRIDE; virtual void iconChanged(const QUrl&) Q_DECL_OVERRIDE; virtual void loadingStateChanged() Q_DECL_OVERRIDE; + virtual void loadProgressChanged(int progress) Q_DECL_OVERRIDE; virtual QRectF viewportRect() const Q_DECL_OVERRIDE; virtual void loadFinished(bool success) Q_DECL_OVERRIDE; virtual void focusContainer() Q_DECL_OVERRIDE; diff --git a/lib/widgets/Api/qwebengineview.cpp b/lib/widgets/Api/qwebengineview.cpp index a1b4fbc272e82e8696ccd1860379927658cdf5c5..d07e710abe2bd2c7790a42e0463c40986bc0de4e 100644 --- a/lib/widgets/Api/qwebengineview.cpp +++ b/lib/widgets/Api/qwebengineview.cpp @@ -75,6 +75,7 @@ void QWebEngineViewPrivate::bind(QWebEngineView *view, QWebEnginePage *page) QObject::connect(page, &QWebEnginePage::titleChanged, view, &QWebEngineView::titleChanged); QObject::connect(page, &QWebEnginePage::urlChanged, view, &QWebEngineView::urlChanged); QObject::connect(page, &QWebEnginePage::loadStarted, view, &QWebEngineView::loadStarted); + QObject::connect(page, &QWebEnginePage::loadProgress, view, &QWebEngineView::loadProgress); QObject::connect(page, &QWebEnginePage::loadFinished, view, &QWebEngineView::loadFinished); } }