bug #28848 also mentions Ctrl+Backspace isnt working.

added support for ctrl+backspace/delete.
This commit is contained in:
Campbell Barton
2011-10-10 01:11:40 +00:00
parent a0469c7030
commit f6cd962df7

View File

@@ -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; char *str= data->str;
int len, x, changed= 0; const int len= strlen(str);
str= data->str; int x, changed= 0;
len= strlen(str);
if(all) { if(all) {
if(len) changed=1; 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); changed= ui_textedit_delete_selection(but, data);
} }
else if(but->pos>=0 && but->pos<len) { 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++) for(x=but->pos; x<len; x++)
str[x]= str[x+1]; str[x]= str[x+step];
str[len-1]='\0'; str[len-step]='\0';
changed= 1; changed= 1;
} }
} }
@@ -1511,11 +1525,26 @@ static int ui_textedit_delete(uiBut *but, uiHandleButtonData *data, int directio
changed= ui_textedit_delete_selection(but, data); changed= ui_textedit_delete_selection(but, data);
} }
else if(but->pos>0) { else if(but->pos>0) {
for(x=but->pos; x<len; x++) int step;
str[x-1]= str[x];
str[len-1]='\0';
but->pos--; 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-step]= str[x];
str[len-step]='\0';
but->pos -= step;
changed= 1; changed= 1;
} }
} }
@@ -1846,12 +1875,12 @@ static void ui_do_but_textedit(bContext *C, uiBlock *block, uiBut *but, uiHandle
retval= WM_UI_HANDLER_BREAK; retval= WM_UI_HANDLER_BREAK;
break; break;
case DELKEY: 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; retval= WM_UI_HANDLER_BREAK;
break; break;
case BACKSPACEKEY: 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; retval= WM_UI_HANDLER_BREAK;
break; break;