mirror of
git://xwords.git.sourceforge.net/gitroot/xwords/xwords
synced 2025-01-16 15:41:16 +01:00
add palm_util_notifyFocusChange to handle focus transitions away from
xplat code
This commit is contained in:
parent
594c48fce6
commit
211271d6be
1 changed files with 92 additions and 11 deletions
103
palm/palmmain.c
103
palm/palmmain.c
|
@ -42,6 +42,8 @@
|
||||||
#include "xwords4defines.h"
|
#include "xwords4defines.h"
|
||||||
#include "palmmain.h"
|
#include "palmmain.h"
|
||||||
#include "newgame.h"
|
#include "newgame.h"
|
||||||
|
#include "palmdbg.h"
|
||||||
|
#include "dbgutil.h"
|
||||||
#include "dictui.h"
|
#include "dictui.h"
|
||||||
#include "dictlist.h"
|
#include "dictlist.h"
|
||||||
#include "palmutil.h"
|
#include "palmutil.h"
|
||||||
|
@ -154,6 +156,11 @@ static MemHandle findXWPrefsRsrc( PalmAppGlobals* globals, UInt32 resType,
|
||||||
static void palm_util_engineStarting( XW_UtilCtxt* uc, XP_U16 nBlanks );
|
static void palm_util_engineStarting( XW_UtilCtxt* uc, XP_U16 nBlanks );
|
||||||
static void palm_util_engineStopping( XW_UtilCtxt* uc );
|
static void palm_util_engineStopping( XW_UtilCtxt* uc );
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef XWFEATURE_FIVEWAY
|
||||||
|
static void palm_util_notifyFocusChange( XW_UtilCtxt* uc, BoardObjectType cur,
|
||||||
|
XP_Key key, BoardObjectType* next );
|
||||||
|
#endif
|
||||||
|
|
||||||
static void initAndStartBoard( PalmAppGlobals* globals, XP_Bool newGame );
|
static void initAndStartBoard( PalmAppGlobals* globals, XP_Bool newGame );
|
||||||
|
|
||||||
/*-------------------------------- Globals ---------------------------------*/
|
/*-------------------------------- Globals ---------------------------------*/
|
||||||
|
@ -617,6 +624,9 @@ initUtilFuncs( PalmAppGlobals* globals )
|
||||||
vtable->m_util_engineStarting = palm_util_engineStarting;
|
vtable->m_util_engineStarting = palm_util_engineStarting;
|
||||||
vtable->m_util_engineStopping = palm_util_engineStopping;
|
vtable->m_util_engineStopping = palm_util_engineStopping;
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef XWFEATURE_FIVEWAY
|
||||||
|
vtable->m_util_notifyFocusChange = palm_util_notifyFocusChange;
|
||||||
|
#endif
|
||||||
} /* initUtilFuncs */
|
} /* initUtilFuncs */
|
||||||
|
|
||||||
#ifdef COLOR_SUPPORT
|
#ifdef COLOR_SUPPORT
|
||||||
|
@ -2035,17 +2045,20 @@ hresRect( PalmAppGlobals* globals, RectangleType* r )
|
||||||
|
|
||||||
#ifdef XWFEATURE_FIVEWAY
|
#ifdef XWFEATURE_FIVEWAY
|
||||||
static XP_Bool
|
static XP_Bool
|
||||||
handleChangeFocus( PalmAppGlobals* globals, const EventType* event,
|
handleFocusEvent( PalmAppGlobals* globals, const EventType* event,
|
||||||
XP_Bool* drawP )
|
XP_Bool* drawP )
|
||||||
{
|
{
|
||||||
XP_Bool handled = XP_FALSE;
|
XP_Bool handled = XP_FALSE;
|
||||||
XP_Bool redraw = XP_FALSE;
|
XP_Bool redraw = XP_FALSE;
|
||||||
XP_U16 objectID = event->data.frmObjectFocusTake.objectID;
|
XP_U16 objectID = event->data.frmObjectFocusTake.objectID;
|
||||||
|
XP_Bool take;
|
||||||
|
|
||||||
XP_ASSERT( &event->data.frmObjectFocusTake.objectID
|
XP_ASSERT( &event->data.frmObjectFocusTake.objectID
|
||||||
== &event->data.frmObjectFocusLost.objectID );
|
== &event->data.frmObjectFocusLost.objectID );
|
||||||
|
take = event->eType == frmObjectFocusTakeEvent;
|
||||||
|
|
||||||
/* XP_LOGF( "%s(%d,%s)", __FUNCTION__, objectID, */
|
/* XP_LOGF( "%s(%s,%s)", __FUNCTION__, frmObjId_2str(objectID), */
|
||||||
/* (event->eType == frmObjectFocusTakeEvent? "take":"lost") ); */
|
/* (take? "take":"lost") ); */
|
||||||
|
|
||||||
switch ( objectID ) {
|
switch ( objectID ) {
|
||||||
case XW_BOARD_GADGET_ID:
|
case XW_BOARD_GADGET_ID:
|
||||||
|
@ -2063,7 +2076,6 @@ handleChangeFocus( PalmAppGlobals* globals, const EventType* event,
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( handled ) {
|
if ( handled ) {
|
||||||
XP_Bool take = event->eType == frmObjectFocusTakeEvent;
|
|
||||||
BoardObjectType typ = (objectID - XW_BOARD_GADGET_ID) + OBJ_BOARD;
|
BoardObjectType typ = (objectID - XW_BOARD_GADGET_ID) + OBJ_BOARD;
|
||||||
*drawP = board_focusChanged( globals->game.board, typ, take );
|
*drawP = board_focusChanged( globals->game.board, typ, take );
|
||||||
if ( take ) {
|
if ( take ) {
|
||||||
|
@ -2077,15 +2089,14 @@ handleChangeFocus( PalmAppGlobals* globals, const EventType* event,
|
||||||
}
|
}
|
||||||
|
|
||||||
return handled;
|
return handled;
|
||||||
} /* handleChangeFocus */
|
} /* handleFocusEvent */
|
||||||
|
|
||||||
static void
|
static void
|
||||||
checkSetFocus( PalmAppGlobals* globals )
|
checkSetFocus( PalmAppGlobals* globals, BoardObjectType typ )
|
||||||
{
|
{
|
||||||
if ( globals->hasFiveWay ) {
|
if ( globals->hasFiveWay ) {
|
||||||
BoardObjectType typ = board_getFocusOwner( globals->game.board );
|
|
||||||
XP_U16 objectID = XW_BOARD_GADGET_ID + (typ - OBJ_BOARD);
|
XP_U16 objectID = XW_BOARD_GADGET_ID + (typ - OBJ_BOARD);
|
||||||
XP_LOGF( "%s: FrmSetFocus(%d)", __FUNCTION__, objectID );
|
/* XP_LOGF( "%s: FrmSetFocus(%s)", __FUNCTION__, frmObjId_2str(objectID) ); */
|
||||||
FrmSetFocus( globals->mainForm,
|
FrmSetFocus( globals->mainForm,
|
||||||
FrmGetObjectIndex( globals->mainForm, objectID ) );
|
FrmGetObjectIndex( globals->mainForm, objectID ) );
|
||||||
}
|
}
|
||||||
|
@ -2512,7 +2523,7 @@ mainViewHandleEvent( EventPtr event )
|
||||||
case frmObjectFocusTakeEvent:
|
case frmObjectFocusTakeEvent:
|
||||||
case frmObjectFocusLostEvent:
|
case frmObjectFocusLostEvent:
|
||||||
handled = globals->hasFiveWay
|
handled = globals->hasFiveWay
|
||||||
&& handleChangeFocus( globals, event, &draw );
|
&& handleFocusEvent( globals, event, &draw );
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -2569,7 +2580,8 @@ mainViewHandleEvent( EventPtr event )
|
||||||
draw = board_handleKey( globals->game.board, xpkey );
|
draw = board_handleKey( globals->game.board, xpkey );
|
||||||
#ifdef XWFEATURE_FIVEWAY
|
#ifdef XWFEATURE_FIVEWAY
|
||||||
if ( xpkey == XP_FOCUSCHANGE_KEY ) {
|
if ( xpkey == XP_FOCUSCHANGE_KEY ) {
|
||||||
checkSetFocus( globals );
|
checkSetFocus( globals,
|
||||||
|
board_getFocusOwner( globals->game.board ) );
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
@ -3682,3 +3694,72 @@ palm_util_engineStopping( XW_UtilCtxt* uc )
|
||||||
}
|
}
|
||||||
} /* palm_util_engineStopping */
|
} /* palm_util_engineStopping */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef XWFEATURE_FIVEWAY
|
||||||
|
static void
|
||||||
|
palm_util_notifyFocusChange( XW_UtilCtxt* uc, BoardObjectType cur,
|
||||||
|
XP_Key key, BoardObjectType* nextP )
|
||||||
|
{
|
||||||
|
PalmAppGlobals* globals = (PalmAppGlobals*)uc->closure;
|
||||||
|
|
||||||
|
if ( !globals->hasFiveWay ) {
|
||||||
|
*nextP = cur;
|
||||||
|
} else {
|
||||||
|
XP_U16 nextID = 0;
|
||||||
|
BoardObjectType nxt = OBJ_NONE;
|
||||||
|
XP_Bool forward = key == XP_CURSOR_KEY_DOWN
|
||||||
|
|| key == XP_CURSOR_KEY_RIGHT;
|
||||||
|
XW_TrayVisState state;
|
||||||
|
state = board_getTrayVisState( globals->game.board );
|
||||||
|
|
||||||
|
switch( cur ) {
|
||||||
|
case OBJ_NONE: /* hi compiler */
|
||||||
|
XP_ASSERT(0);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case OBJ_SCORE:
|
||||||
|
if ( forward ) {
|
||||||
|
nxt = OBJ_BOARD;
|
||||||
|
} else {
|
||||||
|
nextID = state == TRAY_REVEALED?
|
||||||
|
XW_MAIN_DONE_BUTTON_ID : XW_MAIN_HIDE_BUTTON_ID;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case OBJ_BOARD:
|
||||||
|
if ( forward ) {
|
||||||
|
nextID = XW_MAIN_FLIP_BUTTON_ID;
|
||||||
|
} else {
|
||||||
|
nxt = OBJ_SCORE;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case OBJ_TRAY:
|
||||||
|
if ( forward ) {
|
||||||
|
nextID = XW_MAIN_HIDE_BUTTON_ID;
|
||||||
|
} else {
|
||||||
|
nextID = state == TRAY_REVEALED?
|
||||||
|
XW_MAIN_HINT_BUTTON_ID : XW_MAIN_VALUE_BUTTON_ID;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
*nextP = nxt;
|
||||||
|
|
||||||
|
if ( nxt != OBJ_NONE ) {
|
||||||
|
XP_ASSERT( nextID == 0 );
|
||||||
|
checkSetFocus( globals, nxt );
|
||||||
|
} else if ( nextID != 0 ) {
|
||||||
|
FormPtr form = globals->mainForm;
|
||||||
|
RectangleType rect;
|
||||||
|
XP_U16 index = FrmGetObjectIndex( form, nextID );
|
||||||
|
FrmSetFocus( form, index );
|
||||||
|
|
||||||
|
getObjectBounds( nextID, &rect );
|
||||||
|
(void)HsNavDrawFocusRing( form, nextID, 0, &rect,
|
||||||
|
hsNavFocusRingStyleObjectTypeDefault,
|
||||||
|
false );
|
||||||
|
} else {
|
||||||
|
XP_ASSERT(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} /* palm_util_notifyFocusChange */
|
||||||
|
#endif
|
||||||
|
|
Loading…
Reference in a new issue