]> git.lyx.org Git - features.git/commitdiff
* src/toc.C: allow upwards movement to first paragraph (bug 3131)
authorJürgen Spitzmüller <spitz@lyx.org>
Tue, 27 Mar 2007 05:53:14 +0000 (05:53 +0000)
committerJürgen Spitzmüller <spitz@lyx.org>
Tue, 27 Mar 2007 05:53:14 +0000 (05:53 +0000)
fix from Bernhard Roider.

git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@17582 a592a061-630c-0410-9148-cb99ea01b6c8

src/toc.C

index 0a441620324a0c55c32f84a07aa74c71a6f3f973..154da60b1596d64eccaef8277189232fb7935b87 100644 (file)
--- a/src/toc.C
+++ b/src/toc.C
@@ -63,27 +63,24 @@ void outline(OutlineOp mode,  LCursor & cur)
                        }
                        ParagraphList::iterator dest = start;
                        // Move out (up) from this header
-                       if (dest != bgn)
-                               --dest;
-                       else
+                       if (dest == bgn)
                                break;
                        // Search previous same-level header above
-                       for (; dest != bgn; --dest) {
+                       do {
+                               --dest;
                                toclevel = dest->layout()->toclevel;
-                               if (toclevel != LyXLayout::NOT_IN_TOC
-                                   && toclevel <= thistoclevel) {
-                                       break;
-                               }
-                       }
+                       } while(dest != bgn && 
+                                   (toclevel == LyXLayout::NOT_IN_TOC 
+                                        || toclevel > thistoclevel));
                        // Not found; do nothing
-                       if (dest == bgn)
+                       if (toclevel == LyXLayout::NOT_IN_TOC || toclevel > thistoclevel)
                                break;
                        pit_type const newpit = std::distance(bgn, dest);
                        pit_type const len = std::distance(start, finish);
                        pit_type const deletepit = pit + len;
                        recordUndo(cur, Undo::ATOMIC, newpit, deletepit - 1);
                        pars.insert(dest, start, finish);
-                       start = boost::next(bgn, deletepit);
+                       start = boost::next(pars.begin(), deletepit);
                        pit = newpit;
                        pars.erase(start, finish);
                break;
@@ -117,7 +114,7 @@ void outline(OutlineOp mode,  LCursor & cur)
                        // One such was found:
                        pit_type newpit = std::distance(bgn, dest);
                        pit_type const len = std::distance(start, finish);
-                       recordUndo(cur, Undo::ATOMIC, pit, newpit -1);
+                       recordUndo(cur, Undo::ATOMIC, pit, newpit - 1);
                        pars.insert(dest, start, finish);
                        start = boost::next(bgn, pit);
                        pit = newpit - len;