From 83d0f555a7dad1d410761ec89273d795f038860c Mon Sep 17 00:00:00 2001 From: H.G. Muller Date: Thu, 30 Jul 2009 00:19:37 -0700 Subject: [PATCH] changed click-click moves 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 | 12 ++++++++---- 1 files changed, 8 insertions(+), 4 deletions(-) diff --git a/xboard.c b/xboard.c index e014eba..05af22b 100644 --- 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) { -- 1.7.0.4