diff --git a/gfx2def.ini b/gfx2def.ini index d10330a9..56d1423d 100644 --- a/gfx2def.ini +++ b/gfx2def.ini @@ -333,4 +333,15 @@ ; OS isn't able to do it by itself. (ie: Windows) 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 will be + ; unable to type many punctuation characters. + Use_unicode = yes ; (Default 'yes') + ; end of configuration diff --git a/readini.c b/readini.c index e4549072..da0eb3b9 100644 --- a/readini.c +++ b/readini.c @@ -798,7 +798,12 @@ int Load_INI(T_Config * conf) conf->Window_pos_x = values[0]; 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); diff --git a/readline.c b/readline.c index 051714d9..613932ba 100644 --- a/readline.c +++ b/readline.c @@ -142,7 +142,8 @@ 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é - SDL_EnableUNICODE(SDL_ENABLE); + if (Config.Use_unicode) + SDL_EnableUNICODE(SDL_ENABLE); Hide_cursor(); // Effacement de la chaîne @@ -348,7 +349,8 @@ affichage: 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)); - SDL_EnableUNICODE(SDL_DISABLE); + if (Config.Use_unicode) + SDL_EnableUNICODE(SDL_DISABLE); return (input_key==SDLK_RETURN); } diff --git a/saveini.c b/saveini.c index ac8e53d3..bf4077b4 100644 --- a/saveini.c +++ b/saveini.c @@ -635,6 +635,9 @@ int Save_INI(T_Config * conf) if ((return_code=Save_INI_set_values (Ancien_fichier,Nouveau_fichier,buffer,"Window_position",2,values,0))) 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); diff --git a/struct.h b/struct.h index 81f26b0d..0fe54840 100644 --- a/struct.h +++ b/struct.h @@ -269,6 +269,7 @@ typedef struct 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_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; // Structures utilisées pour les descriptions de pages et de liste de pages.