diff options
Diffstat (limited to 'src/webengine')
-rw-r--r-- | src/webengine/api/qquickwebengineprofile.cpp | 90 | ||||
-rw-r--r-- | src/webengine/api/qquickwebengineprofile.h | 17 | ||||
-rw-r--r-- | src/webengine/api/qquickwebengineview.cpp | 37 | ||||
-rw-r--r-- | src/webengine/api/qquickwebengineview_p.h | 8 | ||||
-rw-r--r-- | src/webengine/plugin/plugin.cpp | 1 | ||||
-rw-r--r-- | src/webengine/ui_delegates_manager.cpp | 5 | ||||
-rw-r--r-- | src/webengine/ui_delegates_manager.h | 3 | ||||
-rw-r--r-- | src/webengine/webengine.pro | 7 |
8 files changed, 163 insertions, 5 deletions
diff --git a/src/webengine/api/qquickwebengineprofile.cpp b/src/webengine/api/qquickwebengineprofile.cpp index 1cf3d8922..14405251e 100644 --- a/src/webengine/api/qquickwebengineprofile.cpp +++ b/src/webengine/api/qquickwebengineprofile.cpp @@ -592,7 +592,97 @@ QQuickWebEngineProfile *QQuickWebEngineProfile::defaultProfile() return profile; } +#if !defined(QT_NO_SPELLCHECK) /*! + \qmlmethod void QQuickWebEngineProfile::spellCheckLanguages() + + Returns the subset of \a acceptLanguages supported by the spell checker. + Checks whether the spell checker dictionary is installed for the specified + language from the \a acceptLanguages list. If the dictionary file is missing + or corrupted, the language is removed from the returned list. + + \since QtWebEngine 1.3 +*/ + +/*! + Returns the subset of \a acceptLanguages supported by the spell checker. + Checks whether the spell checker dictionary is installed for the specified + language from the \a acceptLanguages list. If the dictionary file is missing + or corrupted, the language is removed from the returned list. + + \since QtWebEngine 1.3 +*/ +QStringList QQuickWebEngineProfile::spellCheckLanguages(const QStringList &acceptLanguages) +{ + const Q_D(QQuickWebEngineProfile); + return d->browserContext()->spellCheckLanguages(acceptLanguages); +} + +/*! + \property QQuickWebEngineProfile::spellCheckLanguage + \brief the language used by the spell checker. + + \since QtWebEngine 1.3 +*/ + +/*! + \qmlproperty QString WebEngineProfile::spellCheckLanguage + + This property holds the language used by the spell checker. + + \since QtWebEngine 1.3 +*/ +void QQuickWebEngineProfile::setSpellCheckLanguage(const QString &language) +{ + Q_D(QQuickWebEngineProfile); + if (language != d->browserContext()->spellCheckLanguage()) { + d->browserContext()->setSpellCheckLanguage(language); + emit spellCheckLanguageChanged(); + } +} + +/*! + \since 5.7 + + Returns the language used by the spell checker. +*/ +QString QQuickWebEngineProfile::spellCheckLanguage() const +{ + const Q_D(QQuickWebEngineProfile); + return d->browserContext()->spellCheckLanguage(); +} + +/*! + \property QQuickWebEngineProfile::spellCheckEnabled + \brief whether the web engine spell checker is enabled. + + \since QtWebEngine 1.3 +*/ + +/*! + \qmlproperty QString WebEngineProfile::spellCheckEnabled + + This property holds whether the web engine spell checker is enabled. + + \since QtWebEngine 1.3 +*/ +void QQuickWebEngineProfile::setSpellCheckEnabled(bool enable) +{ + Q_D(QQuickWebEngineProfile); + if (enable != isSpellCheckEnabled()) { + d->browserContext()->setSpellCheckEnabled(enable); + emit spellCheckEnabledChanged(); + } +} + +bool QQuickWebEngineProfile::isSpellCheckEnabled() const +{ + const Q_D(QQuickWebEngineProfile); + return d->browserContext()->isSpellCheckEnabled(); +} +#endif +/*! + Returns the cookie store singleton, if one has been set. */ QWebEngineCookieStore *QQuickWebEngineProfile::cookieStore() const diff --git a/src/webengine/api/qquickwebengineprofile.h b/src/webengine/api/qquickwebengineprofile.h index ba0126eaa..cf4334126 100644 --- a/src/webengine/api/qquickwebengineprofile.h +++ b/src/webengine/api/qquickwebengineprofile.h @@ -71,6 +71,11 @@ class Q_WEBENGINE_EXPORT QQuickWebEngineProfile : public QObject { Q_PROPERTY(QString httpAcceptLanguage READ httpAcceptLanguage WRITE setHttpAcceptLanguage NOTIFY httpAcceptLanguageChanged FINAL REVISION 1) Q_PROPERTY(PersistentCookiesPolicy persistentCookiesPolicy READ persistentCookiesPolicy WRITE setPersistentCookiesPolicy NOTIFY persistentCookiesPolicyChanged FINAL) Q_PROPERTY(int httpCacheMaximumSize READ httpCacheMaximumSize WRITE setHttpCacheMaximumSize NOTIFY httpCacheMaximumSizeChanged FINAL) +#if !defined(QT_NO_SPELLCHECK) + Q_PROPERTY(QString spellCheckLanguage READ spellCheckLanguage WRITE setSpellCheckLanguage NOTIFY spellCheckLanguageChanged REVISION 2) + Q_PROPERTY(bool spellCheckEnabled READ isSpellCheckEnabled WRITE setSpellCheckEnabled NOTIFY spellCheckEnabledChanged REVISION 2) +# endif + public: QQuickWebEngineProfile(QObject *parent = Q_NULLPTR); ~QQuickWebEngineProfile(); @@ -128,6 +133,14 @@ public: void clearHttpCache(); +#if !defined(QT_NO_SPELLCHECK) + Q_REVISION(2) Q_INVOKABLE QStringList spellCheckLanguages(const QStringList &acceptLanguages); + Q_REVISION(2) void setSpellCheckLanguage(const QString &language); + Q_REVISION(2) QString spellCheckLanguage() const; + Q_REVISION(2) void setSpellCheckEnabled(bool enabled); + Q_REVISION(2) bool isSpellCheckEnabled() const; +# endif + static QQuickWebEngineProfile *defaultProfile(); Q_SIGNALS: @@ -140,6 +153,10 @@ Q_SIGNALS: void persistentCookiesPolicyChanged(); void httpCacheMaximumSizeChanged(); Q_REVISION(1) void httpAcceptLanguageChanged(); +#if !defined(QT_NO_SPELLCHECK) + Q_REVISION(2) void spellCheckLanguageChanged(); + Q_REVISION(2) void spellCheckEnabledChanged(); +#endif void downloadRequested(QQuickWebEngineDownloadItem *download); void downloadFinished(QQuickWebEngineDownloadItem *download); diff --git a/src/webengine/api/qquickwebengineview.cpp b/src/webengine/api/qquickwebengineview.cpp index 20264c7f7..17710b5cc 100644 --- a/src/webengine/api/qquickwebengineview.cpp +++ b/src/webengine/api/qquickwebengineview.cpp @@ -193,7 +193,17 @@ bool QQuickWebEngineViewPrivate::contextMenuRequested(const WebEngineContextMenu // Populate our menu MenuItemHandler *item = 0; - +#if !defined(QT_NO_SPELLCHECK) + if (contextMenuData.isEditable && !contextMenuData.spellCheckerSuggestions.isEmpty()) { + for (int i=0; i < contextMenuData.spellCheckerSuggestions.count() && i < 4; i++) { + item = new MenuItemHandler(menu); + int index = QQuickWebEngineView::ReplaceMisspelledWord_1 + i; + QObject::connect(item, &MenuItemHandler::triggered, [q,index] { q->triggerWebAction(static_cast<QQuickWebEngineView::WebAction>(index)); }); + ui()->addMenuItem(item, contextMenuData.spellCheckerSuggestions.at(i)); + } + ui()->addMenuSeparator(menu); + } +#endif if (!data.linkText.isEmpty() && data.linkUrl.isValid()) { item = new MenuItemHandler(menu); QObject::connect(item, &MenuItemHandler::triggered, [q] { q->triggerWebAction(QQuickWebEngineView::OpenLinkInThisWindow); }); @@ -296,7 +306,13 @@ bool QQuickWebEngineViewPrivate::contextMenuRequested(const WebEngineContextMenu QObject::connect(item, &MenuItemHandler::triggered, [q] { q->triggerWebAction(QQuickWebEngineView::ExitFullScreen); }); ui()->addMenuItem(item, QQuickWebEngineView::tr("Exit Full Screen Mode")); } - +#if !defined(QT_NO_SPELLCHECK) + if (contextMenuData.isEditable) { + item = new MenuItemHandler(menu); + QObject::connect(item, &MenuItemHandler::triggered, [q] { q->triggerWebAction(QQuickWebEngineView::ToggleSpellcheck); }); + ui()->addMenuItem(item, QQuickWebEngineView::tr("Check Spelling"), QString(), true, true, contextMenuData.isSpellCheckerEnabled); + } +#endif // FIXME: expose the context menu data as an attached property to make this more useful if (contextMenuExtraItems) { ui()->addMenuSeparator(menu); @@ -1525,6 +1541,23 @@ void QQuickWebEngineView::triggerWebAction(WebAction action) case SavePage: d->adapter->save(); break; +#if !defined(QT_NO_SPELLCHECK) + case ToggleSpellcheck: + d->adapter->toogleSpellCheckEnabled(); + break; + case ReplaceMisspelledWord_1: + d->adapter->replaceMisspelling(d->contextMenuData.spellCheckerSuggestions.at(0)); + break; + case ReplaceMisspelledWord_2: + d->adapter->replaceMisspelling(d->contextMenuData.spellCheckerSuggestions.at(1)); + break; + case ReplaceMisspelledWord_3: + d->adapter->replaceMisspelling(d->contextMenuData.spellCheckerSuggestions.at(2)); + break; + case ReplaceMisspelledWord_4: + d->adapter->replaceMisspelling(d->contextMenuData.spellCheckerSuggestions.at(3)); + break; +#endif default: Q_UNREACHABLE(); } diff --git a/src/webengine/api/qquickwebengineview_p.h b/src/webengine/api/qquickwebengineview_p.h index 3aace7563..4c6cbbaff 100644 --- a/src/webengine/api/qquickwebengineview_p.h +++ b/src/webengine/api/qquickwebengineview_p.h @@ -239,7 +239,13 @@ public: RequestClose, Unselect, SavePage, - +#if !defined(QT_NO_SPELLCHECK) + ToggleSpellcheck, + ReplaceMisspelledWord_1, + ReplaceMisspelledWord_2, + ReplaceMisspelledWord_3, + ReplaceMisspelledWord_4, +#endif WebActionCount }; Q_ENUM(WebAction) diff --git a/src/webengine/plugin/plugin.cpp b/src/webengine/plugin/plugin.cpp index c41bacf08..2feb3d195 100644 --- a/src/webengine/plugin/plugin.cpp +++ b/src/webengine/plugin/plugin.cpp @@ -76,6 +76,7 @@ public: qmlRegisterType<QQuickWebEngineView, 3>(uri, 1, 3, "WebEngineView"); qmlRegisterType<QQuickWebEngineProfile>(uri, 1, 1, "WebEngineProfile"); qmlRegisterType<QQuickWebEngineProfile, 1>(uri, 1, 2, "WebEngineProfile"); + qmlRegisterType<QQuickWebEngineProfile, 2>(uri, 1, 3, "WebEngineProfile"); qmlRegisterType<QQuickWebEngineScript>(uri, 1, 1, "WebEngineScript"); qmlRegisterUncreatableType<QQuickWebEngineCertificateError>(uri, 1, 1, "WebEngineCertificateError", tr("Cannot create separate instance of WebEngineCertificateError")); qmlRegisterUncreatableType<QQuickWebEngineDownloadItem>(uri, 1, 1, "WebEngineDownloadItem", diff --git a/src/webengine/ui_delegates_manager.cpp b/src/webengine/ui_delegates_manager.cpp index d819c3321..a82ed0f2e 100644 --- a/src/webengine/ui_delegates_manager.cpp +++ b/src/webengine/ui_delegates_manager.cpp @@ -166,7 +166,8 @@ bool UIDelegatesManager::ensureComponentLoaded(ComponentType type) if (!prop.isSignalProperty()) \ qWarning("%s is missing %s signal property.\n", qPrintable(location.toString()), qPrintable(prop.name())); -void UIDelegatesManager::addMenuItem(MenuItemHandler *menuItemHandler, const QString &text, const QString &iconName, bool enabled) +void UIDelegatesManager::addMenuItem(MenuItemHandler *menuItemHandler, const QString &text, const QString &iconName, bool enabled, + bool checkable, bool checked) { Q_ASSERT(menuItemHandler); if (!ensureComponentLoaded(MenuItem)) @@ -176,6 +177,8 @@ void UIDelegatesManager::addMenuItem(MenuItemHandler *menuItemHandler, const QSt QQmlProperty(it, QStringLiteral("text")).write(text); QQmlProperty(it, QStringLiteral("iconName")).write(iconName); QQmlProperty(it, QStringLiteral("enabled")).write(enabled); + QQmlProperty(it, QStringLiteral("checkable")).write(checkable); + QQmlProperty(it, QStringLiteral("checked")).write(checked); QQmlProperty signal(it, QStringLiteral("onTriggered")); CHECK_QML_SIGNAL_PROPERTY(signal, menuItemComponent->url()); diff --git a/src/webengine/ui_delegates_manager.h b/src/webengine/ui_delegates_manager.h index ba3e0ff60..b63aa91f1 100644 --- a/src/webengine/ui_delegates_manager.h +++ b/src/webengine/ui_delegates_manager.h @@ -103,7 +103,8 @@ public: UIDelegatesManager(QQuickWebEngineView *); - void addMenuItem(MenuItemHandler *menuItemHandler, const QString &text, const QString &iconName = QString(), bool enabled = true); + void addMenuItem(MenuItemHandler *menuItemHandler, const QString &text, const QString &iconName = QString(), + bool enabled = true, bool checkable = false, bool checked = true); void addMenuSeparator(QObject *menu); QObject *addMenu(QObject *parentMenu, const QString &title, const QPoint &pos = QPoint()); QQmlContext *creationContextForComponent(QQmlComponent *); diff --git a/src/webengine/webengine.pro b/src/webengine/webengine.pro index 8f802d5c4..10353107a 100644 --- a/src/webengine/webengine.pro +++ b/src/webengine/webengine.pro @@ -55,4 +55,11 @@ isQMLTestSupportApiEnabled() { DEFINES += ENABLE_QML_TESTSUPPORT_API } +no_spellcheck { + DEFINES += QT_NO_SPELLCHECK + MODULE_DEFINES += QT_NO_SPELLCHECK +} else { + DEFINES += ENABLE_SPELLCHECK +} + load(qt_module) |