From 11e90d520a782e1d5da1ed965ab070f868199032 Mon Sep 17 00:00:00 2001 From: Valentin Fokin Date: Tue, 23 Jan 2018 13:46:43 +0100 Subject: Add EditFlags and MediaFlags to Quick and Widget API - EditFlags shows the available edit actions - MediaFlags shows the status and available actions of the current media element - Update the documentations - Register ContextMenuRequest 1.1 - Update plugins.qmltypes [ChangeLog][QtWebEngine][QtWebEngineWidgets] Add EditFlags and MediaFlags to the APIs Change-Id: Ia7603696a291df5465c5e612adc2456f5f6cb479 Reviewed-by: Leena Miettinen Reviewed-by: Peter Varga Reviewed-by: Allan Sandfeld Jensen --- .../api/qquickwebenginecontextmenurequest.cpp | 116 +++++++++++++++++++++ .../api/qquickwebenginecontextmenurequest_p.h | 38 +++++++ src/webengine/plugin/plugin.cpp | 2 + src/webengine/plugin/plugins.qmltypes | 66 ++++++++++-- 4 files changed, 216 insertions(+), 6 deletions(-) (limited to 'src/webengine') diff --git a/src/webengine/api/qquickwebenginecontextmenurequest.cpp b/src/webengine/api/qquickwebenginecontextmenurequest.cpp index c53e28d93..dea89b9ab 100644 --- a/src/webengine/api/qquickwebenginecontextmenurequest.cpp +++ b/src/webengine/api/qquickwebenginecontextmenurequest.cpp @@ -42,6 +42,7 @@ QT_BEGIN_NAMESPACE +// Match MediaType enum ASSERT_ENUMS_MATCH(QtWebEngineCore::WebEngineContextMenuData::MediaTypeNone, QQuickWebEngineContextMenuRequest::MediaTypeNone) ASSERT_ENUMS_MATCH(QtWebEngineCore::WebEngineContextMenuData::MediaTypeImage, @@ -57,6 +58,52 @@ ASSERT_ENUMS_MATCH(QtWebEngineCore::WebEngineContextMenuData::MediaTypeFile, ASSERT_ENUMS_MATCH(QtWebEngineCore::WebEngineContextMenuData::MediaTypePlugin, QQuickWebEngineContextMenuRequest::MediaTypePlugin) +// Match MediaFlag enum +ASSERT_ENUMS_MATCH(QtWebEngineCore::WebEngineContextMenuData::MediaNone, + QQuickWebEngineContextMenuRequest::MediaNone) +ASSERT_ENUMS_MATCH(QtWebEngineCore::WebEngineContextMenuData::MediaInError, + QQuickWebEngineContextMenuRequest::MediaInError) +ASSERT_ENUMS_MATCH(QtWebEngineCore::WebEngineContextMenuData::MediaPaused, + QQuickWebEngineContextMenuRequest::MediaPaused) +ASSERT_ENUMS_MATCH(QtWebEngineCore::WebEngineContextMenuData::MediaMuted, + QQuickWebEngineContextMenuRequest::MediaMuted) +ASSERT_ENUMS_MATCH(QtWebEngineCore::WebEngineContextMenuData::MediaLoop, + QQuickWebEngineContextMenuRequest::MediaLoop) +ASSERT_ENUMS_MATCH(QtWebEngineCore::WebEngineContextMenuData::MediaCanSave, + QQuickWebEngineContextMenuRequest::MediaCanSave) +ASSERT_ENUMS_MATCH(QtWebEngineCore::WebEngineContextMenuData::MediaHasAudio, + QQuickWebEngineContextMenuRequest::MediaHasAudio) +ASSERT_ENUMS_MATCH(QtWebEngineCore::WebEngineContextMenuData::MediaCanToggleControls, + QQuickWebEngineContextMenuRequest::MediaCanToggleControls) +ASSERT_ENUMS_MATCH(QtWebEngineCore::WebEngineContextMenuData::MediaControls, + QQuickWebEngineContextMenuRequest::MediaControls) +ASSERT_ENUMS_MATCH(QtWebEngineCore::WebEngineContextMenuData::MediaCanPrint, + QQuickWebEngineContextMenuRequest::MediaCanPrint) +ASSERT_ENUMS_MATCH(QtWebEngineCore::WebEngineContextMenuData::MediaCanRotate, + QQuickWebEngineContextMenuRequest::MediaCanRotate) + +// Match EditFlag enum +ASSERT_ENUMS_MATCH(QtWebEngineCore::WebEngineContextMenuData::CanDoNone, + QQuickWebEngineContextMenuRequest::CanDoNone) +ASSERT_ENUMS_MATCH(QtWebEngineCore::WebEngineContextMenuData::CanUndo, + QQuickWebEngineContextMenuRequest::CanUndo) +ASSERT_ENUMS_MATCH(QtWebEngineCore::WebEngineContextMenuData::CanRedo, + QQuickWebEngineContextMenuRequest::CanRedo) +ASSERT_ENUMS_MATCH(QtWebEngineCore::WebEngineContextMenuData::CanCut, + QQuickWebEngineContextMenuRequest::CanCut) +ASSERT_ENUMS_MATCH(QtWebEngineCore::WebEngineContextMenuData::CanCopy, + QQuickWebEngineContextMenuRequest::CanCopy) +ASSERT_ENUMS_MATCH(QtWebEngineCore::WebEngineContextMenuData::CanPaste, + QQuickWebEngineContextMenuRequest::CanPaste) +ASSERT_ENUMS_MATCH(QtWebEngineCore::WebEngineContextMenuData::CanDelete, + QQuickWebEngineContextMenuRequest::CanDelete) +ASSERT_ENUMS_MATCH(QtWebEngineCore::WebEngineContextMenuData::CanSelectAll, + QQuickWebEngineContextMenuRequest::CanSelectAll) +ASSERT_ENUMS_MATCH(QtWebEngineCore::WebEngineContextMenuData::CanTranslate, + QQuickWebEngineContextMenuRequest::CanTranslate) +ASSERT_ENUMS_MATCH(QtWebEngineCore::WebEngineContextMenuData::CanEditRichly, + QQuickWebEngineContextMenuRequest::CanEditRichly) + /*! \qmltype ContextMenuRequest \instantiates QQuickWebEngineContextMenuRequest @@ -272,4 +319,73 @@ void QQuickWebEngineContextMenuRequest::setAccepted(bool accepted) m_accepted = accepted; } +/*! + \qmlproperty flags ContextMenuRequest::mediaFlags + \readonly + \since QtWebEngine 1.7 + + The current media element's status and its available operations. + \c MediaNone if the selected web page content is not a media element. + + \value ContextMenuRequest.MediaNone + Not a media element. + \value ContextMenuRequest.MediaInError + An error occurred. + \value ContextMenuRequest.MediaPaused + Media is paused. + \value ContextMenuRequest.MediaMuted + Media is muted. + \value ContextMenuRequest.MediaLoop + Media can be looped. + \value ContextMenuRequest.MediaCanSave + Media can be saved. + \value ContextMenuRequest.MediaHasAudio + Media has audio. + \value ContextMenuRequest.MediaCanToggleControls + Media can show controls. + \value ContextMenuRequest.MediaControls + Media controls are shown. + \value ContextMenuRequest.MediaCanPrint + Media is printable. + \value ContextMenuRequest.MediaCanRotate + Media is rotatable. +*/ +QQuickWebEngineContextMenuRequest::MediaFlags QQuickWebEngineContextMenuRequest::mediaFlags() const +{ + return static_cast(m_data->mediaFlags()); +} + +/*! + \qmlproperty flags ContextMenuRequest::editFlags + \readonly + \since QtWebEngine 1.7 + + The available edit operations in the current context or \c CanDoNone if no actions are available. + + \value ContextMenuRequest.CanDoNone + Nothing can be done. + \value ContextMenuRequest.CanUndo + Undo is available. + \value ContextMenuRequest.CanRedo + Redo is available. + \value ContextMenuRequest.CanCut + Cut is available. + \value ContextMenuRequest.CanCopy + Copy is available. + \value ContextMenuRequest.CanPaste + Paste is available. + \value ContextMenuRequest.CanDelete + Delete is available. + \value ContextMenuRequest.CanSelectAll + Select All is available. + \value ContextMenuRequest.CanTranslate + Translate is available. + \value ContextMenuRequest.CanEditRichly + Context is richly editable. +*/ +QQuickWebEngineContextMenuRequest::EditFlags QQuickWebEngineContextMenuRequest::editFlags() const +{ + return static_cast(m_data->editFlags()); +} + QT_END_NAMESPACE diff --git a/src/webengine/api/qquickwebenginecontextmenurequest_p.h b/src/webengine/api/qquickwebenginecontextmenurequest_p.h index 3d2de14a2..5f0b0c282 100644 --- a/src/webengine/api/qquickwebenginecontextmenurequest_p.h +++ b/src/webengine/api/qquickwebenginecontextmenurequest_p.h @@ -75,6 +75,38 @@ public: }; Q_ENUM(MediaType) + // Must match QWebEngineCore::WebEngineContextMenuData::MediaFlags: + enum MediaFlag { + MediaNone = 0x0, + MediaInError = 0x1, + MediaPaused = 0x2, + MediaMuted = 0x4, + MediaLoop = 0x8, + MediaCanSave = 0x10, + MediaHasAudio = 0x20, + MediaCanToggleControls = 0x40, + MediaControls = 0x80, + MediaCanPrint = 0x100, + MediaCanRotate = 0x200, + }; + Q_DECLARE_FLAGS(MediaFlags, MediaFlag) + + + // Must match QWebEngineCore::WebEngineContextMenuData::EditFlags: + enum EditFlag { + CanDoNone = 0x0, + CanUndo = 0x1, + CanRedo = 0x2, + CanCut = 0x4, + CanCopy = 0x8, + CanPaste = 0x10, + CanDelete = 0x20, + CanSelectAll = 0x40, + CanTranslate = 0x80, + CanEditRichly = 0x100, + }; + Q_DECLARE_FLAGS(EditFlags, EditFlag) + Q_PROPERTY(int x READ x CONSTANT FINAL) Q_PROPERTY(int y READ y CONSTANT FINAL) Q_PROPERTY(QString selectedText READ selectedText CONSTANT FINAL) @@ -86,6 +118,8 @@ public: Q_PROPERTY(QString misspelledWord READ misspelledWord CONSTANT FINAL) Q_PROPERTY(QStringList spellCheckerSuggestions READ spellCheckerSuggestions CONSTANT FINAL) Q_PROPERTY(bool accepted READ isAccepted WRITE setAccepted FINAL) + Q_PROPERTY(MediaFlags mediaFlags READ mediaFlags CONSTANT FINAL REVISION 1) + Q_PROPERTY(EditFlags editFlags READ editFlags CONSTANT FINAL REVISION 1) ~QQuickWebEngineContextMenuRequest(); int x() const; @@ -100,11 +134,15 @@ public: QStringList spellCheckerSuggestions() const; bool isAccepted() const; void setAccepted(bool accepted); + MediaFlags mediaFlags() const; + EditFlags editFlags() const; private: QQuickWebEngineContextMenuRequest(const QtWebEngineCore::WebEngineContextMenuData &data, QObject *parent = nullptr); QScopedPointer m_data; bool m_accepted; + Q_FLAGS(MediaFlags) + Q_FLAGS(EditFlags) friend class QQuickWebEngineView; friend class QQuickWebEngineViewPrivate; Q_DISABLE_COPY(QQuickWebEngineContextMenuRequest) diff --git a/src/webengine/plugin/plugin.cpp b/src/webengine/plugin/plugin.cpp index 03ce5a332..5f9d16158 100644 --- a/src/webengine/plugin/plugin.cpp +++ b/src/webengine/plugin/plugin.cpp @@ -125,6 +125,8 @@ public: qmlRegisterUncreatableType(uri, 1, 4, "ContextMenuRequest", msgUncreatableType("ContextMenuRequest")); + qmlRegisterUncreatableType(uri, 1, 7, "ContextMenuRequest", + msgUncreatableType("ContextMenuRequest")); qmlRegisterUncreatableType(uri, 1, 4, "AuthenticationDialogRequest", msgUncreatableType("AuthenticationDialogRequest")); qmlRegisterUncreatableType(uri, 1, 4, "JavaScriptDialogRequest", diff --git a/src/webengine/plugin/plugins.qmltypes b/src/webengine/plugin/plugins.qmltypes index b57aa4498..43d7d9064 100644 --- a/src/webengine/plugin/plugins.qmltypes +++ b/src/webengine/plugin/plugins.qmltypes @@ -84,9 +84,12 @@ Module { Component { name: "QQuickWebEngineContextMenuRequest" prototype: "QObject" - exports: ["QtWebEngine/ContextMenuRequest 1.4"] + exports: [ + "QtWebEngine/ContextMenuRequest 1.4", + "QtWebEngine/ContextMenuRequest 1.7" + ] isCreatable: false - exportMetaObjectRevisions: [0] + exportMetaObjectRevisions: [0, 1] Enum { name: "MediaType" values: { @@ -99,6 +102,37 @@ Module { "MediaTypePlugin": 6 } } + Enum { + name: "MediaFlags" + values: { + "MediaNone": 0, + "MediaInError": 1, + "MediaPaused": 2, + "MediaMuted": 4, + "MediaLoop": 8, + "MediaCanSave": 16, + "MediaHasAudio": 32, + "MediaCanToggleControls": 64, + "MediaControls": 128, + "MediaCanPrint": 256, + "MediaCanRotate": 512 + } + } + Enum { + name: "EditFlags" + values: { + "CanDoNone": 0, + "CanUndo": 1, + "CanRedo": 2, + "CanCut": 4, + "CanCopy": 8, + "CanPaste": 16, + "CanDelete": 32, + "CanSelectAll": 64, + "CanTranslate": 128, + "CanEditRichly": 256 + } + } Property { name: "x"; type: "int"; isReadonly: true } Property { name: "y"; type: "int"; isReadonly: true } Property { name: "selectedText"; type: "string"; isReadonly: true } @@ -110,6 +144,8 @@ Module { Property { name: "misspelledWord"; type: "string"; isReadonly: true } Property { name: "spellCheckerSuggestions"; type: "QStringList"; isReadonly: true } Property { name: "accepted"; type: "bool" } + Property { name: "mediaFlags"; revision: 1; type: "MediaFlags"; isReadonly: true } + Property { name: "editFlags"; revision: 1; type: "EditFlags"; isReadonly: true } } Component { name: "QQuickWebEngineDownloadItem" @@ -198,6 +234,7 @@ Module { Property { name: "interruptReasonString"; revision: 4; type: "string"; isReadonly: true } Property { name: "isFinished"; revision: 5; type: "bool"; isReadonly: true } Property { name: "isPaused"; revision: 5; type: "bool"; isReadonly: true } + Property { name: "isSavePageDownload"; revision: 6; type: "bool"; isReadonly: true } Signal { name: "savePageFormatChanged"; revision: 2 } Signal { name: "mimeTypeChanged"; revision: 1 } Signal { name: "typeChanged"; revision: 3 } @@ -527,10 +564,11 @@ Module { "QtWebEngine/WebEngineSettings 1.3", "QtWebEngine/WebEngineSettings 1.4", "QtWebEngine/WebEngineSettings 1.5", - "QtWebEngine/WebEngineSettings 1.6" + "QtWebEngine/WebEngineSettings 1.6", + "QtWebEngine/WebEngineSettings 1.7" ] isCreatable: false - exportMetaObjectRevisions: [0, 1, 2, 3, 4, 5] + exportMetaObjectRevisions: [0, 1, 2, 3, 4, 5, 6] Enum { name: "UnknownUrlSchemePolicy" values: { @@ -565,6 +603,8 @@ Module { Property { name: "allowWindowActivationFromJavaScript"; revision: 5; type: "bool" } Property { name: "showScrollBars"; revision: 5; type: "bool" } Property { name: "unknownUrlSchemePolicy"; revision: 6; type: "UnknownUrlSchemePolicy" } + Property { name: "playbackRequiresUserGesture"; revision: 6; type: "bool" } + Property { name: "webRTCPublicInterfacesOnly"; revision: 6; type: "bool" } Signal { name: "fullScreenSupportEnabledChanged"; revision: 1 } Signal { name: "screenCaptureEnabledChanged"; revision: 2 } Signal { name: "webGLEnabledChanged"; revision: 2 } @@ -578,6 +618,8 @@ Module { Signal { name: "allowWindowActivationFromJavaScriptChanged"; revision: 5 } Signal { name: "showScrollBarsChanged"; revision: 5 } Signal { name: "unknownUrlSchemePolicyChanged"; revision: 6 } + Signal { name: "playbackRequiresUserGestureChanged"; revision: 6 } + Signal { name: "webRTCPublicInterfacesOnlyChanged"; revision: 6 } } Component { name: "QQuickWebEngineSingleton" @@ -606,9 +648,10 @@ Module { "QtWebEngine/WebEngineView 1.3", "QtWebEngine/WebEngineView 1.4", "QtWebEngine/WebEngineView 1.5", - "QtWebEngine/WebEngineView 1.6" + "QtWebEngine/WebEngineView 1.6", + "QtWebEngine/WebEngineView 1.7" ] - exportMetaObjectRevisions: [0, 1, 2, 3, 4, 5, 6] + exportMetaObjectRevisions: [0, 1, 2, 3, 4, 5, 6, 7] Enum { name: "NavigationRequestAction" values: { @@ -921,6 +964,9 @@ Module { Property { name: "audioMuted"; revision: 3; type: "bool" } Property { name: "recentlyAudible"; revision: 3; type: "bool"; isReadonly: true } Property { name: "webChannelWorld"; revision: 3; type: "uint" } + Property { name: "inspectedView"; revision: 7; type: "QQuickWebEngineView"; isPointer: true } + Property { name: "devToolsView"; revision: 7; type: "QQuickWebEngineView"; isPointer: true } + Property { name: "testSupport"; type: "QQuickWebEngineTestSupport"; isPointer: true } Signal { name: "loadingChanged" Parameter { name: "loadRequest"; type: "QQuickWebEngineLoadRequest"; isPointer: true } @@ -1056,6 +1102,14 @@ Module { revision: 7 Parameter { name: "request"; type: "QQuickWebEngineQuotaPermissionRequest" } } + Signal { + name: "geometryChangeRequested" + revision: 7 + Parameter { name: "geometry"; type: "QRect" } + Parameter { name: "frameGeometry"; type: "QRect" } + } + Signal { name: "inspectedViewChanged"; revision: 7 } + Signal { name: "devToolsViewChanged"; revision: 7 } Method { name: "runJavaScript" Parameter { type: "string" } -- cgit v1.2.3