diff options
author | Jarkko Koivikko <jarkko.koivikko@code-q.fi> | 2016-12-30 22:40:29 +0200 |
---|---|---|
committer | Jarkko Koivikko <jarkko.koivikko@code-q.fi> | 2017-01-20 17:37:48 +0000 |
commit | 9bf05a32a155566e8f3ff30651b410b5b4822f71 (patch) | |
tree | df5eacac2a14e4dd2f85b8c0dca217ce477d7f6a /src | |
parent | 839a0afec5c39c92ac7221e2c5b6a866d6848382 (diff) |
Add new feature "Auto commit word"
This feature, when enabled, automatically commits the remaining single
word in the word candidate list, when there was initially multiple
candidates.
This feature can be enabled from settings using
VirtualKeyboardSettings.wordSelectionList.autoCommitWord property.
[ChangeLog] Added support for automatic selection of the only remaining
word in the suggestion list.
Change-Id: Iecfafcaeb3ccb72e1d8e53b92c395b0d1dc84163
Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
Diffstat (limited to 'src')
-rw-r--r-- | src/virtualkeyboard/selectionlistmodel.cpp | 13 | ||||
-rw-r--r-- | src/virtualkeyboard/settings.cpp | 19 | ||||
-rw-r--r-- | src/virtualkeyboard/settings.h | 4 | ||||
-rw-r--r-- | src/virtualkeyboard/virtualkeyboardsettings.cpp | 22 | ||||
-rw-r--r-- | src/virtualkeyboard/virtualkeyboardsettings.h | 5 |
5 files changed, 60 insertions, 3 deletions
diff --git a/src/virtualkeyboard/selectionlistmodel.cpp b/src/virtualkeyboard/selectionlistmodel.cpp index 5d3ac375..4aa09927 100644 --- a/src/virtualkeyboard/selectionlistmodel.cpp +++ b/src/virtualkeyboard/selectionlistmodel.cpp @@ -29,6 +29,7 @@ #include "selectionlistmodel.h" #include "abstractinputmethod.h" +#include "settings.h" #include <QtCore/private/qabstractitemmodel_p.h> namespace QtVirtualKeyboard { @@ -40,7 +41,8 @@ public: QAbstractItemModelPrivate(), dataSource(0), type(SelectionListModel::WordCandidateList), - rowCount(0) + rowCount(0), + wclAutoCommitWord(false) { } @@ -48,6 +50,7 @@ public: AbstractInputMethod *dataSource; SelectionListModel::Type type; int rowCount; + bool wclAutoCommitWord; }; /*! @@ -258,6 +261,10 @@ void SelectionListModel::selectionListChanged(int type) d->rowCount = 0; endResetModel(); } + if (type == SelectionListModel::WordCandidateList) + d->wclAutoCommitWord = ((oldCount > 1 || (oldCount == 1 && d->wclAutoCommitWord)) && newCount == 1 && + Settings::instance()->wclAutoCommitWord() && + dataAt(0).toString().length() > 1); if (d->rowCount != oldCount) emit countChanged(); } @@ -269,8 +276,10 @@ void SelectionListModel::selectionListChanged(int type) void SelectionListModel::selectionListActiveItemChanged(int type, int index) { Q_D(SelectionListModel); - if (static_cast<Type>(type) == d->type) { + if (static_cast<Type>(type) == d->type && index < d->rowCount) { emit activeItemChanged(index); + if (index == 0 && d->wclAutoCommitWord) + selectItem(0); } } diff --git a/src/virtualkeyboard/settings.cpp b/src/virtualkeyboard/settings.cpp index 55faca8c..85a0f3a2 100644 --- a/src/virtualkeyboard/settings.cpp +++ b/src/virtualkeyboard/settings.cpp @@ -44,7 +44,8 @@ public: activeLocales(), layoutPath(), wclAutoHideDelay(5000), - wclAlwaysVisible(false) + wclAlwaysVisible(false), + wclAutoCommitWord(false) {} QString style; @@ -55,6 +56,7 @@ public: QUrl layoutPath; int wclAutoHideDelay; bool wclAlwaysVisible; + bool wclAutoCommitWord; }; static QScopedPointer<Settings> s_settingsInstance; @@ -196,4 +198,19 @@ void Settings::setWclAlwaysVisible(bool wclAlwaysVisible) } } +bool Settings::wclAutoCommitWord() const +{ + Q_D(const Settings); + return d->wclAutoCommitWord; +} + +void Settings::setWclAutoCommitWord(bool wclAutoCommitWord) +{ + Q_D(Settings); + if (d->wclAutoCommitWord != wclAutoCommitWord) { + d->wclAutoCommitWord = wclAutoCommitWord; + emit wclAutoCommitWordChanged(); + } +} + } // namespace QtVirtualKeyboard diff --git a/src/virtualkeyboard/settings.h b/src/virtualkeyboard/settings.h index 3bc65fbb..09e6bcb2 100644 --- a/src/virtualkeyboard/settings.h +++ b/src/virtualkeyboard/settings.h @@ -72,6 +72,9 @@ public: bool wclAlwaysVisible() const; void setWclAlwaysVisible(bool wclAlwaysVisible); + bool wclAutoCommitWord() const; + void setWclAutoCommitWord(bool wclAutoCommitWord); + signals: void styleChanged(); void styleNameChanged(); @@ -81,6 +84,7 @@ signals: void layoutPathChanged(); void wclAutoHideDelayChanged(); void wclAlwaysVisibleChanged(); + void wclAutoCommitWordChanged(); }; } // namespace QtVirtualKeyboard diff --git a/src/virtualkeyboard/virtualkeyboardsettings.cpp b/src/virtualkeyboard/virtualkeyboardsettings.cpp index bb832a2e..92908730 100644 --- a/src/virtualkeyboard/virtualkeyboardsettings.cpp +++ b/src/virtualkeyboard/virtualkeyboardsettings.cpp @@ -165,6 +165,7 @@ VirtualKeyboardSettings::VirtualKeyboardSettings(QQmlEngine *engine) : connect(settings, SIGNAL(layoutPathChanged()), SIGNAL(layoutPathChanged())); connect(settings, SIGNAL(wclAutoHideDelayChanged()), &d->wordCandidateListSettings, SIGNAL(autoHideDelayChanged())); connect(settings, SIGNAL(wclAlwaysVisibleChanged()), &d->wordCandidateListSettings, SIGNAL(alwaysVisibleChanged())); + connect(settings, SIGNAL(wclAutoCommitWordChanged()), &d->wordCandidateListSettings, SIGNAL(autoCommitWordChanged())); } /*! @@ -383,6 +384,17 @@ void VirtualKeyboardSettings::resetStyle() remain visible. The default value is \c false. + \row + \li autoCommitWord + \li This property enables the automatic commit feature that is activated + when the word candidate list is narrowed down to a single candidate. + + The automatic commit feature takes effect when the word candidate + list initially contains multiple words and is reduced to single word + after additional input. This word will be selected and committed + automatically without user interaction. + + This property is set to \c false by default. \endtable */ @@ -411,4 +423,14 @@ void WordCandidateListSettings::setAlwaysVisible(bool alwaysVisible) Settings::instance()->setWclAlwaysVisible(alwaysVisible); } +bool WordCandidateListSettings::autoCommitWord() const +{ + return Settings::instance()->wclAutoCommitWord(); +} + +void WordCandidateListSettings::setAutoCommitWord(bool autoCommitWord) +{ + Settings::instance()->setWclAutoCommitWord(autoCommitWord); +} + } // namespace QtVirtualKeyboard diff --git a/src/virtualkeyboard/virtualkeyboardsettings.h b/src/virtualkeyboard/virtualkeyboardsettings.h index 397746e0..da43d10e 100644 --- a/src/virtualkeyboard/virtualkeyboardsettings.h +++ b/src/virtualkeyboard/virtualkeyboardsettings.h @@ -90,6 +90,7 @@ class WordCandidateListSettings : public QObject Q_OBJECT Q_PROPERTY(int autoHideDelay READ autoHideDelay WRITE setAutoHideDelay NOTIFY autoHideDelayChanged) Q_PROPERTY(bool alwaysVisible READ alwaysVisible WRITE setAlwaysVisible NOTIFY alwaysVisibleChanged) + Q_PROPERTY(bool autoCommitWord READ autoCommitWord WRITE setAutoCommitWord NOTIFY autoCommitWordChanged) explicit WordCandidateListSettings(QObject *parent = 0); friend class VirtualKeyboardSettingsPrivate; @@ -101,9 +102,13 @@ public: bool alwaysVisible() const; void setAlwaysVisible(bool alwaysVisible); + bool autoCommitWord() const; + void setAutoCommitWord(bool autoCommitWord); + signals: void autoHideDelayChanged(); void alwaysVisibleChanged(); + void autoCommitWordChanged(); }; } |