diff options
Diffstat (limited to 'source/blender')
-rw-r--r-- | source/blender/editors/interface/interface.c | 1 | ||||
-rw-r--r-- | source/blender/editors/interface/interface_intern.h | 1 | ||||
-rw-r--r-- | source/blender/editors/interface/interface_layout.c | 16 |
3 files changed, 18 insertions, 0 deletions
diff --git a/source/blender/editors/interface/interface.c b/source/blender/editors/interface/interface.c index 10650da4b0e..2b80ef7ab82 100644 --- a/source/blender/editors/interface/interface.c +++ b/source/blender/editors/interface/interface.c @@ -3907,6 +3907,7 @@ uiBut *ui_but_change_type(uiBut *but, eButType new_type) const bool found_layout = ui_layout_replace_but_ptr(but->layout, old_but_ptr, but); BLI_assert(found_layout); UNUSED_VARS_NDEBUG(found_layout); + ui_button_group_replace_but_ptr(but->layout, old_but_ptr, but); } } } diff --git a/source/blender/editors/interface/interface_intern.h b/source/blender/editors/interface/interface_intern.h index 4661d0816ae..9b89db5cda0 100644 --- a/source/blender/editors/interface/interface_intern.h +++ b/source/blender/editors/interface/interface_intern.h @@ -994,6 +994,7 @@ void ui_resources_free(void); /* interface_layout.c */ void ui_layout_add_but(uiLayout *layout, uiBut *but); bool ui_layout_replace_but_ptr(uiLayout *layout, const void *old_but_ptr, uiBut *new_but); +void ui_button_group_replace_but_ptr(uiLayout *root, const void *old_but_ptr, uiBut *new_but); uiBut *ui_but_add_search(uiBut *but, PointerRNA *ptr, PropertyRNA *prop, diff --git a/source/blender/editors/interface/interface_layout.c b/source/blender/editors/interface/interface_layout.c index 983c3e5ebd3..7fce57b8f62 100644 --- a/source/blender/editors/interface/interface_layout.c +++ b/source/blender/editors/interface/interface_layout.c @@ -462,6 +462,22 @@ static void button_group_free(uiButtonGroup *button_group) MEM_freeN(button_group); } +/* This function should be removed whenever #ui_layout_replace_but_ptr is removed. */ +void ui_button_group_replace_but_ptr(uiLayout *layout, const void *old_but_ptr, uiBut *new_but) +{ + LISTBASE_FOREACH (uiButtonGroup *, button_group, &layout->root->button_groups) { + LISTBASE_FOREACH (LinkData *, link, &button_group->buttons) { + if (link->data == old_but_ptr) { + link->data = new_but; + return; + } + } + } + + /* The button should be in a group. */ + BLI_assert(false); +} + /** \} */ /* -------------------------------------------------------------------- */ |