Correct the layout invalidation logic. As with Qt, when a layout is invalidated it finds its top-level layout and causes that to be updated. Calling Widget::updageGeometry() causes the parent widget's layout to be invalidated.
svn path=/trunk/KDE/kdebase/workspace/libs/plasma/; revision=709495
This commit is contained in:
parent
45f7769d44
commit
3dc0a4795f
@ -82,26 +82,17 @@ void Layout::update()
|
||||
}
|
||||
void Layout::invalidate()
|
||||
{
|
||||
//qDebug() << "Layout update";
|
||||
LayoutItem *item = parent();
|
||||
while ( item ) {
|
||||
//qDebug() << "Looking at item " << item;
|
||||
Widget *widget = dynamic_cast<Widget*>(item);
|
||||
if ( widget ) {
|
||||
//qDebug() << "Parent widget found and invalidated";
|
||||
widget->updateGeometry();
|
||||
break;
|
||||
}
|
||||
else {
|
||||
Layout *layout = dynamic_cast<Layout*>(item);
|
||||
if ( layout ) {
|
||||
item = layout->parent();
|
||||
// qDebug() << "Item is a layout";
|
||||
}
|
||||
else
|
||||
item = 0;
|
||||
}
|
||||
}
|
||||
// find and update the top level layout
|
||||
Layout *layout = this;
|
||||
Layout *parentLayout = 0;
|
||||
|
||||
do {
|
||||
parentLayout = dynamic_cast<Layout*>(layout->parent());
|
||||
if ( parentLayout )
|
||||
layout = parentLayout;
|
||||
} while ( parentLayout );
|
||||
|
||||
layout->update();
|
||||
}
|
||||
|
||||
|
||||
|
@ -180,30 +180,9 @@ void Widget::setGeometry(const QRectF& geometry)
|
||||
|
||||
void Widget::updateGeometry()
|
||||
{
|
||||
prepareGeometryChange();
|
||||
|
||||
Widget *widget = this;
|
||||
while ( widget ) {
|
||||
if ( widget->parent() == 0 || widget->parent()->layout() != 0 ) {
|
||||
if ( widget->layout() ) {
|
||||
widget->layout()->update();
|
||||
widget->update();
|
||||
}
|
||||
break;
|
||||
}
|
||||
widget = widget->parent();
|
||||
}
|
||||
|
||||
#if 0
|
||||
prepareGeometryChange();
|
||||
|
||||
if (layout()) {
|
||||
// kDebug() << (void *) this << " updating geometry to " << size();
|
||||
//
|
||||
//qDebug() << "Widget" << metaObject()->className() << "updating geometry to " << boundingRect();
|
||||
layout()->setGeometry(boundingRect());
|
||||
}
|
||||
#endif
|
||||
if ( parent() && parent()->layout() ) {
|
||||
parent()->layout()->invalidate();
|
||||
}
|
||||
}
|
||||
|
||||
QSizeF Widget::sizeHint() const
|
||||
|
Loading…
Reference in New Issue
Block a user