mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-12-22 13:18:28 +00:00
Avoid endless loop when the window is too narrow
* breakRow: remove wrong condition that would silently eat the contents of the paragraph when the window is narrower than left margin * breakRow: make sure that there is at least one element in each row * breakAt: when force-breaking a row element, make sure it is not empty. Doing so may create empty rows and therefore a endless loop. Fixes bugs #9962 and #10001.
This commit is contained in:
parent
7d163d4e78
commit
8009edd3d4
@ -803,7 +803,7 @@ void TextMetrics::breakRow(Row & row, int const right_margin, pit_type const pit
|
|||||||
// the width available for the row.
|
// the width available for the row.
|
||||||
int const width = max_width_ - row.right_margin;
|
int const width = max_width_ - row.right_margin;
|
||||||
|
|
||||||
if (pos >= end || row.width() > width) {
|
if (pos >= end) {
|
||||||
row.endpos(end);
|
row.endpos(end);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -828,7 +828,7 @@ void TextMetrics::breakRow(Row & row, int const right_margin, pit_type const pit
|
|||||||
// or the end of the par, then build a representation of the row.
|
// or the end of the par, then build a representation of the row.
|
||||||
pos_type i = pos;
|
pos_type i = pos;
|
||||||
FontIterator fi = FontIterator(*this, par, pit, pos);
|
FontIterator fi = FontIterator(*this, par, pit, pos);
|
||||||
while (i < end && row.width() <= width) {
|
do {
|
||||||
char_type c = par.getChar(i);
|
char_type c = par.getChar(i);
|
||||||
// The most special cases are handled first.
|
// The most special cases are handled first.
|
||||||
if (par.isInset(i)) {
|
if (par.isInset(i)) {
|
||||||
@ -893,7 +893,7 @@ void TextMetrics::breakRow(Row & row, int const right_margin, pit_type const pit
|
|||||||
|
|
||||||
++i;
|
++i;
|
||||||
++fi;
|
++fi;
|
||||||
}
|
} while (i < end && row.width() <= width);
|
||||||
row.finalizeLast();
|
row.finalizeLast();
|
||||||
row.endpos(i);
|
row.endpos(i);
|
||||||
|
|
||||||
|
@ -240,7 +240,7 @@ bool GuiFontMetrics::breakAt(docstring & s, int & x, bool const rtl, bool const
|
|||||||
line.setLineWidth(x);
|
line.setLineWidth(x);
|
||||||
tl.createLine();
|
tl.createLine();
|
||||||
tl.endLayout();
|
tl.endLayout();
|
||||||
if (int(line.naturalTextWidth()) > x)
|
if ((force && line.textLength() == 1) || int(line.naturalTextWidth()) > x)
|
||||||
return false;
|
return false;
|
||||||
x = int(line.naturalTextWidth());
|
x = int(line.naturalTextWidth());
|
||||||
// The -1 is here to account for the leading zerow_nbsp.
|
// The -1 is here to account for the leading zerow_nbsp.
|
||||||
|
Loading…
Reference in New Issue
Block a user