diff options
author | Andrew den Exter <andrew.den-exter@nokia.com> | 2011-10-24 13:57:12 +1000 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2011-10-24 09:11:14 +0200 |
commit | 0307f5a7b271eea75e5d9c12c65caaf578a3384b (patch) | |
tree | 6d5aed0faccf08f494368086818d1495c6cebd53 /src | |
parent | ceecaa430a334420d7c041277707a8e438438d5e (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.cpp | 21 | ||||
-rw-r--r-- | src/declarative/items/qquickcanvas.h | 3 |
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 *); |