Fix T81818: Outliner mode column crashes with shared object data
For objects with shared data, it makes sense to show the mode icon for every object sharing the same data if one of them is in edit mode. This also disables the "extend" functionality in this case, because being in edit mode for multiple objects with the same data isn't supported. Differential Revision: https://developer.blender.org/D9273
This commit is contained in:
parent
baa24f1c91
commit
8e060b44da
Notes:
blender-bot
2024-03-13 11:54:34 +01:00
Referenced by issue #81818, Crash using outliner editmode shortcuts for objects with linked data Referenced by pull request #119416, Fix #119384: Outliner crash extend mode toggle on objects sharing data
|
@ -1935,8 +1935,14 @@ static void outliner_mode_toggle_fn(bContext *C, void *tselem_poin, void *UNUSED
|
|||
return;
|
||||
}
|
||||
|
||||
/* Check that the the item is actually an object. */
|
||||
BLI_assert(tselem->id != NULL && GS(tselem->id->name) == ID_OB);
|
||||
|
||||
Object *ob = (Object *)tselem->id;
|
||||
const bool object_data_shared = (ob->data == tvc.obact->data);
|
||||
|
||||
wmWindow *win = CTX_wm_window(C);
|
||||
const bool do_extend = win->eventstate->ctrl != 0;
|
||||
const bool do_extend = win->eventstate->ctrl != 0 && !object_data_shared;
|
||||
outliner_item_mode_toggle(C, &tvc, te, do_extend);
|
||||
}
|
||||
|
||||
|
@ -1974,11 +1980,15 @@ static void outliner_draw_mode_column_toggle(uiBlock *block,
|
|||
draw_active_icon = false;
|
||||
}
|
||||
|
||||
const bool object_data_shared = (ob->data == ob_active->data);
|
||||
draw_active_icon = draw_active_icon || object_data_shared;
|
||||
|
||||
int icon;
|
||||
const char *tip;
|
||||
if (draw_active_icon) {
|
||||
icon = UI_icon_from_object_mode(ob_active->mode);
|
||||
tip = TIP_("Remove from the current mode");
|
||||
tip = object_data_shared ? TIP_("Change the object in the current mode") :
|
||||
TIP_("Remove from the current mode");
|
||||
}
|
||||
else {
|
||||
icon = ICON_DOT;
|
||||
|
|
Loading…
Reference in New Issue