From abdc9cb3c9d5fcfa0f7f73a4d5b5c3272e2874e1 Mon Sep 17 00:00:00 2001 From: Austin Berenyi Date: Sat, 8 Apr 2023 15:45:59 -0600 Subject: [PATCH 1/2] UI: Adds expected behavior for text fields for Apple Devices --- .../editors/interface/interface_handlers.cc | 40 ++++++++++++++++--- 1 file changed, 34 insertions(+), 6 deletions(-) diff --git a/source/blender/editors/interface/interface_handlers.cc b/source/blender/editors/interface/interface_handlers.cc index 63a7af1e90a..a6ef4e3d3dd 100644 --- a/source/blender/editors/interface/interface_handlers.cc +++ b/source/blender/editors/interface/interface_handlers.cc @@ -3738,19 +3738,45 @@ static void ui_do_but_textedit( } break; case EVT_RIGHTARROWKEY: - ui_textedit_move(but, +#if defined(__APPLE__) + if (event->modifier == KM_OSKEY || event->modifier == (KM_OSKEY + KM_SHIFT)) +#else + if (event->modifier == KM_CTRL) +#endif + { + /*Allows for standard macOS cursor behavior for this key command*/ + if (event->type == EVT_RIGHTARROWKEY) { + ui_textedit_move(but, data, STRCUR_DIR_NEXT, event->modifier & KM_SHIFT, + ((event->modifier & KM_ALT) || (event->modifier & KM_CTRL)) ? STRCUR_JUMP_DELIM : STRCUR_JUMP_ALL); + } + } + else + ui_textedit_move(but, data, STRCUR_DIR_NEXT, event->modifier & KM_SHIFT, - (event->modifier & KM_CTRL) ? STRCUR_JUMP_DELIM : STRCUR_JUMP_NONE); + ((event->modifier & KM_ALT) || (event->modifier & KM_CTRL)) ? STRCUR_JUMP_DELIM : STRCUR_JUMP_NONE); retval = WM_UI_HANDLER_BREAK; break; case EVT_LEFTARROWKEY: - ui_textedit_move(but, +#if defined(__APPLE__) + if (event->modifier == KM_OSKEY || event->modifier == (KM_OSKEY + KM_SHIFT)) +#else + if (event->modifier == KM_CTRL) +#endif + { + /*Allows for standard macOS cursor behavior for this key command*/ + if (event->type == EVT_LEFTARROWKEY) { + ui_textedit_move(but, data, STRCUR_DIR_PREV, event->modifier & KM_SHIFT, + ((event->modifier & KM_ALT) || (event->modifier & KM_CTRL)) ? STRCUR_JUMP_DELIM : STRCUR_JUMP_ALL); + } + } + else + ui_textedit_move(but, data, STRCUR_DIR_PREV, event->modifier & KM_SHIFT, - (event->modifier & KM_CTRL) ? STRCUR_JUMP_DELIM : STRCUR_JUMP_NONE); + ((event->modifier & KM_ALT) || (event->modifier & KM_CTRL)) ? STRCUR_JUMP_DELIM : STRCUR_JUMP_NONE); retval = WM_UI_HANDLER_BREAK; break; case WHEELDOWNMOUSE: @@ -3796,7 +3822,8 @@ static void ui_do_but_textedit( changed = ui_textedit_delete(but, data, STRCUR_DIR_NEXT, - (event->modifier & KM_CTRL) ? STRCUR_JUMP_DELIM : + /*Allows for standard macOS cursor behavior for this key command*/ + ((event->modifier & KM_ALT) || (event->modifier & KM_CTRL)) ? STRCUR_JUMP_DELIM : STRCUR_JUMP_NONE); retval = WM_UI_HANDLER_BREAK; break; @@ -3805,7 +3832,8 @@ static void ui_do_but_textedit( changed = ui_textedit_delete(but, data, STRCUR_DIR_PREV, - (event->modifier & KM_CTRL) ? STRCUR_JUMP_DELIM : + /*Allows for standard macOS cursor behavior for this key command*/ + ((event->modifier & KM_ALT) || (event->modifier & KM_CTRL)) ? STRCUR_JUMP_DELIM : STRCUR_JUMP_NONE); retval = WM_UI_HANDLER_BREAK; break; -- 2.30.2 From 0d676ede92f70c028e53ddc931e72012136fe411 Mon Sep 17 00:00:00 2001 From: Austin Berenyi Date: Sat, 29 Apr 2023 08:24:24 -0600 Subject: [PATCH 2/2] Made changes based on suggestions from reviewers. Conditionals defining event modifiers are in correct place. --- .../editors/interface/interface_handlers.cc | 119 +++++++++--------- 1 file changed, 56 insertions(+), 63 deletions(-) diff --git a/source/blender/editors/interface/interface_handlers.cc b/source/blender/editors/interface/interface_handlers.cc index a6ef4e3d3dd..21ef84d0657 100644 --- a/source/blender/editors/interface/interface_handlers.cc +++ b/source/blender/editors/interface/interface_handlers.cc @@ -1918,6 +1918,7 @@ static void ui_selectcontext_apply(bContext *C, bool b; int i; float f; + char *str; PointerRNA p; } delta, min, max; @@ -1950,6 +1951,10 @@ static void ui_selectcontext_apply(bContext *C, /* Not a delta in fact. */ delta.p = RNA_property_pointer_get(&but->rnapoin, prop); } + else if (rna_type == PROP_STRING) { + /* Not a delta in fact. */ + delta.str = RNA_property_string_get_alloc(&but->rnapoin, prop, nullptr, 0, nullptr); + } # ifdef USE_ALLSELECT_LAYER_HACK /* make up for not having 'handle_layer_buttons' */ @@ -2023,9 +2028,16 @@ static void ui_selectcontext_apply(bContext *C, const PointerRNA other_value = delta.p; RNA_property_pointer_set(&lptr, lprop, other_value, nullptr); } + else if (rna_type == PROP_STRING) { + const char *other_value = delta.str; + RNA_property_string_set(&lptr, lprop, other_value); + } RNA_property_update(C, &lptr, prop); } + if (rna_type == PROP_STRING) { + MEM_freeN(delta.str); + } } } @@ -3146,12 +3158,14 @@ static bool ui_textedit_insert_buf(uiBut *but, return changed; } +#ifdef WITH_INPUT_IME static bool ui_textedit_insert_ascii(uiBut *but, uiHandleButtonData *data, const char ascii) { BLI_assert(isascii(ascii)); const char buf[2] = {ascii, '\0'}; return ui_textedit_insert_buf(but, data, buf, sizeof(buf) - 1); } +#endif static void ui_textedit_move(uiBut *but, uiHandleButtonData *data, @@ -3455,7 +3469,9 @@ static void ui_textedit_begin(bContext *C, uiBut *but, uiHandleButtonData *data) * #ui_but_update_view_for_active() to run after the layout is resolved. */ but->changed = true; } - else { + else if ((but->block->flag & UI_BLOCK_CLIP_EVENTS) == 0) { + /* Blocks with UI_BLOCK_CLIP_EVENTS are overlapping their region, so scrolling + * that region to ensure it is in view can't work and causes issues. #97530 */ UI_but_ensure_in_view(C, data->region, but); } @@ -3738,47 +3754,21 @@ static void ui_do_but_textedit( } break; case EVT_RIGHTARROWKEY: -#if defined(__APPLE__) - if (event->modifier == KM_OSKEY || event->modifier == (KM_OSKEY + KM_SHIFT)) + case EVT_LEFTARROWKEY: { +#ifdef __APPLE__ + eStrCursorJumpDirection direction = (event->type == EVT_RIGHTARROWKEY) ? STRCUR_DIR_NEXT : STRCUR_DIR_PREV; + eStrCursorJumpType jump = (event->modifier & KM_OSKEY) ? STRCUR_JUMP_ALL : ((event->modifier & KM_ALT) ? STRCUR_JUMP_DELIM : STRCUR_JUMP_NONE); #else - if (event->modifier == KM_CTRL) + eStrCursorJumpType jump = (event->modifier & KM_CTRL) ? STRCUR_JUMP_DELIM : STRCUR_JUMP_NONE; #endif - { - /*Allows for standard macOS cursor behavior for this key command*/ - if (event->type == EVT_RIGHTARROWKEY) { - ui_textedit_move(but, data, STRCUR_DIR_NEXT, event->modifier & KM_SHIFT, - ((event->modifier & KM_ALT) || (event->modifier & KM_CTRL)) ? STRCUR_JUMP_DELIM : STRCUR_JUMP_ALL); - } - } - else ui_textedit_move(but, - data, - STRCUR_DIR_NEXT, - event->modifier & KM_SHIFT, - ((event->modifier & KM_ALT) || (event->modifier & KM_CTRL)) ? STRCUR_JUMP_DELIM : STRCUR_JUMP_NONE); - retval = WM_UI_HANDLER_BREAK; - break; - case EVT_LEFTARROWKEY: -#if defined(__APPLE__) - if (event->modifier == KM_OSKEY || event->modifier == (KM_OSKEY + KM_SHIFT)) -#else - if (event->modifier == KM_CTRL) -#endif - { - /*Allows for standard macOS cursor behavior for this key command*/ - if (event->type == EVT_LEFTARROWKEY) { - ui_textedit_move(but, data, STRCUR_DIR_PREV, event->modifier & KM_SHIFT, - ((event->modifier & KM_ALT) || (event->modifier & KM_CTRL)) ? STRCUR_JUMP_DELIM : STRCUR_JUMP_ALL); - } - } - else - ui_textedit_move(but, - data, - STRCUR_DIR_PREV, - event->modifier & KM_SHIFT, - ((event->modifier & KM_ALT) || (event->modifier & KM_CTRL)) ? STRCUR_JUMP_DELIM : STRCUR_JUMP_NONE); - retval = WM_UI_HANDLER_BREAK; - break; + data, + direction, + event->modifier & KM_SHIFT, + jump); + retval = WM_UI_HANDLER_BREAK; + break; + } case WHEELDOWNMOUSE: case EVT_DOWNARROWKEY: if (data->searchbox) { @@ -3818,26 +3808,32 @@ static void ui_do_but_textedit( button_activate_state(C, but, BUTTON_STATE_EXIT); retval = WM_UI_HANDLER_BREAK; break; - case EVT_DELKEY: - changed = ui_textedit_delete(but, - data, - STRCUR_DIR_NEXT, - /*Allows for standard macOS cursor behavior for this key command*/ - ((event->modifier & KM_ALT) || (event->modifier & KM_CTRL)) ? STRCUR_JUMP_DELIM : - STRCUR_JUMP_NONE); - retval = WM_UI_HANDLER_BREAK; - break; - - case EVT_BACKSPACEKEY: - changed = ui_textedit_delete(but, - data, - STRCUR_DIR_PREV, - /*Allows for standard macOS cursor behavior for this key command*/ - ((event->modifier & KM_ALT) || (event->modifier & KM_CTRL)) ? STRCUR_JUMP_DELIM : - STRCUR_JUMP_NONE); - retval = WM_UI_HANDLER_BREAK; - break; - + case EVT_DELKEY: { +#ifdef __APPLE__ + eStrCursorJumpType jump = (event->modifier & KM_OSKEY) ? STRCUR_JUMP_ALL : ((event->modifier & KM_ALT) ? STRCUR_JUMP_DELIM : STRCUR_JUMP_NONE); +#else + eStrCursorJumpType jump = (event->modifier & KM_CTRL) ? STRCUR_JUMP_DELIM : STRCUR_JUMP_NONE; +#endif + changed = ui_textedit_delete(but, + data, + STRCUR_DIR_NEXT, + jump); + retval = WM_UI_HANDLER_BREAK; + break; + } + case EVT_BACKSPACEKEY: { +#ifdef __APPLE__ + eStrCursorJumpType jump = (event->modifier & KM_OSKEY) ? STRCUR_JUMP_ALL : ((event->modifier & KM_ALT) ? STRCUR_JUMP_DELIM : STRCUR_JUMP_NONE); +#else + eStrCursorJumpType jump = (event->modifier & KM_CTRL) ? STRCUR_JUMP_DELIM : STRCUR_JUMP_NONE; +#endif + changed = ui_textedit_delete(but, + data, + STRCUR_DIR_PREV, + jump); + retval = WM_UI_HANDLER_BREAK; + break; + } case EVT_AKEY: /* Ctrl-A: Select all. */ @@ -3956,9 +3952,6 @@ static void ui_do_but_textedit( else if (event->type == WM_IME_COMPOSITE_END) { changed = true; } -#else - /* Prevent the function from being unused. */ - (void)ui_textedit_insert_ascii; #endif if (changed) { @@ -8367,7 +8360,7 @@ static void button_activate_state(bContext *C, uiBut *but, uiHandleButtonState s */ if (state != BUTTON_STATE_TEXT_EDITING) { WM_report(RPT_INFO, - "Can't edit driven number value, see driver editor for the driver setup."); + "Can't edit driven number value, see driver editor for the driver setup"); } } -- 2.30.2