mirror of
git://xwords.git.sourceforge.net/gitroot/xwords/xwords
synced 2025-02-06 20:45:54 +01:00
offer lang name (not locale) in new game dialog
This commit is contained in:
parent
3c770e023f
commit
502d58df6f
1 changed files with 46 additions and 4 deletions
|
@ -691,7 +691,12 @@ static XP_Bool
|
|||
onOneLang( void* closure, const XP_UCHAR* keys[] )
|
||||
{
|
||||
NewGameState* ngs = (NewGameState*)closure;
|
||||
replaceStringIfDifferent( ngs->globals->mpool, &ngs->langs[ngs->nLangs], keys[1] );
|
||||
|
||||
char langName[32];
|
||||
XP_U32 len = sizeof(langName);
|
||||
dutil_loadPtr( ngs->globals->dutil, NULL, keys, langName, &len );
|
||||
|
||||
replaceStringIfDifferent( ngs->globals->mpool, &ngs->langs[ngs->nLangs], langName );
|
||||
XP_LOGFF( "set langs[%d] %s", ngs->nLangs, ngs->langs[ngs->nLangs] );
|
||||
++ngs->nLangs;
|
||||
XP_ASSERT( ngs->nLangs < VSIZE(ngs->langs));
|
||||
|
@ -702,7 +707,7 @@ static void
|
|||
callNewGame( Globals* globals )
|
||||
{
|
||||
NewGameState ngs = {.globals = globals};
|
||||
const XP_UCHAR* keys[] = {KEY_DICTS, KEY_WILDCARD, NULL};
|
||||
const XP_UCHAR* keys[] = {KEY_DICTS, KEY_WILDCARD, KEY_LANG_NAME, NULL};
|
||||
dutil_forEach( globals->dutil, NULL, keys, onOneLang, &ngs );
|
||||
|
||||
js_callNewGame("Configure your new game", globals, ngs.langs, ngs.nLangs);
|
||||
|
@ -1198,6 +1203,40 @@ loadAnyDict( Globals* globals, const char* lc )
|
|||
return fos.dict;
|
||||
}
|
||||
|
||||
typedef struct _FindLCState {
|
||||
Globals* globals;
|
||||
const char* langName;
|
||||
char* lc;
|
||||
} FindLCState;
|
||||
|
||||
static XP_Bool
|
||||
onOneLangName( void* closure, const XP_UCHAR* keys[] )
|
||||
{
|
||||
bool found = false;
|
||||
FindLCState* lcs = (FindLCState*)closure;
|
||||
|
||||
char langName[32];
|
||||
XP_U32 len = sizeof(langName);
|
||||
dutil_loadPtr( lcs->globals->dutil, NULL, keys, langName, &len );
|
||||
|
||||
if ( 0 == strcmp( lcs->langName, langName ) ) {
|
||||
strcpy( lcs->lc, keys[1] );
|
||||
found = true;
|
||||
}
|
||||
return !found;
|
||||
}
|
||||
|
||||
static void
|
||||
langNameToLC(Globals* globals, const char* langName, char lc[], size_t len)
|
||||
{
|
||||
FindLCState lcc = { .globals = globals,
|
||||
.lc = lc,
|
||||
.langName = langName,
|
||||
};
|
||||
const XP_UCHAR* keys[] = {KEY_DICTS, KEY_WILDCARD, KEY_LANG_NAME, NULL};
|
||||
dutil_forEach( globals->dutil, NULL, keys, onOneLangName, &lcc );
|
||||
}
|
||||
|
||||
static void
|
||||
loadAndDraw( Globals* globals, const NetLaunchInfo* invite,
|
||||
int gameID, NewGameParams* params )
|
||||
|
@ -1758,10 +1797,13 @@ cbckBinary( BinProc proc, void* closure, int len, const uint8_t* msg )
|
|||
}
|
||||
|
||||
void
|
||||
onNewGame( void* closure, bool opponentIsRobot, const char* lc )
|
||||
onNewGame( void* closure, bool opponentIsRobot, const char* langName )
|
||||
{
|
||||
Globals* globals = (Globals*)closure;
|
||||
XP_LOGFF( "isRobot: %d; lc: %s", opponentIsRobot, lc );
|
||||
XP_LOGFF( "isRobot: %d; lc: %s", opponentIsRobot, langName );
|
||||
|
||||
char lc[8];
|
||||
langNameToLC(globals, langName, lc, sizeof(lc));
|
||||
|
||||
NewGameParams ngp = { .isRobotNotRemote = opponentIsRobot,
|
||||
.lc = lc,
|
||||
|
|
Loading…
Add table
Reference in a new issue