commit dcef1a9cad5173158e1aeef96bd4e57ad20a64ca
Author: Jean-Marc Lasgouttes <[email protected]>
Date: Thu Dec 9 16:43:16 2021 +0100
Fix endless loop when breaking text
For some reason, Qt can break strings before the first character
(although we try to prevent that). The code was not prepared to that,
now it is.
Remove a forgotten debug statement.
---
src/Row.cpp | 7 ++++++-
1 files changed, 6 insertions(+), 1 deletions(-)
diff --git a/src/Row.cpp b/src/Row.cpp
index 4b9836e..db52b05 100644
--- a/src/Row.cpp
+++ b/src/Row.cpp
@@ -162,6 +162,12 @@ bool Row::Element::splitAt(int const width, int
next_width, bool force,
bool first = true;
docstring::size_type i = 0;
for (FontMetrics::Break const & brk : breaks) {
+ /* For some reason breakString can decide to break before the
+ * first character (normally we use a 0-width nbsp to prevent
+ * that). Skip leading empty elements, they are never wanted.
+ */
+ if (first && brk.len == 0 && breaks.size() > 1)
+ continue;
Element e(STRING, pos + i, font, change);
e.str = str.substr(i, brk.len);
e.endpos = e.pos + brk.len;
@@ -612,7 +618,6 @@ Row::Elements Row::shortenIfNeeded(int const w, int const
next_width)
* splitting this time.
*/
if (cit->splitAt(w - wid, next_width, true, tail)) {
- LYXERR0(*cit);
end_ = cit->endpos;
dim_.wid = wid + cit->dim.wid;
// If there are other elements, they should be removed.
--
lyx-cvs mailing list
[email protected]
http://lists.lyx.org/mailman/listinfo/lyx-cvs