diff options
author | Michal Klocek <michal.klocek@theqtcompany.com> | 2016-05-11 13:43:45 +0200 |
---|---|---|
committer | Michal Klocek <michal.klocek@theqtcompany.com> | 2016-07-02 04:33:41 +0000 |
commit | 42504596248a10eb31a5b719e0676b71f55871e4 (patch) | |
tree | e7f1008595bb417e2b92bcfbb5bf4c0eb71196bf /src/webenginewidgets/api | |
parent | 1e204d3b74fbe275fb4d9fe45bbb011742f828f9 (diff) |
Add back spellchecking support
This reverts commit:
* d364c05de52f9ab39034e56cac4e0a7981dc541d
* e507f140b70f464fb970d2f94357ac588dcc4f03
Moreover it fixes shut down of keyed services,
updates versioning of and fixes spellcheck unit
test context menu request, which otherwise
fails on windows.
Change-Id: I9bfc589544cb969abd6d2d7af69531b4c5c907b7
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
Diffstat (limited to 'src/webenginewidgets/api')
-rw-r--r-- | src/webenginewidgets/api/qwebenginecontextmenudata.cpp | 24 | ||||
-rw-r--r-- | src/webenginewidgets/api/qwebenginecontextmenudata.h | 2 | ||||
-rw-r--r-- | src/webenginewidgets/api/qwebenginepage.cpp | 28 | ||||
-rw-r--r-- | src/webenginewidgets/api/qwebenginepage.h | 2 | ||||
-rw-r--r-- | src/webenginewidgets/api/qwebengineprofile.cpp | 61 | ||||
-rw-r--r-- | src/webenginewidgets/api/qwebengineprofile.h | 5 |
6 files changed, 122 insertions, 0 deletions
diff --git a/src/webenginewidgets/api/qwebenginecontextmenudata.cpp b/src/webenginewidgets/api/qwebenginecontextmenudata.cpp index c7019977b..808c6f8b0 100644 --- a/src/webenginewidgets/api/qwebenginecontextmenudata.cpp +++ b/src/webenginewidgets/api/qwebenginecontextmenudata.cpp @@ -187,6 +187,30 @@ bool QWebEngineContextMenuData::isContentEditable() const } /*! + If the context is a word considered misspelled by the spell-checker, returns the misspelled word. + + \since 5.8 +*/ +QString QWebEngineContextMenuData::misspelledWord() const +{ + if (d) + return d->misspelledWord; + return QString(); +} + +/*! + If the context is a word considered misspelled by the spell-checker, returns a list of suggested replacements. + + \since 5.8 +*/ +QStringList QWebEngineContextMenuData::spellCheckerSuggestions() const +{ + if (d) + return d->spellCheckerSuggestions; + return QStringList(); +} + +/*! \internal */ QWebEngineContextMenuData &QWebEngineContextMenuData::operator=(const QWebEngineContextDataPrivate &priv) diff --git a/src/webenginewidgets/api/qwebenginecontextmenudata.h b/src/webenginewidgets/api/qwebenginecontextmenudata.h index d04b747c8..1a2ff8de4 100644 --- a/src/webenginewidgets/api/qwebenginecontextmenudata.h +++ b/src/webenginewidgets/api/qwebenginecontextmenudata.h @@ -76,6 +76,8 @@ public: QUrl mediaUrl() const; MediaType mediaType() const; bool isContentEditable() const; + QString misspelledWord() const; + QStringList spellCheckerSuggestions() const; private: void reset(); diff --git a/src/webenginewidgets/api/qwebenginepage.cpp b/src/webenginewidgets/api/qwebenginepage.cpp index 63fb6eb44..c4dd4604e 100644 --- a/src/webenginewidgets/api/qwebenginepage.cpp +++ b/src/webenginewidgets/api/qwebenginepage.cpp @@ -1127,6 +1127,22 @@ void QWebEnginePage::triggerAction(WebAction action, bool) } } +/*! + * \since 5.8 + * Replace the current misspelled word with \a replacement. + * + * The current misspelled word can be found in QWebEngineContextMenuData::misspelledWord(), + * and suggested replacements in QWebEngineContextMenuData::spellCheckerSuggestions(). + * + * \sa contextMenuData(), + */ + +void QWebEnginePage::replaceMisspelledWord(const QString &replacement) +{ + Q_D(QWebEnginePage); + d->adapter->replaceMisspelling(replacement); +} + void QWebEnginePage::findText(const QString &subString, FindFlags options, const QWebEngineCallback<bool> &resultCallback) { Q_D(QWebEnginePage); @@ -1318,6 +1334,18 @@ QMenu *QWebEnginePage::createStandardContextMenu() QAction *action = 0; const WebEngineContextMenuData &contextMenuData = *d->contextData.d; + if (contextMenuData.isEditable && !contextMenuData.spellCheckerSuggestions.isEmpty()) { + QPointer<QWebEnginePage> thisRef(this); + for (int i=0; i < contextMenuData.spellCheckerSuggestions.count() && i < 4; i++) { + QAction *action = new QAction(menu); + QString replacement = contextMenuData.spellCheckerSuggestions.at(i); + QObject::connect(action, &QAction::triggered, [thisRef, replacement] { if (thisRef) thisRef->replaceMisspelledWord(replacement); }); + action->setText(replacement); + menu->addAction(action); + } + menu->addSeparator(); + } + if (!contextMenuData.linkText.isEmpty() && contextMenuData.linkUrl.isValid()) { action = QWebEnginePage::action(OpenLinkInThisWindow); action->setText(tr("Follow Link")); diff --git a/src/webenginewidgets/api/qwebenginepage.h b/src/webenginewidgets/api/qwebenginepage.h index 40f5b1a23..ad32f169d 100644 --- a/src/webenginewidgets/api/qwebenginepage.h +++ b/src/webenginewidgets/api/qwebenginepage.h @@ -207,6 +207,8 @@ public: #endif virtual void triggerAction(WebAction action, bool checked = false); + void replaceMisspelledWord(const QString &replacement); + virtual bool event(QEvent*); #ifdef Q_QDOC void findText(const QString &subString, FindFlags options = FindFlags()); diff --git a/src/webenginewidgets/api/qwebengineprofile.cpp b/src/webenginewidgets/api/qwebengineprofile.cpp index 83b6f9714..b35fb0cc1 100644 --- a/src/webenginewidgets/api/qwebengineprofile.cpp +++ b/src/webenginewidgets/api/qwebengineprofile.cpp @@ -558,6 +558,67 @@ QWebEngineProfile *QWebEngineProfile::defaultProfile() } /*! + \since 5.8 + + Sets the current \a language for the spell checker. + The language should match the name of the \c .bdic dictionary. + For example, the \a language \c en-US will load the \c en-US.bdic + dictionary file. + + The web engine checks for the \c qtwebengine_dictionaries subdirectory + first in the local directory and if it is not found in the Qt + installation directory: + + \list + \li QCoreApplication::applicationDirPath()/qtwebengine_dictionaries + \li [QLibraryInfo::DataPath]/qtwebengine_dictionaries + \endlist + + For more information about how to compile \c .bdic dictionaries, see the + \l{WebEngine Widgets Spellchecker Example}{Spellchecker Example}. + +*/ +void QWebEngineProfile::setSpellCheckLanguage(const QString &language) +{ + Q_D(QWebEngineProfile); + d->browserContext()->setSpellCheckLanguage(language); +} + +/*! + \since 5.8 + + Returns the language used by the spell checker. +*/ +QString QWebEngineProfile::spellCheckLanguage() const +{ + const Q_D(QWebEngineProfile); + return d->browserContext()->spellCheckLanguage(); +} + +/*! + \since 5.8 + + Enables spell checker if \a enable is \c true, otherwise disables it. + \sa isSpellCheckEnabled() + */ +void QWebEngineProfile::setSpellCheckEnabled(bool enable) +{ + Q_D(QWebEngineProfile); + d->browserContext()->setSpellCheckEnabled(enable); +} +/*! + \since 5.8 + + Returns \c true if the spell checker is enabled; otherwise returns \c false. + \sa setSpellCheckEnabled() + */ +bool QWebEngineProfile::isSpellCheckEnabled() const +{ + const Q_D(QWebEngineProfile); + return d->browserContext()->isSpellCheckEnabled(); +} + +/*! Returns the default settings for all pages in this profile. */ QWebEngineSettings *QWebEngineProfile::settings() const diff --git a/src/webenginewidgets/api/qwebengineprofile.h b/src/webenginewidgets/api/qwebengineprofile.h index d981fa5bb..704414bcf 100644 --- a/src/webenginewidgets/api/qwebengineprofile.h +++ b/src/webenginewidgets/api/qwebengineprofile.h @@ -121,6 +121,11 @@ public: void clearHttpCache(); + void setSpellCheckLanguage(const QString &language); + QString spellCheckLanguage() const; + void setSpellCheckEnabled(bool enabled); + bool isSpellCheckEnabled() const; + static QWebEngineProfile *defaultProfile(); Q_SIGNALS: |