]> git.lyx.org Git - lyx.git/blobdiff - src/text.C
* src/frontends/qt4/QTocDialog.C (updateGui):
[lyx.git] / src / text.C
index 437701acf3c6336fab178de482bcb0b7a220bb55..2a9cc8a2428d5eb45720d4732b02828b6ee5fb71 100644 (file)
@@ -53,6 +53,7 @@
 
 #include "frontends/FontMetrics.h"
 #include "frontends/Painter.h"
+#include "frontends/Selection.h"
 
 #include "insets/insettext.h"
 #include "insets/insetbibitem.h"
@@ -641,8 +642,10 @@ void LyXText::breakParagraph(LCursor & cur, bool keep_layout)
                        pars_[next_par].applyLayout(tclass.defaultLayout());
        }
 
-       while (!pars_[next_par].empty() && pars_[next_par].isNewline(0))
-               pars_[next_par].eraseChar(0, cur.buffer().params().trackChanges);
+       while (!pars_[next_par].empty() && pars_[next_par].isNewline(0)) {
+               if (!pars_[next_par].eraseChar(0, cur.buffer().params().trackChanges))
+                       break; // the character couldn't be deleted physically due to change tracking
+       }
 
        ParIterator current_it(cur);
        ParIterator last_it(cur);
@@ -826,6 +829,7 @@ void LyXText::selectWord(LCursor & cur, word_location loc)
        cur.resetAnchor();
        setCursor(cur, to.pit(), to.pos());
        cur.setSelection();
+       theSelection().haveSelection(cur.selection());
 }
 
 
@@ -860,9 +864,8 @@ void LyXText::acceptChange(LCursor & cur)
        for (; pit <= et.pit(); ++pit) {
                pos_type left  = (pit == it.pit() ? it.pos() : 0);
                pos_type right = (pit == et.pit() ? et.pos() : pars_[pit].size());
-               pars_[pit].acceptChanges(left, right);
 
-               // handle imaginary end-of-par character
+               // handle imaginary end-of-par character first
                if (right == pars_[pit].size() && !pars_[pit].isUnchanged(right)) {
                        if (pars_[pit].isInserted(right)) {
                                pars_[pit].setChange(right, Change(Change::UNCHANGED));
@@ -873,6 +876,8 @@ void LyXText::acceptChange(LCursor & cur)
                                // }
                        }
                }
+
+               pars_[pit].acceptChanges(left, right);
        }
        finishUndo();
        cur.clearSelection();
@@ -900,9 +905,8 @@ void LyXText::rejectChange(LCursor & cur)
        for (; pit <= et.pit(); ++pit) {
                pos_type left  = (pit == it.pit() ? it.pos() : 0);
                pos_type right = (pit == et.pit() ? et.pos() : pars_[pit].size());
-               pars_[pit].rejectChanges(left, right);
 
-               // handle imaginary end-of-par character
+               // handle imaginary end-of-par character first
                if (right == pars_[pit].size() && !pars_[pit].isUnchanged(right)) {
                        if (pars_[pit].isDeleted(right)) {
                                pars_[pit].setChange(right, Change(Change::UNCHANGED));
@@ -913,6 +917,8 @@ void LyXText::rejectChange(LCursor & cur)
                                // }
                        }
                }
+               
+               pars_[pit].rejectChanges(left, right);
        }
        finishUndo();
        cur.clearSelection();