diff options
-rw-r--r-- | dw/layout.cc | 12 | ||||
-rw-r--r-- | dw/widget.cc | 15 |
2 files changed, 21 insertions, 6 deletions
diff --git a/dw/layout.cc b/dw/layout.cc index 9e667cff..c26ae57b 100644 --- a/dw/layout.cc +++ b/dw/layout.cc @@ -674,11 +674,15 @@ void Layout::resizeIdle () // widget->parent ? "non-" : "", widget->getClassName(), widget, // widget->extremesQueued () ? "yes" : "no"); - widget->setFlags (Widget::NEEDS_RESIZE); - widget->unsetFlags (Widget::RESIZE_QUEUED); + if (widget->resizeQueued ()) { + widget->setFlags (Widget::NEEDS_RESIZE); + widget->unsetFlags (Widget::RESIZE_QUEUED); + } - widget->setFlags (Widget::NEEDS_ALLOCATE); - widget->unsetFlags (Widget::ALLOCATE_QUEUED); + if (widget->allocateQueued ()) { + widget->setFlags (Widget::NEEDS_ALLOCATE); + widget->unsetFlags (Widget::ALLOCATE_QUEUED); + } if (widget->extremesQueued ()) { widget->setFlags (Widget::EXTREMES_CHANGED); diff --git a/dw/widget.cc b/dw/widget.cc index 916703cd..fe0b1ccd 100644 --- a/dw/widget.cc +++ b/dw/widget.cc @@ -199,9 +199,20 @@ void Widget::sizeRequest (Requisition *requisition) enterSizeRequest (); - //printf ("The %stop-level %s %p with parentRef = %d: needsResize: %s\n", + //printf ("The %stop-level %s %p with parentRef = %d: needsResize: %s, " + // "resizeQueued = %s\n", // parent ? "non-" : "", getClassName(), this, parentRef, - // needsResize () ? "true" : "false"); + // needsResize () ? "true" : "false", + // resizeQueued () ? "true" : "false"); + + if (resizeQueued ()) { + // This method is called outside of Layout::resizeIdle. + setFlags (NEEDS_RESIZE); + unsetFlags (RESIZE_QUEUED); + // The widget is not taken out of Layout::queueResizeList, since + // other *_QUEUED flags may still be set and processed in + // Layout::resizeIdle. + } if (needsResize ()) { /** \todo Check requisition == &(this->requisition) and do what? */ |