]> source.dussan.org Git - tigervnc.git/commitdiff
[Bugfix] Fixed a problem with overloading x0vncserver by update requests, when video...
authorConstantin Kaplinsky <const@tightvnc.com>
Fri, 29 Aug 2008 11:33:46 +0000 (11:33 +0000)
committerConstantin Kaplinsky <const@tightvnc.com>
Fri, 29 Aug 2008 11:33:46 +0000 (11:33 +0000)
git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@2742 3789f03b-4d11-0410-bbf8-ca57d06f2519

common/rfb/VNCSConnectionST.cxx

index 024be01c039f50940099540324ece1f2e784b5bf..84da709eb43abd636c372bfbc8266c31db1c70f5 100644 (file)
@@ -127,6 +127,17 @@ void VNCSConnectionST::processMessages()
       processMsg();
     }
 
+    // If there were update requests, try to send a framebuffer update.
+    // We don't send updates immediately on requests for two reasons:
+    //   (1) If a video area is set, we don't want to send it on every
+    //       update request. We should gobble all the pending update
+    //       requests and send just one update.
+    //   (2) This way, we give higher priority to user actions such as
+    //       keyboard and pointer events.
+    if (!requested.is_empty()) {
+      writeFramebufferUpdate();
+    }
+
     if (!clientsReadyBefore && !requested.is_empty())
       server->desktop->framebufferUpdateRequest();
   } catch (rdr::EndOfStream&) {
@@ -469,6 +480,8 @@ void VNCSConnectionST::framebufferUpdateRequest(const Rect& r,bool incremental)
 
   SConnection::framebufferUpdateRequest(r, incremental);
 
+  // Just update the requested region.
+  // Framebuffer update will be sent a bit later, see processMessages().
   Region reqRgn(r);
   requested.assign_union(reqRgn);
 
@@ -477,8 +490,6 @@ void VNCSConnectionST::framebufferUpdateRequest(const Rect& r,bool incremental)
     updates.add_changed(reqRgn);
     server->comparer->add_changed(reqRgn);
   }
-
-  writeFramebufferUpdate();
 }
 
 void VNCSConnectionST::setVideoRectangle(const Rect& r)