new_cur.pos() = right_pos;
new_cur.boundary(false);
if (!skip_inset &&
- text()->checkAndActivateInsetVisual(new_cur, right_pos>=pos(), false)) {
+ text()->checkAndActivateInsetVisual(new_cur, right_pos >= pos(), false)) {
// we actually move the cursor at the end of this function, for now
// we just keep track of the new position in new_cur...
LYXERR(Debug::RTL, "entering inset at: " << new_cur.pos());
{
if (!selection())
return *this;
- DocIterator di = (anchor() < top() ? anchor_ : *this);
+
+ DocIterator di;
+ // FIXME: This is a work-around for the problem that
+ // CursorSlice doesn't keep track of the boundary.
+ if (anchor() == top())
+ di = anchor_.boundary() > boundary() ? anchor_ : *this;
+ else
+ di = anchor() < top() ? anchor_ : *this;
di.resize(depth());
return di;
}
{
if (!selection())
return *this;
- DocIterator di = (anchor() > top() ? anchor_ : *this);
+
+ DocIterator di;
+ // FIXME: This is a work-around for the problem that
+ // CursorSlice doesn't keep track of the boundary.
+ if (anchor() == top())
+ di = anchor_.boundary() < boundary() ? anchor_ : *this;
+ else
+ di = anchor() > top() ? anchor_ : *this;
+
if (di.depth() > depth()) {
di.resize(depth());
++di.pos();
selection() = true;
// A selection with no contents is not a selection
// FIXME: doesnt look ok
- if (pit() == anchor().pit() && pos() == anchor().pos())
+ if (idx() == anchor().idx() &&
+ pit() == anchor().pit() &&
+ pos() == anchor().pos())
selection() = false;
}
safe = cap::grabAndEraseSelection(*this);
}
+ recordUndoInset();
+
if (lastpos() != 0) {
// something left in the cell
if (pos() == 0) {
}
} else {
// nothing left in the cell
- pullArg();
+ popBackward();
plainErase();
+ resetAnchor();
}
insert(safe);
}
}
+void Cursor::beginUndoGroup() const
+{
+ bv_->buffer().undo().beginUndoGroup();
+}
+
+
+void Cursor::endUndoGroup() const
+{
+ bv_->buffer().undo().endUndoGroup();
+}
+
+
void Cursor::recordUndo(UndoKind kind, pit_type from, pit_type to) const
{
bv_->buffer().undo().recordUndo(*this, kind, from, to);