aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--dw/textblock.cc10
-rw-r--r--dw/widget.cc15
2 files changed, 23 insertions, 2 deletions
diff --git a/dw/textblock.cc b/dw/textblock.cc
index 0df4270b..94a5b469 100644
--- a/dw/textblock.cc
+++ b/dw/textblock.cc
@@ -2804,7 +2804,7 @@ void Textblock::borderChanged (int y, Widget *vloat)
DBG_OBJ_MSGF ("resize", 1, "Rewrapping from line %d (of %d).",
wrapLineIndex, lines->size ());
- if (vloat->getGenerator() == this) {
+ if (vloat->getGenerator() == this && lines->size () > 0) {
bool found = false;
// Sometimes, the respective word is not yet part of a
// line. Nothing to do, but because of the assertion below
@@ -2864,6 +2864,14 @@ void Textblock::borderChanged (int y, Widget *vloat)
exceeds = exceedsBeginning = lineIndex2 < 0;
}
+ DBG_OBJ_MSGF ("resize", 2,
+ "lineIndex2 = %d (of %d), exceeds = %s, "
+ "exceedsBeginning = %s, exceedsEnd = %s",
+ lineIndex2, lines->size (),
+ exceeds ? "true" : "false",
+ exceedsBeginning ? "true" : "false",
+ exceedsEnd ? "true" : "false");
+
if (exceedsBeginning && exceedsEnd)
break;
diff --git a/dw/widget.cc b/dw/widget.cc
index 35316c4c..484dfff1 100644
--- a/dw/widget.cc
+++ b/dw/widget.cc
@@ -262,7 +262,20 @@ void Widget::actualQueueResize (int ref, bool extremesChanged, bool fast)
markExtremesChange (ref);
}
- if (!fast) {
+ if (fast) {
+ if (parent) {
+ // In this case, queueResize is called from top (may be a
+ // random entry point) to bottom, so markSizeChange and
+ // markExtremesChange have to be called explicitly for the
+ // parent. The tests (needsResize etc.) are uses to check
+ // whether queueResize has been called for the parent, or
+ // whether this widget is the enty point.
+ if (parent->needsResize () || parent->resizeQueued ())
+ parent->markSizeChange (parentRef);
+ if (parent->extremesChanged () || parent->extremesQueued ())
+ parent->markExtremesChange (parentRef);
+ }
+ } else {
for (widget2 = parent, child = this; widget2;
child = widget2, widget2 = widget2->parent) {
if (layout && !widget2->resizeQueued ())