]> git.lyx.org Git - features.git/commitdiff
Fix bug #7641: Freeze when removing itemized first paragraph
authorunknown <vfr@lyx.org>
Mon, 14 May 2012 12:21:49 +0000 (14:21 +0200)
committerunknown <vfr@lyx.org>
Mon, 14 May 2012 12:24:53 +0000 (14:24 +0200)
Text::outerFont looks recursively for paragraphs before the current one
which has a lower depth. If such a paragraph cannot be found, depthHook
and outerHook return the current paragraph. As such, we end up in an
infinite loop. So, if we find a par_depth that was the same as the
previous one, we apparently can't find a suitable paragraph and we should
quit the loop.

src/Text.cpp
src/Text.h

index 328eb55f1d5f7009e7bf808055032211fe12648d..01d1ab0efec7aa03eaecee4dabab35022ea397c6 100644 (file)
@@ -267,11 +267,13 @@ Font const Text::outerFont(pit_type par_offset) const
 {
        depth_type par_depth = pars_[par_offset].getDepth();
        FontInfo tmpfont = inherit_font;
-
+       depth_type prev_par_depth = 0;
        // Resolve against environment font information
        while (par_offset != pit_type(pars_.size())
+              && par_depth != prev_par_depth
               && par_depth
               && !tmpfont.resolved()) {
+               prev_par_depth = par_depth;
                par_offset = outerHook(par_offset);
                if (par_offset != pit_type(pars_.size())) {
                        tmpfont.realize(pars_[par_offset].layout().font);
index 6068025192dc57f6550c594b42fc2dcf0ade76fc..fb534585ee3010ad81809b5d0e405e7fa77927e7 100644 (file)
@@ -323,9 +323,14 @@ public:
        bool insertCompletion(Cursor & cur, docstring const & s, bool /*finished*/);
        ///
        docstring completionPrefix(Cursor const & cur) const;
-       /// for the environments
+       /// find a paragraph before \p par with the given \p depth, if such
+       /// a paragraph cannot be found, \p par is returned
        pit_type depthHook(pit_type par, depth_type depth) const;
-       ///
+       /// find a paragraph before \p par with depth less than the
+       /// depth of \p par. If such paragraph cannot be found because
+       /// \p par already has depth 0, lastpar + 1 is returned. If
+       /// such paragraph cannot be found because there isn't a par
+       /// with less depth before this one, \p par is returned.
        pit_type outerHook(pit_type par) const;
        /// Is it the first par with same depth and layout?
        bool isFirstInSequence(pit_type par) const;