{
int x, y;
Boolean saveAnimate;
- static int second = 0, promotionChoice = 0;
+ static int second = 0, promotionChoice = 0, clearFlag = 0;
char promoChoice = NULLCHAR;
ChessSquare piece;
if (appData.highlightDragging) {
SetHighlights(fromX, fromY, -1, -1);
}
- }
+ } else fromX = fromY = -1;
return;
}
}
if (clickType == Release && x == fromX && y == fromY) {
DragPieceEnd(xPix, yPix); dragging = 0;
+ if(clearFlag) {
+ // a deferred attempt to click-click move an empty square on top of a piece
+ boards[currentMove][y][x] = EmptySquare;
+ ClearHighlights();
+ DrawPosition(FALSE, boards[currentMove]);
+ fromX = fromY = -1; clearFlag = 0;
+ return;
+ }
if (appData.animateDragging) {
/* Undo animation damage if any */
DrawPosition(FALSE, NULL);
return;
}
+ clearFlag = 0;
+
/* we now have a different from- and (possibly off-board) to-square */
/* Completed move */
toX = x;
toY = y;
saveAnimate = appData.animate;
if (clickType == Press) {
+ if(gameMode == EditPosition && boards[currentMove][fromY][fromX] == EmptySquare) {
+ // must be Edit Position mode with empty-square selected
+ fromX = x; fromY = y; DragPieceBegin(xPix, yPix); dragging = 1; // consider this a new attempt to drag
+ if(x >= BOARD_LEFT && x < BOARD_RGHT) clearFlag = 1; // and defer click-click move of empty-square to up-click
+ return;
+ }
/* Finish clickclick move */
if (appData.animate || appData.highlightLastMove) {
SetHighlights(fromX, fromY, toX, toY);
char buf[MSG_SIZ];
ChessProgramState *onmove;
char *bookHit = NULL;
+ static int stalling = 0;
if (appData.noChessProgram) return;
ResurrectChessProgram(); /* in case first program isn't running */
if(WaitForSecond(TwoMachinesEventIfReady)) return;
- DisplayMessage("", "");
- InitChessProgram(&second, FALSE);
- SendToProgram("force\n", &second);
if(first.lastPing != first.lastPong) { // [HGM] wait till we are sure first engine has set up position
+ DisplayMessage("", _("Waiting for first chess program"));
ScheduleDelayedEvent(TwoMachinesEvent, 10);
return;
}
+ if(!stalling) {
+ InitChessProgram(&second, FALSE);
+ SendToProgram("force\n", &second);
+ }
+ if(second.lastPing != second.lastPong) { // [HGM] second engine might have to reallocate hash
+ if(!stalling) DisplayMessage("", _("Waiting for second chess program"));
+ stalling = 1;
+ ScheduleDelayedEvent(TwoMachinesEvent, 10);
+ return;
+ }
+ stalling = 0;
+ DisplayMessage("", "");
if (startedFromSetupPosition) {
SendBoard(&second, backwardMostMove);
if (appData.debugMode) {