aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/virtualkeyboard/doc/src/deployment-guide.qdoc6
-rw-r--r--src/virtualkeyboard/platforminputcontext.cpp12
-rw-r--r--src/virtualkeyboard/qvirtualkeyboardinputcontext.cpp2
-rw-r--r--src/virtualkeyboard/qvirtualkeyboardinputcontext_p.cpp2
-rw-r--r--src/virtualkeyboard/qvirtualkeyboardinputcontext_p.h7
-rw-r--r--src/virtualkeyboard/qvirtualkeyboardinputengine.cpp3
-rw-r--r--src/virtualkeyboard/shifthandler.cpp2
7 files changed, 31 insertions, 3 deletions
diff --git a/src/virtualkeyboard/doc/src/deployment-guide.qdoc b/src/virtualkeyboard/doc/src/deployment-guide.qdoc
index 718068d7..e71017f3 100644
--- a/src/virtualkeyboard/doc/src/deployment-guide.qdoc
+++ b/src/virtualkeyboard/doc/src/deployment-guide.qdoc
@@ -274,6 +274,12 @@ There are several environment variables defined by the module that are listed be
\li \c {LIPI_ROOT + "/lib"} if \c LIPI_ROOT is set.
\li \c {QLibraryInfo::location(QLibraryInfo::PluginsPath) + "/lipi_toolkit"} if \c LIPI_ROOT is not set.
\endlist
+ \row
+ \li QT_VIRTUALKEYBOARD_FORCE_EVENTS_WITHOUT_FOCUS
+ \li Enables Qt Virtual Keyboard to send key events and use Shift key without having any text input in focus.
+
+ This variable needs to be explicitly set in the run environment of an application that wants to benefit
+ from this. Using qputenv() in the application itself is not sufficient.
\endtable
*/
diff --git a/src/virtualkeyboard/platforminputcontext.cpp b/src/virtualkeyboard/platforminputcontext.cpp
index fc229f52..d57a63e4 100644
--- a/src/virtualkeyboard/platforminputcontext.cpp
+++ b/src/virtualkeyboard/platforminputcontext.cpp
@@ -243,7 +243,17 @@ void PlatformInputContext::sendEvent(QEvent *event)
void PlatformInputContext::sendKeyEvent(QKeyEvent *event)
{
const QGuiApplication *app = qApp;
- QWindow *focusWindow = app ? app->focusWindow() : nullptr;
+ QWindow *focusWindow = nullptr;
+ if (app) {
+ if (QT_VIRTUALKEYBOARD_FORCE_EVENTS_WITHOUT_FOCUS) {
+ if (!app->allWindows().isEmpty()) {
+ focusWindow = app->allWindows().first();
+ }
+ }
+ else {
+ focusWindow = app->focusWindow();
+ }
+ }
if (focusWindow) {
m_filterEvent = event;
QGuiApplication::sendEvent(focusWindow, event);
diff --git a/src/virtualkeyboard/qvirtualkeyboardinputcontext.cpp b/src/virtualkeyboard/qvirtualkeyboardinputcontext.cpp
index f1140260..b86492e1 100644
--- a/src/virtualkeyboard/qvirtualkeyboardinputcontext.cpp
+++ b/src/virtualkeyboard/qvirtualkeyboardinputcontext.cpp
@@ -218,7 +218,7 @@ QVirtualKeyboardInputEngine *QVirtualKeyboardInputContext::inputEngine() const
void QVirtualKeyboardInputContext::sendKeyClick(int key, const QString &text, int modifiers)
{
Q_D(QVirtualKeyboardInputContext);
- if (d->_focus && d->platformInputContext) {
+ if ((d->_focus && d->platformInputContext) || QT_VIRTUALKEYBOARD_FORCE_EVENTS_WITHOUT_FOCUS) {
QKeyEvent pressEvent(QEvent::KeyPress, key, Qt::KeyboardModifiers(modifiers), text);
QKeyEvent releaseEvent(QEvent::KeyRelease, key, Qt::KeyboardModifiers(modifiers), text);
VIRTUALKEYBOARD_DEBUG().nospace() << "InputContext::sendKeyClick()"
diff --git a/src/virtualkeyboard/qvirtualkeyboardinputcontext_p.cpp b/src/virtualkeyboard/qvirtualkeyboardinputcontext_p.cpp
index 1233de99..34086ad0 100644
--- a/src/virtualkeyboard/qvirtualkeyboardinputcontext_p.cpp
+++ b/src/virtualkeyboard/qvirtualkeyboardinputcontext_p.cpp
@@ -51,6 +51,8 @@ bool operator==(const QInputMethodEvent::Attribute &attribute1, const QInputMeth
using namespace QtVirtualKeyboard;
+const bool QtVirtualKeyboard::QT_VIRTUALKEYBOARD_FORCE_EVENTS_WITHOUT_FOCUS = qEnvironmentVariableIsSet("QT_VIRTUALKEYBOARD_FORCE_EVENTS_WITHOUT_FOCUS");
+
QVirtualKeyboardInputContextPrivate::QVirtualKeyboardInputContextPrivate(QVirtualKeyboardInputContext *q_ptr) :
QObject(nullptr),
q_ptr(q_ptr),
diff --git a/src/virtualkeyboard/qvirtualkeyboardinputcontext_p.h b/src/virtualkeyboard/qvirtualkeyboardinputcontext_p.h
index 05349d38..4075c95f 100644
--- a/src/virtualkeyboard/qvirtualkeyboardinputcontext_p.h
+++ b/src/virtualkeyboard/qvirtualkeyboardinputcontext_p.h
@@ -50,6 +50,13 @@
QT_BEGIN_NAMESPACE
namespace QtVirtualKeyboard {
+
+// Boolean variable QT_VIRTUALKEYBOARD_FORCE_EVENTS_WITHOUT_FOCUS will enable virtual keyboard
+// to send key events without having any text input in focus when an environment
+// variable QT_VIRTUALKEYBOARD_FORCE_EVENTS_WITHOUT_FOCUS is set. This will also enable virtual
+// keyboard shift key usage in the same no focus situation.
+extern const bool QT_VIRTUALKEYBOARD_FORCE_EVENTS_WITHOUT_FOCUS;
+
class PlatformInputContext;
class ShiftHandler;
}
diff --git a/src/virtualkeyboard/qvirtualkeyboardinputengine.cpp b/src/virtualkeyboard/qvirtualkeyboardinputengine.cpp
index db38fb32..6f3a9a43 100644
--- a/src/virtualkeyboard/qvirtualkeyboardinputengine.cpp
+++ b/src/virtualkeyboard/qvirtualkeyboardinputengine.cpp
@@ -76,6 +76,9 @@ public:
accept = fallbackInputMethod->keyEvent(key, text, modifiers);
}
emit q->virtualKeyClicked(key, text, modifiers, isAutoRepeat);
+ } else if (QT_VIRTUALKEYBOARD_FORCE_EVENTS_WITHOUT_FOCUS) {
+ accept = fallbackInputMethod->keyEvent(key, text, modifiers);
+ emit q->virtualKeyClicked(key, text, modifiers, isAutoRepeat);
} else {
qWarning() << "input method is not set";
}
diff --git a/src/virtualkeyboard/shifthandler.cpp b/src/virtualkeyboard/shifthandler.cpp
index 1f992f4d..876e6229 100644
--- a/src/virtualkeyboard/shifthandler.cpp
+++ b/src/virtualkeyboard/shifthandler.cpp
@@ -255,7 +255,7 @@ void ShiftHandler::clearToggleShiftTimer()
void ShiftHandler::reset()
{
Q_D(ShiftHandler);
- if (d->inputContext->priv()->inputItem()) {
+ if (d->inputContext->priv()->inputItem() || QT_VIRTUALKEYBOARD_FORCE_EVENTS_WITHOUT_FOCUS) {
Qt::InputMethodHints inputMethodHints = d->inputContext->inputMethodHints();
QVirtualKeyboardInputEngine::InputMode inputMode = d->inputContext->inputEngine()->inputMode();
bool preferUpperCase = (inputMethodHints & (Qt::ImhPreferUppercase | Qt::ImhUppercaseOnly));