diff options
author | Campbell Barton <ideasman42@gmail.com> | 2011-10-10 05:11:40 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2011-10-10 05:11:40 +0400 |
commit | f6cd962df7c5f70570647e5b0cadcb632717ad3d (patch) | |
tree | b25407b680bc4932c95f5251a517dc4683fa6b52 | |
parent | a0469c70304df5d1a19993d554a63c83949af4d1 (diff) |
bug #28848 also mentions Ctrl+Backspace isnt working.
added support for ctrl+backspace/delete.
-rw-r--r-- | source/blender/editors/interface/interface_handlers.c | 53 |
1 files changed, 41 insertions, 12 deletions
diff --git a/source/blender/editors/interface/interface_handlers.c b/source/blender/editors/interface/interface_handlers.c index 9ad828f91c1..6417a6b58dd 100644 --- a/source/blender/editors/interface/interface_handlers.c +++ b/source/blender/editors/interface/interface_handlers.c @@ -1481,13 +1481,12 @@ static void ui_textedit_move(uiBut *but, uiHandleButtonData *data, int direction } } -static int ui_textedit_delete(uiBut *but, uiHandleButtonData *data, int direction, int all) +static int ui_textedit_delete(uiBut *but, uiHandleButtonData *data, int direction, const int all, const int jump) { - char *str; - int len, x, changed= 0; + char *str= data->str; + const int len= strlen(str); - str= data->str; - len= strlen(str); + int x, changed= 0; if(all) { if(len) changed=1; @@ -1499,9 +1498,24 @@ static int ui_textedit_delete(uiBut *but, uiHandleButtonData *data, int directio changed= ui_textedit_delete_selection(but, data); } else if(but->pos>=0 && but->pos<len) { + int step; + + if (jump) { + x = but->pos; + step= 0; + while(x < len) { + x++; + step++; + if(test_special_char(str[x])) break; + } + } + else { + step= 1; + } + for(x=but->pos; x<len; x++) - str[x]= str[x+1]; - str[len-1]='\0'; + str[x]= str[x+step]; + str[len-step]='\0'; changed= 1; } } @@ -1511,11 +1525,26 @@ static int ui_textedit_delete(uiBut *but, uiHandleButtonData *data, int directio changed= ui_textedit_delete_selection(but, data); } else if(but->pos>0) { + int step; + + if (jump) { + x = but->pos; + step= 0; + while(x > 0) { + x--; + step++; + if((step > 1) && test_special_char(str[x])) break; + } + } + else { + step= 1; + } + for(x=but->pos; x<len; x++) - str[x-1]= str[x]; - str[len-1]='\0'; + str[x-step]= str[x]; + str[len-step]='\0'; - but->pos--; + but->pos -= step; changed= 1; } } @@ -1846,12 +1875,12 @@ static void ui_do_but_textedit(bContext *C, uiBlock *block, uiBut *but, uiHandle retval= WM_UI_HANDLER_BREAK; break; case DELKEY: - changed= ui_textedit_delete(but, data, 1, 0); + changed= ui_textedit_delete(but, data, 1, 0, event->ctrl); retval= WM_UI_HANDLER_BREAK; break; case BACKSPACEKEY: - changed= ui_textedit_delete(but, data, 0, event->shift); + changed= ui_textedit_delete(but, data, 0, event->shift, event->ctrl); retval= WM_UI_HANDLER_BREAK; break; |