aboutsummaryrefslogtreecommitdiffstats
path: root/src/virtualkeyboard/platforminputcontext.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/virtualkeyboard/platforminputcontext.cpp')
-rw-r--r--src/virtualkeyboard/platforminputcontext.cpp27
1 files changed, 17 insertions, 10 deletions
diff --git a/src/virtualkeyboard/platforminputcontext.cpp b/src/virtualkeyboard/platforminputcontext.cpp
index eef26574..c56e21ff 100644
--- a/src/virtualkeyboard/platforminputcontext.cpp
+++ b/src/virtualkeyboard/platforminputcontext.cpp
@@ -96,7 +96,7 @@ void PlatformInputContext::commit()
void PlatformInputContext::update(Qt::InputMethodQueries queries)
{
VIRTUALKEYBOARD_DEBUG() << "PlatformInputContext::update():" << queries;
- bool enabled = inputMethodQuery(Qt::ImEnabled).toBool();
+ const bool enabled = inputMethodAccepted();
#ifdef QT_VIRTUALKEYBOARD_DESKTOP
if (enabled && !m_inputPanel && !m_desktopModeDisabled) {
m_inputPanel = new DesktopInputPanel(this);
@@ -110,14 +110,10 @@ void PlatformInputContext::update(Qt::InputMethodQueries queries)
}
#endif
if (m_inputContext) {
- if (enabled) {
+ if (enabled)
m_inputContext->priv()->update(queries);
- if (m_visible)
- updateInputPanelVisible();
- } else {
- hideInputPanel();
- }
m_inputContext->priv()->setFocus(enabled);
+ updateInputPanelVisible();
}
}
@@ -285,6 +281,16 @@ void PlatformInputContext::setInputContext(QVirtualKeyboardInputContext *context
}
}
+bool PlatformInputContext::evaluateInputPanelVisible() const
+{
+ // Show input panel when input panel is requested by showInputPanel()
+ // and focus object is set to an input control with input method accepted (Qt::ImEnabled)
+ // or input events without focus are enabled.
+ return m_visible &&
+ ((m_focusObject && inputMethodAccepted()) ||
+ QT_VIRTUALKEYBOARD_FORCE_EVENTS_WITHOUT_FOCUS);
+}
+
void PlatformInputContext::keyboardRectangleChanged()
{
m_inputPanel->setInputRect(m_inputContext->priv()->keyboardRectangle().toRect());
@@ -295,13 +301,14 @@ void PlatformInputContext::updateInputPanelVisible()
if (!m_inputPanel)
return;
- if (m_visible != m_inputPanel->isVisible()) {
- if (m_visible)
+ const bool visible = evaluateInputPanelVisible();
+ if (visible != m_inputPanel->isVisible()) {
+ if (visible)
m_inputPanel->show();
else
m_inputPanel->hide();
if (m_selectionControl)
- m_selectionControl->setEnabled(m_visible);
+ m_selectionControl->setEnabled(visible);
emitInputPanelVisibleChanged();
}
}