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/widgets/kernel | |
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/widgets/kernel')
-rw-r--r-- | src/widgets/kernel/qwidget.cpp | 29 | ||||
-rw-r--r-- | src/widgets/kernel/qwidget_p.h | 3 |
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 ®ion); + // tells the input panel about the widgets transform + void updateWidgetTransform(); + void reparentFocusWidgets(QWidget *oldtlw); static int pointToRect(const QPoint &p, const QRect &r); |