Make switching between board windows absolute
authorH.G. Muller <h.g.muller@hccnet.nl>
Mon, 18 Feb 2013 08:59:48 +0000 (09:59 +0100)
committerH.G. Muller <h.g.muller@hccnet.nl>
Mon, 18 Feb 2013 08:59:48 +0000 (09:59 +0100)
Selecting the window in which to draw the board when the slave board for
-dualBoard was up was done by a toggle. For unknown reason this could cause
a situation where the drawing took place in the other window than the
intended one. The code is made more robust by explicitly specifying which
window to draw in, based on the partnerUp flag.

board.c
board.h
draw.c

diff --git a/board.c b/board.c
index 0becf9a..0941fc9 100644 (file)
--- a/board.c
+++ b/board.c
@@ -918,7 +918,7 @@ DrawPosition (int repaint, Board board)
        MarkMenuItem("View.Flip View", flipView);
     }
 
-    if(nr) { SlavePopUp(); SwitchWindow(); } // [HGM] popup board if not yet popped up, and switch drawing to it.
+    if(nr) { SlavePopUp(); SwitchWindow(0); } // [HGM] popup board if not yet popped up, and switch drawing to it.
 
     /*
      * It would be simpler to clear the window with XClearWindow()
@@ -1034,7 +1034,7 @@ DrawPosition (int repaint, Board board)
     }
 
     FlashDelay(0); // this flushes drawing queue;
-    if(nr) SwitchWindow();
+    if(nr) SwitchWindow(1);
 }
 
 /* [AS] Arrow highlighting support */
diff --git a/board.h b/board.h
index d5efc44..f6cca1e 100644 (file)
--- a/board.h
+++ b/board.h
@@ -92,7 +92,7 @@ void SetDragPiece P((AnimNr anr, ChessSquare piece));
 void DragPieceMove P((int x, int y));
 void DrawBorder P((int x, int y, int type, int odd));
 void FlashDelay P((int flash_delay));
-void SwitchWindow P((void));
+void SwitchWindow P((int main));
 
 extern int damage[2][BOARD_RANKS][BOARD_FILES];
 extern Option *currBoard;
diff --git a/draw.c b/draw.c
index 45aaf01..384ccfb 100644 (file)
--- a/draw.c
+++ b/draw.c
@@ -124,13 +124,10 @@ struct {
   int x1, x2, y1, y2;
 } gridSegments[BOARD_RANKS + BOARD_FILES + 2];
 
-static int dual = 0;
-
 void
-SwitchWindow ()
+SwitchWindow (int main)
 {
-    dual = !dual;
-    currBoard = (dual ? &mainOptions[W_BOARD] : &dualOptions[3]);
+    currBoard = (main ? &mainOptions[W_BOARD] : &dualOptions[3]);
     csBoardWindow = DRAWABLE(currBoard);
 }