Fix T85870: ColorRamp Keyframes crash Blender

The color-band needs to do some special, rather awkward updating of the
UI state when certain values are changed. As @lichtwerk noted in the
report, this was done to the wrong buttons. Now lookup the proper
buttons, and don't assume that `uiItemR()` only adds a single button
(which often isn't the case).
This commit is contained in:
Julian Eisel 2022-11-08 12:14:31 +01:00
parent 0d945fe20e
commit 82ba205646
Notes: blender-bot 2023-02-14 08:07:50 +01:00
Referenced by issue #88449: Blender LTS: Maintenance Task 2.93
Referenced by issue #88449, Blender LTS: Maintenance Task 2.93
Referenced by issue #100749, Blender LTS: Maintenance Task 3.3
Referenced by issue #85870, ColorRamp Keyframes crash Blender
1 changed files with 19 additions and 8 deletions

View File

@ -3673,13 +3673,9 @@ static void colorband_buttons_layout(uiLayout *layout,
row = uiLayoutRow(split, false);
uiItemR(row, &ptr, "position", 0, IFACE_("Pos"), ICON_NONE);
bt = block->buttons.last;
UI_but_func_set(bt, colorband_update_cb, bt, coba);
row = uiLayoutRow(layout, false);
uiItemR(row, &ptr, "color", 0, "", ICON_NONE);
bt = block->buttons.last;
UI_but_funcN_set(bt, rna_update_cb, MEM_dupallocN(cb), NULL);
}
else {
split = uiLayoutSplit(layout, 0.5f, false);
@ -3704,13 +3700,28 @@ static void colorband_buttons_layout(uiLayout *layout,
row = uiLayoutRow(subsplit, false);
uiItemR(row, &ptr, "position", UI_ITEM_R_SLIDER, IFACE_("Pos"), ICON_NONE);
bt = block->buttons.last;
UI_but_func_set(bt, colorband_update_cb, bt, coba);
row = uiLayoutRow(split, false);
uiItemR(row, &ptr, "color", 0, "", ICON_NONE);
bt = block->buttons.last;
UI_but_funcN_set(bt, rna_update_cb, MEM_dupallocN(cb), NULL);
}
/* Some special (rather awkward) treatment to update UI state on certain property changes. */
LISTBASE_FOREACH_BACKWARD (uiBut *, but, &block->buttons) {
if (but->rnapoin.data != ptr.data) {
continue;
}
if (!but->rnaprop) {
continue;
}
const char *prop_identifier = RNA_property_identifier(but->rnaprop);
if (STREQ(prop_identifier, "position")) {
UI_but_func_set(but, colorband_update_cb, but, coba);
}
if (STREQ(prop_identifier, "color")) {
UI_but_funcN_set(but, rna_update_cb, MEM_dupallocN(cb), NULL);
}
}
}
}