Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrecht Van Lommel <brechtvanlommel@gmail.com>2019-03-20 21:26:54 +0300
committerBrecht Van Lommel <brechtvanlommel@gmail.com>2019-03-20 21:50:21 +0300
commitda1350acdcb4c335b0082864a8ba16d216544a1e (patch)
tree661bb9014228a631f08554b4df1dfa2ec2277fd2 /source/blender/editors/interface/interface.c
parent6500b31728d870506207d9d70837b171cbef32ea (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.c11
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;