summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorSimon Hausmann <simon.hausmann@nokia.com>2012-01-26 14:35:55 +0100
committerQt by Nokia <qt-info@nokia.com>2012-01-26 15:45:19 +0100
commit6b85acd51583b36c3185ddffcccbf852a681928a (patch)
treef68b8845bf5b6e3ac4ea282ee14cc910b1c41a7c /src
parent0818fce01a332450a6046d6a30759362a9fb459f (diff)
Fix virtual keyboard on Harmattan not following window content orientation changes
Track the input item's window and notify the input method server when the content orientation changes. Change-Id: I401c4fd677ed2eebd8b85968d4a2b3692517e097 Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@nokia.com>
Diffstat (limited to 'src')
-rw-r--r--src/plugins/platforminputcontexts/meego/qmeegoplatforminputcontext.cpp18
-rw-r--r--src/plugins/platforminputcontexts/meego/qmeegoplatforminputcontext.h1
2 files changed, 17 insertions, 2 deletions
diff --git a/src/plugins/platforminputcontexts/meego/qmeegoplatforminputcontext.cpp b/src/plugins/platforminputcontexts/meego/qmeegoplatforminputcontext.cpp
index dc0a4f286d..0df21e3908 100644
--- a/src/plugins/platforminputcontexts/meego/qmeegoplatforminputcontext.cpp
+++ b/src/plugins/platforminputcontexts/meego/qmeegoplatforminputcontext.cpp
@@ -151,6 +151,7 @@ public:
bool correctionEnabled;
QRect keyboardRect;
QString preedit;
+ QWeakPointer<QWindow> window;
QMeeGoPlatformInputContext *q;
};
@@ -447,6 +448,11 @@ void QMeeGoPlatformInputContext::updateInputMethodArea(int x, int y, int width,
emitKeyboardRectChanged();
}
+void QMeeGoPlatformInputContext::updateServerWindowOrientation(Qt::ScreenOrientation orientation)
+{
+ d->server->appOrientationChanged(orientationAngle(orientation));
+}
+
void QMeeGoPlatformInputContext::inputItemChanged()
{
if (!d->valid)
@@ -455,6 +461,15 @@ void QMeeGoPlatformInputContext::inputItemChanged()
QInputPanel *panel = qApp->inputPanel();
QObject *input = panel->inputItem();
QWindow *window = panel->inputWindow();
+ if (window != d->window.data()) {
+ if (d->window)
+ disconnect(d->window.data(), SIGNAL(contentOrientationChanged(Qt::ScreenOrientation)),
+ this, SLOT(updateServerWindowOrientation(Qt::ScreenOrientation)));
+ d->window = window;
+ if (d->window)
+ connect(d->window.data(), SIGNAL(contentOrientationChanged(Qt::ScreenOrientation)),
+ this, SLOT(updateServerWindowOrientation(Qt::ScreenOrientation)));
+ }
d->imState["focusState"] = input != 0;
if (input) {
@@ -465,9 +480,8 @@ void QMeeGoPlatformInputContext::inputItemChanged()
d->active = true;
d->server->activateContext();
- // ### react to orientation changes, too
if (window)
- d->server->appOrientationChanged(orientationAngle(window->screen()->orientation()));
+ d->server->appOrientationChanged(orientationAngle(window->contentOrientation()));
}
}
d->sendStateUpdate(/*focusChanged*/true);
diff --git a/src/plugins/platforminputcontexts/meego/qmeegoplatforminputcontext.h b/src/plugins/platforminputcontexts/meego/qmeegoplatforminputcontext.h
index e84ac2035d..8b3edd0f9b 100644
--- a/src/plugins/platforminputcontexts/meego/qmeegoplatforminputcontext.h
+++ b/src/plugins/platforminputcontexts/meego/qmeegoplatforminputcontext.h
@@ -86,6 +86,7 @@ public Q_SLOTS:
void setRedirectKeys(bool );
void setSelection(int start, int length);
void updateInputMethodArea(int x, int y, int width, int height);
+ void updateServerWindowOrientation(Qt::ScreenOrientation orientation);
private:
QMeeGoPlatformInputContextPrivate *d;