aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorAndrew den Exter <andrew.den-exter@nokia.com>2011-10-24 13:57:12 +1000
committerQt by Nokia <qt-info@nokia.com>2011-10-24 09:11:14 +0200
commit0307f5a7b271eea75e5d9c12c65caaf578a3384b (patch)
tree6d5aed0faccf08f494368086818d1495c6cebd53 /src
parentceecaa430a334420d7c041277707a8e438438d5e (diff)
Fix item focus following canvas focus.
Restore canvas focus handling so that active item focus is added and removed as the canvas focus changes. Task-number: QTBUG-17320 Change-Id: Ief60f35da2f3a563f397ce026ca6fea289a200c4 Reviewed-by: Martin Jones <martin.jones@nokia.com>
Diffstat (limited to 'src')
-rw-r--r--src/declarative/items/qquickcanvas.cpp21
-rw-r--r--src/declarative/items/qquickcanvas.h3
2 files changed, 17 insertions, 7 deletions
diff --git a/src/declarative/items/qquickcanvas.cpp b/src/declarative/items/qquickcanvas.cpp
index 8f87ce7a9c..52ef421213 100644
--- a/src/declarative/items/qquickcanvas.cpp
+++ b/src/declarative/items/qquickcanvas.cpp
@@ -348,6 +348,17 @@ void QQuickCanvas::hideEvent(QHideEvent *)
d->thread->stopRendering();
}
+void QQuickCanvas::focusOutEvent(QFocusEvent *)
+{
+ Q_D(QQuickCanvas);
+ d->rootItem->setFocus(false);
+}
+
+void QQuickCanvas::focusInEvent(QFocusEvent *)
+{
+ Q_D(QQuickCanvas);
+ d->rootItem->setFocus(true);
+}
/*!
@@ -484,10 +495,6 @@ void QQuickCanvasPrivate::init(QQuickCanvas *c)
rootItemPrivate->canvas = q;
rootItemPrivate->flags |= QQuickItem::ItemIsFocusScope;
- // QML always has focus. It is important that this call happens after the rootItem
- // has a canvas..
- rootItem->setFocus(true);
-
bool threaded = !qmlNoThreadedRenderer();
if (!QGuiApplicationPrivate::platformIntegration()->hasCapability(QPlatformIntegration::ThreadedOpenGL)) {
@@ -626,13 +633,13 @@ void QQuickCanvasPrivate::setFocusInScope(QQuickItem *scope, QQuickItem *item, F
}
if (!(options & DontChangeFocusProperty)) {
- // if (item != rootItem || q->hasFocus()) { // ### refactor: focus handling...
+ if (item != rootItem || QGuiApplication::focusWindow() == q) {
itemPrivate->focus = true;
changed << item;
- // }
+ }
}
- if (newActiveFocusItem) { // ### refactor: && q->hasFocus()) {
+ if (newActiveFocusItem && QGuiApplication::focusWindow() == q) {
activeFocusItem = newActiveFocusItem;
QQuickItemPrivate::get(newActiveFocusItem)->activeFocus = true;
diff --git a/src/declarative/items/qquickcanvas.h b/src/declarative/items/qquickcanvas.h
index 8b69744161..e9b1b60613 100644
--- a/src/declarative/items/qquickcanvas.h
+++ b/src/declarative/items/qquickcanvas.h
@@ -101,6 +101,9 @@ protected:
virtual void showEvent(QShowEvent *);
virtual void hideEvent(QHideEvent *);
+ virtual void focusInEvent(QFocusEvent *);
+ virtual void focusOutEvent(QFocusEvent *);
+
virtual bool event(QEvent *);
virtual void keyPressEvent(QKeyEvent *);
virtual void keyReleaseEvent(QKeyEvent *);