diff options
Diffstat (limited to 'source/blender/editors/interface/interface_handlers.c')
-rw-r--r-- | source/blender/editors/interface/interface_handlers.c | 51 |
1 files changed, 11 insertions, 40 deletions
diff --git a/source/blender/editors/interface/interface_handlers.c b/source/blender/editors/interface/interface_handlers.c index c098b5c79a1..377e55e7299 100644 --- a/source/blender/editors/interface/interface_handlers.c +++ b/source/blender/editors/interface/interface_handlers.c @@ -334,7 +334,6 @@ typedef struct uiHandleButtonData { int retval; /* booleans (could be made into flags) */ bool cancel, escapecancel; - bool skip_undo_push; bool applied, applied_interactive; bool changed_cursor; wmTimer *flashtimer; @@ -821,9 +820,7 @@ static void ui_apply_but_func(bContext *C, uiBut *but) /* typically call ui_apply_but_undo(), ui_apply_but_autokey() */ static void ui_apply_but_undo(uiBut *but) { - const bool force_skip_undo = (but->active && but->active->skip_undo_push); - - if (but->flag & UI_BUT_UNDO && !force_skip_undo) { + if (but->flag & UI_BUT_UNDO) { const char *str = NULL; size_t str_len_clip = SIZE_MAX - 1; bool skip_undo = false; @@ -2874,8 +2871,7 @@ void ui_but_active_string_clear_and_exit(bContext *C, uiBut *but) but->active->str[0] = 0; ui_apply_but_TEX(C, but, but->active); - /* use onfree event so undo is handled by caller and apply is already done above */ - button_activate_exit((bContext *)C, but, but->active, false, true); + button_activate_state(C, but, BUTTON_STATE_EXIT); } static void ui_textedit_string_ensure_max_length(uiBut *but, uiHandleButtonData *data, int maxlen) @@ -4020,38 +4016,16 @@ static void ui_numedit_apply(bContext *C, uiBlock *block, uiBut *but, uiHandleBu ED_region_tag_redraw(data->region); } -static void ui_but_extra_operator_icon_apply_func(uiBut *but, uiButExtraOpIcon *op_icon) +static void ui_but_extra_operator_icon_apply(bContext *C, uiBut *but, uiButExtraOpIcon *op_icon) { - if (ui_afterfunc_check(but->block, but)) { - uiAfterFunc *after = ui_afterfunc_new(); - - after->optype = op_icon->optype_params->optype; - after->opcontext = op_icon->optype_params->opcontext; - after->opptr = op_icon->optype_params->opptr; - - if (but->context) { - after->context = CTX_store_copy(but->context); - } - - /* Ownership moved, don't let the UI code free it. */ - op_icon->optype_params->opptr = NULL; + if (but->active->interactive) { + ui_apply_but(C, but->block, but, but->active, true); } -} - -static void ui_but_extra_operator_icon_apply(bContext *C, - uiBut *but, - uiHandleButtonData *data, - uiButExtraOpIcon *op_icon) -{ button_activate_state(C, but, BUTTON_STATE_EXIT); - ui_apply_but(C, but->block, but, data, true); - - data->postbut = but; - data->posttype = BUTTON_ACTIVATE_OVER; - /* Leave undo up to the operator. */ - data->skip_undo_push = true; - - ui_but_extra_operator_icon_apply_func(but, op_icon); + WM_operator_name_call_ptr(C, + op_icon->optype_params->optype, + op_icon->optype_params->opcontext, + op_icon->optype_params->opptr); /* Force recreation of extra operator icons (pseudo update). */ ui_but_extra_operator_icons_free(but); @@ -4250,7 +4224,7 @@ static bool ui_do_but_extra_operator_icon(bContext *C, ED_region_tag_redraw(data->region); button_tooltip_timer_reset(C, but); - ui_but_extra_operator_icon_apply(C, but, data, op_icon); + ui_but_extra_operator_icon_apply(C, but, op_icon); /* Note: 'but', 'data' may now be freed, don't access. */ return true; @@ -7885,10 +7859,7 @@ static ARegion *ui_but_tooltip_init( uiBut *but = UI_region_active_but_get(region); *r_exit_on_event = false; if (but) { - uiButExtraOpIcon *extra_icon = ui_but_extra_operator_icon_mouse_over_get( - but, but->active, CTX_wm_window(C)->eventstate); - - return UI_tooltip_create_from_button_or_extra_icon(C, region, but, extra_icon, is_label); + return UI_tooltip_create_from_button(C, region, but, is_label); } return NULL; } |