tweak text delimiters for button ctrl + left/right, ctrl+backspace/del
authorCampbell Barton <ideasman42@gmail.com>
Wed, 7 Mar 2012 13:35:32 +0000 (13:35 +0000)
committerCampbell Barton <ideasman42@gmail.com>
Wed, 7 Mar 2012 13:35:32 +0000 (13:35 +0000)
now theres always a single step before skipping delimiters, this means the skipping actions always advance by more then 1 char (which matches the text editor).

source/blender/editors/interface/interface_handlers.c

index 0496c8c5c366b02cdb67b9df457aee2c4327781d..3d9295b479ab07c2ef20fac4cf7c092a7a27a8c3 100644 (file)
@@ -1329,37 +1329,35 @@ static void ui_textedit_step_utf8(const char *str, size_t maxlen,
 {
        const short pos_prev= *pos;
 
-       if(direction) { /* right*/
-               if(jump != BUTTON_EDIT_JUMP_NONE) {
+       if (direction) { /* right */
+               ui_textedit_step_next_utf8(str, maxlen, pos);
+
+               if (jump != BUTTON_EDIT_JUMP_NONE) {
                        const uiButtonDelimType is_special= (*pos) < maxlen ? test_special_char(str[(*pos)]) : BUTTON_DELIM_NONE;
                        /* jump between special characters (/,\,_,-, etc.),
                         * look at function test_special_char() for complete
                         * list of special character, ctr -> */
-                       while((*pos) < maxlen) {
+                       while ((*pos) < maxlen) {
                                if (ui_textedit_step_next_utf8(str, maxlen, pos)) {
-                                       if((jump != BUTTON_EDIT_JUMP_ALL) && (is_special != test_special_char(str[(*pos)]))) break;
+                                       if ((jump != BUTTON_EDIT_JUMP_ALL) && (is_special != test_special_char(str[(*pos)]))) break;
                                }
                                else {
                                        break; /* unlikely but just incase */
                                }
                        }
                }
-               else {
-                       ui_textedit_step_next_utf8(str, maxlen, pos);
-               }
        }
        else { /* left */
+               ui_textedit_step_prev_utf8(str, maxlen, pos);
+
                if(jump != BUTTON_EDIT_JUMP_NONE) {
                        const uiButtonDelimType is_special= (*pos) > 1 ? test_special_char(str[(*pos) - 1]) : BUTTON_DELIM_NONE;
-                       /* left only: compensate for index/change in direction */
-                       ui_textedit_step_prev_utf8(str, maxlen, pos);
-
                        /* jump between special characters (/,\,_,-, etc.),
                         * look at function test_special_char() for complete
                         * list of special character, ctr -> */
                        while ((*pos) > 0) {
                                if (ui_textedit_step_prev_utf8(str, maxlen, pos)) {
-                                       if((jump != BUTTON_EDIT_JUMP_ALL) && (is_special != test_special_char(str[(*pos)]))) break;
+                                       if ((jump != BUTTON_EDIT_JUMP_ALL) && (is_special != test_special_char(str[(*pos)]))) break;
                                }
                                else {
                                        break;
@@ -1367,13 +1365,10 @@ static void ui_textedit_step_utf8(const char *str, size_t maxlen,
                        }
 
                        /* left only: compensate for index/change in direction */
-                       if(((*pos) != 0) && ABS(pos_prev - (*pos)) > 1) {
+                       if (((*pos) != 0) && ABS(pos_prev - (*pos)) >= 1) {
                                ui_textedit_step_next_utf8(str, maxlen, pos);
                        }
                }
-               else {
-                       ui_textedit_step_prev_utf8(str, maxlen, pos);
-               }
        }
 }