don't do adjustScrollbars more than every 200 msecs

resolves some cyclical relayout crashes and surprisingly enough also some layout estetic problems
BUG:202890

svn path=/trunk/KDE/kdelibs/; revision=1062764
This commit is contained in:
Marco Martin 2009-12-15 21:37:07 +00:00
parent 2165a85a9f
commit 4b8b780829
2 changed files with 12 additions and 8 deletions

View File

@ -162,6 +162,8 @@ public:
widgetSize.setHeight(scrollingWidget->size().height()-borderSize);
}
widget.data()->resize(widgetSize);
adjustClipping();
}
void verticalScroll(int value)
@ -270,6 +272,7 @@ public:
QSet<QGraphicsWidget *>dragHandles;
bool dragging;
int animId;
QTimer *adjustScrollbarsTimer;
static const int borderSize = 4;
};
@ -287,6 +290,10 @@ ScrollWidget::ScrollWidget(QGraphicsWidget *parent)
d->borderSvg = new Plasma::Svg(this);
d->borderSvg->setImagePath("widgets/scrollwidget");
d->adjustScrollbarsTimer = new QTimer(this);
d->adjustScrollbarsTimer->setSingleShot(true);
connect(d->adjustScrollbarsTimer, SIGNAL(timeout()), this, SLOT(adjustScrollbars()));
d->verticalScrollBarPolicy = Qt::ScrollBarAsNeeded;
d->verticalScrollBar = new Plasma::ScrollBar(this);
d->verticalScrollBar->setFocusPolicy(Qt::NoFocus);
@ -326,7 +333,7 @@ void ScrollWidget::setWidget(QGraphicsWidget *widget)
widget->setParentItem(d->scrollingWidget);
widget->setPos(QPoint(0,0));
widget->installEventFilter(this);
d->adjustScrollbars();
d->adjustScrollbarsTimer->start(200);
}
}
@ -478,9 +485,7 @@ void ScrollWidget::resizeEvent(QGraphicsSceneResizeEvent *event)
return;
}
d->adjustScrollbars();
d->adjustClipping();
d->adjustScrollbarsTimer->start(200);
//if topBorder exists bottomBorder too
if (d->topBorder) {
@ -541,10 +546,7 @@ bool ScrollWidget::eventFilter(QObject *watched, QEvent *event)
}
if (watched == d->widget.data() && event->type() == QEvent::GraphicsSceneResize) {
d->adjustScrollbars();
d->adjustClipping();
//force to refresh the size hint
layout()->invalidate();
d->adjustScrollbarsTimer->start(200);
} else if (watched == d->widget.data() && event->type() == QEvent::GraphicsSceneMove) {
d->horizontalScrollBar->blockSignals(true);
d->verticalScrollBar->blockSignals(true);

View File

@ -58,6 +58,7 @@ public:
* @arg parent the parent of this widget
*/
explicit ScrollWidget(QGraphicsWidget *parent = 0);
explicit ScrollWidget(QGraphicsItem *parent = 0);
~ScrollWidget();
/**
@ -200,6 +201,7 @@ private:
Q_PRIVATE_SLOT(d, void makeRectVisible())
Q_PRIVATE_SLOT(d, void makeItemVisible())
Q_PRIVATE_SLOT(d, void cleanupDragHandles(QObject *destroyed))
Q_PRIVATE_SLOT(d, void adjustScrollbars())
};
} // namespace Plasma