summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/gui/kernel/qinputpanel.cpp34
-rw-r--r--src/gui/kernel/qinputpanel.h2
-rw-r--r--src/gui/kernel/qplatforminputcontext_qpa.cpp27
-rw-r--r--src/gui/kernel/qplatforminputcontext_qpa.h12
-rw-r--r--src/plugins/platforminputcontexts/ibus/qibusplatforminputcontext.cpp5
-rw-r--r--src/plugins/platforminputcontexts/ibus/qibusplatforminputcontext.h2
-rw-r--r--tests/auto/gui/kernel/qinputpanel/tst_qinputpanel.cpp43
7 files changed, 100 insertions, 25 deletions
diff --git a/src/gui/kernel/qinputpanel.cpp b/src/gui/kernel/qinputpanel.cpp
index a024a823f3..a7978c6aff 100644
--- a/src/gui/kernel/qinputpanel.cpp
+++ b/src/gui/kernel/qinputpanel.cpp
@@ -118,29 +118,42 @@ QRectF QInputPanel::keyboardRectangle()
void QInputPanel::show()
{
- setVisible(true);
+ Q_D(QInputPanel);
+ QPlatformInputContext *ic = d->platformInputContext();
+ if (ic && ic->handlesInputPanelVisibility())
+ ic->showInputPanel();
+ else if (!d->visible) {
+ d->visible = true;
+ emit visibleChanged();
+ }
}
void QInputPanel::hide()
{
- setVisible(false);
+ Q_D(QInputPanel);
+ QPlatformInputContext *ic = d->platformInputContext();
+ if (ic && ic->handlesInputPanelVisibility())
+ ic->hideInputPanel();
+ else if (d->visible) {
+ d->visible = false;
+ emit visibleChanged();
+ }
}
bool QInputPanel::visible() const
{
Q_D(const QInputPanel);
-
- return d->visible;
+ QPlatformInputContext *ic = d->platformInputContext();
+ if (ic && ic->handlesInputPanelVisibility())
+ return ic->isInputPanelVisible();
+ else
+ return d->visible;
+ return false;
}
void QInputPanel::setVisible(bool visible)
{
- Q_D(QInputPanel);
- if (d->visible == visible)
- return;
-
- d->visible = visible;
- emit visibleChanged();
+ visible ? show() : hide();
}
bool QInputPanel::isAnimating() const
@@ -152,7 +165,6 @@ bool QInputPanel::isAnimating() const
return false;
}
-
void QInputPanel::update(Qt::InputMethodQueries queries)
{
Q_D(QInputPanel);
diff --git a/src/gui/kernel/qinputpanel.h b/src/gui/kernel/qinputpanel.h
index 292b01a8cf..4edc902104 100644
--- a/src/gui/kernel/qinputpanel.h
+++ b/src/gui/kernel/qinputpanel.h
@@ -62,7 +62,7 @@ class Q_GUI_EXPORT QInputPanel : public QObject
Q_PROPERTY(QObject *inputItem READ inputItem WRITE setInputItem NOTIFY inputItemChanged)
Q_PROPERTY(QRectF cursorRectangle READ cursorRectangle NOTIFY cursorRectangleChanged)
Q_PROPERTY(QRectF keyboardRectangle READ keyboardRectangle NOTIFY keyboardRectangleChanged)
- Q_PROPERTY(bool visible READ visible WRITE setVisible NOTIFY visibleChanged)
+ Q_PROPERTY(bool visible READ visible NOTIFY visibleChanged)
Q_PROPERTY(bool animating READ isAnimating NOTIFY animatingChanged)
Q_ENUMS(Action)
diff --git a/src/gui/kernel/qplatforminputcontext_qpa.cpp b/src/gui/kernel/qplatforminputcontext_qpa.cpp
index 0313f69e5b..55b60279b8 100644
--- a/src/gui/kernel/qplatforminputcontext_qpa.cpp
+++ b/src/gui/kernel/qplatforminputcontext_qpa.cpp
@@ -90,12 +90,12 @@ QRectF QPlatformInputContext::keyboardRect() const
return QRectF();
}
-void QPlatformInputContext::emitKeyboardRectChanged() const
+void QPlatformInputContext::emitKeyboardRectChanged()
{
emit qApp->inputPanel()->keyboardRectangleChanged();
}
-bool QPlatformInputContext::isAnimating()
+bool QPlatformInputContext::isAnimating() const
{
return false;
}
@@ -105,5 +105,28 @@ void QPlatformInputContext::emitAnimatingChanged()
emit qApp->inputPanel()->animatingChanged();
}
+void QPlatformInputContext::showInputPanel()
+{
+}
+
+void QPlatformInputContext::hideInputPanel()
+{
+}
+
+bool QPlatformInputContext::isInputPanelVisible() const
+{
+ return false;
+}
+
+void QPlatformInputContext::emitInputPanelVisibleChanged()
+{
+ emit qApp->inputPanel()->visibleChanged();
+}
+
+// temporary function added to retain compatibility to old functionality, will be deprecated
+bool QPlatformInputContext::handlesInputPanelVisibility() const
+{
+ return false;
+}
QT_END_NAMESPACE
diff --git a/src/gui/kernel/qplatforminputcontext_qpa.h b/src/gui/kernel/qplatforminputcontext_qpa.h
index 8321c0a29c..ab5b6726be 100644
--- a/src/gui/kernel/qplatforminputcontext_qpa.h
+++ b/src/gui/kernel/qplatforminputcontext_qpa.h
@@ -68,10 +68,18 @@ public:
virtual void invokeAction(QInputPanel::Action, int cursorPosition);
virtual bool filterEvent(const QEvent *event);
virtual QRectF keyboardRect() const;
- void emitKeyboardRectChanged() const;
+ void emitKeyboardRectChanged();
- virtual bool isAnimating();
+ virtual bool isAnimating() const;
void emitAnimatingChanged();
+
+ virtual void showInputPanel();
+ virtual void hideInputPanel();
+ virtual bool isInputPanelVisible() const;
+ void emitInputPanelVisibleChanged();
+
+ // temporary function added to retain compatibility to old functionality, will be deprecated
+ virtual bool handlesInputPanelVisibility() const;
};
QT_END_NAMESPACE
diff --git a/src/plugins/platforminputcontexts/ibus/qibusplatforminputcontext.cpp b/src/plugins/platforminputcontexts/ibus/qibusplatforminputcontext.cpp
index 0d0e240b37..67ee9da252 100644
--- a/src/plugins/platforminputcontexts/ibus/qibusplatforminputcontext.cpp
+++ b/src/plugins/platforminputcontexts/ibus/qibusplatforminputcontext.cpp
@@ -155,6 +155,11 @@ void QIBusPlatformInputContext::inputItemChanged()
d->context->FocusOut();
}
+// temporary function added to retain compatibility to old functionality, will be deprecated
+bool QIBusPlatformInputContext::handlesInputPanelVisibility() const
+{
+ return true;
+}
void QIBusPlatformInputContext::commitText(const QDBusVariant &text)
{
diff --git a/src/plugins/platforminputcontexts/ibus/qibusplatforminputcontext.h b/src/plugins/platforminputcontexts/ibus/qibusplatforminputcontext.h
index 6008fc31aa..303b6f7cc0 100644
--- a/src/plugins/platforminputcontexts/ibus/qibusplatforminputcontext.h
+++ b/src/plugins/platforminputcontexts/ibus/qibusplatforminputcontext.h
@@ -63,6 +63,8 @@ public:
Q_INVOKABLE bool x11FilterEvent(uint keyval, uint keycode, uint state, bool press);
+ virtual bool handlesInputPanelVisibility() const;
+
public Q_SLOTS:
void commitText(const QDBusVariant &text);
void updatePreeditText(const QDBusVariant &text, uint cursor_pos, bool visible);
diff --git a/tests/auto/gui/kernel/qinputpanel/tst_qinputpanel.cpp b/tests/auto/gui/kernel/qinputpanel/tst_qinputpanel.cpp
index 32215ebdf4..e7f5e84942 100644
--- a/tests/auto/gui/kernel/qinputpanel/tst_qinputpanel.cpp
+++ b/tests/auto/gui/kernel/qinputpanel/tst_qinputpanel.cpp
@@ -50,6 +50,8 @@ class PlatformInputContext : public QPlatformInputContext
public:
PlatformInputContext() :
m_animating(false),
+ m_visible(false),
+ m_handlesInputPanelVisibility(false),
m_updateCallCount(0),
m_resetCallCount(0),
m_commitCallCount(0),
@@ -60,7 +62,7 @@ public:
{}
virtual QRectF keyboardRect() const { return m_keyboardRect; }
- virtual bool isAnimating() { return m_animating; }
+ virtual bool isAnimating() const { return m_animating; }
virtual void reset() { m_resetCallCount++; }
virtual void commit() { m_commitCallCount++; }
@@ -78,8 +80,26 @@ public:
{
m_lastEventType = event->type(); return false;
}
+ virtual void showInputPanel()
+ {
+ m_visible = true;
+ }
+ virtual void hideInputPanel()
+ {
+ m_visible = false;
+ }
+ virtual bool isInputPanelVisible() const
+ {
+ return m_visible;
+ }
+ virtual bool handlesInputPanelVisibility() const
+ {
+ return m_handlesInputPanelVisibility;
+ }
bool m_animating;
+ bool m_visible;
+ bool m_handlesInputPanelVisibility;
int m_updateCallCount;
int m_resetCallCount;
int m_commitCallCount;
@@ -143,17 +163,22 @@ void tst_qinputpanel::initTestCase()
void tst_qinputpanel::visible()
{
- qApp->inputPanel()->show();
- QCOMPARE(qApp->inputPanel()->visible(), true);
+ QCOMPARE(m_platformInputContext.m_handlesInputPanelVisibility, false);
+ for (int index = 0; index < 2; index++) {
+ m_platformInputContext.m_handlesInputPanelVisibility = index;
+ QCOMPARE(qApp->inputPanel()->visible(), false);
+ qApp->inputPanel()->show();
+ QCOMPARE(qApp->inputPanel()->visible(), true);
- qApp->inputPanel()->hide();
- QCOMPARE(qApp->inputPanel()->visible(), false);
+ qApp->inputPanel()->hide();
+ QCOMPARE(qApp->inputPanel()->visible(), false);
- qApp->inputPanel()->setVisible(true);
- QCOMPARE(qApp->inputPanel()->visible(), true);
+ qApp->inputPanel()->setVisible(true);
+ QCOMPARE(qApp->inputPanel()->visible(), true);
- qApp->inputPanel()->setVisible(false);
- QCOMPARE(qApp->inputPanel()->visible(), false);
+ qApp->inputPanel()->setVisible(false);
+ QCOMPARE(qApp->inputPanel()->visible(), false);
+ }
}
void tst_qinputpanel::animating()