Fix handling of undo/redo stack in splits do the right thing.

This commit is contained in:
Julian Viereck 2011-05-21 20:04:53 +02:00
commit f332e2b900
3 changed files with 26 additions and 18 deletions

View file

@ -694,7 +694,7 @@ var EditSession = function(text, mode) {
return this.doc.remove(range);
};
this.undoChanges = function(deltas) {
this.undoChanges = function(deltas, dontSelect) {
if (!deltas.length)
return;
@ -713,10 +713,13 @@ var EditSession = function(text, mode) {
}
}
this.$fromUndo = false;
lastUndoRange && this.selection.setSelectionRange(lastUndoRange);
lastUndoRange &&
!dontSelect &&
this.selection.setSelectionRange(lastUndoRange);
return lastUndoRange;
},
this.redoChanges = function(deltas) {
this.redoChanges = function(deltas, dontSelect) {
if (!deltas.length)
return;
@ -731,7 +734,10 @@ var EditSession = function(text, mode) {
}
}
this.$fromUndo = false;
lastUndoRange && this.selection.setSelectionRange(lastUndoRange);
lastUndoRange &&
!dontSelect &&
this.selection.setSelectionRange(lastUndoRange);
return lastUndoRange;
},
this.$getUndoSelection = function(deltas, isUndo, lastUndoRange) {

View file

@ -265,20 +265,16 @@ function UndoManagerProxy(undoManager, session) {
}
this.undo = function() {
var u = this.$u;
var deltas = u.$undoStack.pop();
if (deltas) {
this.$doc.undoChanges(deltas);
u.$redoStack.push(deltas);
var selectionRange = this.$u.undo(true);
if (selectionRange) {
this.$doc.selection.setSelectionRange(selectionRange);
}
}
this.redo = function() {
var u = this.$u;
var deltas = u.$redoStack.pop();
if (deltas) {
this.$doc.redoChanges(deltas);
u.$undoStack.push(deltas);
var selectionRange = this.$u.redo(true);
if (selectionRange) {
this.$doc.selection.setSelectionRange(selectionRange);
}
}

View file

@ -52,20 +52,26 @@ var UndoManager = function() {
this.$redoStack = [];
};
this.undo = function() {
this.undo = function(dontSelect) {
var deltas = this.$undoStack.pop();
var undoSelectionRange = null;
if (deltas) {
this.$doc.undoChanges(deltas);
undoSelectionRange =
this.$doc.undoChanges(deltas, dontSelect);
this.$redoStack.push(deltas);
}
return undoSelectionRange;
};
this.redo = function() {
this.redo = function(dontSelect) {
var deltas = this.$redoStack.pop();
var redoSelectionRange = null;
if (deltas) {
this.$doc.redoChanges(deltas);
redoSelectionRange =
this.$doc.redoChanges(deltas, dontSelect);
this.$undoStack.push(deltas);
}
return redoSelectionRange;
};
this.reset = function() {