X-Git-Url: http://winboard.nl/cgi-bin?a=blobdiff_plain;f=backend.c;h=8545cde1970c1f005c24a787db3cf996cb9a4b39;hb=d789fa10ca55a4a7ca9e4ed35eb38d3f25d1f09b;hp=c2a5bfcd6dc2d36d7cff54942f39d048271d0e79;hpb=adbd00423d43ae48eaab4bb21183284c93d6b20b;p=xboard.git diff --git a/backend.c b/backend.c index c2a5bfc..8545cde 100644 --- a/backend.c +++ b/backend.c @@ -5395,6 +5395,7 @@ Partner (ChessSquare *p) { // change piece into promotion partner if one shogi-promotes to the other ChessSquare partner = promoPartner[*p]; if(PieceToChar(*p) != '+' && PieceToChar(partner) != '+') return 0; + if(PieceToChar(*p) == '+') partner = boards[currentMove][fromY][fromX]; *p = partner; return 1; } @@ -6058,7 +6059,10 @@ SetCharTableEsc (unsigned char *table, const char * map, char * escapes) for(p=0; p= 0 && toY >= 0) { if(!appData.pieceMenu && toX == fromX && toY == fromY && boards[0][rf][ff] != EmptySquare) { - ChessSquare q, p = boards[0][rf][ff]; - if(p >= BlackPawn) p = BLACK_TO_WHITE p; - if(CHUPROMOTED(p) < BlackPawn) p = q = CHUPROMOTED(boards[0][rf][ff]); - else p = CHUDEMOTED (q = boards[0][rf][ff]); - if(PieceToChar(q) == '+') gatingPiece = p; + ChessSquare p = boards[0][rf][ff]; + if(PieceToChar(p) == '+') gatingPiece = CHUDEMOTED(p); else + if(PieceToChar(CHUPROMOTED(p)) =='+') gatingPiece = CHUPROMOTED(p); } boards[0][toY][toX] = boards[0][fromY][fromX]; if(fromX == BOARD_LEFT-2) { // handle 'moves' out of holdings @@ -7091,6 +7093,7 @@ UserMoveEvent(int fromX, int fromY, int toX, int toY, int promoChar) } } else boards[0][fromY][fromX] = gatingPiece; + ClearHighlights(); DrawPosition(FALSE, boards[currentMove]); return; } @@ -7788,6 +7791,8 @@ LeftClick (ClickType clickType, int xPix, int yPix) ClearHighlights(); } #endif + if(PieceToChar(CHUPROMOTED(boards[currentMove][fromY][fromX])) == '+') + defaultPromoChoice = CHUPROMOTED(boards[currentMove][fromY][fromX]); if(gameInfo.variant == VariantChuChess && piece != WhitePawn && piece != BlackPawn) defaultPromoChoice = piece; if(marker[y][x] == 5) { // [HGM] lion: this was the release of a to-click or drag on a cyan square dragging *= 2; // flag button-less dragging if we are dragging