aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/virtualkeyboard/platforminputcontext.cpp42
-rw-r--r--src/virtualkeyboard/platforminputcontext.h2
2 files changed, 33 insertions, 11 deletions
diff --git a/src/virtualkeyboard/platforminputcontext.cpp b/src/virtualkeyboard/platforminputcontext.cpp
index d34f2a2b..ca1e00af 100644
--- a/src/virtualkeyboard/platforminputcontext.cpp
+++ b/src/virtualkeyboard/platforminputcontext.cpp
@@ -34,7 +34,8 @@ PlatformInputContext::PlatformInputContext() :
m_focusObject(0),
m_locale(),
m_inputDirection(m_locale.textDirection()),
- m_filterEvent(0)
+ m_filterEvent(0),
+ m_visible(false)
{
}
@@ -73,10 +74,13 @@ void PlatformInputContext::update(Qt::InputMethodQueries queries)
#endif
if (m_declarativeContext) {
- if (enabled)
+ if (enabled) {
m_declarativeContext->update(queries);
- else
+ if (m_visible)
+ updateInputPanelVisible();
+ } else {
hideInputPanel();
+ }
m_declarativeContext->setFocus(enabled);
}
}
@@ -98,18 +102,20 @@ bool PlatformInputContext::isAnimating() const
void PlatformInputContext::showInputPanel()
{
- if (!m_inputPanel || m_inputPanel->isVisible())
- return;
- m_inputPanel->show();
- emitInputPanelVisibleChanged();
+ if (!m_visible) {
+ VIRTUALKEYBOARD_DEBUG() << "PlatformInputContext::showInputPanel()";
+ m_visible = true;
+ }
+ updateInputPanelVisible();
}
void PlatformInputContext::hideInputPanel()
{
- if (!m_inputPanel || !m_inputPanel->isVisible())
- return;
- m_inputPanel->hide();
- emitInputPanelVisibleChanged();
+ if (m_visible) {
+ VIRTUALKEYBOARD_DEBUG() << "PlatformInputContext::hideInputPanel()";
+ m_visible = false;
+ }
+ updateInputPanelVisible();
}
bool PlatformInputContext::isInputPanelVisible() const
@@ -222,3 +228,17 @@ void PlatformInputContext::keyboardRectangleChanged()
{
m_inputPanel->setInputRect(m_declarativeContext->keyboardRectangle().toRect());
}
+
+void PlatformInputContext::updateInputPanelVisible()
+{
+ if (!m_inputPanel)
+ return;
+
+ if (m_visible && !m_inputPanel->isVisible()) {
+ m_inputPanel->show();
+ emitInputPanelVisibleChanged();
+ } else if (!m_visible && m_inputPanel->isVisible()) {
+ m_inputPanel->hide();
+ emitInputPanelVisibleChanged();
+ }
+}
diff --git a/src/virtualkeyboard/platforminputcontext.h b/src/virtualkeyboard/platforminputcontext.h
index 2dc0183d..970e9e89 100644
--- a/src/virtualkeyboard/platforminputcontext.h
+++ b/src/virtualkeyboard/platforminputcontext.h
@@ -70,6 +70,7 @@ protected:
private slots:
void keyboardRectangleChanged();
+ void updateInputPanelVisible();
private:
friend class DeclarativeInputContext;
@@ -79,6 +80,7 @@ private:
QLocale m_locale;
Qt::LayoutDirection m_inputDirection;
QEvent *m_filterEvent;
+ bool m_visible;
};
#endif