]> source.dussan.org Git - tigervnc.git/commitdiff
Make Windows viewer behave like Unix viewer (send new FB update request immediately...
authorDRC <dcommander@users.sourceforge.net>
Thu, 10 Mar 2011 09:07:15 +0000 (09:07 +0000)
committerDRC <dcommander@users.sourceforge.net>
Thu, 10 Mar 2011 09:07:15 +0000 (09:07 +0000)
git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/branches/1_1@4350 3789f03b-4d11-0410-bbf8-ca57d06f2519

win/vncviewer/CConn.cxx
win/vncviewer/CConn.h
win/vncviewer/DesktopWindow.cxx

index 3585966ee0f7a233fef7531dac0decfa4515fdb3..d9966ee0ddfc211f900c04a682d5a7ec8aeec45e 100644 (file)
@@ -80,7 +80,7 @@ CConn::CConn()
   : window(0), sameMachine(false), encodingChange(false), formatChange(false), 
     lastUsedEncoding_(encodingRaw), sock(0), sockEvent(CreateEvent(0, TRUE, FALSE, 0)), 
     reverseConnection(false), requestUpdate(false), firstUpdate(true),
-    isClosed_(false) {
+    pendingUpdate(false), isClosed_(false) {
 }
 
 CConn::~CConn() {
@@ -184,11 +184,6 @@ CConn::displayChanged() {
   calculateFullColourPF();
 }
 
-void
-CConn::paintCompleted() {
-  // A repaint message has just completed - request next update if necessary
-  requestNewUpdate();
-}
 
 bool
 CConn::sysCommand(WPARAM wParam, LPARAM lParam) {
@@ -521,6 +516,16 @@ CConn::showOptionsDialog() {
 }
 
 
+void
+CConn::framebufferUpdateStart() {
+  if (!formatChange) {
+    pendingUpdate = true;
+    requestNewUpdate();
+  } else
+    pendingUpdate = false;
+}
+
+
 void
 CConn::framebufferUpdateEnd() {
   if (debugDelay != 0) {
@@ -571,6 +576,11 @@ CConn::framebufferUpdateEnd() {
     firstUpdate = false;
   }
 
+  // A format change prevented us from sending this before the update,
+  // so make sure to send it now.
+  if (formatChange && !pendingUpdate)
+    requestNewUpdate();
+
   if (options.autoSelect)
     autoSelectFormatAndEncoding();
 
@@ -662,6 +672,10 @@ CConn::requestNewUpdate() {
   if (!requestUpdate) return;
 
   if (formatChange) {
+
+    /* Catch incorrect requestNewUpdate calls */
+    assert(pendingUpdate == false);
+
     // Select the required pixel format
     if (options.fullColour) {
       window->setPF(fullColourPF);
index 62b131e1b15d3586a70f1db2ae8561ea781746b2..d3b3b20632faa42072253828787d29fcf6d55b39 100644 (file)
@@ -93,7 +93,7 @@ namespace rfb {
 
       // DesktopWindow::Callback interface
       void displayChanged();
-      void paintCompleted();
+      void paintCompleted() {}
       bool sysCommand(WPARAM wParam, LPARAM lParam);
       void closeWindow();
       void refreshMenu(bool enableSysCommands);
@@ -101,7 +101,7 @@ namespace rfb {
       // CConnection interface
       void setColourMapEntries(int firstColour, int nColours, rdr::U16* rgbs);
       void bell();
-      void framebufferUpdateStart() {}
+      void framebufferUpdateStart();
       void framebufferUpdateEnd();
       void setDesktopSize(int w, int h);
       void setExtendedDesktopSize(int reason, int result, int w, int h,
@@ -152,6 +152,7 @@ namespace rfb {
       bool reverseConnection;
       bool requestUpdate;
       bool firstUpdate;
+      bool pendingUpdate;
 
       // Debugging/logging
       std::list<Rect> debugRects;
index d60ff8fe500fc11e60150e4562db3797b7796b54..f55eb72eeed6cd7d626b856237ac47dda067ddb2 100644 (file)
@@ -725,9 +725,6 @@ DesktopWindow::processFrameMessage(UINT msg, WPARAM wParam, LPARAM lParam) {
       }
 
       EndPaint(frameHandle, &ps);
-
-      // - Notify the callback that a paint message has finished processing
-      callback->paintCompleted();
     }
     return 0;