diff options
author | Joona Petrell <joona.t.petrell@nokia.com> | 2011-10-11 13:10:50 +0300 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2011-10-11 16:03:25 +0200 |
commit | e941b37fcc715fc20d7365cae21cd657a215cf8f (patch) | |
tree | 4e7345c42f6605b112aa370f0df430b0f054ad7f /src/gui/kernel | |
parent | 0e6a4010286569c3c77ed3092dd96aca17e72332 (diff) |
Move input panel visibility ownership from QInputPanel to QPlatformInputContext
Now QInputPanel::visible() can be set true even when platform doesn't provide
a virtual keyboard. Like keyboard geometry, visibility should be dictated by
the platform plugin and not QInputPanel, whose role is more like that of a mediator.
QInputPanel::show() and ::hide() calls should be treated as requests that may fail.
Changed the QInputPanel's visible property to read-only as a setter that may
fail is not really a setter, show() and hide() should be used instead.
Enabling the new functionality cannot be activated immediatelly without breaking
existing keyboards, added a temporary function handlesInputPanelVisibility that
handovers the responsiblity of updating input panel visibility to QInputContextPlatform
only once QInputContextPlatform says that it is able to handle it.
Change-Id: Ideecaf7225cc3971f33a0ac976bd92cf7767475b
Reviewed-on: http://codereview.qt-project.org/6429
Sanity-Review: Qt Sanity Bot <qt_sanity_bot@ovi.com>
Reviewed-by: Pekka Vuorela <pekka.ta.vuorela@nokia.com>
Reviewed-by: Lars Knoll <lars.knoll@nokia.com>
Diffstat (limited to 'src/gui/kernel')
-rw-r--r-- | src/gui/kernel/qinputpanel.cpp | 34 | ||||
-rw-r--r-- | src/gui/kernel/qinputpanel.h | 2 | ||||
-rw-r--r-- | src/gui/kernel/qplatforminputcontext_qpa.cpp | 27 | ||||
-rw-r--r-- | src/gui/kernel/qplatforminputcontext_qpa.h | 12 |
4 files changed, 59 insertions, 16 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 |