mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-12-22 05:16:21 +00:00
Fix bug #5435.
Revert the previous fix and fix the DEPM regression. This reverts r28910. git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@29248 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
parent
586afc2a4c
commit
cdd802421a
@ -321,6 +321,15 @@ void Cursor::dispatch(FuncRequest const & cmd0)
|
||||
// object will be used again.
|
||||
if (!disp_.dispatched()) {
|
||||
LYXERR(Debug::DEBUG, "RESTORING OLD CURSOR!");
|
||||
// We might have invalidated the cursor when removing an empty
|
||||
// paragraph while the cursor could not be moved out the inset
|
||||
// while we initially thought we could. This might happen when
|
||||
// a multiline inset becomes an inline inset when the second
|
||||
// paragraph is removed.
|
||||
if (safe.pit() > safe.lastpit()) {
|
||||
safe.pit() = safe.lastpit();
|
||||
safe.pos() = safe.lastpos();
|
||||
}
|
||||
operator=(safe);
|
||||
disp_.update(Update::None);
|
||||
disp_.dispatched(false);
|
||||
@ -1776,14 +1785,31 @@ bool Cursor::upDownInText(bool up, bool & updateNeeded)
|
||||
row = pm.pos2row(pos());
|
||||
|
||||
if (atFirstOrLastRow(up)) {
|
||||
// Is there a place for the cursor to go ? If yes, we
|
||||
// can execute the DEPM, otherwise we should keep the
|
||||
// paragraph to host the cursor.
|
||||
Cursor dummy = *this;
|
||||
// The cursor hasn't changed yet. This happens when
|
||||
// you e.g. move out of an inset. And to give the
|
||||
// DEPM the possibility of doing something we must
|
||||
// provide it with two different cursors. (Lgb, vfr)
|
||||
dummy.pos() = dummy.pos() == 0 ? dummy.lastpos() : 0;
|
||||
dummy.pit() = dummy.pit() == 0 ? dummy.lastpit() : 0;
|
||||
updateNeeded |= bv().checkDepm(dummy, *this);
|
||||
bool valid_destination = false;
|
||||
for(; dummy.depth(); dummy.pop())
|
||||
if (!dummy.atFirstOrLastRow(up)) {
|
||||
valid_destination = true;
|
||||
break;
|
||||
}
|
||||
|
||||
// will a next dispatch follow and if there is a new
|
||||
// dispatch will it move the cursor out ?
|
||||
if (depth() > 1 && valid_destination) {
|
||||
// The cursor hasn't changed yet. This happens when
|
||||
// you e.g. move out of an inset. And to give the
|
||||
// DEPM the possibility of doing something we must
|
||||
// provide it with two different cursors. (Lgb, vfr)
|
||||
dummy = *this;
|
||||
dummy.pos() = dummy.pos() == 0 ? dummy.lastpos() : 0;
|
||||
dummy.pit() = dummy.pit() == 0 ? dummy.lastpit() : 0;
|
||||
|
||||
updateNeeded |= bv().checkDepm(dummy, *this);
|
||||
updateTextTargetOffset();
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -1797,6 +1823,19 @@ bool Cursor::upDownInText(bool up, bool & updateNeeded)
|
||||
else
|
||||
tm.editXY(*this, xo, yo + textRow().descent() + 1);
|
||||
clearSelection();
|
||||
|
||||
// This happens when you move out of an inset.
|
||||
// And to give the DEPM the possibility of doing
|
||||
// something we must provide it with two different
|
||||
// cursors. (Lgb)
|
||||
Cursor dummy = *this;
|
||||
if (dummy == old)
|
||||
++dummy.pos();
|
||||
if (bv().checkDepm(dummy, old)) {
|
||||
updateNeeded = true;
|
||||
// Make sure that cur gets back whatever happened to dummy(Lgb)
|
||||
operator=(dummy);
|
||||
}
|
||||
} else {
|
||||
// if there is a selection, we stay out of any inset, and just jump to the right position:
|
||||
Cursor old = *this;
|
||||
|
Loading…
Reference in New Issue
Block a user