Fix spurious undo at game start
authorH.G.Muller <hgm@hgm-xboard.(none)>
Thu, 14 Jan 2016 15:49:34 +0000 (16:49 +0100)
committerH.G.Muller <hgm@hgm-xboard.(none)>
Thu, 14 Jan 2016 15:49:34 +0000 (16:49 +0100)
commita83e12aca9f45c3dc2657feeed6b2d88040219d8
tree12766ce3c83eb4623724b570b00abb0dbe86cc44
parentb0a35cef0cbc3515748f83081884866caec9389e
Fix spurious undo at game start

For ping-supporting engines the logic in handling unexpected moves
is completely changed. Such moves can occur when an engine think is
interrupted by a 'force' command, which in many engines is only
processed after the think completes naturally with a move, and could
cross such a move anyway in engines that would abort the search promptly.
If the 'force' is the result of the user switching to EditGame mode,
such a move should be undone, if it occurs at game end or start,
the moves can be ignored, as the following 'new' will erase all memory
of them. So in EditGameEvent, if the engine was thinking, a flag is set
to indicate its upcoming move should be undone, and ping is sent after
'force'. The 'pong' response would arrive after the move (if any), and
clears the flag. In all other cases of ping imbalance, incoming moves
are ignored.
 While waiting for a pong after EditGameEvent the user interface is
frozen, and a message is displayed to keep the user quiet.
backend.c