]> git.lyx.org Git - features.git/commitdiff
Fix endless loop when breaking text
authorJean-Marc Lasgouttes <lasgouttes@lyx.org>
Thu, 9 Dec 2021 15:43:16 +0000 (16:43 +0100)
committerJean-Marc Lasgouttes <lasgouttes@lyx.org>
Thu, 9 Dec 2021 15:56:09 +0000 (16:56 +0100)
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

index 4b9836edff3a19bc6d55f88ec8eb128e2f3635f4..db52b057ddc18cedf6d2ad4abcb5b17ba33f99e0 100644 (file)
@@ -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.