mirror of
https://git.lyx.org/repos/lyx.git
synced 2025-01-03 08:28:25 +00:00
Allow to undo partly math autocorrect
To this end, introduce Undo::splitUndoGroup, which ends currently group and creates a new one with same nesting level.
This commit is contained in:
parent
144e7d7159
commit
f7a11ca711
@ -607,6 +607,12 @@ void CursorData::endUndoGroup() const
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void CursorData::splitUndoGroup() const
|
||||||
|
{
|
||||||
|
buffer()->undo().splitUndoGroup(*this);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void CursorData::recordUndo(pit_type from, pit_type to) const
|
void CursorData::recordUndo(pit_type from, pit_type to) const
|
||||||
{
|
{
|
||||||
buffer()->undo().recordUndo(*this, from, to);
|
buffer()->undo().recordUndo(*this, from, to);
|
||||||
|
@ -183,6 +183,8 @@ public:
|
|||||||
void beginUndoGroup() const;
|
void beginUndoGroup() const;
|
||||||
/// end the current undo group
|
/// end the current undo group
|
||||||
void endUndoGroup() const;
|
void endUndoGroup() const;
|
||||||
|
/// end abruptly the current group and create a new one wih the same nesting level
|
||||||
|
void splitUndoGroup() const;
|
||||||
|
|
||||||
/// The general case: prepare undo for an arbitrary range.
|
/// The general case: prepare undo for an arbitrary range.
|
||||||
void recordUndo(pit_type from, pit_type to) const;
|
void recordUndo(pit_type from, pit_type to) const;
|
||||||
|
10
src/Undo.cpp
10
src/Undo.cpp
@ -610,6 +610,16 @@ void Undo::endUndoGroup(CursorData const & cur_after)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void Undo::splitUndoGroup(CursorData const & cur)
|
||||||
|
{
|
||||||
|
size_t const level = d->group_level_;
|
||||||
|
d->group_level_ = 1;
|
||||||
|
endUndoGroup(cur);
|
||||||
|
beginUndoGroup(cur);
|
||||||
|
d->group_level_ = level;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
bool Undo::activeUndoGroup() const
|
bool Undo::activeUndoGroup() const
|
||||||
{
|
{
|
||||||
return d->group_level_ > 0
|
return d->group_level_ > 0
|
||||||
|
@ -96,6 +96,8 @@ public:
|
|||||||
void endUndoGroup();
|
void endUndoGroup();
|
||||||
/// end the current undo group and set UndoElement::cur_after if necessary.
|
/// end the current undo group and set UndoElement::cur_after if necessary.
|
||||||
void endUndoGroup(CursorData const & cur_after);
|
void endUndoGroup(CursorData const & cur_after);
|
||||||
|
/// end abruptly the current group and create a new one wih the same nesting level
|
||||||
|
void splitUndoGroup(CursorData const & cur);
|
||||||
/// return true if an undo group is open and contains at least one element
|
/// return true if an undo group is open and contains at least one element
|
||||||
bool activeUndoGroup() const;
|
bool activeUndoGroup() const;
|
||||||
|
|
||||||
|
@ -90,8 +90,17 @@ bool Correction::correct(Cursor & cur, char_type c) const
|
|||||||
LYXERR(Debug::MATHED, "match found! subst in " << cur.cell()
|
LYXERR(Debug::MATHED, "match found! subst in " << cur.cell()
|
||||||
<< " from: '" << from1_ << "' to '" << to_ << '\'');
|
<< " from: '" << from1_ << "' to '" << to_ << '\'');
|
||||||
|
|
||||||
cur.cell().erase(cur.pos() - n, cur.pos());
|
/* To allow undoing the completion, we proceed in 4 steps
|
||||||
cur.pos() -= n;
|
* - inset the raw character
|
||||||
|
* - split undo group so that we have two separate undo actions
|
||||||
|
* - record undo, delete the character we just entered and the from1_ part
|
||||||
|
* - finally, do the insertion of the correction.
|
||||||
|
*/
|
||||||
|
cur.insert(c);
|
||||||
|
cur.splitUndoGroup();
|
||||||
|
cur.recordUndoSelection();
|
||||||
|
cur.cell().erase(cur.pos() - n - 1, cur.pos());
|
||||||
|
cur.pos() -= n + 1;
|
||||||
|
|
||||||
cur.insert(to_);
|
cur.insert(to_);
|
||||||
return true;
|
return true;
|
||||||
|
Loading…
Reference in New Issue
Block a user