summaryrefslogtreecommitdiffstats
path: root/src/platformsupport
diff options
context:
space:
mode:
authorLars Knoll <lars.knoll@nokia.com>2011-09-07 21:26:36 +0200
committerLars Knoll <lars.knoll@nokia.com>2011-09-08 10:32:25 +0200
commita517afd54f76f6ab1845b631544345a0e32460a6 (patch)
treed4fe6ac11870164d23b8814069fb571e9a916b45 /src/platformsupport
parent6d9d1e78f442b7480ae764d292099c34cb727ca5 (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.cpp22
-rw-r--r--src/platformsupport/inputmethods/ibus/qibusplatforminputcontext.h1
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;