Implement menu entry for forced refresh of screen.
git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@4392 3789f03b-4d11-0410-bbf8-ca57d06f2519
diff --git a/vncviewer/CConn.cxx b/vncviewer/CConn.cxx
index e903284..faf85cc 100644
--- a/vncviewer/CConn.cxx
+++ b/vncviewer/CConn.cxx
@@ -48,7 +48,8 @@
: serverHost(0), serverPort(0), sock(NULL), desktop(NULL),
currentEncoding(encodingTight), lastServerEncoding((unsigned int)-1),
formatChange(false), encodingChange(false),
- firstUpdate(true), pendingUpdate(false)
+ firstUpdate(true), pendingUpdate(false),
+ forceNonincremental(false)
{
setShared(::shared);
@@ -98,6 +99,14 @@
delete sock;
}
+void CConn::refreshFramebuffer()
+{
+ // FIXME: We cannot safely trigger an update request directly but must
+ // wait for the next update to arrive.
+ if (!formatChange)
+ forceNonincremental = true;
+}
+
// The RFB core is not properly asynchronous, so it calls this callback
// whenever it needs to block to wait for more data. Since FLTK is
// monitoring the socket, we just make sure FLTK gets to run.
@@ -442,9 +451,16 @@
desktop->setServerPF(pf);
cp.setPF(pf);
writer()->writeSetPixelFormat(pf);
+
+ forceNonincremental = true;
+
+ formatChange = false;
}
+
checkEncodings();
+
writer()->writeFramebufferUpdateRequest(Rect(0, 0, cp.width, cp.height),
- !formatChange);
- formatChange = false;
+ !forceNonincremental);
+
+ forceNonincremental = false;
}