Fixed issue 167: Crashes on win98 with international keyboards (SDL.DLL, recompiled from 1.2.13 source archive)
Fixed old bug (all platforms): When typing text with dead-keys like ^ ` it would additionally type the character on same key for US-QWERTY keyboard. Removed the "disable Unicode" option added in r814, no longer needed. git-svn-id: svn://pulkomandy.tk/GrafX2/trunk@816 416bcca6-2ee7-4201-b75f-2eb2f807beb1
This commit is contained in:
parent
9e4866e34c
commit
4191b37099
11
gfx2def.ini
11
gfx2def.ini
@ -333,15 +333,4 @@
|
|||||||
; OS isn't able to do it by itself. (ie: Windows)
|
; OS isn't able to do it by itself. (ie: Windows)
|
||||||
Window_position = 9999,9999; (Default 9999,9999 which means: NA)
|
Window_position = 9999,9999; (Default 9999,9999 which means: NA)
|
||||||
|
|
||||||
; The program uses SDL's Unicode support to translate key combinations
|
|
||||||
; into characters, when you're typing in textboxes. However, on
|
|
||||||
; Windows 98 and if you're using a French or German keyboard, SDL has a
|
|
||||||
; rather severe bug: The key ^ causes an instant crash if the key
|
|
||||||
; that follows it isn't space or a vowel (the ones that make it a valid
|
|
||||||
; combination : ^âêîôû)
|
|
||||||
; If this problem concerns you, disable unicode below, and it will never
|
|
||||||
; crash. This won't affect keyboard shortcuts, but in text fields you'll be
|
|
||||||
; typing in US-QWERTY mode.
|
|
||||||
Use_unicode = yes ; (Default 'yes')
|
|
||||||
|
|
||||||
; end of configuration
|
; end of configuration
|
||||||
|
|||||||
62
keyboard.c
62
keyboard.c
@ -543,59 +543,19 @@ word Keysym_to_ANSI(SDL_keysym keysym)
|
|||||||
#if !(defined(__macosx__) || defined(__FreeBSD__))
|
#if !(defined(__macosx__) || defined(__FreeBSD__))
|
||||||
if ( keysym.unicode == 0)
|
if ( keysym.unicode == 0)
|
||||||
{
|
{
|
||||||
byte shift;
|
switch(keysym.sym)
|
||||||
|
|
||||||
shift = (SDL_GetModState() & (KMOD_SHIFT|KMOD_CAPS)) != 0;
|
|
||||||
// Convert keypad to numbers
|
|
||||||
if (keysym.sym >= SDLK_KP0 && keysym.sym <= SDLK_KP9)
|
|
||||||
return ('0' - SDLK_KP0) + keysym.sym;
|
|
||||||
|
|
||||||
// Conversion with shift on
|
|
||||||
if (shift)
|
|
||||||
{
|
{
|
||||||
// Lowercase to uppercase.
|
case SDLK_DELETE:
|
||||||
if (keysym.sym >= 'a' && keysym.sym <= 'z' && shift)
|
case SDLK_LEFT:
|
||||||
return ('A' - 'a') + keysym.sym;
|
case SDLK_RIGHT:
|
||||||
// Some shifts of QWERTY-US keys
|
case SDLK_HOME:
|
||||||
switch (keysym.sym)
|
case SDLK_END:
|
||||||
{
|
case SDLK_BACKSPACE:
|
||||||
case '`': return '~';
|
case KEY_ESC:
|
||||||
case '1': return '!';
|
case SDLK_RETURN:
|
||||||
case '2': return '@';
|
|
||||||
case '3': return '#';
|
|
||||||
case '4': return '$';
|
|
||||||
case '5': return '%';
|
|
||||||
case '6': return '^';
|
|
||||||
case '7': return '&';
|
|
||||||
case '8': return '*';
|
|
||||||
case '9': return '(';
|
|
||||||
case '0': return ')';
|
|
||||||
case '-': return '_';
|
|
||||||
case '=': return '+';
|
|
||||||
case '\\': return '|';
|
|
||||||
case '[': return '{';
|
|
||||||
case ']': return '}';
|
|
||||||
case ';': return ':';
|
|
||||||
case '\'': return '"';
|
|
||||||
case ',': return '<';
|
|
||||||
case '.': return '>';
|
|
||||||
case '/': return '?';
|
|
||||||
default:
|
|
||||||
return keysym.sym;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// More conversions
|
|
||||||
switch (keysym.sym)
|
|
||||||
{
|
|
||||||
case SDLK_KP_PERIOD: return '.';
|
|
||||||
case SDLK_KP_DIVIDE: return '/';
|
|
||||||
case SDLK_KP_MINUS: return '-';
|
|
||||||
case SDLK_KP_MULTIPLY: return '*';
|
|
||||||
case SDLK_KP_PLUS: return '+';
|
|
||||||
case SDLK_KP_ENTER: return '\r';
|
|
||||||
case SDLK_KP_EQUALS: return '=';
|
|
||||||
default:
|
|
||||||
return keysym.sym;
|
return keysym.sym;
|
||||||
|
default:
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@ -798,12 +798,7 @@ int Load_INI(T_Config * conf)
|
|||||||
conf->Window_pos_x = values[0];
|
conf->Window_pos_x = values[0];
|
||||||
conf->Window_pos_y = values[1];
|
conf->Window_pos_y = values[1];
|
||||||
}
|
}
|
||||||
// Optional, Unicode support on/off (>98.0%)
|
|
||||||
conf->Use_unicode=1;
|
|
||||||
if (!Load_INI_get_values (file,buffer,"Use_unicode",1,values))
|
|
||||||
{
|
|
||||||
conf->Use_unicode = (values[0]!=0);
|
|
||||||
}
|
|
||||||
|
|
||||||
fclose(file);
|
fclose(file);
|
||||||
|
|
||||||
|
|||||||
@ -142,8 +142,7 @@ byte Readline_ex(word x_pos,word y_pos,char * str,byte visible_size,byte max_siz
|
|||||||
|
|
||||||
byte offset=0; // index du premier caractère affiché
|
byte offset=0; // index du premier caractère affiché
|
||||||
|
|
||||||
if (Config.Use_unicode)
|
SDL_EnableUNICODE(SDL_ENABLE);
|
||||||
SDL_EnableUNICODE(SDL_ENABLE);
|
|
||||||
|
|
||||||
Hide_cursor();
|
Hide_cursor();
|
||||||
// Effacement de la chaîne
|
// Effacement de la chaîne
|
||||||
@ -349,8 +348,7 @@ affichage:
|
|||||||
Update_rect(Window_pos_X+(x_pos*Menu_factor_X),Window_pos_Y+(y_pos*Menu_factor_Y),
|
Update_rect(Window_pos_X+(x_pos*Menu_factor_X),Window_pos_Y+(y_pos*Menu_factor_Y),
|
||||||
visible_size*(Menu_factor_X<<3),(Menu_factor_Y<<3));
|
visible_size*(Menu_factor_X<<3),(Menu_factor_Y<<3));
|
||||||
|
|
||||||
if (Config.Use_unicode)
|
SDL_EnableUNICODE(SDL_DISABLE);
|
||||||
SDL_EnableUNICODE(SDL_DISABLE);
|
|
||||||
|
|
||||||
return (input_key==SDLK_RETURN);
|
return (input_key==SDLK_RETURN);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -635,9 +635,6 @@ int Save_INI(T_Config * conf)
|
|||||||
if ((return_code=Save_INI_set_values (Ancien_fichier,Nouveau_fichier,buffer,"Window_position",2,values,0)))
|
if ((return_code=Save_INI_set_values (Ancien_fichier,Nouveau_fichier,buffer,"Window_position",2,values,0)))
|
||||||
goto Erreur_Retour;
|
goto Erreur_Retour;
|
||||||
|
|
||||||
values[0]=conf->Use_unicode;
|
|
||||||
if ((return_code=Save_INI_set_values (Ancien_fichier,Nouveau_fichier,buffer,"Use_unicode",1,values,1)))
|
|
||||||
goto Erreur_Retour;
|
|
||||||
|
|
||||||
Save_INI_flush(Ancien_fichier,Nouveau_fichier,buffer);
|
Save_INI_flush(Ancien_fichier,Nouveau_fichier,buffer);
|
||||||
|
|
||||||
|
|||||||
1
struct.h
1
struct.h
@ -269,7 +269,6 @@ typedef struct
|
|||||||
char Bookmark_label[NB_BOOKMARKS][8+1];///< Bookmarked directories in fileselectors: This is the displayed name.
|
char Bookmark_label[NB_BOOKMARKS][8+1];///< Bookmarked directories in fileselectors: This is the displayed name.
|
||||||
int Window_pos_x; ///< Last window x position (9999 if unsupportd/irrelevant for the platform)
|
int Window_pos_x; ///< Last window x position (9999 if unsupportd/irrelevant for the platform)
|
||||||
int Window_pos_y; ///< Last window y position (9999 if unsupportd/irrelevant for the platform)
|
int Window_pos_y; ///< Last window y position (9999 if unsupportd/irrelevant for the platform)
|
||||||
byte Use_unicode; ///< Boolean, true to use Unicode for keyboard input
|
|
||||||
} T_Config;
|
} T_Config;
|
||||||
|
|
||||||
// Structures utilisées pour les descriptions de pages et de liste de pages.
|
// Structures utilisées pour les descriptions de pages et de liste de pages.
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user