readline.c: properly handle input_char/input_key with different values
the code was relaying on Key codes being legal ASCII (ANSI) codes which us the case with SDLK_* but not with XK_* codes
This commit is contained in:
parent
e704ae45be
commit
74a8ad142f
@ -453,6 +453,7 @@ byte Readline_ex_unicode(word x_pos,word y_pos,char * str,word * str_unicode,byt
|
||||
word display_string_unicode[256];
|
||||
byte position;
|
||||
size_t size;
|
||||
word input_char=0;
|
||||
word input_key=0;
|
||||
word window_x=Window_pos_X;
|
||||
word window_y=Window_pos_Y;
|
||||
@ -665,7 +666,7 @@ byte Readline_ex_unicode(word x_pos,word y_pos,char * str,word * str_unicode,byt
|
||||
int clicked_button;
|
||||
|
||||
clicked_button=Window_clicked_button();
|
||||
input_key=Key_ANSI;
|
||||
input_char=0;
|
||||
|
||||
if (clicked_button==-1)
|
||||
input_key=KEY_RETURN;
|
||||
@ -691,7 +692,11 @@ byte Readline_ex_unicode(word x_pos,word y_pos,char * str,word * str_unicode,byt
|
||||
}
|
||||
else if (input_key>='A' && input_key<='Z' && !caps_lock)
|
||||
{
|
||||
input_key+='a'-'A';
|
||||
input_char = input_key + 'a' - 'A';
|
||||
}
|
||||
else if (input_key >= ' ') // this is a printable char
|
||||
{
|
||||
input_char = input_key;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -700,12 +705,13 @@ byte Readline_ex_unicode(word x_pos,word y_pos,char * str,word * str_unicode,byt
|
||||
do
|
||||
{
|
||||
Get_input(20);
|
||||
input_key = (str_unicode == NULL) ? Key_ANSI : Key_UNICODE;
|
||||
input_char = (str_unicode == NULL) ? Key_ANSI : Key_UNICODE;
|
||||
input_key = Key;
|
||||
if (Mouse_K)
|
||||
input_key=KEY_RETURN;
|
||||
|
||||
// Handle paste request on CTRL+v
|
||||
if (Key == SHORTCUT_PASTE)
|
||||
if (input_key == SHORTCUT_PASTE)
|
||||
{
|
||||
int nb_added = 0;
|
||||
if (str_unicode != NULL)
|
||||
@ -762,7 +768,7 @@ byte Readline_ex_unicode(word x_pos,word y_pos,char * str,word * str_unicode,byt
|
||||
goto affichage;
|
||||
}
|
||||
|
||||
} while(input_key==0 && Key == 0
|
||||
} while(input_char==0 && input_key == 0
|
||||
#if defined(USE_SDL2)
|
||||
&& Key_Text[0] == '\0'
|
||||
#endif
|
||||
@ -833,7 +839,7 @@ byte Readline_ex_unicode(word x_pos,word y_pos,char * str,word * str_unicode,byt
|
||||
}
|
||||
else
|
||||
#endif
|
||||
switch (Key)
|
||||
switch (input_key)
|
||||
{
|
||||
case KEY_DELETE : // Suppr.
|
||||
if (position<size)
|
||||
@ -941,17 +947,17 @@ byte Readline_ex_unicode(word x_pos,word y_pos,char * str,word * str_unicode,byt
|
||||
break;
|
||||
default :
|
||||
#if !defined(USE_SDL2)
|
||||
if (size<max_size && input_key != 0)
|
||||
if (size<max_size && input_char != 0)
|
||||
{
|
||||
// Si la touche était autorisée...
|
||||
byte is_authorized = Valid_character(input_key, input_type);
|
||||
byte is_authorized = Valid_character(input_char, input_type);
|
||||
if (is_authorized == 1 || (is_authorized == 2 && position == 0 && str[position] != '-'))
|
||||
{
|
||||
// ... alors on l'insère ...
|
||||
if (str_unicode != NULL)
|
||||
Insert_character_unicode(str_unicode,input_key,position/*,size*/);
|
||||
Insert_character_unicode(str_unicode,input_char,position/*,size*/);
|
||||
else
|
||||
Insert_character(str,input_key,position/*,size*/);
|
||||
Insert_character(str,input_char,position/*,size*/);
|
||||
// ce qui augmente la taille de la chaine
|
||||
size++;
|
||||
// et qui risque de déplacer le curseur vers la droite
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user