diff options
Diffstat (limited to 'src/webengine/api')
-rw-r--r-- | src/webengine/api/qquickwebenginehistory.cpp | 55 | ||||
-rw-r--r-- | src/webengine/api/qquickwebenginehistory_p.h | 11 | ||||
-rw-r--r-- | src/webengine/api/qquickwebenginehistory_p_p.h | 21 | ||||
-rw-r--r-- | src/webengine/api/qquickwebengineview.cpp | 26 | ||||
-rw-r--r-- | src/webengine/api/qquickwebengineview_p.h | 4 | ||||
-rw-r--r-- | src/webengine/api/qquickwebengineview_p_p.h | 5 |
6 files changed, 84 insertions, 38 deletions
diff --git a/src/webengine/api/qquickwebenginehistory.cpp b/src/webengine/api/qquickwebenginehistory.cpp index f8c354eac..3b6d7bb2f 100644 --- a/src/webengine/api/qquickwebenginehistory.cpp +++ b/src/webengine/api/qquickwebenginehistory.cpp @@ -51,6 +51,23 @@ QQuickWebEngineHistoryListModelPrivate::~QQuickWebEngineHistoryListModelPrivate( { } +int QQuickWebEngineHistoryListModelPrivate::count() const +{ + if (!adapter()) + return -1; + return adapter()->navigationEntryCount(); +} + +int QQuickWebEngineHistoryListModelPrivate::index(int index) const +{ + return index; +} + +int QQuickWebEngineHistoryListModelPrivate::offsetForIndex(int index) const +{ + return index - adapter()->currentNavigationEntryIndex(); +} + WebContentsAdapter *QQuickWebEngineHistoryListModelPrivate::adapter() const { return view->adapter.data(); @@ -74,6 +91,11 @@ int QQuickWebEngineBackHistoryListModelPrivate::index(int i) const return count() - 1 - i; } +int QQuickWebEngineBackHistoryListModelPrivate::offsetForIndex(int index) const +{ + return - index - 1; +} + QQuickWebEngineForwardHistoryListModelPrivate::QQuickWebEngineForwardHistoryListModelPrivate(QQuickWebEngineViewPrivate *view) : QQuickWebEngineHistoryListModelPrivate(view) { @@ -91,6 +113,11 @@ int QQuickWebEngineForwardHistoryListModelPrivate::index(int i) const return adapter()->currentNavigationEntryIndex() + i + 1; } +int QQuickWebEngineForwardHistoryListModelPrivate::offsetForIndex(int index) const +{ + return index + 1; +} + QQuickWebEngineHistoryListModel::QQuickWebEngineHistoryListModel() : QAbstractListModel() { @@ -111,6 +138,7 @@ QHash<int, QByteArray> QQuickWebEngineHistoryListModel::roleNames() const QHash<int, QByteArray> roles; roles[QQuickWebEngineHistory::UrlRole] = "url"; roles[QQuickWebEngineHistory::TitleRole] = "title"; + roles[QQuickWebEngineHistory::OffsetRole] = "offset"; return roles; } @@ -128,7 +156,7 @@ QVariant QQuickWebEngineHistoryListModel::data(const QModelIndex &index, int rol if (!index.isValid()) return QVariant(); - if (role < QQuickWebEngineHistory::UrlRole || role > QQuickWebEngineHistory::TitleRole) + if (role < QQuickWebEngineHistory::UrlRole || role > QQuickWebEngineHistory::OffsetRole) return QVariant(); if (role == QQuickWebEngineHistory::UrlRole) @@ -137,6 +165,8 @@ QVariant QQuickWebEngineHistoryListModel::data(const QModelIndex &index, int rol if (role == QQuickWebEngineHistory::TitleRole) return QString(d->adapter()->getNavigationEntryTitle(d->index(index.row()))); + if (role == QQuickWebEngineHistory::OffsetRole) + return d->offsetForIndex(index.row()); return QVariant(); } @@ -147,8 +177,7 @@ void QQuickWebEngineHistoryListModel::reset() } QQuickWebEngineHistoryPrivate::QQuickWebEngineHistoryPrivate(QQuickWebEngineViewPrivate *view) - : m_backNavigationModel(new QQuickWebEngineHistoryListModel(new QQuickWebEngineBackHistoryListModelPrivate(view))) - , m_forwardNavigationModel(new QQuickWebEngineHistoryListModel(new QQuickWebEngineForwardHistoryListModelPrivate(view))) + : m_view(view) { } @@ -165,23 +194,39 @@ QQuickWebEngineHistory::~QQuickWebEngineHistory() { } +QQuickWebEngineHistoryListModel *QQuickWebEngineHistory::items() const +{ + Q_D(const QQuickWebEngineHistory); + if (!d->m_navigationModel) + d->m_navigationModel.reset(new QQuickWebEngineHistoryListModel(new QQuickWebEngineHistoryListModelPrivate(d->m_view))); + return d->m_navigationModel.data(); +} + QQuickWebEngineHistoryListModel *QQuickWebEngineHistory::backItems() const { Q_D(const QQuickWebEngineHistory); + if (!d->m_backNavigationModel) + d->m_backNavigationModel.reset(new QQuickWebEngineHistoryListModel(new QQuickWebEngineBackHistoryListModelPrivate(d->m_view))); return d->m_backNavigationModel.data(); } QQuickWebEngineHistoryListModel *QQuickWebEngineHistory::forwardItems() const { Q_D(const QQuickWebEngineHistory); + if (!d->m_forwardNavigationModel) + d->m_forwardNavigationModel.reset(new QQuickWebEngineHistoryListModel(new QQuickWebEngineForwardHistoryListModelPrivate(d->m_view))); return d->m_forwardNavigationModel.data(); } void QQuickWebEngineHistory::reset() { Q_D(QQuickWebEngineHistory); - d->m_backNavigationModel->reset(); - d->m_forwardNavigationModel->reset(); + if (d->m_navigationModel) + d->m_navigationModel->reset(); + if (d->m_backNavigationModel) + d->m_backNavigationModel->reset(); + if (d->m_forwardNavigationModel) + d->m_forwardNavigationModel->reset(); } diff --git a/src/webengine/api/qquickwebenginehistory_p.h b/src/webengine/api/qquickwebenginehistory_p.h index 5a68fdd96..02f29b35b 100644 --- a/src/webengine/api/qquickwebenginehistory_p.h +++ b/src/webengine/api/qquickwebenginehistory_p.h @@ -37,7 +37,7 @@ #ifndef QQUICKWEBENGINEHISTORY_P_H #define QQUICKWEBENGINEHISTORY_P_H -#include <qtwebengineglobal_p.h> +#include <qtwebengineglobal.h> #include <QAbstractListModel> #include <QtCore/qshareddata.h> #include <QQuickItem> @@ -54,7 +54,7 @@ class QQuickWebEngineHistoryListModelPrivate; class QQuickWebEngineLoadRequest; class QQuickWebEngineViewPrivate; -class Q_WEBENGINE_PRIVATE_EXPORT QQuickWebEngineHistoryListModel : public QAbstractListModel { +class Q_WEBENGINE_EXPORT QQuickWebEngineHistoryListModel : public QAbstractListModel { Q_OBJECT public: @@ -75,8 +75,9 @@ private: friend class QQuickWebEngineHistory; }; -class Q_WEBENGINE_PRIVATE_EXPORT QQuickWebEngineHistory : public QQuickItem { +class Q_WEBENGINE_EXPORT QQuickWebEngineHistory : public QQuickItem { Q_OBJECT + Q_PROPERTY(QQuickWebEngineHistoryListModel *items READ items CONSTANT FINAL) Q_PROPERTY(QQuickWebEngineHistoryListModel *backItems READ backItems CONSTANT FINAL) Q_PROPERTY(QQuickWebEngineHistoryListModel *forwardItems READ forwardItems CONSTANT FINAL) @@ -86,9 +87,11 @@ public: enum NavigationHistoryRoles { UrlRole = Qt::UserRole + 1, - TitleRole = Qt::UserRole + 2 + TitleRole = Qt::UserRole + 2, + OffsetRole = Qt::UserRole + 3, }; + QQuickWebEngineHistoryListModel *items() const; QQuickWebEngineHistoryListModel *backItems() const; QQuickWebEngineHistoryListModel *forwardItems() const; diff --git a/src/webengine/api/qquickwebenginehistory_p_p.h b/src/webengine/api/qquickwebenginehistory_p_p.h index ad9b1ffaf..2ad2af26f 100644 --- a/src/webengine/api/qquickwebenginehistory_p_p.h +++ b/src/webengine/api/qquickwebenginehistory_p_p.h @@ -48,8 +48,9 @@ public: QQuickWebEngineHistoryListModelPrivate(QQuickWebEngineViewPrivate*); virtual ~QQuickWebEngineHistoryListModelPrivate(); - virtual int count() const = 0; - virtual int index(int) const = 0; + virtual int count() const; + virtual int index(int) const; + virtual int offsetForIndex(int) const; WebContentsAdapter *adapter() const; @@ -60,16 +61,18 @@ class QQuickWebEngineBackHistoryListModelPrivate : public QQuickWebEngineHistory public: QQuickWebEngineBackHistoryListModelPrivate(QQuickWebEngineViewPrivate*); - int count() const; - int index(int) const; + int count() const override; + int index(int) const override; + int offsetForIndex(int) const override; }; class QQuickWebEngineForwardHistoryListModelPrivate : public QQuickWebEngineHistoryListModelPrivate { public: QQuickWebEngineForwardHistoryListModelPrivate(QQuickWebEngineViewPrivate*); - int count() const; - int index(int) const; + int count() const override; + int index(int) const override; + int offsetForIndex(int) const override; }; class QQuickWebEngineHistoryPrivate { @@ -77,8 +80,10 @@ public: QQuickWebEngineHistoryPrivate(QQuickWebEngineViewPrivate*); ~QQuickWebEngineHistoryPrivate(); - QScopedPointer<QQuickWebEngineHistoryListModel> m_backNavigationModel; - QScopedPointer<QQuickWebEngineHistoryListModel> m_forwardNavigationModel; + QQuickWebEngineViewPrivate *m_view; + mutable QScopedPointer<QQuickWebEngineHistoryListModel> m_navigationModel; + mutable QScopedPointer<QQuickWebEngineHistoryListModel> m_backNavigationModel; + mutable QScopedPointer<QQuickWebEngineHistoryListModel> m_forwardNavigationModel; }; QT_END_NAMESPACE diff --git a/src/webengine/api/qquickwebengineview.cpp b/src/webengine/api/qquickwebengineview.cpp index 69120daa0..9bcb7d326 100644 --- a/src/webengine/api/qquickwebengineview.cpp +++ b/src/webengine/api/qquickwebengineview.cpp @@ -807,9 +807,10 @@ void QQuickWebEngineViewExperimental::findText(const QString &subString, FindFla } } -QQuickWebEngineHistory *QQuickWebEngineViewExperimental::navigationHistory() const +QQuickWebEngineHistory *QQuickWebEngineView::navigationHistory() const { - return d_ptr->m_history.data(); + Q_D(const QQuickWebEngineView); + return d->m_history.data(); } /*! @@ -874,26 +875,19 @@ void QQuickWebEngineViewExperimental::grantFeaturePermission(const QUrl &securit } } -void QQuickWebEngineViewExperimental::goBackTo(int index) +void QQuickWebEngineView::goBackOrForward(int offset) { - if (!d_ptr->adapter) - return; - int count = d_ptr->adapter->currentNavigationEntryIndex(); - if (index < 0 || index >= count) + Q_D(QQuickWebEngineView); + if (!d->adapter) return; + const int current = d->adapter->currentNavigationEntryIndex(); + const int count = d->adapter->navigationEntryCount(); + const int index = current + offset; - d_ptr->adapter->navigateToIndex(count - 1 - index); -} - -void QQuickWebEngineViewExperimental::goForwardTo(int index) -{ - if (!d_ptr->adapter) - return; - int count = d_ptr->adapter->navigationEntryCount() - d_ptr->adapter->currentNavigationEntryIndex() - 1; if (index < 0 || index >= count) return; - d_ptr->adapter->navigateToIndex(d_ptr->adapter->currentNavigationEntryIndex() + 1 + index); + d->adapter->navigateToIndex(index); } void QQuickWebEngineView::geometryChanged(const QRectF &newGeometry, const QRectF &oldGeometry) diff --git a/src/webengine/api/qquickwebengineview_p.h b/src/webengine/api/qquickwebengineview_p.h index 91fd4f654..a9f387e87 100644 --- a/src/webengine/api/qquickwebengineview_p.h +++ b/src/webengine/api/qquickwebengineview_p.h @@ -44,6 +44,7 @@ QT_BEGIN_NAMESPACE class QQmlWebChannel; class QQuickWebEngineCertificateError; +class QQuickWebEngineHistory; class QQuickWebEngineLoadRequest; class QQuickWebEngineNavigationRequest; class QQuickWebEngineNewViewRequest; @@ -64,6 +65,7 @@ class Q_WEBENGINE_PRIVATE_EXPORT QQuickWebEngineView : public QQuickItem { Q_PROPERTY(qreal zoomFactor READ zoomFactor WRITE setZoomFactor NOTIFY zoomFactorChanged REVISION 1) Q_PROPERTY(QQuickWebEngineProfile *profile READ profile WRITE setProfile FINAL REVISION 1) Q_PROPERTY(QQuickWebEngineSettings *settings READ settings REVISION 1) + Q_PROPERTY(QQuickWebEngineHistory *navigationHistory READ navigationHistory CONSTANT FINAL REVISION 1) Q_PROPERTY(QQmlWebChannel *webChannel READ webChannel WRITE setWebChannel NOTIFY webChannelChanged REVISION 1) Q_ENUMS(NavigationRequestAction); Q_ENUMS(NavigationType); @@ -147,12 +149,14 @@ public: QQuickWebEngineSettings *settings() const; QQmlWebChannel *webChannel(); void setWebChannel(QQmlWebChannel *); + QQuickWebEngineHistory *navigationHistory() const; public Q_SLOTS: void runJavaScript(const QString&, const QJSValue & = QJSValue()); void loadHtml(const QString &html, const QUrl &baseUrl = QUrl()); void goBack(); void goForward(); + void goBackOrForward(int index); void reload(); void stop(); diff --git a/src/webengine/api/qquickwebengineview_p_p.h b/src/webengine/api/qquickwebengineview_p_p.h index 14770282e..a3b29af19 100644 --- a/src/webengine/api/qquickwebengineview_p_p.h +++ b/src/webengine/api/qquickwebengineview_p_p.h @@ -50,7 +50,6 @@ class WebContentsAdapter; class UIDelegatesManager; QT_BEGIN_NAMESPACE -class QQuickWebEngineHistory; class QQuickWebEngineView; class QQmlComponent; class QQmlContext; @@ -79,7 +78,6 @@ class Q_WEBENGINE_PRIVATE_EXPORT QQuickWebEngineViewExperimental : public QObjec Q_PROPERTY(QQuickWebEngineViewport *viewport READ viewport) Q_PROPERTY(QQmlComponent *extraContextMenuEntriesComponent READ extraContextMenuEntriesComponent WRITE setExtraContextMenuEntriesComponent NOTIFY extraContextMenuEntriesComponentChanged) Q_PROPERTY(bool isFullScreen READ isFullScreen WRITE setIsFullScreen NOTIFY isFullScreenChanged) - Q_PROPERTY(QQuickWebEngineHistory *navigationHistory READ navigationHistory CONSTANT FINAL) Q_ENUMS(Feature) Q_FLAGS(FindFlags) @@ -102,11 +100,8 @@ public: QQuickWebEngineViewport *viewport() const; void setExtraContextMenuEntriesComponent(QQmlComponent *); QQmlComponent *extraContextMenuEntriesComponent() const; - QQuickWebEngineHistory *navigationHistory() const; public Q_SLOTS: - void goBackTo(int index); - void goForwardTo(int index); void findText(const QString&, FindFlags, const QJSValue & = QJSValue()); void grantFeaturePermission(const QUrl &securityOrigin, Feature, bool granted); |