@@ -1240,6 +1240,22 @@ impl Document {
1240 /// the state it had when this function was called.
1240 /// the state it had when this function was called.
1241 pub fn savepoint(&mut self, view: &View) -> Arc<SavePoint> {
1241 pub fn savepoint(&mut self, view: &View) -> Arc<SavePoint> {
1242 let revert = Transaction::new(self.text()).with_selection(self.selection(view.id).clone());
1242 let revert = Transaction::new(self.text()).with_selection(self.selection(view.id).clone());
1243+ // check if there is already an existing (identical) savepoint around
1244+ if let Some(savepoint) = self
1248+ .find_map(|savepoint| savepoint.upgrade())
1250+ let transaction = savepoint.revert.lock();
1251+ if savepoint.view == view.id
1252+ && transaction.changes().is_empty()
1253+ && transaction.selection() == revert.selection()
1243 let savepoint = Arc::new(SavePoint {
1259 let savepoint = Arc::new(SavePoint {
1244 view: view.id,
1260 view: view.id,
1245 revert: Mutex::new(revert),
1261 revert: Mutex::new(revert),