diff options
-rw-r--r-- | src/core/api/qwebenginedesktopmediarequest.cpp | 59 | ||||
-rw-r--r-- | src/core/api/qwebenginedesktopmediarequest.h | 38 | ||||
-rw-r--r-- | src/core/api/qwebenginepage.h | 2 | ||||
-rw-r--r-- | src/webenginequick/api/qquickwebengineview.cpp | 1 | ||||
-rw-r--r-- | tests/auto/quick/publicapi/tst_publicapi.cpp | 6 |
5 files changed, 39 insertions, 67 deletions
diff --git a/src/core/api/qwebenginedesktopmediarequest.cpp b/src/core/api/qwebenginedesktopmediarequest.cpp index d9ec572c5..80e809230 100644 --- a/src/core/api/qwebenginedesktopmediarequest.cpp +++ b/src/core/api/qwebenginedesktopmediarequest.cpp @@ -21,28 +21,16 @@ QT_BEGIN_NAMESPACE If a web application requests access to the contents of a display, QWebEnginePage::desktopMediaRequested will be emitted with a QWebEngineDesktopMediaRequest instance as an argument which holds references to - data models for available windows and screens that can be captured. - The signal handler needs to then either call QWebEngineDesktopMediaRequest:selectScreen(), - QWebEngineDesktopMediaRequest::selectWindow() to accept the request and start screensharing. - \sa QWebEnginePage::desktopMediaRequested(). -*/ - -/*! - \class QWebEngineMediaSourceModel - \brief A data model that represents display sources for screen capturing. + QAbstractListModels for available windows and screens that can be captured. - \since 6.7 - - \inmodule QtWebEngineCore - The QWebEngineMediaSourceModel exposes the \e name Role. - The name role specifies the name of the source which is the title of a window or the number of - the display. + The data model's \e Qt::DisplayRole specifies the name of the source which is the title of a + window or the number of the display. The model is dynamically updates if the available list of sources has changed e.g a window is opened/closed. - This type is uncreatable, it can only be accessed from a QWebEngineDesktopMediaRequest. - \sa QWebEngineDesktopMediaRequest::windowsModel(), - QWebEngineDesktopMediaRequest::screensModel(). + The signal handler needs to then either call QWebEngineDesktopMediaRequest:selectScreen() or + QWebEngineDesktopMediaRequest::selectWindow() to accept the request and start screensharing. + \sa QWebEnginePage::desktopMediaRequested(). */ class QWebEngineMediaSourceModelPrivate @@ -58,6 +46,20 @@ QWebEngineMediaSourceModelPrivate::QWebEngineMediaSourceModelPrivate( { } +class QWebEngineMediaSourceModel : public QAbstractListModel +{ +public: + ~QWebEngineMediaSourceModel() override; + + int rowCount(const QModelIndex &parent = QModelIndex()) const override; + QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; + +private: + friend class QWebEngineDesktopMediaRequestPrivate; + explicit QWebEngineMediaSourceModel(QWebEngineMediaSourceModelPrivate *dd); + std::unique_ptr<QWebEngineMediaSourceModelPrivate> d; +}; + QWebEngineMediaSourceModel::QWebEngineMediaSourceModel(QWebEngineMediaSourceModelPrivate *dd) : d(dd) { @@ -79,7 +81,7 @@ QWebEngineMediaSourceModel::QWebEngineMediaSourceModel(QWebEngineMediaSourceMode QObject::connect(d->m_mediaList, &QtWebEngineCore::DesktopMediaListQt::sourceNameChanged, this, [this](int index) { Q_EMIT dataChanged(QModelIndex(), QModelIndex(), - { Qt::DisplayRole, Roles::NameRole }); + { Qt::DisplayRole }); }); } @@ -96,8 +98,6 @@ QVariant QWebEngineMediaSourceModel::data(const QModelIndex &index, int role) co return QVariant(); switch (role) { case Qt::DisplayRole: - case Qt::EditRole: - case NameRole: return d->m_mediaList->getSourceName(index.row()); default: break; @@ -105,13 +105,6 @@ QVariant QWebEngineMediaSourceModel::data(const QModelIndex &index, int role) co return QVariant(); } -QHash<int, QByteArray> QWebEngineMediaSourceModel::roleNames() const -{ - QHash<int, QByteArray> roles = QAbstractItemModel::roleNames(); - roles[NameRole] = "name"; - return roles; -} - QWebEngineDesktopMediaRequestPrivate::QWebEngineDesktopMediaRequestPrivate( QtWebEngineCore::DesktopMediaController *controller) : controller(controller) @@ -160,22 +153,24 @@ QWebEngineDesktopMediaRequest::QWebEngineDesktopMediaRequest( { } +QWebEngineDesktopMediaRequest::~QWebEngineDesktopMediaRequest() = default; + /*! - Returns a QWebEngineMediaSourceModel for the available screens. + Returns a QAbstractListModel for the available screens. \sa windowsModel() */ -QWebEngineMediaSourceModel *QWebEngineDesktopMediaRequest::screensModel() const +QAbstractListModel *QWebEngineDesktopMediaRequest::screensModel() const { return d->m_screensModel.get(); } /*! - Returns a QWebEngineMediaSourceModel for the available windows. + Returns a QAbstractListModel for the available windows. \sa screensModel() */ -QWebEngineMediaSourceModel *QWebEngineDesktopMediaRequest::windowsModel() const +QAbstractListModel *QWebEngineDesktopMediaRequest::windowsModel() const { return d->m_windowsModel.get(); } diff --git a/src/core/api/qwebenginedesktopmediarequest.h b/src/core/api/qwebenginedesktopmediarequest.h index 3f999ee0c..a68c517b7 100644 --- a/src/core/api/qwebenginedesktopmediarequest.h +++ b/src/core/api/qwebenginedesktopmediarequest.h @@ -15,43 +15,19 @@ class DesktopMediaController; QT_BEGIN_NAMESPACE class QWebEnginePagePrivate; class QQuickWebEngineViewPrivate; -class QWebEngineMediaSourceModelPrivate; class QWebEngineDesktopMediaRequestPrivate; -class Q_WEBENGINECORE_EXPORT QWebEngineMediaSourceModel : public QAbstractListModel -{ - Q_OBJECT -public: - enum Roles { NameRole = Qt::UserRole }; - ~QWebEngineMediaSourceModel() override; - - int rowCount(const QModelIndex &parent = QModelIndex()) const override; - QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; - QHash<int, QByteArray> roleNames() const override; - -private: - friend class QWebEngineDesktopMediaRequestPrivate; - explicit QWebEngineMediaSourceModel(QWebEngineMediaSourceModelPrivate *dd); - std::unique_ptr<QWebEngineMediaSourceModelPrivate> d; -}; - class QWebEngineDesktopMediaRequest { Q_GADGET_EXPORT(Q_WEBENGINECORE_EXPORT) - Q_PROPERTY(QWebEngineMediaSourceModel *screensModel READ screensModel FINAL) - Q_PROPERTY(QWebEngineMediaSourceModel *windowsModel READ windowsModel FINAL) + Q_PROPERTY(QAbstractListModel *screensModel READ screensModel FINAL) + Q_PROPERTY(QAbstractListModel *windowsModel READ windowsModel FINAL) public: - Q_WEBENGINECORE_EXPORT - QWebEngineDesktopMediaRequest(const QWebEngineDesktopMediaRequest &other) noexcept = default; - Q_WEBENGINECORE_EXPORT - QWebEngineDesktopMediaRequest(QWebEngineDesktopMediaRequest &&other) noexcept = default; - QT_MOVE_ASSIGNMENT_OPERATOR_IMPL_VIA_PURE_SWAP(QWebEngineDesktopMediaRequest) - Q_WEBENGINECORE_EXPORT ~QWebEngineDesktopMediaRequest() = default; - void swap(QWebEngineDesktopMediaRequest &other) noexcept { d.swap(other.d); } + Q_WEBENGINECORE_EXPORT ~QWebEngineDesktopMediaRequest(); - Q_WEBENGINECORE_EXPORT QWebEngineMediaSourceModel *screensModel() const; - Q_WEBENGINECORE_EXPORT QWebEngineMediaSourceModel *windowsModel() const; + Q_WEBENGINECORE_EXPORT QAbstractListModel *screensModel() const; + Q_WEBENGINECORE_EXPORT QAbstractListModel *windowsModel() const; Q_WEBENGINECORE_EXPORT Q_INVOKABLE void selectScreen(const QModelIndex &index) const; Q_WEBENGINECORE_EXPORT Q_INVOKABLE void selectWindow(const QModelIndex &index) const; @@ -60,11 +36,11 @@ public: private: friend class QWebEnginePagePrivate; friend class QQuickWebEngineViewPrivate; + Q_DISABLE_COPY(QWebEngineDesktopMediaRequest) Q_WEBENGINECORE_EXPORT explicit QWebEngineDesktopMediaRequest( QtWebEngineCore::DesktopMediaController *controller); - QSharedPointer<QWebEngineDesktopMediaRequestPrivate> d; + std::unique_ptr<QWebEngineDesktopMediaRequestPrivate> d; }; -Q_DECLARE_SHARED(QWebEngineDesktopMediaRequest) QT_END_NAMESPACE diff --git a/src/core/api/qwebenginepage.h b/src/core/api/qwebenginepage.h index 9ed4e7877..45e96fe73 100644 --- a/src/core/api/qwebenginepage.h +++ b/src/core/api/qwebenginepage.h @@ -6,7 +6,6 @@ #include <QtWebEngineCore/qtwebenginecoreglobal.h> #include <QtWebEngineCore/qwebengineclientcertificateselection.h> -#include <QtWebEngineCore/qwebenginedesktopmediarequest.h> #include <QtWebEngineCore/qwebenginedownloadrequest.h> #include <QtWebEngineCore/qwebenginequotarequest.h> @@ -27,6 +26,7 @@ class QRect; class QVariant; class QWebChannel; class QWebEngineCertificateError; +class QWebEngineDesktopMediaRequest; class QWebEngineFileSystemAccessRequest; class QWebEngineFindTextResult; class QWebEngineFullScreenRequest; diff --git a/src/webenginequick/api/qquickwebengineview.cpp b/src/webenginequick/api/qquickwebengineview.cpp index 4b90dab82..97d0d8451 100644 --- a/src/webenginequick/api/qquickwebengineview.cpp +++ b/src/webenginequick/api/qquickwebengineview.cpp @@ -31,6 +31,7 @@ #include "web_contents_adapter.h" #include <QtWebEngineCore/qwebenginecertificateerror.h> +#include <QtWebEngineCore/qwebenginedesktopmediarequest.h> #include <QtWebEngineCore/qwebenginefilesystemaccessrequest.h> #include <QtWebEngineCore/qwebenginefindtextresult.h> #include <QtWebEngineCore/qwebenginefullscreenrequest.h> diff --git a/tests/auto/quick/publicapi/tst_publicapi.cpp b/tests/auto/quick/publicapi/tst_publicapi.cpp index 21b1e52c5..3869d4cd6 100644 --- a/tests/auto/quick/publicapi/tst_publicapi.cpp +++ b/tests/auto/quick/publicapi/tst_publicapi.cpp @@ -67,7 +67,7 @@ static const QList<const QMetaObject *> typesToCheck = QList<const QMetaObject * << &QWebEngineFileSystemAccessRequest::staticMetaObject << &QWebEngineFindTextResult::staticMetaObject << &QWebEngineLoadingInfo::staticMetaObject - << &QWebEngineMediaSourceModel::staticMetaObject + << &QAbstractListModel::staticMetaObject << &QWebEngineNavigationRequest::staticMetaObject << &QWebEngineNewWindowRequest::staticMetaObject << &QWebEngineNotification::staticMetaObject @@ -270,8 +270,8 @@ static const QStringList expectedAPI = QStringList() << "QQuickWebEngineTooltipRequest.text --> QString" << "QQuickWebEngineTooltipRequest.type --> QQuickWebEngineTooltipRequest::RequestType" << "QQuickWebEngineTooltipRequest.accepted --> bool" - << "QWebEngineDesktopMediaRequest.screensModel --> QWebEngineMediaSourceModel*" - << "QWebEngineDesktopMediaRequest.windowsModel --> QWebEngineMediaSourceModel*" + << "QWebEngineDesktopMediaRequest.screensModel --> QAbstractListModel*" + << "QWebEngineDesktopMediaRequest.windowsModel --> QAbstractListModel*" << "QWebEngineDesktopMediaRequest.selectScreen(QModelIndex) --> void" << "QWebEngineDesktopMediaRequest.selectWindow(QModelIndex) --> void" << "QWebEngineDesktopMediaRequest.cancel() --> void" |