changed click-click moves
authorH.G. Muller <h.g.muller@hccnet.nl>
Thu, 30 Jul 2009 07:19:37 +0000 (00:19 -0700)
committerArun Persaud <arun@nubati.net>
Thu, 30 Jul 2009 07:19:37 +0000 (00:19 -0700)
I got complaints about the way XBoard 4.4.0 handles click-click moves, in particular changing the selected piece after selecting King (for which I suppressed interference with FRC castling in a rather brutal way). People tell me it is very annoying that clicks sometimes don't work to select a piece. WinBoard uses refined logic in the back-end to handle this, but the XBoard front-end is not interfaced with that yet. (This would require a major rewrite of the mouse handler.)

This temporary patch suppresses this behavior in all variants that do not support Fischer castling, and even there only exhibit it for Rook-after-King selection (which will be interpreted as an attempt to enter a castling move as K x own R).

xboard.c

index e014eba..05af22b 100644 (file)
--- a/xboard.c
+++ b/xboard.c
@@ -5144,14 +5144,18 @@ void HandleUserMove(w, event, prms, nprms)
        x >= 0 && y >= 0) {
        ChessSquare fromP;
        ChessSquare toP;
+       int frc;
 
        /* Check if clicking again on the same color piece */
        fromP = boards[currentMove][fromY][fromX];
        toP = boards[currentMove][y][x];
-       if ((WhitePawn <= fromP && fromP < WhiteKing && // [HGM] this test should go, as UserMoveTest now does it.
-            WhitePawn <= toP && toP <= WhiteKing) ||   //       For now I made it less critical by exempting King
-           (BlackPawn <= fromP && fromP < BlackKing && //       moves, to not interfere with FRC castlings.
-            BlackPawn <= toP && toP <= BlackKing)) {
+       frc = gameInfo.variant == VariantFischeRandom || gameInfo.variant == VariantCapaRandom;
+       if ((WhitePawn <= fromP && fromP <= WhiteKing && // [HGM] this test should go, as UserMoveTest now does it.
+            WhitePawn <= toP && toP <= WhiteKing &&
+            !(fromP == WhiteKing && toP == WhiteRook && frc)) ||   
+           (BlackPawn <= fromP && fromP <= BlackKing && 
+            BlackPawn <= toP && toP <= BlackKing &&
+            !(fromP == BlackKing && toP == BlackRook && frc))) {
            /* Clicked again on same color piece -- changed his mind */
            second = (x == fromX && y == fromY);
            if (appData.highlightDragging) {