1// Copyright (C) 2016 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
3
4#include "qquickvirtualkeyboardsettings_p.h"
5#include <QtVirtualKeyboard/private/settings_p.h>
6#include <QtVirtualKeyboard/private/virtualkeyboarddebug_p.h>
7#include <QQmlEngine>
8#include <QQmlContext>
9#include <QFileInfo>
10#include <QDir>
11#include <QRegularExpression>
12#include <QtCore/private/qobject_p.h>
13#ifdef QT_VIRTUALKEYBOARD_SOUNDS_ENABLED
14#include <QtMultimedia/qaudio.h>
15#endif
16
17QT_BEGIN_NAMESPACE
18namespace QtVirtualKeyboard {
19
20class QQuickVirtualKeyboardSettingsPrivate : public QObjectPrivate
21{
22 Q_DECLARE_PUBLIC(QQuickVirtualKeyboardSettings)
23public:
24 QQuickVirtualKeyboardSettingsPrivate(QQuickVirtualKeyboardSettings *q_ptr, QQmlEngine *engine) :
25 QObjectPrivate(),
26 q_ptr(q_ptr),
27 engine(engine)
28 {}
29
30 QString buildStylePath(const QString &path, const QString &name) const
31 {
32 QString importPath(path + name + QLatin1String("/style.qml"));
33 if (!importPath.startsWith(s: QLatin1String("qrc:"))) {
34 QUrl url = QUrl::fromLocalFile(localfile: importPath);
35 importPath = url.toString();
36 }
37 return importPath;
38 }
39
40 QString buildStyleFilePath(const QString &path, const QString &name) const
41 {
42 QString filePath(path);
43 if (filePath.startsWith(s: QLatin1String("qrc:")))
44 filePath.remove(i: 0, len: 3);
45 return filePath + name + QLatin1String("/style.qml");
46 }
47
48 QStringList qmlImportPathList() const
49 {
50 return engine ? engine->importPathList() : QStringList();
51 }
52
53 QString stylePath(const QString &name) const
54 {
55 if (name.isEmpty())
56 return QString();
57
58 QStringList stylePathList;
59 stylePathList << QLatin1String("qrc:/qt-project.org/imports/QtQuick/VirtualKeyboard/Styles/Builtin/");
60 const QStringList importPathList = qmlImportPathList();
61 // Add QML import path (Note: the QML base dir is usually the last entry in the list)
62 for (int i = importPathList.size() - 1; i >= 0; --i) {
63 const QString stylesPath = importPathList.at(i)
64 + QLatin1String("/QtQuick/VirtualKeyboard/Styles/");
65 stylePathList += stylesPath;
66 }
67
68 // Path for backwards compatibility
69 stylePathList << QLatin1String("qrc:/QtQuick/VirtualKeyboard/content/styles/");
70
71 for (const QString &stylePath : std::as_const(t&: stylePathList)) {
72 QString filePath = buildStyleFilePath(path: stylePath, name);
73 bool pathExist = false;
74 pathExist = QFileInfo::exists(file: filePath);
75 if (pathExist)
76 return buildStylePath(path: stylePath, name);
77 }
78 return QString();
79 }
80
81 QQuickVirtualKeyboardSettings *q_ptr;
82 QQmlEngine *engine;
83 QQuickWordCandidateListSettings wordCandidateListSettings;
84};
85
86/*!
87 \qmlmodule QtQuick.VirtualKeyboard.Settings
88 \title Qt Quick Virtual Keyboard Settings QML Types
89 \ingroup qmlmodules
90
91 \brief Provides settings for Qt Virtual Keyboard.
92
93 The QML types can be imported into your application using the following
94 import statements in your .qml file:
95
96 \qml
97 import QtQuick.VirtualKeyboard.Settings
98 \endqml
99*/
100
101/*!
102 \qmltype VirtualKeyboardSettings
103 \inqmlmodule QtQuick.VirtualKeyboard.Settings
104 \ingroup qtvirtualkeyboard-settings-qml
105 \since QtQuick.VirtualKeyboard 1.2
106 \brief Provides settings for virtual keyboard.
107
108 This type provides a VirtualKeyboardSettings singleton instance,
109 which can be used to configure the virtual keyboard settings.
110
111 Please note that the settings have only effect in the current
112 application's lifetime, that is, configuration changes are not
113 permanent.
114
115 For example, to change the keyboard style in application:
116
117 \code
118 Component.onCompleted: VirtualKeyboardSettings.styleName = "retro"
119 \endcode
120*/
121
122/*!
123 \class QtVirtualKeyboard::VirtualKeyboardSettings
124 \internal
125*/
126
127/*!
128 \internal
129*/
130QQuickVirtualKeyboardSettings::QQuickVirtualKeyboardSettings(QQmlEngine *engine, QObject *parent) :
131 QObject(*new QQuickVirtualKeyboardSettingsPrivate(this, engine), parent)
132{
133 Q_D(QQuickVirtualKeyboardSettings);
134 Settings *settings = Settings::instance();
135 if (settings->styleName().isEmpty())
136 resetStyle();
137 if (settings->layoutPath().isEmpty())
138 resetLayoutPath();
139 connect(asender: settings, SIGNAL(styleChanged()), SIGNAL(styleChanged()));
140 connect(asender: settings, SIGNAL(styleNameChanged()), SIGNAL(styleNameChanged()));
141 connect(asender: settings, SIGNAL(localeChanged()), SIGNAL(localeChanged()));
142 connect(asender: settings, SIGNAL(availableLocalesChanged()), SIGNAL(availableLocalesChanged()));
143 connect(asender: settings, SIGNAL(activeLocalesChanged()), SIGNAL(activeLocalesChanged()));
144 connect(asender: settings, SIGNAL(layoutPathChanged()), SIGNAL(layoutPathChanged()));
145 connect(sender: settings, SIGNAL(wclAutoHideDelayChanged()), receiver: &d->wordCandidateListSettings, SIGNAL(autoHideDelayChanged()));
146 connect(sender: settings, SIGNAL(wclAlwaysVisibleChanged()), receiver: &d->wordCandidateListSettings, SIGNAL(alwaysVisibleChanged()));
147 connect(sender: settings, SIGNAL(wclAutoCommitWordChanged()), receiver: &d->wordCandidateListSettings, SIGNAL(autoCommitWordChanged()));
148 connect(asender: settings, SIGNAL(fullScreenModeChanged()), SIGNAL(fullScreenModeChanged()));
149 connect(asender: settings, SIGNAL(userDataPathChanged()), SIGNAL(userDataPathChanged()));
150 settings->connect(asender: this, SIGNAL(userDataReset()), SIGNAL(userDataReset()));
151 connect(asender: settings, SIGNAL(hwrTimeoutForAlphabeticChanged()), SIGNAL(hwrTimeoutForAlphabeticChanged()));
152 connect(asender: settings, SIGNAL(hwrTimeoutForCjkChanged()), SIGNAL(hwrTimeoutForCjkChanged()));
153 connect(asender: settings, SIGNAL(inputMethodHintsChanged()), SIGNAL(inputMethodHintsChanged()));
154 connect(asender: settings, SIGNAL(handwritingModeDisabledChanged()), SIGNAL(handwritingModeDisabledChanged()));
155 connect(asender: settings, SIGNAL(defaultInputMethodDisabledChanged()), SIGNAL(defaultInputMethodDisabledChanged()));
156 connect(asender: settings, SIGNAL(defaultDictionaryDisabledChanged()), SIGNAL(defaultDictionaryDisabledChanged()));
157 connect(asender: settings, SIGNAL(visibleFunctionKeysChanged()), SIGNAL(visibleFunctionKeysChanged()));
158 connect(sender: settings, signal: &Settings::keySoundVolumeChanged, context: this, slot: &QQuickVirtualKeyboardSettings::keySoundVolumeChanged);
159}
160
161/*!
162 \internal
163 */
164QQuickVirtualKeyboardSettings *QQuickVirtualKeyboardSettings::create(QQmlEngine *qmlEngine, QJSEngine *)
165{
166 return new QQuickVirtualKeyboardSettings(qmlEngine);
167}
168
169/*!
170 \internal
171*/
172QString QQuickVirtualKeyboardSettings::style() const
173{
174 return Settings::instance()->style();
175}
176
177/*!
178 \internal
179*/
180QString QQuickVirtualKeyboardSettings::styleName() const
181{
182 return Settings::instance()->styleName();
183}
184
185/*!
186 \internal
187*/
188void QQuickVirtualKeyboardSettings::setStyleName(const QString &styleName)
189{
190 Q_D(QQuickVirtualKeyboardSettings);
191 Settings *settings = Settings::instance();
192 QString style = d->stylePath(name: styleName);
193 if (style.isEmpty()) {
194 qWarning() << "WARNING: Cannot find style" << styleName << "- fallback:" << settings->styleName();
195 return;
196 }
197 settings->setStyleName(styleName);
198 settings->setStyle(style);
199}
200
201/*!
202 \internal
203*/
204QUrl QQuickVirtualKeyboardSettings::layoutPath() const
205{
206 return Settings::instance()->layoutPath();
207}
208
209/*!
210 \internal
211*/
212void QQuickVirtualKeyboardSettings::setLayoutPath(const QUrl &layoutPath)
213{
214 Settings *settings = Settings::instance();
215 QDir layoutDirectory(layoutPath.toLocalFile());
216 if (!layoutDirectory.exists()) {
217 qWarning() << "WARNING: Cannot find layout path" << layoutPath;
218 return;
219 }
220 settings->setLayoutPath(layoutPath);
221}
222
223void QQuickVirtualKeyboardSettings::resetLayoutPath()
224{
225 Settings *settings = Settings::instance();
226 QUrl layoutPath(QLatin1String(QT_VIRTUALKEYBOARD_DEFAULT_LAYOUTS_DIR));
227 const QString customLayoutPath(QDir::fromNativeSeparators(pathName: qEnvironmentVariable(varName: "QT_VIRTUALKEYBOARD_LAYOUT_PATH")));
228 if (!customLayoutPath.isEmpty()) {
229 bool found = false;
230 QDir customLayoutDirectory(customLayoutPath);
231 if (customLayoutDirectory.exists()) {
232 found = true;
233 layoutPath = QUrl::fromLocalFile(localfile: customLayoutPath);
234 } else {
235 customLayoutDirectory = QDir(QUrl(customLayoutPath).toLocalFile());
236 if (customLayoutDirectory.exists()) {
237 found = true;
238 layoutPath = QUrl(customLayoutPath);
239 }
240 }
241 if (!found) {
242 qWarning() << "WARNING: Cannot assign custom layout path" << customLayoutPath << "- fallback:" << layoutPath;
243 }
244 }
245 settings->setLayoutPath(layoutPath);
246}
247
248QString QQuickVirtualKeyboardSettings::locale() const
249{
250 return Settings::instance()->locale();
251}
252
253void QQuickVirtualKeyboardSettings::setLocale(const QString &locale)
254{
255 Settings::instance()->setLocale(locale);
256}
257
258QStringList QQuickVirtualKeyboardSettings::availableLocales() const
259{
260 return Settings::instance()->availableLocales();
261}
262
263void QQuickVirtualKeyboardSettings::setActiveLocales(const QStringList &activeLocales)
264{
265 Settings::instance()->setActiveLocales(activeLocales);
266}
267
268QStringList QQuickVirtualKeyboardSettings::activeLocales() const
269{
270 return Settings::instance()->activeLocales();
271}
272
273QQuickWordCandidateListSettings *QQuickVirtualKeyboardSettings::wordCandidateList() const
274{
275 Q_D(const QQuickVirtualKeyboardSettings);
276 return const_cast<QQuickWordCandidateListSettings *>(&d->wordCandidateListSettings);
277}
278
279bool QQuickVirtualKeyboardSettings::fullScreenMode() const
280{
281 return Settings::instance()->fullScreenMode();
282}
283
284void QQuickVirtualKeyboardSettings::setFullScreenMode(bool fullScreenMode)
285{
286 return Settings::instance()->setFullScreenMode(fullScreenMode);
287}
288
289QString QQuickVirtualKeyboardSettings::userDataPath() const
290{
291 return Settings::instance()->userDataPath();
292}
293
294void QQuickVirtualKeyboardSettings::setUserDataPath(const QString &userDataPath)
295{
296 return Settings::instance()->setUserDataPath(userDataPath);
297}
298
299int QQuickVirtualKeyboardSettings::hwrTimeoutForAlphabetic() const
300{
301 return Settings::instance()->hwrTimeoutForAlphabetic();
302}
303
304void QQuickVirtualKeyboardSettings::setHwrTimeoutForAlphabetic(int hwrTimeoutForAlphabetic)
305{
306 return Settings::instance()->setHwrTimeoutForAlphabetic(hwrTimeoutForAlphabetic);
307}
308
309int QQuickVirtualKeyboardSettings::hwrTimeoutForCjk() const
310{
311 return Settings::instance()->hwrTimeoutForCjk();
312}
313
314void QQuickVirtualKeyboardSettings::setHwrTimeoutForCjk(int hwrTimeoutForCjk)
315{
316 return Settings::instance()->setHwrTimeoutForCjk(hwrTimeoutForCjk);
317}
318
319Qt::InputMethodHints QQuickVirtualKeyboardSettings::inputMethodHints() const
320{
321 return Settings::instance()->inputMethodHints();
322}
323
324void QQuickVirtualKeyboardSettings::setInputMethodHints(const Qt::InputMethodHints &inputMethodHints)
325{
326 Settings::instance()->setInputMethodHints(inputMethodHints);
327}
328
329bool QQuickVirtualKeyboardSettings::isHandwritingModeDisabled() const
330{
331 return Settings::instance()->isHandwritingModeDisabled();
332}
333
334void QQuickVirtualKeyboardSettings::setHandwritingModeDisabled(bool handwritingModeDisabled)
335{
336 Settings::instance()->setHandwritingModeDisabled(handwritingModeDisabled);
337}
338
339bool QQuickVirtualKeyboardSettings::isDefaultInputMethodDisabled() const
340{
341 return Settings::instance()->isDefaultInputMethodDisabled();
342}
343
344void QQuickVirtualKeyboardSettings::setDefaultInputMethodDisabled(bool defaultInputMethodDisabled)
345{
346 return Settings::instance()->setDefaultInputMethodDisabled(defaultInputMethodDisabled);
347}
348
349bool QQuickVirtualKeyboardSettings::isDefaultDictionaryDisabled() const
350{
351 return Settings::instance()->isDefaultDictionaryDisabled();
352}
353
354void QQuickVirtualKeyboardSettings::setDefaultDictionaryDisabled(bool defaultDictionaryDisabled)
355{
356 return Settings::instance()->setDefaultDictionaryDisabled(defaultDictionaryDisabled);
357}
358
359QtVirtualKeyboard::KeyboardFunctionKeys QQuickVirtualKeyboardSettings::visibleFunctionKeys() const
360{
361 return Settings::instance()->visibleFunctionKeys();
362}
363
364void QQuickVirtualKeyboardSettings::setVisibleFunctionKeys(QtVirtualKeyboard::KeyboardFunctionKeys newVisibleFunctionKeys)
365{
366 Settings::instance()->setVisibleFunctionKeys(newVisibleFunctionKeys);
367}
368
369bool QQuickVirtualKeyboardSettings::closeOnReturn() const
370{
371 return Settings::instance()->closeOnReturn();
372}
373
374void QQuickVirtualKeyboardSettings::setCloseOnReturn(bool closeOnReturn)
375{
376 Settings::instance()->setCloseOnReturn(closeOnReturn);
377}
378
379qreal QQuickVirtualKeyboardSettings::keySoundVolume() const
380{
381 return Settings::instance()->keySoundVolume();
382}
383
384void QQuickVirtualKeyboardSettings::setKeySoundVolume(qreal volume)
385{
386 Settings::instance()->setKeySoundVolume(volume);
387}
388
389/*!
390 \internal
391*/
392qreal QQuickVirtualKeyboardSettings::convertVolume(qreal volume) const
393{
394#ifdef QT_VIRTUALKEYBOARD_SOUNDS_ENABLED
395 qreal linearVolume = QAudio::convertVolume(volume: volume / 100,
396 from: QtAudio::LogarithmicVolumeScale,
397 to: QtAudio::LinearVolumeScale);
398 return linearVolume;
399#else
400 qWarning("No QtMultimedia");
401 return volume;
402#endif
403}
404
405void QQuickVirtualKeyboardSettings::resetStyle()
406{
407 Q_D(QQuickVirtualKeyboardSettings);
408 Settings *settings = Settings::instance();
409 QString styleName = QLatin1String(QT_VIRTUALKEYBOARD_DEFAULT_STYLE);
410 QString style = d->stylePath(name: styleName);
411 QString customStyleName = QString::fromLatin1(ba: qgetenv(varName: "QT_VIRTUALKEYBOARD_STYLE"));
412 if (!customStyleName.isEmpty()) {
413 bool found = false;
414 QRegularExpression styleNameValidator(QLatin1String("\\A(?:\\w+)\\z"));
415 QRegularExpressionMatch match = styleNameValidator.match(subject: customStyleName);
416 if (match.hasMatch()) {
417 QString customStyle = d->stylePath(name: customStyleName);
418 if (!customStyle.isEmpty()) {
419 styleName = customStyleName;
420 style = customStyle;
421 found = true;
422 }
423 }
424 if (!found) {
425 qWarning() << "WARNING: Cannot find style" << customStyleName << "- fallback:" << styleName;
426 }
427 }
428 if (!style.isEmpty()) {
429 settings->setStyleName(styleName);
430 settings->setStyle(style);
431 }
432}
433
434/*!
435 \qmlproperty string VirtualKeyboardSettings::style
436 \internal
437*/
438
439/*!
440 \qmlproperty string VirtualKeyboardSettings::styleName
441
442 This property provides the current style. Application can change
443 the keyboard style by setting the styleName to different value.
444
445 The system wide keyboard style can be affected by setting
446 the QT_VIRTUALKEYBOARD_STYLE environment variable.
447*/
448
449/*!
450 \qmlproperty string VirtualKeyboardSettings::locale
451 \since QtQuick.VirtualKeyboard.Settings 2.0
452
453 This property provides the default locale for the keyboard.
454
455 When the locale is not specified, the default system locale is used instead.
456
457 If the keyboard locale is different from the new default locale, keyboard
458 language is changed immediately to reflect the new locale. If the locale setting
459 is incorrect, or it is not in the list of supported locales, it is ignored and
460 the default setting is used instead.
461
462 A locale is supported if it is included in the list of availableLocales.
463*/
464
465/*!
466 \qmlproperty list<string> VirtualKeyboardSettings::availableLocales
467 \since QtQuick.VirtualKeyboard.Settings 2.0
468 \readonly
469
470 This property contains a list of languages supported by the virtual keyboard.
471
472 This list is read-only and depends on the build-time configuration of the
473 virtual keyboard.
474*/
475
476/*!
477 \qmlproperty list<string> VirtualKeyboardSettings::activeLocales
478 \since QtQuick.VirtualKeyboard.Settings 2.0
479
480 This property contains a list of activated languages of the virtual keyboard.
481
482 The list of active languages is a subset of the available languages, and can be
483 used to limit the list of available languages in the application lifetime.
484
485 The list of languages will be shown based on the specified ordering.
486*/
487
488/*!
489 \qmlproperty bool VirtualKeyboardSettings::fullScreenMode
490 \since QtQuick.VirtualKeyboard.Settings 2.2
491
492 This property enables the fullscreen mode for the virtual keyboard.
493
494 In fullscreen mode, the virtual keyboard replicates the contents of the
495 focused input field to the fullscreen input field located at the top of the
496 keyboard.
497
498 For example, to activate the fullscreen mode when the screen aspect ratio
499 is greater than 16:9:
500
501 \code
502 Binding {
503 target: VirtualKeyboardSettings
504 property: "fullScreenMode"
505 value: (Screen.width / Screen.height) > (16.0 / 9.0)
506 }
507 \endcode
508*/
509
510/*!
511 \qmlproperty bool VirtualKeyboardSettings::userDataPath
512 \since QtQuick.VirtualKeyboard.Settings 6.1
513
514 This property sets the user data path for the virtual keyboard and its plugins.
515
516 By default, the user data path is set to \l {QStandardPaths::GenericConfigLocation}{GenericConfigLocation} + "/qtvirtualkeyboard".
517*/
518
519/*!
520 \qmlsignal VirtualKeyboardSettings::userDataReset()
521
522 The application triggers this signal prior to the user's data being reset to
523 indicate to the virtual keyboard that all files must be closed
524 in the user data directory.
525*/
526
527/*!
528 \qmlproperty bool VirtualKeyboardSettings::hwrTimeoutForAlphabetic
529 \since QtQuick.VirtualKeyboard.Settings 6.1
530
531 This property sets the handwriting recognition timeout for alphabetical languages.
532
533 By default, the timeout is 500 millliseconds.
534*/
535
536/*!
537 \qmlproperty bool VirtualKeyboardSettings::hwrTimeoutForCjk
538 \since QtQuick.VirtualKeyboard.Settings 6.1
539
540 This property sets the handwriting recognition timeout for Chinese / Japanese / Korean languages.
541
542 By default, the timeout is 500 millliseconds.
543*/
544
545/*!
546 \qmlproperty int VirtualKeyboardSettings::inputMethodHints
547 \since QtQuick.VirtualKeyboard.Settings 6.1
548
549 This property allows to set persistent input method hints.
550
551 The value of this property is combined with the input method
552 hints from the input control. For example, to disable predictive
553 text input, this property can be set to \c Qt::ImhNoPredictiveText.
554*/
555
556/*!
557 \qmlproperty bool VirtualKeyboardSettings::handwritingModeDisabled
558 \since QtQuick.VirtualKeyboard.Settings 6.1
559
560 This property allows to disable handwriting input mode, if it is
561 otherwise available in the system.
562
563 When this property is set to \c true, the handwriting button is hidden
564 from the keyboard layout and the user cannot switch to handwriting
565 input mode.
566*/
567
568/*!
569 \qmlproperty bool VirtualKeyboardSettings::defaultInputMethodDisabled
570 \since QtQuick.VirtualKeyboard.Settings 6.1
571
572 This property disables the default input method. The purpose of this setting is to be able to
573 override the default input method with the plain input method, disabling its functionality.
574*/
575
576/*!
577 \qmlproperty bool VirtualKeyboardSettings::defaultDictionaryDisabled
578 \since QtQuick.VirtualKeyboard.Settings 6.1
579
580 This property disables the default dictionary. The purpose of this setting is to be able to
581 use a custom dictionary only instead of the standard dictionary.
582*/
583
584/*!
585 \qmlproperty enumeration VirtualKeyboardSettings::visibleFunctionKeys
586 \since QtQuick.VirtualKeyboard.Settings 6.6
587
588 This setting adjusts the visibility of specific function keys in the keyboard layout, allowing
589 them to be either displayed or hidden. When a function key is not visible, its functionality
590 remains accessible through the gear menu.
591
592 The value can be combination of the following flags:
593
594 \list
595 \li \c QtVirtualKeyboard.KeyboardFunctionKeys.None All function keys are hidden
596 \li \c QtVirtualKeyboard.KeyboardFunctionKeys.Hide Hide function key is visible
597 \li \c QtVirtualKeyboard.KeyboardFunctionKeys.Language Language function key is visible
598 \li \c QtVirtualKeyboard.KeyboardFunctionKeys.All All function keys are visible
599 \endlist
600
601 The default is \c QtVirtualKeyboard.KeyboardFunctionKeys.All.
602*/
603
604/*!
605 \qmlproperty bool VirtualKeyboardSettings::closeOnReturn
606 \since QtQuick.VirtualKeyboard.Settings 6.8
607
608 This property enables hiding of virtual keyboard.
609
610 When this property is set to \c true, the virtual keyboard is hidden when \l Qt::Key_Enter
611 or \l Qt::Key_Return key released. The default is \c false.
612*/
613
614/*!
615 \qmlproperty real VirtualKeyboardSettings::keySoundVolume
616 \since QtQuick.VirtualKeyboard.Settings 6.9
617
618 This property holds the keysound's volume level. The level is in the range [0,1]
619*/
620
621/*!
622 \since QtQuick.VirtualKeyboard.Settings 2.2
623 \qmlproperty int VirtualKeyboardSettings::wordCandidateList.autoHideDelay
624 \qmlproperty bool VirtualKeyboardSettings::wordCandidateList.alwaysVisible
625
626 \table
627 \header
628 \li Name
629 \li Description
630 \row
631 \li autoHideDelay
632 \li This property defines the delay, in milliseconds, after which the
633 word candidate list is hidden if empty.
634
635 If the value is \c 0, the list is immediately hidden when cleared.
636
637 If the value is \c -1, the list is visible until input focus
638 changes, or the input panel is hidden.
639
640 The default value is \c 5000 milliseconds.
641 \row
642 \li alwaysVisible
643 \li This property defines whether the word candidate list should always
644 remain visible.
645
646 The default value is \c false.
647 \row
648 \li autoCommitWord
649 \li This property enables the automatic commit feature that is activated
650 when the word candidate list is narrowed down to a single candidate.
651
652 The automatic commit feature takes effect when the word candidate
653 list initially contains multiple words and is reduced to single word
654 after additional input. This word will be selected and committed
655 automatically without user interaction.
656
657 This property is set to \c false by default.
658 \endtable
659*/
660
661QQuickWordCandidateListSettings::QQuickWordCandidateListSettings(QObject *parent) :
662 QObject(parent)
663{
664}
665
666int QQuickWordCandidateListSettings::autoHideDelay() const
667{
668 return Settings::instance()->wclAutoHideDelay();
669}
670
671void QQuickWordCandidateListSettings::setAutoHideDelay(int autoHideDelay)
672{
673 Settings::instance()->setWclAutoHideDelay(autoHideDelay);
674}
675
676bool QQuickWordCandidateListSettings::alwaysVisible() const
677{
678 return Settings::instance()->wclAlwaysVisible();
679}
680
681void QQuickWordCandidateListSettings::setAlwaysVisible(bool alwaysVisible)
682{
683 Settings::instance()->setWclAlwaysVisible(alwaysVisible);
684}
685
686bool QQuickWordCandidateListSettings::autoCommitWord() const
687{
688 return Settings::instance()->wclAutoCommitWord();
689}
690
691void QQuickWordCandidateListSettings::setAutoCommitWord(bool autoCommitWord)
692{
693 Settings::instance()->setWclAutoCommitWord(autoCommitWord);
694}
695
696} // namespace QtVirtualKeyboard
697QT_END_NAMESPACE
698

source code of qtvirtualkeyboard/src/settings/qquickvirtualkeyboardsettings.cpp