diff options
author | Brecht Van Lommel <brechtvanlommel@gmail.com> | 2019-03-20 21:26:54 +0300 |
---|---|---|
committer | Brecht Van Lommel <brechtvanlommel@gmail.com> | 2019-03-20 21:50:21 +0300 |
commit | da1350acdcb4c335b0082864a8ba16d216544a1e (patch) | |
tree | 661bb9014228a631f08554b4df1dfa2ec2277fd2 /source/blender/editors/interface/interface.c | |
parent | 6500b31728d870506207d9d70837b171cbef32ea (diff) |
Fix T60815: drag & drop crash when search menu is opened immediately after.
Patch by matc, some further refactoring by me.
Differential Revision: https://developer.blender.org/D4250
Diffstat (limited to 'source/blender/editors/interface/interface.c')
-rw-r--r-- | source/blender/editors/interface/interface.c | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/source/blender/editors/interface/interface.c b/source/blender/editors/interface/interface.c index 16c87b7a7d7..c4a81b529a9 100644 --- a/source/blender/editors/interface/interface.c +++ b/source/blender/editors/interface/interface.c @@ -2949,7 +2949,7 @@ static void ui_but_free(const bContext *C, uiBut *but) MEM_freeN(but->hold_argN); } - if (!but->editstr && but->free_search_arg) { + if (but->free_search_arg) { MEM_SAFE_FREE(but->search_arg); } @@ -4717,7 +4717,7 @@ uiBut *uiDefSearchBut(uiBlock *block, void *arg, int retval, int icon, int maxle void UI_but_func_search_set( uiBut *but, uiButSearchCreateFunc search_create_func, - uiButSearchFunc search_func, void *arg, + uiButSearchFunc search_func, void *arg, bool free_arg, uiButHandleFunc bfunc, void *active) { /* needed since callers don't have access to internal functions @@ -4726,9 +4726,14 @@ void UI_but_func_search_set( search_create_func = ui_searchbox_create_generic; } + if (but->free_search_arg) { + MEM_SAFE_FREE(but->search_arg); + } + but->search_create_func = search_create_func; but->search_func = search_func; but->search_arg = arg; + but->free_search_arg = free_arg; if (bfunc) { #ifdef DEBUG @@ -4817,7 +4822,7 @@ uiBut *uiDefSearchButO_ptr( but = uiDefSearchBut(block, arg, retval, icon, maxlen, x, y, width, height, a1, a2, tip); UI_but_func_search_set( but, ui_searchbox_create_generic, operator_enum_search_cb, - but, operator_enum_call_cb, NULL); + but, false, operator_enum_call_cb, NULL); but->optype = ot; but->opcontext = WM_OP_EXEC_DEFAULT; |