diff options
author | Jarkko Koivikko <jarkko.koivikko@code-q.fi> | 2016-11-12 22:28:51 +0200 |
---|---|---|
committer | Oswald Buddenhagen <oswald.buddenhagen@qt.io> | 2017-01-30 15:18:19 +0000 |
commit | 57d7fae10dbd5a2fd01fdd89c3aeb1024c9a0295 (patch) | |
tree | 750f3d1bd16917dc93d4b9601e67cf40aebb6028 | |
parent | c683d8fd4d2d0b5f61014c1840d148a2d8faaac4 (diff) |
Defer shift state change until input panel becomes visible
Monitor the visible state of the QInputMethod and defer
shift state handling until it becomes visible.
Task-number: QTBUG-57082
Change-Id: I6e63e57e2630de37d49a522f05257c9c4dd72286
Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
(cherry picked from commit b87766345e7089670629b1c75e9c350846849dac)
-rw-r--r-- | src/virtualkeyboard/shifthandler.cpp | 18 | ||||
-rw-r--r-- | src/virtualkeyboard/shifthandler.h | 1 |
2 files changed, 19 insertions, 0 deletions
diff --git a/src/virtualkeyboard/shifthandler.cpp b/src/virtualkeyboard/shifthandler.cpp index 22302129..f65938ec 100644 --- a/src/virtualkeyboard/shifthandler.cpp +++ b/src/virtualkeyboard/shifthandler.cpp @@ -24,6 +24,7 @@ #include "inputengine.h" #include <QtCore/private/qobject_p.h> #include <QSet> +#include <QGuiApplication> namespace QtVirtualKeyboard { @@ -37,6 +38,7 @@ public: autoCapitalizationEnabled(false), toggleShiftEnabled(false), shiftChanged(false), + resetWhenVisible(false), manualShiftLanguageFilter(QSet<QLocale::Language>() << QLocale::Arabic << QLocale::Persian << QLocale::Hindi << QLocale::Korean), manualCapsInputModeFilter(QSet<InputEngine::InputMode>() << InputEngine::Cangjie << InputEngine::Zhuyin), noAutoUppercaseInputModeFilter(QSet<InputEngine::InputMode>() << InputEngine::FullwidthLatin << InputEngine::Pinyin << InputEngine::Cangjie << InputEngine::Zhuyin), @@ -49,6 +51,7 @@ public: bool autoCapitalizationEnabled; bool toggleShiftEnabled; bool shiftChanged; + bool resetWhenVisible; QLocale locale; const QSet<QLocale::Language> manualShiftLanguageFilter; const QSet<InputEngine::InputMode> manualCapsInputModeFilter; @@ -85,6 +88,7 @@ ShiftHandler::ShiftHandler(InputContext *parent) : connect(d->inputContext, SIGNAL(shiftChanged()), SLOT(shiftChanged())); connect(d->inputContext, SIGNAL(capsLockChanged()), SLOT(shiftChanged())); connect(d->inputContext, SIGNAL(localeChanged()), SLOT(localeChanged())); + connect(qGuiApp->inputMethod(), SIGNAL(visibleChanged()), SLOT(inputMethodVisibleChanged())); d->locale = QLocale(d->inputContext->locale()); } } @@ -229,6 +233,11 @@ void ShiftHandler::autoCapitalize() void ShiftHandler::restart() { + Q_D(ShiftHandler); + if (!qGuiApp->inputMethod()->isVisible()) { + d->resetWhenVisible = true; + return; + } reset(); } @@ -245,6 +254,15 @@ void ShiftHandler::localeChanged() restart(); } +void ShiftHandler::inputMethodVisibleChanged() +{ + Q_D(ShiftHandler); + if (d->resetWhenVisible && qGuiApp->inputMethod()->isVisible()) { + d->resetWhenVisible = false; + reset(); + } +} + void ShiftHandler::setAutoCapitalizationEnabled(bool enabled) { Q_D(ShiftHandler); diff --git a/src/virtualkeyboard/shifthandler.h b/src/virtualkeyboard/shifthandler.h index f6f2e795..ceda04d0 100644 --- a/src/virtualkeyboard/shifthandler.h +++ b/src/virtualkeyboard/shifthandler.h @@ -61,6 +61,7 @@ private slots: void restart(); void localeChanged(); void shiftChanged(); + void inputMethodVisibleChanged(); private: void setAutoCapitalizationEnabled(bool enabled); |