[Bf-blender-cvs] [c749bfef52f] workspaces: Fix search menu using wrong search list in full window draw mode

Julian Eisel noreply at git.blender.org
Fri Apr 7 01:11:40 CEST 2017


Commit: c749bfef52fc6100d381fffe72ec231ffa84ed0b
Author: Julian Eisel
Date:   Fri Apr 7 01:09:15 2017 +0200
Branches: workspaces
https://developer.blender.org/rBc749bfef52fc6100d381fffe72ec231ffa84ed0b

Fix search menu using wrong search list in full window draw mode

Turns out we can't use static struct data here, so just adding logic for
freeing custom search data when needed.

===================================================================

M	source/blender/editors/interface/interface.c
M	source/blender/editors/interface/interface_handlers.c
M	source/blender/editors/interface/interface_intern.h
M	source/blender/editors/interface/interface_layout.c

===================================================================

diff --git a/source/blender/editors/interface/interface.c b/source/blender/editors/interface/interface.c
index 4826633fde7..37312a33a12 100644
--- a/source/blender/editors/interface/interface.c
+++ b/source/blender/editors/interface/interface.c
@@ -2625,6 +2625,10 @@ static void ui_but_free(const bContext *C, uiBut *but)
 		MEM_freeN(but->tip_argN);
 	}
 
+	if (!but->editstr && but->free_search_arg) {
+		MEM_SAFE_FREE(but->search_arg);
+	}
+
 	if (but->active) {
 		/* XXX solve later, buttons should be free-able without context ideally,
 		 * however they may have open tooltips or popup windows, which need to
diff --git a/source/blender/editors/interface/interface_handlers.c b/source/blender/editors/interface/interface_handlers.c
index ccf1c7305a9..2f4ab4dee94 100644
--- a/source/blender/editors/interface/interface_handlers.c
+++ b/source/blender/editors/interface/interface_handlers.c
@@ -3159,6 +3159,9 @@ static void ui_textedit_end(bContext *C, uiBut *but, uiHandleButtonData *data)
 
 			ui_searchbox_free(C, data->searchbox);
 			data->searchbox = NULL;
+			if (but->free_search_arg) {
+				MEM_SAFE_FREE(but->search_arg);
+			}
 		}
 		
 		but->editstr = NULL;
diff --git a/source/blender/editors/interface/interface_intern.h b/source/blender/editors/interface/interface_intern.h
index 1f3114a4564..9fa7e7e2d3f 100644
--- a/source/blender/editors/interface/interface_intern.h
+++ b/source/blender/editors/interface/interface_intern.h
@@ -259,6 +259,7 @@ struct uiBut {
 	
 	uiButSearchCreateFunc search_create_func;
 	uiButSearchFunc search_func;
+	bool free_search_arg;
 	void *search_arg;
 
 	uiButHandleRenameFunc rename_func;
diff --git a/source/blender/editors/interface/interface_layout.c b/source/blender/editors/interface/interface_layout.c
index 9362a1f8921..7d9b7ad6fe4 100644
--- a/source/blender/editors/interface/interface_layout.c
+++ b/source/blender/editors/interface/interface_layout.c
@@ -1614,7 +1614,7 @@ void ui_but_add_search(uiBut *but, PointerRNA *ptr, PropertyRNA *prop, PointerRN
 
 	/* turn button into search button */
 	if (searchprop) {
-		static struct uiRNACollectionSearch coll_search;
+		struct uiRNACollectionSearch *coll_search = MEM_mallocN(sizeof(*coll_search), __func__);
 
 		but->type = UI_BTYPE_SEARCH_MENU;
 		but->hardmax = MAX2(but->hardmax, 256.0f);
@@ -1625,11 +1625,11 @@ void ui_but_add_search(uiBut *but, PointerRNA *ptr, PropertyRNA *prop, PointerRN
 			but->flag |= UI_BUT_VALUE_CLEAR;
 		}
 
-		coll_search.target_ptr = *ptr;
-		coll_search.target_prop = prop;
-		coll_search.search_ptr = *searchptr;
-		coll_search.search_prop = searchprop;
-		coll_search.but_changed = SET_INT_IN_POINTER(but->changed);
+		coll_search->target_ptr = *ptr;
+		coll_search->target_prop = prop;
+		coll_search->search_ptr = *searchptr;
+		coll_search->search_prop = searchprop;
+		coll_search->but_changed = SET_INT_IN_POINTER(but->changed);
 
 		if (RNA_property_type(prop) == PROP_ENUM) {
 			/* XXX, this will have a menu string,
@@ -1638,7 +1638,8 @@ void ui_but_add_search(uiBut *but, PointerRNA *ptr, PropertyRNA *prop, PointerRN
 		}
 
 		UI_but_func_search_set(but, ui_searchbox_create_generic, ui_rna_collection_search_cb,
-		                       &coll_search, NULL, NULL);
+		                       coll_search, NULL, NULL);
+		but->free_search_arg = true;
 	}
 }




More information about the Bf-blender-cvs mailing list