summaryrefslogtreecommitdiffstats
path: root/src/webengine
diff options
context:
space:
mode:
Diffstat (limited to 'src/webengine')
-rw-r--r--src/webengine/api/qquickwebengineprofile.cpp90
-rw-r--r--src/webengine/api/qquickwebengineprofile.h17
-rw-r--r--src/webengine/api/qquickwebengineview.cpp37
-rw-r--r--src/webengine/api/qquickwebengineview_p.h8
-rw-r--r--src/webengine/plugin/plugin.cpp1
-rw-r--r--src/webengine/ui_delegates_manager.cpp5
-rw-r--r--src/webengine/ui_delegates_manager.h3
-rw-r--r--src/webengine/webengine.pro7
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)