Index: blender/intern/ghost/GHOST_Types.h =================================================================== --- blender/intern/ghost/GHOST_Types.h (revisión: 28327) +++ blender/intern/ghost/GHOST_Types.h (copia de trabajo) @@ -457,8 +457,8 @@ typedef struct { /** The key code. */ GHOST_TKey key; - /** The ascii code for the key event ('\0' if none). */ - char ascii; + /** The unicode code for the key event ('\0' if none). */ + wchar_t unicode; } GHOST_TEventKeyData; typedef struct { Index: blender/intern/ghost/intern/GHOST_SystemWin32.cpp =================================================================== --- blender/intern/ghost/intern/GHOST_SystemWin32.cpp (revisión: 28327) +++ blender/intern/ghost/intern/GHOST_SystemWin32.cpp (copia de trabajo) @@ -587,14 +587,14 @@ GHOST_EventKey* event; if (key != GHOST_kKeyUnknown) { MSG keyMsg; - char ascii = '\0'; + wchar_t unicode = '\0'; /* Eat any character related messages */ - if (::PeekMessage(&keyMsg, NULL, WM_CHAR, WM_SYSDEADCHAR, PM_REMOVE)) { - ascii = (char) keyMsg.wParam; + if (::PeekMessageW(&keyMsg, NULL, WM_CHAR, WM_CHAR, PM_REMOVE)) { + unicode = (wchar_t) keyMsg.wParam; } - event = new GHOST_EventKey(getSystem()->getMilliSeconds(), keyDown ? GHOST_kEventKeyDown: GHOST_kEventKeyUp, window, key, ascii); + event = new GHOST_EventKey(getSystem()->getMilliSeconds(), keyDown ? GHOST_kEventKeyDown: GHOST_kEventKeyUp, window, key, unicode); } else { event = 0; Index: blender/intern/ghost/intern/GHOST_EventKey.h =================================================================== --- blender/intern/ghost/intern/GHOST_EventKey.h (revisión: 28327) +++ blender/intern/ghost/intern/GHOST_EventKey.h (copia de trabajo) @@ -53,7 +53,7 @@ : GHOST_Event(msec, type, window) { m_keyEventData.key = key; - m_keyEventData.ascii = '\0'; + m_keyEventData.unicode = '\0'; m_data = &m_keyEventData; } @@ -63,7 +63,7 @@ * @param type The type of key event. * @param key The key code of the key. * @param ascii The ascii code for the key event. - */ + GHOST_EventKey(GHOST_TUns64 msec, GHOST_TEventType type, GHOST_IWindow* window, GHOST_TKey key, char ascii) : GHOST_Event(msec, type, window) { @@ -71,6 +71,21 @@ m_keyEventData.ascii = ascii; m_data = &m_keyEventData; } +*/ + /** + * Constructor. + * @param msec The time this event was generated. + * @param type The type of key event. + * @param key The key code of the key. + * @param unicode The unicode code for the key event. + */ + GHOST_EventKey(GHOST_TUns64 msec, GHOST_TEventType type, GHOST_IWindow* window, GHOST_TKey key, wchar_t unicode) + : GHOST_Event(msec, type, window) + { + m_keyEventData.key = key; + m_keyEventData.unicode = unicode; + m_data = &m_keyEventData; + } protected: /** The key event data. */ Index: blender/source/blender/blenkernel/intern/idprop.c =================================================================== --- blender/source/blender/blenkernel/intern/idprop.c (revisión: 28327) +++ blender/source/blender/blenkernel/intern/idprop.c (copia de trabajo) @@ -677,7 +677,7 @@ } case IDP_STRING: { - char *st = val.str; + wchar_t *st = val.str; int stlen; prop = MEM_callocN(sizeof(IDProperty), "IDProperty string"); @@ -686,7 +686,7 @@ prop->totallen = DEFAULT_ALLOC_FOR_NULL_STRINGS; prop->len = 1; /*NULL string, has len of 1 to account for null byte.*/ } else { - stlen = strlen(st) + 1; + stlen = wcsleninu8(st) + 1; prop->data.pointer = MEM_callocN(stlen, "id property string 2"); prop->len = prop->totallen = stlen; strcpy(prop->data.pointer, st); Index: blender/source/blender/makesrna/intern/rna_wm.c =================================================================== --- blender/source/blender/makesrna/intern/rna_wm.c (revisión: 28327) +++ blender/source/blender/makesrna/intern/rna_wm.c (copia de trabajo) @@ -364,17 +364,17 @@ return rna_pointer_inherit_refine(ptr, ot->srna, otmacro->properties); } -static void rna_Event_ascii_get(PointerRNA *ptr, char *value) +static void rna_Event_unicode_get(PointerRNA *ptr, wchar_t *value) { wmEvent *event= (wmEvent*)ptr->id.data; - value[0]= event->ascii; + value[0]= event->unicode; value[1]= '\0'; } -static int rna_Event_ascii_length(PointerRNA *ptr) +static int rna_Event_unicode_length(PointerRNA *ptr) { wmEvent *event= (wmEvent*)ptr->id.data; - return (event->ascii)? 1 : 0; + return (event->unicode)? 1 : 0; } static void rna_Window_screen_set(PointerRNA *ptr, PointerRNA value) @@ -1141,10 +1141,10 @@ RNA_define_verify_sdna(0); // not in sdna /* strings */ - prop= RNA_def_property(srna, "ascii", PROP_STRING, PROP_NONE); + prop= RNA_def_property(srna, "unicode", PROP_STRING, PROP_NONE); RNA_def_property_clear_flag(prop, PROP_EDITABLE); - RNA_def_property_string_funcs(prop, "rna_Event_ascii_get", "rna_Event_ascii_length", NULL); - RNA_def_property_ui_text(prop, "ASCII", "Single ASCII character for this event"); + RNA_def_property_string_funcs(prop, "rna_Event_unicode_get", "rna_Event_unicode_length", NULL); + RNA_def_property_ui_text(prop, "UNICODE", "Single UNICODE character for this event"); /* enums */ Index: blender/source/blender/makesrna/intern/rna_access.c =================================================================== --- blender/source/blender/makesrna/intern/rna_access.c (revisión: 28327) +++ blender/source/blender/makesrna/intern/rna_access.c (copia de trabajo) @@ -1763,7 +1763,7 @@ } } -void RNA_property_string_get(PointerRNA *ptr, PropertyRNA *prop, char *value) +void RNA_property_string_get(PointerRNA *ptr, PropertyRNA *prop, wchar_t *value) { StringPropertyRNA *sprop= (StringPropertyRNA*)prop; IDProperty *idprop; @@ -1807,7 +1807,7 @@ return strlen(sprop->defaultvalue); } -void RNA_property_string_set(PointerRNA *ptr, PropertyRNA *prop, const char *value) +void RNA_property_string_set(PointerRNA *ptr, PropertyRNA *prop, const wchar_t *value) { StringPropertyRNA *sprop= (StringPropertyRNA*)prop; IDProperty *idprop; @@ -1820,7 +1820,7 @@ IDPropertyTemplate val = {0}; IDProperty *group; - val.str= (char*)value; + val.str= (wchar_t*)value; group= RNA_struct_idproperties(ptr, 1); if(group) @@ -3399,7 +3399,7 @@ return 0; } -void RNA_string_get(PointerRNA *ptr, const char *name, char *value) +void RNA_string_get(PointerRNA *ptr, const char *name, wchar_t *value) { PropertyRNA *prop= RNA_struct_find_property(ptr, name); @@ -3435,7 +3435,7 @@ } } -void RNA_string_set(PointerRNA *ptr, const char *name, const char *value) +void RNA_string_set(PointerRNA *ptr, const char *name, const wchar_t *value) { PropertyRNA *prop= RNA_struct_find_property(ptr, name); Index: blender/source/blender/makesrna/RNA_access.h =================================================================== --- blender/source/blender/makesrna/RNA_access.h (revisión: 28327) +++ blender/source/blender/makesrna/RNA_access.h (copia de trabajo) @@ -26,6 +26,7 @@ #define RNA_ACCESS #include +#include #include "DNA_listBase.h" #include "RNA_types.h" @@ -708,9 +709,9 @@ void RNA_property_float_get_default_array(PointerRNA *ptr, PropertyRNA *prop, float *values); float RNA_property_float_get_default_index(PointerRNA *ptr, PropertyRNA *prop, int index); -void RNA_property_string_get(PointerRNA *ptr, PropertyRNA *prop, char *value); +void RNA_property_string_get(PointerRNA *ptr, PropertyRNA *prop, wchar_t *value); char *RNA_property_string_get_alloc(PointerRNA *ptr, PropertyRNA *prop, char *fixedbuf, int fixedlen); -void RNA_property_string_set(PointerRNA *ptr, PropertyRNA *prop, const char *value); +void RNA_property_string_set(PointerRNA *ptr, PropertyRNA *prop, const wchar_t *value); int RNA_property_string_length(PointerRNA *ptr, PropertyRNA *prop); void RNA_property_string_get_default(PointerRNA *ptr, PropertyRNA *prop, char *value); char *RNA_property_string_get_default_alloc(PointerRNA *ptr, PropertyRNA *prop, char *fixedbuf, int fixedlen); @@ -825,7 +826,7 @@ void RNA_string_get(PointerRNA *ptr, const char *name, char *value); char *RNA_string_get_alloc(PointerRNA *ptr, const char *name, char *fixedbuf, int fixedlen); int RNA_string_length(PointerRNA *ptr, const char *name); -void RNA_string_set(PointerRNA *ptr, const char *name, const char *value); +void RNA_string_set(PointerRNA *ptr, const char *name, const wchar_t *value); PointerRNA RNA_pointer_get(PointerRNA *ptr, const char *name); void RNA_pointer_set(PointerRNA *ptr, const char *name, PointerRNA ptr_value); Index: blender/source/blender/windowmanager/intern/wm_window.c =================================================================== --- blender/source/blender/windowmanager/intern/wm_window.c (revisión: 28327) +++ blender/source/blender/windowmanager/intern/wm_window.c (copia de trabajo) @@ -594,7 +594,7 @@ // window_handle(win, INPUTCHANGE, win->active); /* bad ghost support for modifier keys... so on activate we set the modifiers again */ - kdata.ascii= 0; + kdata.unicode = 0; if (win->eventstate->shift && !query_qual('s')) { kdata.key= GHOST_kKeyLeftShift; wm_event_add_ghostevent(wm, win, GHOST_kEventKeyUp, time, &kdata); Index: blender/source/blender/windowmanager/intern/wm_event_system.c =================================================================== --- blender/source/blender/windowmanager/intern/wm_event_system.c (revisión: 28327) +++ blender/source/blender/windowmanager/intern/wm_event_system.c (copia de trabajo) @@ -991,7 +991,7 @@ /* the matching rules */ if(kmitype==KM_TEXTINPUT) - if(ISTEXTINPUT(winevent->type) && winevent->ascii) return 1; + if(ISTEXTINPUT(winevent->type) && winevent->unicode) return 1; if(kmitype!=KM_ANY) if(winevent->type!=kmitype) return 0; @@ -2220,12 +2220,12 @@ case GHOST_kEventKeyUp: { GHOST_TEventKeyData *kd= customdata; event.type= convert_key(kd->key); - event.ascii= kd->ascii; + event.unicode= kd->unicode; event.val= (type==GHOST_kEventKeyDown)?KM_PRESS:KM_RELEASE; /* exclude arrow keys, esc, etc from text input */ - if(type==GHOST_kEventKeyUp || (event.ascii<32 && event.ascii>0)) - event.ascii= '\0'; + if(type==GHOST_kEventKeyUp || (event.unicode<32 && event.unicode>0)) + event.unicode= '\0'; /* modifiers */ if (event.type==LEFTSHIFTKEY || event.type==RIGHTSHIFTKEY) { Index: blender/source/blender/windowmanager/WM_types.h =================================================================== --- blender/source/blender/windowmanager/WM_types.h (revisión: 28327) +++ blender/source/blender/windowmanager/WM_types.h (copia de trabajo) @@ -319,8 +319,7 @@ short val; /* press, release, scrollvalue */ short x, y; /* mouse pointer position, screen coord */ short mval[2]; /* region mouse position, name convention pre 2.5 :) */ - short unicode; /* future, ghost? */ - char ascii; /* from ghost */ + short unicode; /* from ghost */ char pad; /* previous state */ Index: blender/source/blender/editors/curve/editfont.c =================================================================== --- blender/source/blender/editors/curve/editfont.c (revisión: 28327) +++ blender/source/blender/editors/curve/editfont.c (copia de trabajo) @@ -1260,7 +1260,7 @@ Curve *cu= obedit->data; EditFont *ef= cu->editfont; static int accentcode= 0; - uintptr_t ascii = evt->ascii; + uintptr_t ascii = evt->unicode; int alt= evt->alt, shift= evt->shift, ctrl= evt->ctrl; int event= evt->type, val= evt->val; wchar_t inserted_text[2]= {0}; Index: blender/source/blender/editors/space_text/text_ops.c =================================================================== --- blender/source/blender/editors/space_text/text_ops.c (revisión: 28327) +++ blender/source/blender/editors/space_text/text_ops.c (copia de trabajo) @@ -2227,7 +2227,7 @@ if(!(mval[0]>2 && mval[0]<60 && mval[1]>2 && mval[1]winy-2)) return OPERATOR_PASS_THROUGH; - if(!(event->ascii>='0' && event->ascii<='9')) + if(!(event->unicode>='0' && event->unicode<='9')) return OPERATOR_PASS_THROUGH; time = PIL_check_seconds_timer(); @@ -2235,7 +2235,7 @@ jump_to= 0; jump_to *= 10; - jump_to += (int)(event->ascii-'0'); + jump_to += (int)(event->unicode-'0'); txt_move_toline(text, jump_to-1, 0); last_jump= time; @@ -2294,7 +2294,6 @@ static int insert_invoke(bContext *C, wmOperator *op, wmEvent *event) { - char str[2]; int ret; /* XXX old code from winqreadtextspace, is it still needed somewhere? */ /* smartass code to prevent the CTRL/ALT events below from not working! */ @@ -2302,8 +2301,7 @@ if(!ispunct(ascii)) ascii= 0;*/ - str[0]= event->ascii; - str[1]= '\0'; + wchar_t * str[2] = {event->unicode,'\0'}; RNA_string_set(op->ptr, "text", str); ret = insert_exec(C, op); @@ -2311,8 +2309,9 @@ /* run the script while editing, evil but useful */ if(ret==OPERATOR_FINISHED && CTX_wm_space_text(C)->live_edit) run_script_exec(C, op); - + return ret; + } void TEXT_OT_insert(wmOperatorType *ot) Index: blender/source/blender/editors/space_console/console_ops.c =================================================================== --- blender/source/blender/editors/space_console/console_ops.c (revisión: 28327) +++ blender/source/blender/editors/space_console/console_ops.c (copia de trabajo) @@ -385,8 +385,10 @@ static int insert_invoke(bContext *C, wmOperator *op, wmEvent *event) { + + wchar_t * str[2] = {event->unicode,'\0'}; + if(!RNA_property_is_set(op->ptr, "text")) { - char str[2] = {event->ascii, '\0'}; RNA_string_set(op->ptr, "text", str); } return insert_exec(C, op); Index: blender/source/blender/editors/armature/poselib.c =================================================================== --- blender/source/blender/editors/armature/poselib.c (revisión: 28327) +++ blender/source/blender/editors/armature/poselib.c (copia de trabajo) @@ -1219,7 +1219,7 @@ case PADPLUSKEY: case PADMINUS: if (pld->searchstr[0]) { /* searching... */ - poselib_preview_handle_search(pld, event->type, event->ascii); + poselib_preview_handle_search(pld, event->type, event->unicode); } else { /* view manipulation (see above) */ @@ -1230,7 +1230,7 @@ /* otherwise, assume that searching might be able to handle it */ default: - poselib_preview_handle_search(pld, event->type, event->ascii); + poselib_preview_handle_search(pld, event->type, event->unicode); break; } Index: blender/source/blender/editors/interface/interface_handlers.c =================================================================== --- blender/source/blender/editors/interface/interface_handlers.c (revisión: 28327) +++ blender/source/blender/editors/interface/interface_handlers.c (copia de trabajo) @@ -1751,8 +1751,8 @@ break; } - if(event->ascii && (retval == WM_UI_HANDLER_CONTINUE)) { - changed= ui_textedit_type_ascii(but, data, event->ascii); + if(event->unicode && (retval == WM_UI_HANDLER_CONTINUE)) { + changed= ui_textedit_type_ascii(but, data, event->unicode); retval= WM_UI_HANDLER_BREAK; } }