Add key bindings for loading next/previous game of list
authorH.G. Muller <h.g.muller@hccnet.nl>
Mon, 8 Aug 2011 08:31:24 +0000 (10:31 +0200)
committerH.G. Muller <h.g.muller@hccnet.nl>
Mon, 8 Aug 2011 08:31:24 +0000 (10:31 +0200)
These bindings are set both for the game list and the board window.
To make them useful, focus has to be transferred to the board widget
after loading (it tends to transfer to the tags window), which now
seems to work, but not always. From the game list the shellWidget
seems to get focus rather than the board, which is bad as it is not
sensitive to the key bindings.

xboard.c
xgamelist.c

index 9e300b0..51c169e 100644 (file)
--- a/xboard.c
+++ b/xboard.c
@@ -1051,6 +1051,8 @@ char globalTranslations[] =
    :Ctrl<Key>o: LoadGameProc() \n \
    :Meta<Key>Next: LoadNextGameProc() \n \
    :Meta<Key>Prior: LoadPrevGameProc() \n \
+   :Ctrl<Key>Down: LoadSelectedProc(3) \n \
+   :Ctrl<Key>Up: LoadSelectedProc(-3) \n \
    :Ctrl<Key>s: SaveGameProc() \n \
    :Ctrl<Key>c: CopyGameProc() \n \
    :Ctrl<Key>v: PasteGameProc() \n \
index 2d3ce02..abccb04 100644 (file)
@@ -101,6 +101,8 @@ char gameListTranslations[] =
   "<Btn1Up>(2): LoadSelectedProc(0) \n \
    <Key>Home: LoadSelectedProc(-2) \n \
    <Key>End: LoadSelectedProc(2) \n \
+   Ctrl<Key>Up: LoadSelectedProc(-3) \n \
+   Ctrl<Key>Down: LoadSelectedProc(3) \n \
    <Key>Up: LoadSelectedProc(-1) \n \
    <Key>Down: LoadSelectedProc(1) \n \
    <Key>Left: LoadSelectedProc(-1) \n \
@@ -570,18 +572,22 @@ LoadSelectedProc(w, event, prms, nprms)
     }
 
     if(direction != 0) {
+       int doLoad = abs(direction) > 2;
+       if(doLoad) direction /= 3;
        index += direction;
        if(direction == -2) index = 0;
        if(direction == 2) index = listLength-1;
        if(index < 0 || index >= listLength) return;
        XawListHighlight(listwidg, index);
-       return;
+       if(!doLoad) return;
     }
     index = atoi(list[index])-1; // [HGM] filter: read true index from sequence nr of line
     if (cmailMsgLoaded) {
        CmailLoadGame(glc->fp, index + 1, glc->filename, True);
     } else {
        LoadGame(glc->fp, index + 1, glc->filename, True);
+       XSync(xDisplay, False);
+       XSetInputFocus(xDisplay, XtWindow(boardWidget), RevertToPointerRoot, CurrentTime);
     }
 }