Fix Adjust Last Operation popup for operators relying on button context

This was reported for duplicating particle systems, then using F9 to
enable the 'Duplicate Settings' option (see T83317).
In this case, the operator gets the particle_system from (buttons)
context and if none can get found will duplicate all settings instead.

The reason why none gets found here is that buttons_context() doesnt
have a valid path when called from F9/SCREEN_OT_redo_last, path is
cleared when global undo does a file-read which clears the path (see
lib_link_workspace_layout_restore). It can be recomputed though to be
valid even from redo_last (at least when in the Properties Editor).

This was likely causing other operators (relying on buttons context)
from the Properties Editor to fail as well.

Fixes T83317

Maniphest Tasks: T83317

Differential Revision: https://developer.blender.org/D9825
This commit is contained in:
2020-12-11 12:04:30 +01:00
parent ffe63b0440
commit 3834dc2f7b

View File

@@ -826,6 +826,11 @@ int /*eContextResult*/ buttons_context(const bContext *C,
bContextDataResult *result)
{
SpaceProperties *sbuts = CTX_wm_space_properties(C);
if (sbuts && sbuts->path == NULL) {
/* path is cleared for SCREEN_OT_redo_last, when global undo does a file-read which clears the
* path (see lib_link_workspace_layout_restore). */
buttons_context_compute(C, sbuts);
}
ButsContextPath *path = sbuts ? sbuts->path : NULL;
if (!path) {