Blank session frame when the session stopped.
git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@233 3789f03b-4d11-0410-bbf8-ca57d06f2519
diff --git a/rfbplayer/rfbplayer.cxx b/rfbplayer/rfbplayer.cxx
index e96cd39..a8c4e38 100644
--- a/rfbplayer/rfbplayer.cxx
+++ b/rfbplayer/rfbplayer.cxx
@@ -226,7 +226,8 @@
seekMode(false), fileName(_fileName), lastPos(0), timeStatic(0),
speedEdit(0), posTrackBar(0), speedUpDown(0), acceptBell(_acceptBell),
rfbReader(0), sessionTimeMs(0), sliderDraging(false), sliderStepMs(0),
- loopPlayback(false), imageDataStartTime(0), rewindFlag(false) {
+ loopPlayback(false), imageDataStartTime(0), rewindFlag(false),
+ stopped(false) {
CTRL_BAR_HEIGHT = 28;
@@ -806,6 +807,10 @@
}
void RfbPlayer::processMsg() {
+ // Perform return if waitWhilePaused processed because
+ // rfbReader thread could receive the signal to close
+ if (waitWhilePaused()) return;
+
static long update_time = GetTickCount();
try {
if ((!isSeeking()) && ((GetTickCount() - update_time) > 250)
@@ -829,7 +834,8 @@
rewindFlag = true;
long seekOffset = max(getSeekOffset(), imageDataStartTime);
rewind();
- setPos(seekOffset);
+ if (!stopped) setPos(seekOffset);
+ else stopped = false;
updatePos(seekOffset);
rewindFlag = false;
} else {
@@ -948,6 +954,15 @@
return true;
}
+bool RfbPlayer::waitWhilePaused() {
+ bool result = false;
+ while(isPaused() && !isSeeking()) {
+ Sleep(20);
+ result = true;
+ }
+ return result;
+}
+
long RfbPlayer::calculateSessionTime(char *filename) {
FbsInputStream sessionFile(filename);
sessionFile.setTimeOffset(100000000);
@@ -1054,8 +1069,9 @@
}
void RfbPlayer::stopPlayback() {
- setPos(0);
+ stopped = true;
if (is) is->pausePlayback();
+ setPos(0);
tb.checkButton(ID_STOP, true);
tb.checkButton(ID_PLAY, false);
tb.checkButton(ID_PAUSE, false);