From b363df741e025a17aa23be5a29124473d356ee19 Mon Sep 17 00:00:00 2001 From: Giulio Camuffo Date: Wed, 23 Sep 2009 20:29:56 +0000 Subject: [PATCH] using installEventFilter if the target is a QGraphicsWidget, else installSceneEventFilter because sceneEventFilter doesn't get GraphicsSceneResize events svn path=/trunk/KDE/kdelibs/; revision=1027316 --- widgets/itembackground.cpp | 24 ++++++++++++++++++------ widgets/itembackground.h | 5 +++++ 2 files changed, 23 insertions(+), 6 deletions(-) diff --git a/widgets/itembackground.cpp b/widgets/itembackground.cpp index 1afa630ba..4593ddf97 100644 --- a/widgets/itembackground.cpp +++ b/widgets/itembackground.cpp @@ -124,12 +124,12 @@ void ItemBackground::setTarget(const QRectF &newGeometry) void ItemBackground::setTargetItem(QGraphicsItem *target) { if (d->target && d->target != target) { - d->target->removeSceneEventFilter(this); - QObject *obj = 0; if (d->target->isWidget()) { obj = static_cast(d->target); + obj->removeEventFilter(this); } else { + d->target->removeSceneEventFilter(this); obj = dynamic_cast(d->target); } @@ -147,12 +147,12 @@ void ItemBackground::setTargetItem(QGraphicsItem *target) setTarget(rect); if (d->target != target) { - target->installSceneEventFilter(this); - QObject *obj = 0; if (target->isWidget()) { obj = static_cast(target); + obj->installEventFilter(this); } else { + d->target->installSceneEventFilter(this); obj = dynamic_cast(target); } @@ -165,11 +165,23 @@ void ItemBackground::setTargetItem(QGraphicsItem *target) } } +bool ItemBackground::eventFilter(QObject *watched, QEvent *event) +{ + QGraphicsWidget *targetWidget = static_cast(d->target); + if (watched == targetWidget) { + if (event->type() == QEvent::GraphicsSceneResize || + event->type() == QEvent::GraphicsSceneMove) { + setTargetItem(targetWidget); + } + } + + return false; +} + bool ItemBackground::sceneEventFilter(QGraphicsItem *watched, QEvent *event) { if (watched == d->target) { - if (event->type() == QEvent::GraphicsSceneResize || - event->type() == QEvent::GraphicsSceneMove) { + if (event->type() == QEvent::GraphicsSceneMove) { setTargetItem(d->target); } } diff --git a/widgets/itembackground.h b/widgets/itembackground.h index 35af9511a..8ff06377b 100644 --- a/widgets/itembackground.h +++ b/widgets/itembackground.h @@ -74,6 +74,11 @@ protected: */ QVariant itemChange(GraphicsItemChange change, const QVariant &value); + /** + * @reimp from QObject + */ + bool eventFilter(QObject *watched, QEvent *event); + /** * @reimp from QGraphicsItem */