aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJan Arve Saether <jan-arve.saether@theqtcompany.com>2016-04-20 15:10:07 +0200
committerRichard Moe Gustavsen <richard.gustavsen@theqtcompany.com>2016-05-02 13:50:29 +0000
commitb3bc1d6a1c9390ed42a044bad956816836beaad6 (patch)
tree7b15df6aecb7247a9b5e8c80c0d2afd56268c212 /src
parent5caa2d03c193f39f9094703d4277122f51a31345 (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.cpp17
-rw-r--r--src/quick/items/qquicktextedit.cpp3
-rw-r--r--src/quick/items/qquickwindow.cpp1
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
}