summaryrefslogtreecommitdiffstats
path: root/src/widgets/kernel
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/widgets/kernel
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/widgets/kernel')
-rw-r--r--src/widgets/kernel/qwidget.cpp29
-rw-r--r--src/widgets/kernel/qwidget_p.h3
2 files changed, 18 insertions, 14 deletions
diff --git a/src/widgets/kernel/qwidget.cpp b/src/widgets/kernel/qwidget.cpp
index c1526d4f25..494152d78e 100644
--- a/src/widgets/kernel/qwidget.cpp
+++ b/src/widgets/kernel/qwidget.cpp
@@ -83,15 +83,7 @@
#include "qinputcontext.h"
#include "qfileinfo.h"
#include "private/qsoftkeymanager_p.h"
-
-#if defined (Q_WS_WIN)
-# include <private/qwininputcontext_p.h>
-#endif
-
-#if defined(Q_WS_X11)
-# include <private/qpaintengine_x11_p.h>
-# include "qx11info_x11.h"
-#endif
+#include <QtGui/qinputpanel.h>
#include <private/qgraphicseffect_p.h>
#include <qbackingstore.h>
@@ -369,6 +361,17 @@ void QWidgetPrivate::scrollChildren(int dx, int dy)
}
}
+void QWidgetPrivate::updateWidgetTransform()
+{
+ Q_Q(QWidget);
+ if (q == qApp->inputPanel()->inputItem()) {
+ QTransform t;
+ QPoint p = q->mapTo(q->topLevelWidget(), QPoint(0,0));
+ t.translate(p.x(), p.y());
+ qApp->inputPanel()->setInputItemTranform(t);
+ }
+}
+
QInputContext *QWidgetPrivate::assignedInputContext() const
{
#ifndef QT_NO_IM
@@ -8357,11 +8360,6 @@ bool QWidget::event(QEvent *event)
QInputMethodQueryEvent *query = static_cast<QInputMethodQueryEvent *>(event);
QVariant v = inputMethodQuery(query->query());
- if (query->query() == Qt::ImMicroFocus) {
- QRect r = v.toRect();
- v = QRect(mapToGlobal(r.topLeft()), r.size());
- }
-
query->setValue(v);
query->accept();
break;
@@ -8396,6 +8394,7 @@ bool QWidget::event(QEvent *event)
QSoftKeyManager::updateSoftKeys();
#endif
focusInEvent((QFocusEvent*)event);
+ d->updateWidgetTransform();
break;
case QEvent::FocusOut:
@@ -8437,10 +8436,12 @@ bool QWidget::event(QEvent *event)
case QEvent::Move:
moveEvent((QMoveEvent*)event);
+ d->updateWidgetTransform();
break;
case QEvent::Resize:
resizeEvent((QResizeEvent*)event);
+ d->updateWidgetTransform();
break;
case QEvent::Close:
diff --git a/src/widgets/kernel/qwidget_p.h b/src/widgets/kernel/qwidget_p.h
index f3838ee3dd..7c74f794f9 100644
--- a/src/widgets/kernel/qwidget_p.h
+++ b/src/widgets/kernel/qwidget_p.h
@@ -504,6 +504,9 @@ public:
void syncBackingStore();
void syncBackingStore(const QRegion &region);
+ // tells the input panel about the widgets transform
+ void updateWidgetTransform();
+
void reparentFocusWidgets(QWidget *oldtlw);
static int pointToRect(const QPoint &p, const QRect &r);