diff options
Diffstat (limited to 'source')
9 files changed, 33 insertions, 30 deletions
diff --git a/source/blender/editors/include/UI_interface.h b/source/blender/editors/include/UI_interface.h index b23f3e29551..47e3dc84503 100644 --- a/source/blender/editors/include/UI_interface.h +++ b/source/blender/editors/include/UI_interface.h @@ -504,7 +504,6 @@ typedef void (*uiButSearchUpdateFn)(const struct bContext *C, const char *str, uiSearchItems *items, const bool is_first); -typedef void (*uiButSearchArgFreeFn)(void *arg); typedef bool (*uiButSearchContextMenuFn)(struct bContext *C, void *arg, void *active, @@ -533,6 +532,8 @@ typedef void (*uiMenuHandleFunc)(struct bContext *C, void *arg, int event); */ typedef bool (*uiMenuStepFunc)(struct bContext *C, int direction, void *arg1); +typedef void (*uiFreeArgFunc)(void *arg); + /* interface_query.c */ bool UI_but_has_tooltip_label(const uiBut *but); bool UI_but_is_tool(const uiBut *but); @@ -619,11 +620,11 @@ typedef void (*uiBlockCancelFunc)(struct bContext *C, void *arg1); void UI_popup_block_invoke(struct bContext *C, uiBlockCreateFunc func, void *arg, - void (*arg_free)(void *arg)); + uiFreeArgFunc arg_free); void UI_popup_block_invoke_ex(struct bContext *C, uiBlockCreateFunc func, void *arg, - void (*arg_free)(void *arg), + uiFreeArgFunc arg_free, bool can_refresh); void UI_popup_block_ex(struct bContext *C, uiBlockCreateFunc func, @@ -1599,7 +1600,7 @@ void UI_but_func_search_set(uiBut *but, uiButSearchUpdateFn search_update_fn, void *arg, const bool free_arg, - uiButSearchArgFreeFn search_arg_free_fn, + uiFreeArgFunc search_arg_free_fn, uiButHandleFunc search_exec_fn, void *active); void UI_but_func_search_set_context_menu(uiBut *but, uiButSearchContextMenuFn context_menu_fn); @@ -1644,7 +1645,7 @@ void UI_but_func_drawextra_set( void UI_but_func_menu_step_set(uiBut *but, uiMenuStepFunc func); -void UI_but_func_tooltip_set(uiBut *but, uiButToolTipFunc func, void *argN); +void UI_but_func_tooltip_set(uiBut *but, uiButToolTipFunc func, void *arg, uiFreeArgFunc free_arg); void UI_but_tooltip_refresh(struct bContext *C, uiBut *but); void UI_but_tooltip_timer_remove(struct bContext *C, uiBut *but); diff --git a/source/blender/editors/interface/interface.c b/source/blender/editors/interface/interface.c index d2204c17e62..6f341edf11b 100644 --- a/source/blender/editors/interface/interface.c +++ b/source/blender/editors/interface/interface.c @@ -811,7 +811,8 @@ static void ui_but_update_old_active_from_new(uiBut *oldbut, uiBut *but) /* Move tooltip from new to old. */ SWAP(uiButToolTipFunc, oldbut->tip_func, but->tip_func); - SWAP(void *, oldbut->tip_argN, but->tip_argN); + SWAP(void *, oldbut->tip_arg, but->tip_arg); + SWAP(uiFreeArgFunc, oldbut->tip_arg_free, but->tip_arg_free); oldbut->flag = (oldbut->flag & ~flag_copy) | (but->flag & flag_copy); oldbut->drawflag = (oldbut->drawflag & ~drawflag_copy) | (but->drawflag & drawflag_copy); @@ -822,7 +823,7 @@ static void ui_but_update_old_active_from_new(uiBut *oldbut, uiBut *but) if (oldbut->type == UI_BTYPE_SEARCH_MENU) { uiButSearch *search_oldbut = (uiButSearch *)oldbut, *search_but = (uiButSearch *)but; - SWAP(uiButSearchArgFreeFn, search_oldbut->arg_free_fn, search_but->arg_free_fn); + SWAP(uiFreeArgFunc, search_oldbut->arg_free_fn, search_but->arg_free_fn); SWAP(void *, search_oldbut->arg, search_but->arg); } @@ -3358,8 +3359,8 @@ static void ui_but_free(const bContext *C, uiBut *but) MEM_freeN(but->func_argN); } - if (but->tip_argN) { - MEM_freeN(but->tip_argN); + if (but->tip_arg_free) { + but->tip_arg_free(but->tip_arg); } if (but->hold_argN) { @@ -6334,13 +6335,14 @@ void UI_but_func_menu_step_set(uiBut *but, uiMenuStepFunc func) but->menu_step_func = func; } -void UI_but_func_tooltip_set(uiBut *but, uiButToolTipFunc func, void *argN) +void UI_but_func_tooltip_set(uiBut *but, uiButToolTipFunc func, void *arg, uiFreeArgFunc free_arg) { but->tip_func = func; - if (but->tip_argN) { - MEM_freeN(but->tip_argN); + if (but->tip_arg_free) { + but->tip_arg_free(but->tip_arg); } - but->tip_argN = argN; + but->tip_arg = arg; + but->tip_arg_free = free_arg; } void UI_but_func_pushed_state_set(uiBut *but, uiButPushedStateFunc func, const void *arg) @@ -6630,7 +6632,7 @@ void UI_but_func_search_set(uiBut *but, uiButSearchUpdateFn search_update_fn, void *arg, const bool free_arg, - uiButSearchArgFreeFn search_arg_free_fn, + uiFreeArgFunc search_arg_free_fn, uiButHandleFunc search_exec_fn, void *active) { @@ -6965,7 +6967,7 @@ void UI_but_string_info_get(bContext *C, uiBut *but, ...) } else if (type == BUT_GET_TIP) { if (but->tip_func) { - tmp = but->tip_func(C, but->tip_argN, but->tip); + tmp = but->tip_func(C, but->tip_arg, but->tip); } else if (but->tip && but->tip[0]) { tmp = BLI_strdup(but->tip); diff --git a/source/blender/editors/interface/interface_handlers.c b/source/blender/editors/interface/interface_handlers.c index 542a226ee68..45609d96840 100644 --- a/source/blender/editors/interface/interface_handlers.c +++ b/source/blender/editors/interface/interface_handlers.c @@ -469,7 +469,7 @@ typedef struct uiAfterFunc { PropertyRNA *rnaprop; void *search_arg; - uiButSearchArgFreeFn search_arg_free_fn; + uiFreeArgFunc search_arg_free_fn; bContextStore *context; diff --git a/source/blender/editors/interface/interface_intern.h b/source/blender/editors/interface/interface_intern.h index 97b9bb66f07..b9a44b5bce9 100644 --- a/source/blender/editors/interface/interface_intern.h +++ b/source/blender/editors/interface/interface_intern.h @@ -221,7 +221,8 @@ struct uiBut { const char *tip; uiButToolTipFunc tip_func; - void *tip_argN; + void *tip_arg; + uiFreeArgFunc tip_arg_free; /** info on why button is disabled, displayed in tooltip */ const char *disabled_info; @@ -316,7 +317,7 @@ typedef struct uiButSearch { void *item_active; void *arg; - uiButSearchArgFreeFn arg_free_fn; + uiFreeArgFunc arg_free_fn; uiButSearchContextMenuFn item_context_menu_fn; uiButSearchTooltipFn item_tooltip_fn; @@ -704,7 +705,7 @@ struct uiPopupBlockCreate { uiBlockCreateFunc create_func; uiBlockHandleCreateFunc handle_create_func; void *arg; - void (*arg_free)(void *arg); + uiFreeArgFunc arg_free; int event_xy[2]; @@ -828,7 +829,7 @@ uiPopupBlockHandle *ui_popup_block_create(struct bContext *C, uiBlockCreateFunc create_func, uiBlockHandleCreateFunc handle_create_func, void *arg, - void (*arg_free)(void *arg)); + uiFreeArgFunc arg_free); uiPopupBlockHandle *ui_popup_menu_create(struct bContext *C, struct ARegion *butregion, uiBut *but, diff --git a/source/blender/editors/interface/interface_region_menu_popup.c b/source/blender/editors/interface/interface_region_menu_popup.c index 58a74a3473e..6e60ca79aaf 100644 --- a/source/blender/editors/interface/interface_region_menu_popup.c +++ b/source/blender/editors/interface/interface_region_menu_popup.c @@ -591,7 +591,7 @@ int UI_popup_menu_invoke(bContext *C, const char *idname, ReportList *reports) * \{ */ void UI_popup_block_invoke_ex( - bContext *C, uiBlockCreateFunc func, void *arg, void (*arg_free)(void *arg), bool can_refresh) + bContext *C, uiBlockCreateFunc func, void *arg, uiFreeArgFunc arg_free, bool can_refresh) { wmWindow *window = CTX_wm_window(C); uiPopupBlockHandle *handle; @@ -608,10 +608,7 @@ void UI_popup_block_invoke_ex( WM_event_add_mousemove(window); } -void UI_popup_block_invoke(bContext *C, - uiBlockCreateFunc func, - void *arg, - void (*arg_free)(void *arg)) +void UI_popup_block_invoke(bContext *C, uiBlockCreateFunc func, void *arg, uiFreeArgFunc arg_free) { UI_popup_block_invoke_ex(C, func, arg, arg_free, true); } diff --git a/source/blender/editors/interface/interface_region_popup.c b/source/blender/editors/interface/interface_region_popup.c index 8135f5a203e..60e51244384 100644 --- a/source/blender/editors/interface/interface_region_popup.c +++ b/source/blender/editors/interface/interface_region_popup.c @@ -773,7 +773,7 @@ uiPopupBlockHandle *ui_popup_block_create(bContext *C, uiBlockCreateFunc create_func, uiBlockHandleCreateFunc handle_create_func, void *arg, - void (*arg_free)(void *arg)) + uiFreeArgFunc arg_free) { wmWindow *window = CTX_wm_window(C); uiBut *activebut = UI_context_active_but_get(C); diff --git a/source/blender/editors/interface/interface_templates.c b/source/blender/editors/interface/interface_templates.c index 2c58277293d..5232d4310a3 100644 --- a/source/blender/editors/interface/interface_templates.c +++ b/source/blender/editors/interface/interface_templates.c @@ -6205,7 +6205,7 @@ void uiTemplateList(uiLayout *layout, 0, TIP_("Double click to rename")); if ((dyntip_data = uilist_item_use_dynamic_tooltip(itemptr, item_dyntip_propname))) { - UI_but_func_tooltip_set(but, uilist_item_tooltip_func, dyntip_data); + UI_but_func_tooltip_set(but, uilist_item_tooltip_func, dyntip_data, MEM_freeN); } sub = uiLayoutRow(overlap, false); @@ -6762,7 +6762,7 @@ void uiTemplateRunningJobs(uiLayout *layout, bContext *C) NULL); but_progress->progress = progress; - UI_but_func_tooltip_set(&but_progress->but, progress_tooltip_func, tip_arg); + UI_but_func_tooltip_set(&but_progress->but, progress_tooltip_func, tip_arg, MEM_freeN); } if (!wm->is_interface_locked) { diff --git a/source/blender/editors/space_file/file_draw.c b/source/blender/editors/space_file/file_draw.c index 46d37d21756..d947d361fdf 100644 --- a/source/blender/editors/space_file/file_draw.c +++ b/source/blender/editors/space_file/file_draw.c @@ -25,6 +25,8 @@ #include <math.h> #include <string.h> +#include "MEM_guardedalloc.h" + #include "BLI_alloca.h" #include "BLI_blenlib.h" #include "BLI_fileops_types.h" @@ -165,7 +167,7 @@ static void file_draw_icon(const SpaceFile *sfile, const float a2 = dimmed ? 0.3f : 0.0f; but = uiDefIconBut( block, UI_BTYPE_LABEL, 0, icon, x, y, width, height, NULL, 0.0f, 0.0f, a1, a2, NULL); - UI_but_func_tooltip_set(but, file_draw_tooltip_func, BLI_strdup(path)); + UI_but_func_tooltip_set(but, file_draw_tooltip_func, BLI_strdup(path), MEM_freeN); if (drag) { /* TODO duplicated from file_draw_preview(). */ diff --git a/source/blender/editors/space_node/node_draw.cc b/source/blender/editors/space_node/node_draw.cc index b9dad060121..c15cc4240a5 100644 --- a/source/blender/editors/space_node/node_draw.cc +++ b/source/blender/editors/space_node/node_draw.cc @@ -1285,7 +1285,7 @@ static void node_add_error_message_button( 0, 0, nullptr); - UI_but_func_tooltip_set(but, node_errors_tooltip_fn, storage_pointer_alloc); + UI_but_func_tooltip_set(but, node_errors_tooltip_fn, storage_pointer_alloc, MEM_freeN); UI_block_emboss_set(node.block, UI_EMBOSS); } |