diff options
Diffstat (limited to 'source/blender/editors/interface/interface_handlers.c')
-rw-r--r-- | source/blender/editors/interface/interface_handlers.c | 42 |
1 files changed, 20 insertions, 22 deletions
diff --git a/source/blender/editors/interface/interface_handlers.c b/source/blender/editors/interface/interface_handlers.c index 7eda0920534..9d99409a741 100644 --- a/source/blender/editors/interface/interface_handlers.c +++ b/source/blender/editors/interface/interface_handlers.c @@ -28,6 +28,7 @@ #include <math.h> #include <stdlib.h> #include <string.h> +#include <ctype.h> #include "MEM_guardedalloc.h" @@ -43,7 +44,6 @@ #include "BKE_idprop.h" #include "BKE_report.h" #include "BKE_texture.h" -#include "BKE_utildefines.h" #include "ED_screen.h" #include "ED_util.h" @@ -1155,7 +1155,7 @@ static int ui_textedit_delete_selection(uiBut *but, uiHandleButtonData *data) int len= strlen(str); int change= 0; if(but->selsta != but->selend && len) { - memmove( str+but->selsta, str+but->selend, len+1 ); + memmove( str+but->selsta, str+but->selend, len-but->selsta+1 ); change= 1; } @@ -1535,6 +1535,19 @@ static void ui_textedit_begin(bContext *C, uiBut *but, uiHandleButtonData *data) data->str= MEM_callocN(sizeof(char)*data->maxlen + 1, "textedit str"); ui_get_but_string(but, data->str, data->maxlen); + if(ELEM3(but->type, NUM, NUMABS, NUMSLI)) { + /* XXX: we dont have utf editing yet so for numbers its best to strip out utf chars + * this is so the deg' synbol isnt included in number editing fields: bug 22274 */ + int i; + for(i=0; data->str[i]; i++) { + if(!isascii(data->str[i])) { + data->str[i]= '\0'; + break; + } + } + } + + data->origstr= BLI_strdup(data->str); data->selextend= 0; data->selstartx= 0; @@ -3237,24 +3250,8 @@ static int ui_do_but_COLORBAND(bContext *C, uiBlock *block, uiBut *but, uiHandle if(event->ctrl) { /* insert new key on mouse location */ - if(coba->tot < MAXCOLORBAND-1) { - float pos= ((float)(mx - but->x1))/(but->x2-but->x1); - float col[4]; - - do_colorband(coba, pos, col); /* executes it */ - - coba->tot++; - coba->cur= coba->tot-1; - - coba->data[coba->cur].r= col[0]; - coba->data[coba->cur].g= col[1]; - coba->data[coba->cur].b= col[2]; - coba->data[coba->cur].a= col[3]; - coba->data[coba->cur].pos= pos; - - ui_colorband_update(coba); - } - + float pos= ((float)(mx - but->x1))/(but->x2-but->x1); + colorband_element_add(coba, pos); button_activate_state(C, but, BUTTON_STATE_EXIT); } else { @@ -4265,7 +4262,7 @@ static int ui_do_button(bContext *C, uiBlock *block, uiBut *but, wmEvent *event) return WM_UI_HANDLER_BREAK; } /* reset to default */ - else if(event->type == ZEROKEY && event->val == KM_PRESS) { + else if(ELEM(event->type, ZEROKEY,PAD0) && event->val == KM_PRESS) { if (!(ELEM3(but->type, HSVCIRCLE, HSVCUBE, HISTOGRAM))) ui_set_but_default(C, but); } @@ -5192,7 +5189,8 @@ static void ui_handle_button_return_submenu(bContext *C, wmEvent *event, uiBut * button_activate_state(C, but, BUTTON_STATE_HIGHLIGHT); } else { - if(event->type != MOUSEMOVE) { + if (ISKEYBOARD(event->type)) { + /* keyboard menu hierarchy navigation, going back to previous level */ but->active->used_mouse= 0; button_activate_state(C, but, BUTTON_STATE_HIGHLIGHT); } |