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:
Philipp Oeser 2020-12-11 12:04:30 +01:00
parent ffe63b0440
commit 3834dc2f7b
Notes: blender-bot 2024-03-25 12:30:38 +01:00
Referenced by commit f9308a585e, Fix particle system duplication duplicates all systems
Referenced by issue #83317, Hair particles duplication with duplicate settings enabled copies all the particles instead of one selected
1 changed files with 5 additions and 0 deletions

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) {