aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJarkko Koivikko <jarkko.koivikko@code-q.fi>2016-12-30 22:40:29 +0200
committerJarkko Koivikko <jarkko.koivikko@code-q.fi>2017-01-20 17:37:48 +0000
commit9bf05a32a155566e8f3ff30651b410b5b4822f71 (patch)
treedf5eacac2a14e4dd2f85b8c0dca217ce477d7f6a /src
parent839a0afec5c39c92ac7221e2c5b6a866d6848382 (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.cpp13
-rw-r--r--src/virtualkeyboard/settings.cpp19
-rw-r--r--src/virtualkeyboard/settings.h4
-rw-r--r--src/virtualkeyboard/virtualkeyboardsettings.cpp22
-rw-r--r--src/virtualkeyboard/virtualkeyboardsettings.h5
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();
};
}