The branch, 2.0.x, has been updated.

- Log -----------------------------------------------------------------

commit d475caf27819313a22e13a990de1feae818626f6
Author: Vincent van Ravesteijn <v...@lyx.org>
Date:   Mon May 14 15:04:54 2012 +0200

    Fix bug #7641: Freeze when removing itemized first paragraph
    
    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.
    (cherry picked from commit b17250d7eb46cdc58c7288e177282c3ab4448dac)

diff --git a/src/Text.cpp b/src/Text.cpp
index c1d782f..1953d16 100644
--- a/src/Text.cpp
+++ b/src/Text.cpp
@@ -243,11 +243,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);
diff --git a/src/Text.h b/src/Text.h
index c4da020..7b9ca3d 100644
--- a/src/Text.h
+++ b/src/Text.h
@@ -324,9 +324,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;
diff --git a/status.20x b/status.20x
index 3bcbb8b..8e43bda 100644
--- a/status.20x
+++ b/status.20x
@@ -130,6 +130,9 @@ What's new
 
 - Fixed an infinite loop when pasting '\\ ' into math (bug 8089).
 
+- Fixed an infinite loop after removing the first paragraph of the 
+  document if it had a non-zero depth (bug 7641).
+
 - Fixed problem when setting working directory on Windows to root of a
   disk, e.g., C:\ (bug 7982).
 

-----------------------------------------------------------------------

Summary of changes:
 src/Text.cpp |    4 +++-
 src/Text.h   |    9 +++++++--
 status.20x   |    3 +++
 3 files changed, 13 insertions(+), 3 deletions(-)


hooks/post-receive
-- 
The LyX Source Repository

Reply via email to