Fix clock stop after dragging
authorH.G. Muller <h.g.muller@hccnet.nl>
Fri, 16 Mar 2012 13:47:25 +0000 (14:47 +0100)
committerH.G. Muller <h.g.muller@hccnet.nl>
Fri, 16 Mar 2012 13:47:25 +0000 (14:47 +0100)
DelayedDrag always cancelled the previous drag timeout event, even when
this was no longer pending because it had already taken place, and the
event ID was resused by some other timeout (usually a clock tick).

xboard.c

index 80db398..097cb85 100644 (file)
--- a/xboard.c
+++ b/xboard.c
@@ -4708,6 +4708,8 @@ CoDrag (Widget sh, WindowPlacement *wp)
     XtSetValues(sh, args, j);
 }
 
     XtSetValues(sh, args, j);
 }
 
+static XtIntervalId delayedDragID = 0;
+
 void
 DragProc ()
 {
 void
 DragProc ()
 {
@@ -4721,13 +4723,13 @@ DragProc ()
        if(GameListIsUp()) CoDrag(gameListShell, &wpGameList);
        wpMain = wpNew;
        XDrawPosition(boardWidget, True, NULL);
        if(GameListIsUp()) CoDrag(gameListShell, &wpGameList);
        wpMain = wpNew;
        XDrawPosition(boardWidget, True, NULL);
+       delayedDragID = 0; // now drag executed, make sure next DelayedDrag will not cancel timer event (which could now be used by other)
 }
 
 
 void
 DelayedDrag ()
 {
 }
 
 
 void
 DelayedDrag ()
 {
-    static XtIntervalId delayedDragID = 0;
     if(delayedDragID) XtRemoveTimeOut(delayedDragID); // cancel pending
     delayedDragID =
       XtAppAddTimeOut(appContext, 50, (XtTimerCallbackProc) DragProc, (XtPointer) 0); // and schedule new one 50 msec later
     if(delayedDragID) XtRemoveTimeOut(delayedDragID); // cancel pending
     delayedDragID =
       XtAppAddTimeOut(appContext, 50, (XtTimerCallbackProc) DragProc, (XtPointer) 0); // and schedule new one 50 msec later