UI Demonstration: Undo History as Actions, not Waypoints #117096
No reviewers
Labels
No Label
Interest
Alembic
Interest
Animation & Rigging
Interest
Asset Browser
Interest
Asset Browser Project Overview
Interest
Audio
Interest
Automated Testing
Interest
Blender Asset Bundle
Interest
BlendFile
Interest
Collada
Interest
Compatibility
Interest
Compositing
Interest
Core
Interest
Cycles
Interest
Dependency Graph
Interest
Development Management
Interest
EEVEE
Interest
EEVEE & Viewport
Interest
Freestyle
Interest
Geometry Nodes
Interest
Grease Pencil
Interest
ID Management
Interest
Images & Movies
Interest
Import Export
Interest
Line Art
Interest
Masking
Interest
Metal
Interest
Modeling
Interest
Modifiers
Interest
Motion Tracking
Interest
Nodes & Physics
Interest
OpenGL
Interest
Overlay
Interest
Overrides
Interest
Performance
Interest
Physics
Interest
Pipeline, Assets & IO
Interest
Platforms, Builds & Tests
Interest
Python API
Interest
Render & Cycles
Interest
Render Pipeline
Interest
Sculpt, Paint & Texture
Interest
Text Editor
Interest
Translations
Interest
Triaging
Interest
Undo
Interest
USD
Interest
User Interface
Interest
UV Editing
Interest
VFX & Video
Interest
Video Sequencer
Interest
Virtual Reality
Interest
Vulkan
Interest
Wayland
Interest
Workbench
Interest: X11
Legacy
Blender 2.8 Project
Legacy
Milestone 1: Basic, Local Asset Browser
Legacy
OpenGL Error
Meta
Good First Issue
Meta
Papercut
Meta
Retrospective
Meta
Security
Module
Animation & Rigging
Module
Core
Module
Development Management
Module
EEVEE & Viewport
Module
Grease Pencil
Module
Modeling
Module
Nodes & Physics
Module
Pipeline, Assets & IO
Module
Platforms, Builds & Tests
Module
Python API
Module
Render & Cycles
Module
Sculpt, Paint & Texture
Module
Triaging
Module
User Interface
Module
VFX & Video
Platform
FreeBSD
Platform
Linux
Platform
macOS
Platform
Windows
Priority
High
Priority
Low
Priority
Normal
Priority
Unbreak Now!
Status
Archived
Status
Confirmed
Status
Duplicate
Status
Needs Info from Developers
Status
Needs Information from User
Status
Needs Triage
Status
Resolved
Type
Bug
Type
Design
Type
Known Issue
Type
Patch
Type
Report
Type
To Do
No Milestone
No project
No Assignees
4 Participants
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: blender/blender#117096
Loading…
Reference in New Issue
No description provided.
Delete Branch "Harley/blender:UndoHistory"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Working demonstration of the Undo History list working as a series of
actions that can be undone and redone, instead of (confusing) waypoints
I don't actually think we could make this change as we are so used to how the current Undo History list works. But this can also make it difficult to see that the current behavior is a bit odd...
Under the hood our "Undos" are like snapshots of the scene taken just before many actions are taken. But we expose it to users in a way that is confusing and awkward. We show the list as an "Undo History" and each item can "Redo specific action in history". But these items are not actions that can be undone/redone, but are instead waypoints to restore to. These two concepts don't mesh well.
To help illustrate lets use a specific set of actions. Start Blender fresh, then select the cube, move it, then delete it. The current list looks like this:
The tooltip hint for each item says "Redo specific action in history", but is this the case? How do you undo the deletion? You can't click on "Delete" to undo that because it is greyed out. Instead you have to click on the item below that says "Move" because we know we are actually selecting a snapshot taken before the deletion. But once you do so you can click on "Delete" to redo that. So the redo works but the undo does not? And my current position is an item I cannot select called "Move", that I now just consider to be the time before I deleted the cube.
This PR alters these behaviors so the Undo History list contains a series of actions that can be undone and redone. Just like the tooltip hints describe. You load a fresh scene, run the same actions as above and get:
This looks roughly the same except the first item is not disabled. This is because you can now select the "Delete" and it will undo the delete just like you might assume it does. Do so and the history now looks like this:
There is now also a line showing your current position. This should be much more clear that you are now between the deletion and move. Crucially, items below your current position can be undone, while the items above the line can be redone. So you click on the "delete" and it will redo and your cube will delete once again. And if you continue to think of these as actions that can be undone and redone it seems to make a lot more sense.
In case it is not obvious why Undo is different from Redo. With undo you want to move to before the action, while with redo you want to be after the action, so these deal with different snapshots. This is why the items on the current list will do different things depending on whether they are in the past or future. This PR deals with them separately and consistently, in that all items in the past should undo while items in the future will always redo.
That makes sense ! I can never tell, when opening that list, whether I should click on the action itself or the one before it... to me that's because it's not obvious that the dot represents "the last action taken" as opposed to "the current scene state".
Conceptually all actions listed are either in the past or in the future, and showing the dot besides an action is ambiguous. In addition to your proposal, I'd like to propose either
@HadrienBrissaud
The items (in the current list) will also move to different places in the stack depending on whether they are in the future or past. I updated my first comment to better explain that.
I started with this idea, with an item for "Current". But it ended up being an always-disabled item that didn't add much. It was especially awkward when the list is small, just an item or two. No matter what is done with these things you still have to click on an entry, not the gaps, to navigate.
But mockups are certainly welcome. Have you actually applied this patch and tried it? If you don't compile I can make a build for you to try.
No, I don't have a build environment setup. I've never done this before but I am starting to think it would be a wise investment of my time. If it's not too much hassle for you, please, make a Windows build and I will test this.
@blender-bot package windows
Package build started. Download here when ready.
You always give great feedback, being able to test PRs would be great for us.
The build package is here: https://builder.blender.org/download/patch/PR117096/
The link to the Windows build specifically is here: https://builder.blender.org/download/patch/blender-4.1.0-alpha+main-PR117096.d034505f2b80-windows.amd64-release.zip
Why I want you to actually try it is because although it looks so similar to the current list it is quite different. So the inconsistency you felt should just go away, if you try to not think about how it is now. Even the line next to the item with a dot. You are just before or after that thing that happened.
It's terrific to know I'm being helpful, I can be insecure about giving feedback. ✌ My download speeds are capped to 7kbps right now (undersea cable is mangled) so let's see if I can snatch the build during nighttime. Nothing is less certain
If I try to clear out my preconceptions, it feels pretty natural. You actually included a separator between past and future actions, and that makes things considerably clearer. I still think the dot is misplaced, or completely superfluous even. I can't find a good reason to justify its existence, especially with this new paradigm. I think I understand now why : it is reminiscent of an active radio button, which usually indicates state. I see it, and I think "that's where I am".
In any case, clicking an action to undo it makes sense to me conceptually. Although I'm not entirely certain it is worth changing, my brain did not find this new approach difficult to wrap around at all.
There's also the possibility to rename the entire menu to "state history" or something to that effect, solving the discrepancy from the other end.
I assumed the way the undo history works currently is the standard behavior, and that history stacks in other applications work similarly? That is you go to the state where you just performed that action, you don't select which action to undo.
I would more think of communicating that more clearly than changing the behavior of what happens when you click a certain item.
Yes, you are right. It is more clear without that dot.
We are just out by one for undo and correct for redo. But yes, we could communicate how this works better. But you are still stuck with some mental gymnastics since undoing an action in the past means selecting one after the action, while redoing an action in the future is selecting that action name. Of course we are used the current behavior; this PR is just an exploration of doing it differently, which gives some benefits described later in this comment.
It is true we could communicate better that this is a list of state snapshots with a waypoint name corresponding to the action taken just after it. This becomes a History list of history states or such.
But... we get a very nice synergy between this and "Undo", "Redo, "Repeat" if we treat these all as actions.
A simpler illustration by just adding descriptive labels to Undo and Redo (now in this PR). At the point we are illustrating above we now see the following:
It is now clear that "Undo" will do so on the move, and that "Redo" will repeat the deletion. And the Undo History directly indicates your current position in the stack, between the move and delete.
Ideally the "Repeat Last" would say "Repeat Move". But note that we can't actually have these description for this and undo and redo because they mess with our "menu search". If you now did a menu search for "undo" it would show you "Undo Move".
For me, I'm not thinking about picking an action to undo or redo, changing the labels does not change that for me.
For example if I have this and I want to go back to before I deleted a bunch of stuff:
I would not guess to click the first Delete rather than the last Transform. I'm thinking of going back to the state before the deletes, not selecting a range of operations to undo.
That's fair. I'll give it a think and see if there are ways of making these seem more like snapshots in time.
Pull request closed