VNCServerST: Allow unsetting pixel buffer.
Originally calling VNCServertST::setPixelBuffer(PixelBuffer* pb_) with pb_=0 would do nothing.
With this change pb will be set to 0 and deferred update timer will be stopped.
diff --git a/common/rfb/VNCServerST.cxx b/common/rfb/VNCServerST.cxx
index fc649fa..0008dc4 100644
--- a/common/rfb/VNCServerST.cxx
+++ b/common/rfb/VNCServerST.cxx
@@ -158,6 +158,7 @@
slog.debug("no authenticated clients - stopping desktop");
desktopStarted = false;
desktop->stop();
+ stopFrameClock();
}
if (comparer)
@@ -314,8 +315,11 @@
screenLayout = layout;
if (!pb) {
+ screenLayout = ScreenSet();
+
if (desktopStarted)
throw Exception("setPixelBuffer: null PixelBuffer when desktopStarted?");
+
return;
}
@@ -338,18 +342,10 @@
void VNCServerST::setPixelBuffer(PixelBuffer* pb_)
{
- ScreenSet layout;
-
- if (!pb_) {
- if (desktopStarted)
- throw Exception("setPixelBuffer: null PixelBuffer when desktopStarted?");
- return;
- }
-
- layout = screenLayout;
+ ScreenSet layout = screenLayout;
// Check that the screen layout is still valid
- if (!layout.validate(pb_->width(), pb_->height())) {
+ if (pb_ && !layout.validate(pb_->width(), pb_->height())) {
Rect fbRect;
ScreenSet::iterator iter, iter_next;