diff options
author | Jan Arve Saether <jan-arve.saether@theqtcompany.com> | 2016-04-20 15:10:07 +0200 |
---|---|---|
committer | Richard Moe Gustavsen <richard.gustavsen@theqtcompany.com> | 2016-05-02 13:50:29 +0000 |
commit | b3bc1d6a1c9390ed42a044bad956816836beaad6 (patch) | |
tree | 7b15df6aecb7247a9b5e8c80c0d2afd56268c212 /src | |
parent | 5caa2d03c193f39f9094703d4277122f51a31345 (diff) |
Add Qt::ImInputItemClipRectangle support to QtQuick items
Let QtQuick items respond to ImInputItemClipRectangle inputMethodQuery and
notify about potential changes with QInputMethod::update()
Change-Id: I3025583d751bcc7f54bab87792bb7a2f38b60591
Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@theqtcompany.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/quick/items/qquickitem.cpp | 17 | ||||
-rw-r--r-- | src/quick/items/qquicktextedit.cpp | 3 | ||||
-rw-r--r-- | src/quick/items/qquickwindow.cpp | 1 |
3 files changed, 21 insertions, 0 deletions
diff --git a/src/quick/items/qquickitem.cpp b/src/quick/items/qquickitem.cpp index 7a5f1a12e8..ee96e346c2 100644 --- a/src/quick/items/qquickitem.cpp +++ b/src/quick/items/qquickitem.cpp @@ -4160,6 +4160,23 @@ QVariant QQuickItem::inputMethodQuery(Qt::InputMethodQuery query) const if (d->extra.isAllocated() && d->extra->enterKeyAttached) v = d->extra->enterKeyAttached->type(); break; + case Qt::ImInputItemClipRectangle: + if (!(!window() ||!isVisible() || qFuzzyIsNull(opacity()))) { + QRectF rect = QRectF(0,0, width(), height()); + const QQuickItem *par = this; + while (QQuickItem *parpar = par->parentItem()) { + rect = parpar->mapRectFromItem(par, rect); + if (parpar->clip()) + rect = rect.intersected(parpar->clipRect()); + par = parpar; + } + rect = par->mapRectToScene(rect); + // once we have the rect in scene coordinates, clip to window + rect = rect.intersected(QRectF(QPoint(0,0), window()->size())); + // map it back to local coordinates + v = mapRectFromScene(rect); + } + break; default: break; } diff --git a/src/quick/items/qquicktextedit.cpp b/src/quick/items/qquicktextedit.cpp index d9c0e428a4..5968028c26 100644 --- a/src/quick/items/qquicktextedit.cpp +++ b/src/quick/items/qquicktextedit.cpp @@ -1842,6 +1842,9 @@ QVariant QQuickTextEdit::inputMethodQuery(Qt::InputMethodQuery property, QVarian case Qt::ImHints: v = (int)d->effectiveInputMethodHints(); break; + case Qt::ImInputItemClipRectangle: + v = QQuickItem::inputMethodQuery(property); + break; default: if (property == Qt::ImCursorPosition && !argument.isNull()) argument = QVariant(argument.toPointF() - QPointF(d->xoff, d->yoff)); diff --git a/src/quick/items/qquickwindow.cpp b/src/quick/items/qquickwindow.cpp index bb3f5138ad..b94b0b7d59 100644 --- a/src/quick/items/qquickwindow.cpp +++ b/src/quick/items/qquickwindow.cpp @@ -98,6 +98,7 @@ void QQuickWindowPrivate::updateFocusItemTransform() QQuickItemPrivate *focusPrivate = QQuickItemPrivate::get(focus); QGuiApplication::inputMethod()->setInputItemTransform(focusPrivate->itemToWindowTransform()); QGuiApplication::inputMethod()->setInputItemRectangle(QRectF(0, 0, focusPrivate->width, focusPrivate->height)); + focus->updateInputMethod(Qt::ImInputItemClipRectangle); } #endif } |