summaryrefslogtreecommitdiffstats
path: root/src/declarative/fx/qfxitem.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/declarative/fx/qfxitem.cpp')
-rw-r--r--src/declarative/fx/qfxitem.cpp56
1 files changed, 17 insertions, 39 deletions
diff --git a/src/declarative/fx/qfxitem.cpp b/src/declarative/fx/qfxitem.cpp
index a8be81f..9b9355e 100644
--- a/src/declarative/fx/qfxitem.cpp
+++ b/src/declarative/fx/qfxitem.cpp
@@ -2363,7 +2363,14 @@ QPointF QFxItemPrivate::computeTransformOrigin() const
*/
bool QFxItem::sceneEvent(QEvent *event)
{
- return QGraphicsItem::sceneEvent(event);
+ bool rv = QGraphicsItem::sceneEvent(event);
+
+ if (event->type() == QEvent::FocusIn ||
+ event->type() == QEvent::FocusOut) {
+ activeFocusChanged(hasActiveFocus());
+ }
+
+ return rv;
}
/*!
@@ -2548,49 +2555,20 @@ bool QFxItem::heightValid() const
bool QFxItem::hasFocus() const
{
- const QGraphicsItem *current = this->parentItem();
- while (current && !(current->flags() & ItemAutoDetectsFocusProxy))
- current = current->parentItem();
-
- if (current)
- return current->focusProxy() == this;
- else
- return QGraphicsItem::hasFocus();
+ Q_D(const QFxItem);
+ return d->itemIsFocusedInScope;
}
void QFxItem::setFocus(bool focus)
{
- QGraphicsScene *s = scene();
- if (!s) {
- if (focus) QGraphicsItem::setFocus(Qt::OtherFocusReason);
- else QGraphicsItem::clearFocus();
- focusChanged(focus);
- return;
- }
-
- QGraphicsItem *current = this->parentItem();
- while (current && !(current->flags() & ItemAutoDetectsFocusProxy))
- current = current->parentItem();
-
- if (!current) {
- if (focus) QGraphicsItem::setFocus(Qt::OtherFocusReason);
- else QGraphicsItem::clearFocus();
- focusChanged(focus);
- return;
- }
-
- if (current->focusProxy() && current->focusProxy() != this) {
- QFxItem *currentItem = qobject_cast<QFxItem *>(current->focusProxy());
- if (currentItem)
- currentItem->setFocus(false);
- }
-
- if (current->focusProxy() == this && !focus)
- current->setFocusProxy(0);
- else if (focus)
- current->setFocusProxy(this);
+ if (focus) QGraphicsItem::setFocus(Qt::OtherFocusReason);
+ else QGraphicsItem::clearFocus();
+}
- focusChanged(focus);
+void QFxItemPrivate::focusedInScopeChanged()
+{
+ Q_Q(QFxItem);
+ q->focusChanged(q->hasFocus());
}
/*!