Added the possibility to interrupt delay between the buffer updates.
It is useful when stop, close or quit is performing.


git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@234 3789f03b-4d11-0410-bbf8-ca57d06f2519
diff --git a/rfbplayer/FbsInputStream.cxx b/rfbplayer/FbsInputStream.cxx
index 4b5da6f..a173beb 100644
--- a/rfbplayer/FbsInputStream.cxx
+++ b/rfbplayer/FbsInputStream.cxx
@@ -36,6 +36,8 @@
   seekBackwards = false;
   paused        = false;
 
+  interruptDelay = false;
+
   fbsFile = fopen(FileName, "rb");
   if (fbsFile == NULL) {
     char *msg = new char[12 + sizeof(FileName)];
@@ -142,14 +144,15 @@
     }
   }
 
-  while (true) {
+  while (!interruptDelay) {
     long timeDiff = startTime + timeOffset - GetTickCount();
     if (timeDiff <= 0) {
 	    break;
     }
-    Sleep(timeDiff);
+    Sleep(min(20, timeDiff));
     waitWhilePaused();
   }
+  interruptDelay = false;
 
   return nItems;
 }
@@ -192,6 +195,10 @@
   }
 }
 
+void FbsInputStream::interruptFrameDelay() {
+  interruptDelay = true;
+}
+
 //
 // Methods providing additional functionality.
 //
diff --git a/rfbplayer/FbsInputStream.h b/rfbplayer/FbsInputStream.h
index a072b7f..9649273 100644
--- a/rfbplayer/FbsInputStream.h
+++ b/rfbplayer/FbsInputStream.h
@@ -37,6 +37,7 @@
     bool isPaused();
     void pausePlayback();
     void resumePlayback();
+    void interruptFrameDelay();
     void close();
     int  pos();
 
@@ -49,6 +50,7 @@
     double playbackSpeed;
     bool seekBackwards;
     bool paused;
+    bool interruptDelay;
 
     FILE  *fbsFile;
 
diff --git a/rfbplayer/RfbProto.h b/rfbplayer/RfbProto.h
index ca88738..613d742 100644
--- a/rfbplayer/RfbProto.h
+++ b/rfbplayer/RfbProto.h
@@ -35,6 +35,7 @@
 
     void newSession(char *filename);
     void initialiseProtocol();
+    void interruptFrameDelay() { is->interruptFrameDelay(); };
     const rdr::InStream* getInStream() { return is; }
 
     virtual void processMsg();
diff --git a/rfbplayer/rfbSessionReader.h b/rfbplayer/rfbSessionReader.h
index acf9188..115b1d3 100644
--- a/rfbplayer/rfbSessionReader.h
+++ b/rfbplayer/rfbSessionReader.h
@@ -29,6 +29,7 @@
   rfbSessionReader(RfbProto *_rfbSession) {
     rfbSession = _rfbSession;
     fStop = false;
+    rfbSession->interruptFrameDelay();
   };
   
   ~rfbSessionReader() {
diff --git a/rfbplayer/rfbplayer.cxx b/rfbplayer/rfbplayer.cxx
index a8c4e38..b2943bd 100644
--- a/rfbplayer/rfbplayer.cxx
+++ b/rfbplayer/rfbplayer.cxx
@@ -1070,8 +1070,11 @@
 
 void RfbPlayer::stopPlayback() {
   stopped = true;
-  if (is) is->pausePlayback();
   setPos(0);
+  if (is) { 
+    is->pausePlayback();
+    is->interruptFrameDelay();
+  }
   tb.checkButton(ID_STOP, true);
   tb.checkButton(ID_PLAY, false);
   tb.checkButton(ID_PAUSE, false);