iOS: Keep undo/redo widgets enabled on the undo shortcut bar after undo

Having two undo/redo operations on the rebuilt undo stack always enables
the undo/redo widgets on the shorcut bar. This might be more desirable than
the current behavior that only allows one undo from the shortcut bar.

Fixes: QTBUG-63393
Change-Id: I2c99f27895def47b58534035461ceb7b4e5c3057
Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
(cherry picked from commit 3b155973c494e847b821f0b5675a061f4e424a6c)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
This commit is contained in:
Tamás Martinec 2021-05-04 13:49:18 +03:00 committed by Qt Cherry-pick Bot
parent 975a059a3e
commit 0eaf920983

View File

@ -514,14 +514,22 @@
// from within a undo callback.
NSUndoManager *undoMgr = self.undoManager;
[undoMgr removeAllActions];
[undoMgr beginUndoGrouping];
[undoMgr registerUndoWithTarget:self selector:@selector(undo) object:nil];
[undoMgr endUndoGrouping];
[undoMgr beginUndoGrouping];
[undoMgr registerUndoWithTarget:self selector:@selector(undo) object:nil];
[undoMgr endUndoGrouping];
// Schedule an operation that we immediately pop off to be able to schedule a redo
// Schedule operations that we immediately pop off to be able to schedule redos
[undoMgr beginUndoGrouping];
[undoMgr registerUndoWithTarget:self selector:@selector(registerRedo) object:nil];
[undoMgr endUndoGrouping];
[undoMgr beginUndoGrouping];
[undoMgr registerUndoWithTarget:self selector:@selector(registerRedo) object:nil];
[undoMgr endUndoGrouping];
[undoMgr undo];
[undoMgr undo];
// Note that, perhaps because of a bug in UIKit, the buttons on the shortcuts bar ends up
@ -530,6 +538,11 @@
// become disabled when there is nothing more to undo (Qt didn't change anything upon receiving
// an undo request). This seems to be OK behavior, so we let it stay like that unless it shows
// to cause problems.
// QTBUG-63393: Having two operations on the rebuilt undo stack keeps the undo/redo widgets
// always enabled on the shortcut bar. This workaround was found by experimenting with
// removing the removeAllActions call, and is related to the unknown internal implementation
// details of how the shortcut bar updates the dimming of its buttons.
});
}