From 57b5852bc8b8188e73e2ffd7c05aaa3f409c3025 Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Thu, 14 Mar 2019 18:27:17 +0100 Subject: Fix T62120: number button editing outside of soft max range jumps. --- source/blender/editors/interface/interface.c | 4 ++-- source/blender/editors/interface/interface_handlers.c | 6 ++++++ source/blender/editors/interface/interface_intern.h | 2 +- 3 files changed, 9 insertions(+), 3 deletions(-) (limited to 'source/blender') diff --git a/source/blender/editors/interface/interface.c b/source/blender/editors/interface/interface.c index efabacd6566..11c2161315e 100644 --- a/source/blender/editors/interface/interface.c +++ b/source/blender/editors/interface/interface.c @@ -2888,7 +2888,7 @@ void UI_block_theme_style_set(uiBlock *block, char theme_style) * \param validate: When set, this function may change the button value. * Otherwise treat the button value as read-only. */ -void ui_but_update_ex(uiBut *but, const bool validate) +static void ui_but_update_ex(uiBut *but, const bool validate) { /* if something changed in the button */ double value = UI_BUT_VALUE_UNSET; @@ -2897,7 +2897,7 @@ void ui_but_update_ex(uiBut *but, const bool validate) ui_but_update_select_flag(but, &value); /* only update soft range while not editing */ - if (!(but->editval || but->editstr || but->editvec)) { + if (!ui_but_is_editing(but)) { if ((but->rnaprop != NULL) || (but->poin && (but->pointype & UI_BUT_POIN_TYPES))) { diff --git a/source/blender/editors/interface/interface_handlers.c b/source/blender/editors/interface/interface_handlers.c index 786644bcf40..3ebbf3ef899 100644 --- a/source/blender/editors/interface/interface_handlers.c +++ b/source/blender/editors/interface/interface_handlers.c @@ -6934,6 +6934,12 @@ bool ui_but_is_active(ARegion *ar) return (ui_but_find_active_in_region(ar) != NULL); } +bool ui_but_is_editing(uiBut *but) +{ + uiHandleButtonData *data = but->active; + return (data && ELEM(data->state, BUTTON_STATE_TEXT_EDITING, BUTTON_STATE_NUM_EDITING)); +} + /* is called by notifier */ void UI_screen_free_active_but(const bContext *C, bScreen *screen) { diff --git a/source/blender/editors/interface/interface_intern.h b/source/blender/editors/interface/interface_intern.h index f0dc798e08f..10b64990aad 100644 --- a/source/blender/editors/interface/interface_intern.h +++ b/source/blender/editors/interface/interface_intern.h @@ -508,7 +508,6 @@ extern uiButExtraIconType ui_but_icon_extra_get(uiBut *but); extern void ui_but_default_set(struct bContext *C, const bool all, const bool use_afterfunc); -extern void ui_but_update_ex(uiBut *but, const bool validate); extern void ui_but_update(uiBut *but); extern void ui_but_update_edited(uiBut *but); extern bool ui_but_is_float(const uiBut *but) ATTR_WARN_UNUSED_RESULT; @@ -687,6 +686,7 @@ extern void ui_but_execute_begin(struct bContext *C, struct ARegion *ar, uiBut * extern void ui_but_execute_end(struct bContext *C, struct ARegion *ar, uiBut *but, void *active_back); extern void ui_but_active_free(const struct bContext *C, uiBut *but); extern bool ui_but_is_active(struct ARegion *ar) ATTR_WARN_UNUSED_RESULT; +extern bool ui_but_is_editing(uiBut *but); extern int ui_but_menu_direction(uiBut *but); extern void ui_but_text_password_hide(char password_str[UI_MAX_DRAW_STR], uiBut *but, const bool restore); extern uiBut *ui_but_find_select_in_enum(uiBut *but, int direction); -- cgit v1.2.3