public void OptimizeTypedUndo () { if (undoStack.Count == 0) return; UndoOperation top = undoStack.Pop (); if (top.Args == null || top.Args.InsertedText == null || top.Args.InsertionLength != 1 || (top is KeyboardStackUndo && ((KeyboardStackUndo)top).IsClosed)) { undoStack.Push (top); return; } if (undoStack.Count == 0 || !(undoStack.Peek () is KeyboardStackUndo)) undoStack.Push (new KeyboardStackUndo ()); var keyUndo = (KeyboardStackUndo)undoStack.Pop (); if (keyUndo.IsClosed) { undoStack.Push (keyUndo); keyUndo = new KeyboardStackUndo (); } if (keyUndo.Args != null && keyUndo.Args.Offset + 1 != top.Args.Offset || !char.IsLetterOrDigit (top.Args.InsertedText.GetCharAt (0))) { keyUndo.IsClosed = true; undoStack.Push (keyUndo); keyUndo = new KeyboardStackUndo (); } keyUndo.Add (top); undoStack.Push (keyUndo); }
public void OptimizeTypedUndo () { if (undoStack.Count == 0) return; UndoOperation top = undoStack.Pop (); if (top.Args == null || top.Args.Value == null || top.Args.Value.Length != 1 || (top is KeyboardStackUndo && ((KeyboardStackUndo)top).IsClosed)) { undoStack.Push (top); return; } if (undoStack.Count == 0 || !(undoStack.Peek () is KeyboardStackUndo)) undoStack.Push (new KeyboardStackUndo ()); var keyUndo = (KeyboardStackUndo)undoStack.Pop (); if (keyUndo.IsClosed) { undoStack.Push (keyUndo); keyUndo = new KeyboardStackUndo (); } if (keyUndo.Args != null && keyUndo.Args.Offset + 1 != top.Args.Offset) { keyUndo.IsClosed = true; undoStack.Push (keyUndo); keyUndo = new KeyboardStackUndo (); } keyUndo.Add (top); undoStack.Push (keyUndo); }