aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--dw/layout.cc12
-rw-r--r--dw/widget.cc15
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? */