From e2f41fbb6c557960ad6c4a46030715352b19723b Mon Sep 17 00:00:00 2001 From: Marco Martin Date: Thu, 8 Apr 2010 15:49:00 +0000 Subject: [PATCH] adjust extender size in an eventfilter, should catch more events svn path=/trunk/KDE/kdelibs/; revision=1112590 --- extenders/extendergroup.cpp | 14 ++++++++++++-- extenders/extendergroup.h | 1 + 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/extenders/extendergroup.cpp b/extenders/extendergroup.cpp index 651761243..fffac1fad 100644 --- a/extenders/extendergroup.cpp +++ b/extenders/extendergroup.cpp @@ -55,6 +55,7 @@ ExtenderGroup::ExtenderGroup(Extender *parent, uint groupId) lay->addItem(d->scrollWidget); d->scrollWidget->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); d->childsWidget = new QGraphicsWidget(d->scrollWidget); + d->childsWidget->installEventFilter(this); d->scrollWidget->setWidget(d->childsWidget); d->layout = new QGraphicsLinearLayout(Qt::Vertical, d->childsWidget); d->scrollWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::MinimumExpanding); @@ -211,6 +212,16 @@ void ExtenderGroup::resizeEvent(QGraphicsSceneResizeEvent *event) ExtenderItem::resizeEvent(event); } +bool ExtenderGroup::eventFilter(QObject *watched, QEvent *event) +{ + if (watched == d->childsWidget && event->type() == QEvent::GraphicsSceneResize) { + //resize to the max between the extender size hint and ours (that's because the group can still not be in the extender layout) + extender()->resize(extender()->effectiveSizeHint(Qt::PreferredSize).expandedTo(effectiveSizeHint(Qt::PreferredSize)).width(), extender()->size().height()); + } + + return ExtenderItem::eventFilter(watched, event); +} + ExtenderGroupPrivate::ExtenderGroupPrivate(ExtenderGroup *group) : q(group), svg(new Svg(group)), @@ -230,8 +241,7 @@ void ExtenderGroupPrivate::addItemToGroup(Plasma::ExtenderItem *item) item->setParentItem(childsWidget); layout->addItem(item); layout->activate(); - //Assumption: extender has no margin so it's size hint will be the max between him or this group. it works only trying to resize to this group width because the first time this group is still not in the extender layout if it's autohide - q->extender()->resize(q->effectiveSizeHint(Qt::PreferredSize).width(), q->extender()->size().height()); + childsWidget->resize(childsWidget->size().width(), childsWidget->effectiveSizeHint(Qt::PreferredSize).height()); diff --git a/extenders/extendergroup.h b/extenders/extendergroup.h index 5512d754c..3385855ac 100644 --- a/extenders/extendergroup.h +++ b/extenders/extendergroup.h @@ -116,6 +116,7 @@ class PLASMA_EXPORT ExtenderGroup : public ExtenderItem protected: void resizeEvent(QGraphicsSceneResizeEvent *event); + bool eventFilter(QObject *watched, QEvent *event); private: ExtenderGroupPrivate * const d;