Fix click-click sweep-select
[xboard.git] / backend.c
index 7747844..71a795c 100644 (file)
--- a/backend.c
+++ b/backend.c
@@ -5399,8 +5399,8 @@ Sweep (int step)
        if(step && !(toggleFlag && Partner(&promoSweep))) promoSweep -= step;
        if(promoSweep == EmptySquare) promoSweep = BlackPawn; // wrap
        else if((int)promoSweep == -1) promoSweep = WhiteKing;
-       else if(promoSweep == BlackPawn && step < 0) promoSweep = WhitePawn;
-       else if(promoSweep == WhiteKing && step > 0) promoSweep = BlackKing;
+       else if(promoSweep == BlackPawn && step < 0 && !toggleFlag) promoSweep = WhitePawn;
+       else if(promoSweep == WhiteKing && step > 0 && !toggleFlag) promoSweep = BlackKing;
        if(!step) step = -1;
     } while(PieceToChar(promoSweep) == '.' || PieceToChar(promoSweep) == '~' || promoSweep == pawn ||
            !toggleFlag && PieceToChar(promoSweep) == '+' || // skip promoted versions of other
@@ -7519,7 +7519,7 @@ printf("to click %d,%d\n",x,y);
        toP = boards[currentMove][y][x];
        frc = appData.fischerCastling || gameInfo.variant == VariantSChess;
        if( (killX < 0 || x != fromX || y != fromY) && // [HGM] lion: do not interpret igui as deselect!
-           legal[y][x] == 0 && // if engine told we can move to here, do it even if own piece
+           marker[y][x] == 0 && // if engine told we can move to here, do it even if own piece
           ((WhitePawn <= fromP && fromP <= WhiteKing &&
             WhitePawn <= toP && toP <= WhiteKing &&
             !(fromP == WhiteKing && toP == WhiteRook && frc) &&
@@ -7574,7 +7574,7 @@ printf("A type=%d\n",clickType);
        return;
     }
 
-    if (clickType == Release && x == fromX && y == fromY && killX < 0) {
+    if (clickType == Release && x == fromX && y == fromY && killX < 0 && !sweepSelecting) {
        DragPieceEnd(xPix, yPix); dragging = 0;
        if(clearFlag) {
            // a deferred attempt to click-click move an empty square on top of a piece
@@ -7588,10 +7588,9 @@ printf("A type=%d\n",clickType);
            /* Undo animation damage if any */
            DrawPosition(FALSE, NULL);
        }
-       if (second || sweepSelecting) {
+       if (second) {
            /* Second up/down in same square; just abort move */
-           if(sweepSelecting) DrawPosition(FALSE, boards[currentMove]);
-           second = sweepSelecting = 0;
+           second = 0;
            fromX = fromY = -1;
            gatingPiece = EmptySquare;
            MarkTargetSquares(1);