]> git.lyx.org Git - lyx.git/blobdiff - src/Cursor.cpp
Remove it for real now.
[lyx.git] / src / Cursor.cpp
index a2fb6b9420b80f636837b6474299b87d0cc80229..100855e92f1349fe334cd7a49e0cfbd41bf83bce 100644 (file)
@@ -336,8 +336,10 @@ void Cursor::dispatch(FuncRequest const & cmd0)
                LYXERR(Debug::DEBUG, "Cursor::dispatch: (AtPoint) cmd: "
                        << cmd0 << endl << *this);
                nextInset()->dispatch(*this, tmpcmd);
-               if (result().dispatched())
+               if (result().dispatched()) {
+                       buffer()->undo().endUndoGroup();
                        return;
+               }
        }
 
        // store some values to be used inside of the handlers
@@ -483,8 +485,14 @@ void Cursor::resetAnchor()
 
 void Cursor::setCursorToAnchor()
 {
-       if (selection())
-               setCursor(anchor_);
+       if (selection()) {
+               DocIterator normal = anchor_;
+               while (depth() < normal.depth())
+                       normal.pop_back();
+               if (depth() < anchor_.depth() && top() <= anchor_[depth() - 1])
+                       ++normal.pos();
+               setCursor(normal);
+       }
 }
 
 
@@ -2136,9 +2144,12 @@ Font Cursor::getFont() const
 
 bool Cursor::fixIfBroken()
 {
-       if (DocIterator::fixIfBroken()) {
-                       clearSelection();
-                       return true;
+       bool const broken_cursor = DocIterator::fixIfBroken();
+       bool const broken_anchor = anchor_.fixIfBroken();
+       
+       if (broken_cursor || broken_anchor) {
+               clearSelection();
+               return true;
        }
        return false;
 }