mirror of
git://xwords.git.sourceforge.net/gitroot/xwords/xwords
synced 2024-12-28 09:58:30 +01:00
Fix dictionary-search code to look in top-level temporary directories
rather than hard-coded "SD Card" etc. to work in non-English cases; fix password dialog to fit, and simplify it; fix backspace on smartphone for all dialogs with EDIT fields to actually backspace rather than exiting app; and in main window have it raise focus. This change requires SHSendBackToFocusWindow(), which is not yet in cegcc. Until I get a patch accepted this breaks wince builds.
This commit is contained in:
parent
e60d338488
commit
7da66696ed
17 changed files with 209 additions and 177 deletions
|
@ -20,6 +20,7 @@
|
|||
#include "ceaskpwd.h"
|
||||
#include "cemain.h"
|
||||
#include "ceutil.h"
|
||||
#include "debhacks.h"
|
||||
#include <stdio.h> /* swprintf */
|
||||
|
||||
static void
|
||||
|
@ -48,6 +49,9 @@ PasswdDlg(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
|
|||
SetWindowLong( hDlg, GWL_USERDATA, lParam );
|
||||
pState = (PasswdDialogState*)lParam;
|
||||
|
||||
ceDlgSetup( pState->globals, hDlg );
|
||||
trapBackspaceKey( hDlg );
|
||||
|
||||
nameToLabel( hDlg, pState->name, IDC_PWDLABEL );
|
||||
|
||||
return TRUE;
|
||||
|
@ -56,6 +60,14 @@ PasswdDlg(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
|
|||
if ( !!pState ) {
|
||||
|
||||
switch ( message ) {
|
||||
#ifdef _WIN32_WCE
|
||||
case WM_HOTKEY:
|
||||
if ( VK_TBACK == HIWORD(lParam) ) {
|
||||
SHSendBackToFocusWindow( message, wParam, lParam );
|
||||
return TRUE;
|
||||
}
|
||||
break;
|
||||
#endif
|
||||
case WM_COMMAND:
|
||||
id = LOWORD(wParam);
|
||||
switch( id ) {
|
||||
|
|
|
@ -24,6 +24,7 @@
|
|||
#include "cemain.h"
|
||||
|
||||
typedef struct PasswdDialogState {
|
||||
CEAppGlobals* globals;
|
||||
const XP_UCHAR* name;
|
||||
XP_UCHAR* buf;
|
||||
XP_U16* lenp;
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/* -*-mode: C; fill-column: 77; c-basic-offset: 4; -*- */
|
||||
/*
|
||||
* Copyright 2002 by Eric House (xwords@eehouse.org). All rights reserved.
|
||||
* Copyright 2002,2008 by Eric House (xwords@eehouse.org). All rights reserved.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
|
@ -20,6 +20,7 @@
|
|||
#include "ceblank.h"
|
||||
#include "cemain.h"
|
||||
#include "ceutil.h"
|
||||
#include "debhacks.h"
|
||||
|
||||
static void
|
||||
loadLettersList( HWND hDlg, BlankDialogState* bState )
|
||||
|
@ -37,7 +38,7 @@ loadLettersList( HWND hDlg, BlankDialogState* bState )
|
|||
widebuf, VSIZE(widebuf) );
|
||||
widebuf[len] = 0;
|
||||
|
||||
SendDlgItemMessage( hDlg, BLANKFACE_LIST, LB_ADDSTRING,
|
||||
SendDlgItemMessage( hDlg, BLANKFACE_LIST, ADDSTRING,
|
||||
0, (long)widebuf );
|
||||
}
|
||||
ce_selectAndShow( hDlg, BLANKFACE_LIST, 0 );
|
||||
|
@ -95,15 +96,15 @@ BlankDlg(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
|
|||
} else {
|
||||
XP_ASSERT( bState->pi->why == PICK_FOR_BLANK );
|
||||
ceShowOrHide( hDlg, IDC_CPICK, XP_FALSE );
|
||||
ceShowOrHide( hDlg, IDC_PICKALL, XP_FALSE );
|
||||
ceShowOrHide( hDlg, IDC_PICKMSG, XP_FALSE );
|
||||
}
|
||||
ceShowOrHide( hDlg, IDC_BACKUP,
|
||||
bState->pi->why == PICK_FOR_CHEAT
|
||||
&& bState->pi->thisPick > 0 );
|
||||
bState->canBackup = (bState->pi->why == PICK_FOR_CHEAT)
|
||||
&& (bState->pi->thisPick > 0);
|
||||
ceShowOrHide( hDlg, IDC_BACKUP, bState->canBackup );
|
||||
#endif
|
||||
|
||||
ceDlgSetup( bState->globals, hDlg );
|
||||
trapBackspaceKey( hDlg );
|
||||
|
||||
loadLettersList( hDlg, bState );
|
||||
} else {
|
||||
|
@ -111,14 +112,25 @@ BlankDlg(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
|
|||
if ( !!bState ) {
|
||||
|
||||
switch ( message ) {
|
||||
case WM_KEYDOWN: /* key down. Select a list item? */
|
||||
XP_LOGF( "got WM_KEYDOWN" );
|
||||
/* case WM_KEYDOWN: /\* key down. Select a list item? *\/ */
|
||||
/* XP_LOGF( "got WM_KEYDOWN" ); */
|
||||
/* break; */
|
||||
#ifdef _WIN32_WCE
|
||||
case WM_HOTKEY:
|
||||
if ( VK_TBACK == HIWORD(lParam) ) {
|
||||
if ( bState->canBackup ) {
|
||||
bState->result = PICKER_BACKUP;
|
||||
EndDialog( hDlg, IDC_BACKUP );
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
break;
|
||||
#endif
|
||||
case WM_COMMAND:
|
||||
id = LOWORD(wParam);
|
||||
if ( 0 ) {
|
||||
#ifdef FEATURE_TRAY_EDIT
|
||||
} else if ( id == IDC_PICKALL ) {
|
||||
} else if ( id == IDCANCEL ) {
|
||||
bState->result = PICKER_PICKALL;
|
||||
} else if ( id == IDC_BACKUP ) {
|
||||
bState->result = PICKER_BACKUP;
|
||||
|
@ -126,7 +138,7 @@ BlankDlg(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
|
|||
} else if ( id == IDOK ) {
|
||||
bState->result =
|
||||
(XP_S16)SendDlgItemMessage( hDlg, BLANKFACE_LIST,
|
||||
LB_GETCURSEL, 0, 0 );
|
||||
GETCURSEL, 0, 0 );
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/* -*-mode: C; fill-column: 77; c-basic-offset: 4; -*- */
|
||||
/*
|
||||
* Copyright 2002 by Eric House (xwords@eehouse.org). All rights reserved.
|
||||
* Copyright 2002, 2008 by Eric House (xwords@eehouse.org). All rights reserved.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
|
@ -30,6 +30,7 @@ typedef struct BlankDialogState {
|
|||
const XP_UCHAR4* texts;
|
||||
XP_U16 nTiles;
|
||||
XP_S16 result;
|
||||
XP_Bool canBackup;
|
||||
} BlankDialogState;
|
||||
|
||||
LRESULT CALLBACK BlankDlg(HWND, UINT, WPARAM, LPARAM);
|
||||
|
|
|
@ -146,6 +146,7 @@ EditColorsDlg( HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam )
|
|||
eState->inited = XP_FALSE;
|
||||
|
||||
ceDlgSetup( eState->globals, hDlg );
|
||||
trapBackspaceKey( hDlg );
|
||||
|
||||
wchar_t label[32];
|
||||
XP_U16 len = SendDlgItemMessage( eState->parent, eState->labelID,
|
||||
|
@ -197,7 +198,14 @@ EditColorsDlg( HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam )
|
|||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
#ifdef _WIN32_WCE
|
||||
case WM_HOTKEY:
|
||||
if ( VK_TBACK == HIWORD(lParam) ) {
|
||||
SHSendBackToFocusWindow( message, wParam, lParam );
|
||||
return TRUE;
|
||||
}
|
||||
break;
|
||||
#endif
|
||||
case WM_COMMAND:
|
||||
wid = LOWORD(wParam);
|
||||
switch( wid ) {
|
||||
|
|
172
wince/cedict.c
172
wince/cedict.c
|
@ -23,11 +23,13 @@
|
|||
#include <string.h> /* _snwprintf */
|
||||
|
||||
#include "stdafx.h"
|
||||
/* #include <accctrl.h> */
|
||||
#include <commdlg.h>
|
||||
#include "dictnryp.h"
|
||||
#include "strutils.h"
|
||||
#include "cedict.h"
|
||||
#include "debhacks.h"
|
||||
#include "cedebug.h"
|
||||
|
||||
typedef struct CEDictionaryCtxt {
|
||||
DictionaryCtxt super;
|
||||
|
@ -621,121 +623,47 @@ locateOneDir( MPFORMAL wchar_t* path, OnePathCB cb, void* ctxt, XP_U16 nSought,
|
|||
return done;
|
||||
} /* locateOneDir */
|
||||
|
||||
#define USE_FOREACH /* FOREACH avoids code duplication, but may not be worth
|
||||
the extra complexity. Size is the same. */
|
||||
#ifdef USE_FOREACH
|
||||
/* return true when done */
|
||||
typedef XP_Bool (*ForEachCB)( wchar_t* dir, void* ctxt );
|
||||
|
||||
static void
|
||||
forEachDictDir( HINSTANCE hInstance, ForEachCB cb, void* ctxt )
|
||||
{
|
||||
UINT id;
|
||||
for ( id = IDS_DICTDIRS; ; ++id ) {
|
||||
wchar_t pathBuf[CE_MAX_PATH_LEN+1];
|
||||
if ( 0 >= LoadString( hInstance, id, pathBuf,
|
||||
VSIZE(pathBuf) ) ) {
|
||||
break;
|
||||
}
|
||||
|
||||
if ( (*cb)( pathBuf, ctxt ) ) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
} /* forEachDictDir */
|
||||
|
||||
typedef struct LocateOneData {
|
||||
XP_U16 nFound;
|
||||
XP_U16 nSought;
|
||||
OnePathCB cb;
|
||||
void* ctxt;
|
||||
|
||||
MPSLOT
|
||||
} LocateOneData;
|
||||
|
||||
static XP_Bool
|
||||
locateOneDirCB( wchar_t* dir, void* ctxt )
|
||||
getDictDir( wchar_t* buf )
|
||||
{
|
||||
LocateOneData* datap = (LocateOneData*)ctxt;
|
||||
|
||||
return locateOneDir( MPPARM(datap->mpool) dir, datap->cb,
|
||||
datap->ctxt, datap->nSought, &datap->nFound )
|
||||
|| datap->nFound >= datap->nSought;
|
||||
} /* locateOneDirCB */
|
||||
|
||||
XP_U16
|
||||
ceLocateNDicts( MPFORMAL HINSTANCE hInstance, XP_U16 nSought,
|
||||
OnePathCB cb, void* ctxt )
|
||||
{
|
||||
LocateOneData data;
|
||||
|
||||
data.nFound = 0;
|
||||
data.nSought = nSought;
|
||||
data.cb = cb;
|
||||
data.ctxt = ctxt;
|
||||
#ifdef MEM_DEBUG
|
||||
data.mpool = mpool;
|
||||
#endif
|
||||
|
||||
forEachDictDir( hInstance, locateOneDirCB, &data );
|
||||
return data.nFound;
|
||||
/* BOOL found = SHGetKnownFolderPath(HWND,LPWSTR,int,BOOL); */
|
||||
// temporary hack until I figure SHGetKnownFolderPath out
|
||||
wsprintf( buf, L"\\Program Files\\Crosswords" );
|
||||
return XP_TRUE;
|
||||
}
|
||||
|
||||
typedef struct FormatDirsData {
|
||||
XWStreamCtxt* stream;
|
||||
XP_Bool firstPassDone;
|
||||
} FormatDirsData;
|
||||
|
||||
static XP_Bool
|
||||
formatDirsCB( wchar_t* dir, void* ctxt )
|
||||
{
|
||||
FormatDirsData* datap = (FormatDirsData*)ctxt;
|
||||
XP_UCHAR narrow[CE_MAX_PATH_LEN+1];
|
||||
int len;
|
||||
|
||||
if ( datap->firstPassDone ) {
|
||||
stream_putString( datap->stream, ", " );
|
||||
} else {
|
||||
datap->firstPassDone = XP_TRUE;
|
||||
}
|
||||
|
||||
len = WideCharToMultiByte( CP_ACP, 0, dir, -1,
|
||||
narrow, VSIZE(narrow),
|
||||
NULL, NULL );
|
||||
stream_putString( datap->stream, narrow );
|
||||
return XP_FALSE;
|
||||
} /* formatDirsCB */
|
||||
|
||||
void
|
||||
ceFormatDictDirs( XWStreamCtxt* stream, HINSTANCE hInstance )
|
||||
{
|
||||
FormatDirsData data;
|
||||
data.stream = stream;
|
||||
data.firstPassDone = XP_FALSE;
|
||||
|
||||
forEachDictDir( hInstance, formatDirsCB, &data );
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
XP_U16
|
||||
ceLocateNDicts( MPFORMAL HINSTANCE hInstance, XP_U16 nSought,
|
||||
OnePathCB cb, void* ctxt )
|
||||
ceLocateNDicts( MPFORMAL XP_U16 nSought, OnePathCB cb, void* ctxt )
|
||||
{
|
||||
XP_U16 nFound = 0;
|
||||
UINT id;
|
||||
wchar_t path[CE_MAX_PATH_LEN+1];
|
||||
|
||||
for ( id = IDS_DICTDIRS; ; ++id ) {
|
||||
wchar_t pathBuf[CE_MAX_PATH_LEN+1];
|
||||
if ( 0 >= LoadString( hInstance, id, pathBuf,
|
||||
VSIZE(pathBuf) ) ) {
|
||||
break;
|
||||
}
|
||||
if ( getDictDir( path ) ) {
|
||||
locateOneDir( MPPARM(mpool) path, cb, ctxt, nSought, &nFound );
|
||||
}
|
||||
|
||||
locateOneDir( MPPARM(mpool) pathBuf, cb, ctxt, nSought, &nFound );
|
||||
if ( nFound < nSought ) {
|
||||
WIN32_FIND_DATA data;
|
||||
HANDLE fileH;
|
||||
|
||||
if ( nFound >= nSought ) {
|
||||
break;
|
||||
XP_MEMSET( &data, 0, sizeof(data) );
|
||||
|
||||
fileH = FindFirstFile( L"\\*", &data );
|
||||
while ( fileH != INVALID_HANDLE_VALUE ) {
|
||||
if ( ((data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) != 0)
|
||||
&& (((data.dwFileAttributes & FILE_ATTRIBUTE_TEMPORARY) != 0) ) ) {
|
||||
wsprintf( path, L"\\%s\\Crosswords", data.cFileName );
|
||||
|
||||
XP_LOGW( "looking in:", path );
|
||||
locateOneDir( MPPARM(mpool) path, cb, ctxt, nSought, &nFound );
|
||||
}
|
||||
if ( nFound >= nSought ) {
|
||||
break;
|
||||
}
|
||||
|
||||
if ( !FindNextFile( fileH, &data ) ) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -745,28 +673,19 @@ ceLocateNDicts( MPFORMAL HINSTANCE hInstance, XP_U16 nSought,
|
|||
void
|
||||
ceFormatDictDirs( XWStreamCtxt* stream, HINSTANCE hInstance )
|
||||
{
|
||||
UINT id;
|
||||
|
||||
for ( id = IDS_DICTDIRS; ; ++id ) {
|
||||
wchar_t wide[CE_MAX_PATH_LEN+1];
|
||||
XP_UCHAR narrow[CE_MAX_PATH_LEN+1];
|
||||
XP_U16 len;
|
||||
|
||||
if ( 0 >= LoadString( hInstance, id, wide,
|
||||
VSIZE(wide) ) ) {
|
||||
break;
|
||||
}
|
||||
|
||||
if ( id != IDS_DICTDIRS ) {
|
||||
stream_putString( stream, ", " );
|
||||
}
|
||||
len = WideCharToMultiByte( CP_ACP, 0, wide, -1,
|
||||
narrow, VSIZE(narrow),
|
||||
NULL, NULL );
|
||||
stream_putString( stream, narrow );
|
||||
wchar_t path[CE_MAX_PATH_LEN+1];
|
||||
if ( getDictDir( path ) ) {
|
||||
char narrowName[CE_MAX_PATH_LEN+1];
|
||||
int len = wcslen( path );
|
||||
len = WideCharToMultiByte( CP_ACP, 0, path, len + 1,
|
||||
narrowName, len + 1, NULL, NULL );
|
||||
stream_putString( stream, narrowName );
|
||||
stream_putString( stream, " or" );
|
||||
}
|
||||
|
||||
const char* rest = " on an external card, e.g. in \\Storage Card\\Crosswords";
|
||||
stream_putString( stream, rest );
|
||||
}
|
||||
#endif /* USE_FOREACH */
|
||||
|
||||
typedef struct FindOneData {
|
||||
wchar_t* result;
|
||||
|
@ -807,8 +726,7 @@ findAlternateDict( CEAppGlobals* globals, wchar_t* path )
|
|||
data.sought = wbname( shortPath, sizeof(shortPath), path );
|
||||
data.result = path;
|
||||
|
||||
(void)ceLocateNDicts( MPPARM(globals->mpool) globals->hInst, CE_MAXDICTS,
|
||||
matchShortName, &data );
|
||||
(void)ceLocateNDicts( MPPARM(globals->mpool) CE_MAXDICTS, matchShortName, &data );
|
||||
return data.found;
|
||||
} /* findAlternateDict */
|
||||
|
||||
|
|
|
@ -41,8 +41,7 @@ typedef XP_Bool (*OnePathCB)( const wchar_t* wPath, XP_U16 index, void* ctxt );
|
|||
* dict files. Return the number actually found. Caller is responsible for
|
||||
* making sure bufs contains nSought slots.
|
||||
*/
|
||||
XP_U16 ceLocateNDicts( MPFORMAL HINSTANCE hInstance, XP_U16 nSought,
|
||||
OnePathCB cb, void* ctxt );
|
||||
XP_U16 ceLocateNDicts( MPFORMAL XP_U16 nSought, OnePathCB cb, void* ctxt );
|
||||
void ceFormatDictDirs( XWStreamCtxt* stream, HINSTANCE hInstance );
|
||||
|
||||
/* return just the name, no extension, of dict, written to buf, pointed to by
|
||||
|
|
|
@ -900,7 +900,7 @@ DRAW_FUNC_NAME(score_pendingScore)( DrawCtx* p_dctx, const XP_Rect* rect,
|
|||
|
||||
wchar_t widebuf[5];
|
||||
XP_UCHAR buf[5];
|
||||
RECT rt;
|
||||
RECT rt, clip;
|
||||
XP_U16 bkIndex = (flags & CELL_ISCURSOR) == 0?
|
||||
CE_BKG_COLOR : CE_FOCUS_COLOR;
|
||||
|
||||
|
@ -912,9 +912,13 @@ DRAW_FUNC_NAME(score_pendingScore)( DrawCtx* p_dctx, const XP_Rect* rect,
|
|||
|
||||
XPRtoRECT( &rt, rect );
|
||||
FillRect( hdc, &rt, dctx->brushes[bkIndex] );
|
||||
ceClipToRect( hdc, &rt );
|
||||
/* Use a separate rect for clipping since shrinking puts text to close
|
||||
together on smartphone's small screen. */
|
||||
clip = rt;
|
||||
InsetRect( &clip, 2, 2 );
|
||||
ceClipToRect( hdc, &clip );
|
||||
|
||||
DrawText(hdc, L"Pts", -1, &rt, DT_SINGLELINE | DT_TOP | DT_CENTER);
|
||||
DrawText(hdc, L"Pts", -1, &rt, DT_SINGLELINE | DT_TOP | DT_CENTER);
|
||||
|
||||
if ( score < 0 ) {
|
||||
buf[0] = '?';
|
||||
|
|
|
@ -26,6 +26,7 @@
|
|||
#include "cecondlg.h"
|
||||
#include "strutils.h"
|
||||
#include "cedebug.h"
|
||||
#include "debhacks.h"
|
||||
|
||||
#define NUM_COLS 4
|
||||
#define MENUDICTS_INCR 16
|
||||
|
@ -181,7 +182,7 @@ loadFromGameInfo( HWND hDlg, CEAppGlobals* globals, GameInfoState* giState )
|
|||
(XP_U16)XP_STRLEN(gi->dictName)+1 );
|
||||
}
|
||||
if ( giState->isNewGame ) {
|
||||
(void)ceLocateNDicts( MPPARM(globals->mpool) globals->hInst,
|
||||
(void)ceLocateNDicts( MPPARM(globals->mpool)
|
||||
CE_MAXDICTS, addDictToState, giState );
|
||||
} else {
|
||||
wchar_t wPath[CE_MAX_PATH_LEN+1];
|
||||
|
@ -495,6 +496,7 @@ GameInfo(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
|
|||
globals = giState->globals;
|
||||
|
||||
ceDlgSetup( globals, hDlg );
|
||||
trapBackspaceKey( hDlg );
|
||||
|
||||
giState->newGameCtx = newg_make( MPPARM(globals->mpool)
|
||||
giState->isNewGame,
|
||||
|
@ -513,6 +515,7 @@ GameInfo(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
|
|||
if ( giState->isNewGame ) {
|
||||
(void)SetWindowText( hDlg, L"New game" );
|
||||
}
|
||||
|
||||
result = TRUE;
|
||||
|
||||
} else {
|
||||
|
@ -521,7 +524,14 @@ GameInfo(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
|
|||
globals = giState->globals;
|
||||
|
||||
switch (message) {
|
||||
|
||||
#ifdef _WIN32_WCE
|
||||
case WM_HOTKEY:
|
||||
if ( VK_TBACK == HIWORD(lParam) ) {
|
||||
SHSendBackToFocusWindow( message, wParam, lParam );
|
||||
result = TRUE;
|
||||
}
|
||||
break;
|
||||
#endif
|
||||
case WM_VSCROLL:
|
||||
result = ceDoDlgScroll( globals, hDlg, wParam );
|
||||
break;
|
||||
|
|
|
@ -1064,7 +1064,7 @@ doDictsMovedAlert( CEAppGlobals* globals )
|
|||
stream_putString( stream,
|
||||
"Please be aware that starting with this version "
|
||||
"Crosswords will not find dictionaries unless they "
|
||||
"are located in one of these directories: " );
|
||||
"are located in " );
|
||||
ceFormatDictDirs( stream, globals->hInst );
|
||||
stream_putString( stream, ". From now on, dictionaries will be "
|
||||
"available as .cab files which will put them in the "
|
||||
|
@ -1239,15 +1239,15 @@ InitInstance(HINSTANCE hInstance, int nCmdShow)
|
|||
|
||||
/* choose one. If none found it's an error. */
|
||||
#ifndef STUBBED_DICT
|
||||
result = 1 == ceLocateNDicts( MPPARM(mpool) hInstance, 1, ceSetDictName,
|
||||
result = 1 == ceLocateNDicts( MPPARM(mpool) 1, ceSetDictName,
|
||||
globals );
|
||||
if ( !result ) {
|
||||
XWStreamCtxt* stream = make_generic_stream( globals );
|
||||
stream_putString( stream, "Please install a Crosswords dictionary "
|
||||
"in one of these directories: " );
|
||||
"in " );
|
||||
ceFormatDictDirs( stream, hInstance );
|
||||
stream_putString( stream, ". Download dictionaries from "
|
||||
"http://xwords.sf.net." );
|
||||
"http://xwords.sf.net or http://eehouse.org/xwords." );
|
||||
messageBoxStream( globals, stream, L"Dictionary Not Found", MB_OK );
|
||||
stream_destroy( stream );
|
||||
result = FALSE;
|
||||
|
@ -1284,6 +1284,8 @@ InitInstance(HINSTANCE hInstance, int nCmdShow)
|
|||
}
|
||||
}
|
||||
|
||||
trapBackspaceKey( hWnd );
|
||||
|
||||
ShowWindow(hWnd, nCmdShow);
|
||||
UpdateWindow(hWnd);
|
||||
#ifdef _WIN32_WCE
|
||||
|
@ -1995,7 +1997,7 @@ WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
|||
XP_Bool draw = XP_FALSE;
|
||||
XWTimerReason why;
|
||||
CEAppGlobals* globals;
|
||||
XP_Bool handled;
|
||||
XP_Bool handled = XP_FALSE;
|
||||
XP_Bool callDefault = XP_FALSE;
|
||||
|
||||
if ( message == WM_CREATE ) {
|
||||
|
@ -2204,7 +2206,24 @@ WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
|||
HIWORD(lParam) );
|
||||
globals->penDown = XP_FALSE;
|
||||
}
|
||||
break;
|
||||
break;
|
||||
|
||||
#ifdef _WIN32_WCE
|
||||
/* Make the back key mean raise focus, but only if dived.
|
||||
Otherwise allow the OS to do what it wants. Which means
|
||||
exit? */
|
||||
case WM_HOTKEY:
|
||||
if ( VK_TBACK == HIWORD(lParam) ) {
|
||||
if ( !!globals->game.board ) {
|
||||
draw = board_handleKey( globals->game.board,
|
||||
XP_RAISEFOCUS_KEY, &handled );
|
||||
}
|
||||
}
|
||||
if ( !draw || !handled ) {
|
||||
callDefault = XP_TRUE;
|
||||
}
|
||||
break;
|
||||
#endif
|
||||
|
||||
#ifdef KEYBOARD_NAV
|
||||
case WM_KEYDOWN:
|
||||
|
@ -2798,6 +2817,7 @@ ce_util_askPassword( XW_UtilCtxt* uc, const XP_UCHAR* name,
|
|||
CEAppGlobals* globals = (CEAppGlobals*)uc->closure;
|
||||
XP_MEMSET( &state, 0, sizeof(state) );
|
||||
|
||||
state.globals = globals;
|
||||
state.name = name;
|
||||
state.buf = buf;
|
||||
state.lenp = len;
|
||||
|
|
|
@ -263,6 +263,7 @@ PrefsDlg(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
|
|||
adjustForChoice( hDlg, pState );
|
||||
|
||||
ceDlgSetup( globals, hDlg );
|
||||
trapBackspaceKey( hDlg );
|
||||
|
||||
return TRUE;
|
||||
|
||||
|
@ -276,7 +277,14 @@ PrefsDlg(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
|
|||
case WM_VSCROLL:
|
||||
ceDoDlgScroll( globals, hDlg, wParam );
|
||||
break;
|
||||
|
||||
#ifdef _WIN32_WCE
|
||||
case WM_HOTKEY:
|
||||
if ( VK_TBACK == HIWORD(lParam) ) {
|
||||
SHSendBackToFocusWindow( message, wParam, lParam );
|
||||
return TRUE;
|
||||
}
|
||||
break;
|
||||
#endif
|
||||
case WM_NEXTDLGCTL:
|
||||
ceDoDlgFocusScroll( globals, hDlg, wParam, lParam );
|
||||
break;
|
||||
|
|
|
@ -20,11 +20,13 @@
|
|||
#include <windowsx.h>
|
||||
#include "stdafx.h"
|
||||
#include <commdlg.h>
|
||||
#include <aygshell.h>
|
||||
|
||||
#include "cemain.h"
|
||||
#include "cesvdgms.h"
|
||||
#include "ceutil.h"
|
||||
#include "cedebug.h"
|
||||
#include "debhacks.h"
|
||||
|
||||
typedef struct CeSaveGameNameState {
|
||||
CEAppGlobals* globals;
|
||||
|
@ -82,6 +84,7 @@ SaveNameDlg( HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam )
|
|||
state->inited = XP_FALSE;
|
||||
|
||||
ceDlgSetup( state->globals, hDlg );
|
||||
trapBackspaceKey( hDlg );
|
||||
|
||||
result = TRUE;
|
||||
} else {
|
||||
|
@ -93,6 +96,14 @@ SaveNameDlg( HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam )
|
|||
}
|
||||
|
||||
switch (message) {
|
||||
#ifdef _WIN32_WCE
|
||||
case WM_HOTKEY:
|
||||
if ( VK_TBACK == HIWORD(lParam) ) {
|
||||
SHSendBackToFocusWindow( message, wParam, lParam );
|
||||
result = TRUE;
|
||||
}
|
||||
break;
|
||||
#endif
|
||||
case WM_COMMAND:
|
||||
wid = LOWORD(wParam);
|
||||
switch( wid ) {
|
||||
|
|
|
@ -23,6 +23,7 @@
|
|||
#include "ceutil.h"
|
||||
#include "cedefines.h"
|
||||
#include "cedebug.h"
|
||||
#include "debhacks.h"
|
||||
|
||||
#define BUF_SIZE 128
|
||||
#define VPADDING 4
|
||||
|
@ -119,8 +120,10 @@ ceGetDlgItemNum( HWND hDlg, XP_U16 id )
|
|||
void
|
||||
ce_selectAndShow( HWND hDlg, XP_U16 resID, XP_U16 index )
|
||||
{
|
||||
SendDlgItemMessage( hDlg, resID, LB_SETCURSEL, index, 0 );
|
||||
SendDlgItemMessage( hDlg, resID, SETCURSEL, index, 0 );
|
||||
#ifdef _WIN32_WCE
|
||||
SendDlgItemMessage( hDlg, resID, LB_SETANCHORINDEX, index, 0 );
|
||||
#endif
|
||||
} /* ce_selectAndShow */
|
||||
|
||||
void
|
||||
|
@ -670,3 +673,14 @@ ceSetLeftSoftkey( CEAppGlobals* globals, XP_U16 newId )
|
|||
#endif
|
||||
}
|
||||
} /* ceSetLeftSoftkey */
|
||||
|
||||
#ifdef _WIN32_WCE
|
||||
void
|
||||
trapBackspaceKey( HWND hDlg )
|
||||
{
|
||||
/* Override back key so we can pass it to edit controls */
|
||||
SendMessage( SHFindMenuBar(hDlg), SHCMBM_OVERRIDEKEY, VK_TBACK,
|
||||
MAKELPARAM (SHMBOF_NODEFAULT | SHMBOF_NOTIFY,
|
||||
SHMBOF_NODEFAULT | SHMBOF_NOTIFY));
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -55,8 +55,11 @@ void ceDoDlgFocusScroll( CEAppGlobals* globals, HWND hDlg,
|
|||
WPARAM wParam, LPARAM lParam );
|
||||
#ifdef _WIN32_WCE
|
||||
void ceSizeIfFullscreen( CEAppGlobals* globals, HWND hWnd );
|
||||
void trapBackspaceKey( HWND hDlg );
|
||||
#else
|
||||
# define ceSizeIfFullscreen( globals, hWnd )
|
||||
# define trapBackspaceKey( hDlg )
|
||||
#endif
|
||||
|
||||
|
||||
#endif
|
||||
|
|
|
@ -67,6 +67,18 @@ BOOL DH(ResetEvent)(HANDLE);
|
|||
|
||||
#endif /* USE_RAW_MINGW */
|
||||
|
||||
|
||||
#ifdef _WIN32_WCE
|
||||
/* from http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=1733046&SiteID=1 */
|
||||
# define SHMBOF_NODEFAULT 0x00000001 // do not do default handling of this key
|
||||
# define SHMBOF_NOTIFY 0x00000002 // send us the WM_* messages for this key
|
||||
# define SHCMBM_OVERRIDEKEY (WM_USER + 403)
|
||||
|
||||
|
||||
# define VK_TBACK VK_ESCAPE
|
||||
#endif
|
||||
|
||||
|
||||
#if 0
|
||||
/* http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=1591512&SiteID=1 */
|
||||
#define IM_SPELL 0
|
||||
|
|
|
@ -81,7 +81,6 @@
|
|||
#define IDC_PICKMSG 1053
|
||||
#ifdef FEATURE_TRAY_EDIT
|
||||
# define IDC_CPICK 1054
|
||||
# define IDC_PICKALL 1055
|
||||
# define IDC_BACKUP 1056
|
||||
#endif
|
||||
#ifdef XWFEATURE_SEARCHLIMIT
|
||||
|
@ -171,6 +170,7 @@
|
|||
#define IDC_NPLAYERSUPDOWN 1115
|
||||
#define IDC_PHONIESUPDOWN 1116
|
||||
#define IDC_SVGM_UPDOWN 1117
|
||||
#define IDC_ASKBLANK_UPDOWN 1124
|
||||
|
||||
|
||||
#define IDC_SVGM_SELLAB 1118
|
||||
|
@ -231,17 +231,13 @@
|
|||
#define IDS_OK 40005
|
||||
#define IDS_ABOUT 40006
|
||||
|
||||
// Don't use the numbers after 4009: one string needs not to be there
|
||||
// to stop the progression in cedict.c
|
||||
#define IDS_DICTDIRS 40009
|
||||
|
||||
// Next default values for new objects
|
||||
//
|
||||
#ifdef APSTUDIO_INVOKED
|
||||
#ifndef APSTUDIO_READONLY_SYMBOLS
|
||||
#define _APS_NEXT_RESOURCE_VALUE 125
|
||||
#define _APS_NEXT_COMMAND_VALUE 40029
|
||||
#define _APS_NEXT_CONTROL_VALUE 1124
|
||||
#define _APS_NEXT_CONTROL_VALUE 1125
|
||||
#define _APS_NEXT_SYMED_VALUE 101
|
||||
#endif
|
||||
#endif
|
||||
|
|
|
@ -343,23 +343,33 @@ BEGIN
|
|||
#endif
|
||||
END
|
||||
|
||||
IDD_ASKBLANK DIALOG DISCARDABLE 0, 0, 131, 90
|
||||
IDD_ASKBLANK DIALOG DISCARDABLE 0, 0, 80, 90
|
||||
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | DS_CENTER
|
||||
CAPTION "Tile picker"
|
||||
FONT 8, "System"
|
||||
BEGIN
|
||||
DEFPUSHBUTTON "OK",IDOK,70,70,20,14
|
||||
LTEXT "Enter a letter for this blank tile.",IDC_BPICK,8,8,63,18
|
||||
LTEXT "Enter a letter for this blank tile.",IDC_BPICK,8,8,50,18
|
||||
#ifdef FEATURE_TRAY_EDIT
|
||||
PUSHBUTTON "Pick all!",IDC_PICKALL,8,70,39,14
|
||||
PUSHBUTTON "Del",IDC_BACKUP,48,70,18,14
|
||||
LTEXT "Pick a tile for your tray.",IDC_CPICK,8,8,63,18
|
||||
LTEXT "Pick a tile for your tray.",IDC_CPICK,8,8,50,18
|
||||
PUSHBUTTON "Put back",IDC_BACKUP,8,70,28,14
|
||||
|
||||
EDITTEXT IDC_PICKMSG,8,28,80,30,ES_MULTILINE | ES_READONLY
|
||||
|
||||
#endif
|
||||
LISTBOX BLANKFACE_LIST,100,5,25,83,LBS_NOINTEGRALHEIGHT |
|
||||
WS_VSCROLL | WS_TABSTOP
|
||||
|
||||
#ifdef _WIN32_WCE
|
||||
LISTBOX BLANKFACE_LIST,65,8,25,12,WS_TABSTOP
|
||||
CONTROL "", IDC_ASKBLANK_UPDOWN, UPDOWN_CLASS,
|
||||
UDS_AUTOBUDDY | UDS_HORZ | UDS_ALIGNRIGHT | UDS_WRAP |
|
||||
UDS_SETBUDDYINT | UDS_EXPANDABLE | UDS_NOSCROLL,
|
||||
0, 0, 0, 0
|
||||
#else
|
||||
COMBOBOX BLANKFACE_LIST,60,5,25,12,
|
||||
CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
|
||||
|
||||
DEFPUSHBUTTON "OK",IDOK,70,70,REPOS_BUTTON_WIDTH, BUTTON_HT
|
||||
PUSHBUTTON "Cancel",IDCANCEL,20,70,REPOS_BUTTON_WIDTH, BUTTON_HT
|
||||
#endif
|
||||
|
||||
END
|
||||
|
||||
#define SVGN_LEFT_COL 2
|
||||
|
@ -843,19 +853,12 @@ BEGIN
|
|||
IDS_DUMMY "--"
|
||||
IDS_CANCEL "Cancel"
|
||||
IDS_OK "Ok"
|
||||
IDS_ABOUT "Crosswords 4.2b2 (rev " SVN_REV ") "\
|
||||
IDS_ABOUT "Crosswords 4.2b3 (rev " SVN_REV ") "\
|
||||
"for PocketPC. Copyright 1998-2008 by "\
|
||||
"Eric House. This software is released under the GNU "\
|
||||
"Public License.\r\r"\
|
||||
"For dictionaries, a manual, or source code go to "\
|
||||
"http://xwords.sf.net or http://eehouse.org/xwords/."
|
||||
#ifdef _WIN32_WCE
|
||||
IDS_DICTDIRS "\\Program Files\\Crosswords"
|
||||
IDS_DICTDIRS+1 "\\SD Card\\Crosswords"
|
||||
IDS_DICTDIRS+2 "\\Storage Card\\Crosswords"
|
||||
#else
|
||||
IDS_DICTDIRS "."
|
||||
#endif
|
||||
END
|
||||
|
||||
#endif // English (U.S.) resources
|
||||
|
|
Loading…
Reference in a new issue