diff options
author | Lars Knoll <lars.knoll@nokia.com> | 2011-09-07 21:26:36 +0200 |
---|---|---|
committer | Lars Knoll <lars.knoll@nokia.com> | 2011-09-08 10:32:25 +0200 |
commit | a517afd54f76f6ab1845b631544345a0e32460a6 (patch) | |
tree | d4fe6ac11870164d23b8814069fb571e9a916b45 /src/platformsupport | |
parent | 6d9d1e78f442b7480ae764d292099c34cb727ca5 (diff) |
MicroFocus is in item coordinates
Always set the microFocus/cursorRectangle in item
coordinates.
Correctly update the itemTransform in the QInputPanel for QWidgets.
Change-Id: Ic0187f808996f31e6238d934f43bc97a70522a55
Reviewed-on: http://codereview.qt-project.org/4402
Reviewed-by: Vesa Rantanen <vesa.rantanen@nokia.com>
Reviewed-by: Lars Knoll <lars.knoll@nokia.com>
Diffstat (limited to 'src/platformsupport')
-rw-r--r-- | src/platformsupport/inputmethods/ibus/qibusplatforminputcontext.cpp | 22 | ||||
-rw-r--r-- | src/platformsupport/inputmethods/ibus/qibusplatforminputcontext.h | 1 |
2 files changed, 13 insertions, 10 deletions
diff --git a/src/platformsupport/inputmethods/ibus/qibusplatforminputcontext.cpp b/src/platformsupport/inputmethods/ibus/qibusplatforminputcontext.cpp index fba9116ca8..af8fd5a1f1 100644 --- a/src/platformsupport/inputmethods/ibus/qibusplatforminputcontext.cpp +++ b/src/platformsupport/inputmethods/ibus/qibusplatforminputcontext.cpp @@ -43,6 +43,7 @@ #include <QtDebug> #include <QTextCharFormat> #include <QGuiApplication> +#include <qwindow.h> #include <qevent.h> #include "qibusproxy.h" @@ -86,6 +87,7 @@ QIBusPlatformInputContext::QIBusPlatformInputContext () } QInputPanel *p = qApp->inputPanel(); connect(p, SIGNAL(inputItemChanged()), this, SLOT(inputItemChanged())); + connect(p, SIGNAL(cursorRectangleChanged()), this, SLOT(cursorRectChanged())); } QIBusPlatformInputContext::~QIBusPlatformInputContext (void) @@ -119,22 +121,22 @@ void QIBusPlatformInputContext::reset() void QIBusPlatformInputContext::update(Qt::InputMethodQueries q) { QPlatformInputContext::update(q); +} +void QIBusPlatformInputContext::cursorRectChanged() +{ if (!d->valid) return; - QObject *o = qApp->inputPanel()->inputItem(); - if (!o) + QRect r = qApp->inputPanel()->cursorRectangle().toRect(); + if(!r.isValid()) return; - QInputMethodQueryEvent query(Qt::ImMicroFocus); - QGuiApplication::sendEvent(o, &query); - QRect r = query.value().toRect(); - if(r.isValid()) { - if (debug) - qDebug() << "microFocus" << r; - d->context->SetCursorLocation(r.x(), r.y(), r.width(), r.height()); - } + QWindow *inputWindow = qApp->inputPanel()->inputWindow(); + r.moveTopLeft(inputWindow->mapToGlobal(r.topLeft())); + if (debug) + qDebug() << "microFocus" << r; + d->context->SetCursorLocation(r.x(), r.y(), r.width(), r.height()); } void QIBusPlatformInputContext::inputItemChanged() diff --git a/src/platformsupport/inputmethods/ibus/qibusplatforminputcontext.h b/src/platformsupport/inputmethods/ibus/qibusplatforminputcontext.h index 66c3aeecc6..8583118306 100644 --- a/src/platformsupport/inputmethods/ibus/qibusplatforminputcontext.h +++ b/src/platformsupport/inputmethods/ibus/qibusplatforminputcontext.h @@ -65,6 +65,7 @@ public Q_SLOTS: void commitText(const QDBusVariant &text); void updatePreeditText(const QDBusVariant &text, uint cursor_pos, bool visible); void inputItemChanged(); + void cursorRectChanged(); private: QIBusPlatformInputContextPrivate *d; |