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;
 }