summaryrefslogtreecommitdiffstats
path: root/common
diff options
context:
space:
mode:
authorConstantin Kaplinsky <const@tightvnc.com>2008-06-13 18:07:53 +0000
committerConstantin Kaplinsky <const@tightvnc.com>2008-06-13 18:07:53 +0000
commit6970b2d8b61a78a9d9b7549269096b8f025a8b44 (patch)
treefe3da30ae3012fdeb0422df77808bbf46c260a89 /common
parenta77e818d9b4db8794b7a051118a0542de660a857 (diff)
downloadtigervnc-6970b2d8b61a78a9d9b7549269096b8f025a8b44.tar.gz
tigervnc-6970b2d8b61a78a9d9b7549269096b8f025a8b44.zip
Restored the functionality of the VideoPriority parameter. This time, it
should work correctly even over slow networks, when update requests go less frequently than polling cycles. This version does not give any special meaning to the value 0, it is equivalent to 1. git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@2584 3789f03b-4d11-0410-bbf8-ca57d06f2519
Diffstat (limited to 'common')
-rw-r--r--common/rfb/ServerCore.cxx7
-rw-r--r--common/rfb/ServerCore.h3
-rw-r--r--common/rfb/UpdateTracker.h5
-rw-r--r--common/rfb/VNCSConnectionST.cxx8
-rw-r--r--common/rfb/VNCServerST.cxx16
-rw-r--r--common/rfb/VNCServerST.h1
6 files changed, 39 insertions, 1 deletions
diff --git a/common/rfb/ServerCore.cxx b/common/rfb/ServerCore.cxx
index 750daae2..19b8fee4 100644
--- a/common/rfb/ServerCore.cxx
+++ b/common/rfb/ServerCore.cxx
@@ -92,3 +92,10 @@ rfb::BoolParameter rfb::Server::queryConnect
("QueryConnect",
"Prompt the local user to accept or reject incoming connections.",
false);
+
+// TightVNC-specific parameters
+// FIXME: Disable special video handling when this parameter is 0.
+rfb::IntParameter rfb::Server::videoPriority
+("VideoPriority",
+ "Priority of sending updates for video area (0..8)",
+ 0, 0, 8);
diff --git a/common/rfb/ServerCore.h b/common/rfb/ServerCore.h
index 68d7b74b..85d4e902 100644
--- a/common/rfb/ServerCore.h
+++ b/common/rfb/ServerCore.h
@@ -48,6 +48,9 @@ namespace rfb {
static BoolParameter sendCutText;
static BoolParameter queryConnect;
+ // TightVNC-specific parameters
+ static IntParameter videoPriority;
+
};
};
diff --git a/common/rfb/UpdateTracker.h b/common/rfb/UpdateTracker.h
index b6a7d748..9cd99ab1 100644
--- a/common/rfb/UpdateTracker.h
+++ b/common/rfb/UpdateTracker.h
@@ -85,6 +85,11 @@ namespace rfb {
// FIXME: Provide getUpdateInfo() with no clipping, for better efficiency.
virtual void getUpdateInfo(UpdateInfo* info, const Region& cliprgn);
+ // Get coordinates of the video rectangle
+ virtual const Rect& getVideoArea() const {
+ return video_area;
+ }
+
// Copy the contained updates to another tracker
virtual void copyTo(UpdateTracker* to) const;
diff --git a/common/rfb/VNCSConnectionST.cxx b/common/rfb/VNCSConnectionST.cxx
index 95b99fdd..a9c59f3e 100644
--- a/common/rfb/VNCSConnectionST.cxx
+++ b/common/rfb/VNCSConnectionST.cxx
@@ -541,7 +541,13 @@ void VNCSConnectionST::writeFramebufferUpdate()
updates.enable_copyrect(cp.useCopyRect);
- server->checkUpdate();
+ static int counter = 1;
+ if (--counter > 0) {
+ server->checkVideoUpdate();
+ } else {
+ counter = rfb::Server::videoPriority;
+ server->checkUpdate();
+ }
// Get the lists of updates. Prior to exporting the data to the `ui' object,
// getUpdateInfo() will normalize the `updates' object such way that its
diff --git a/common/rfb/VNCServerST.cxx b/common/rfb/VNCServerST.cxx
index 93f947cf..dc6c7096 100644
--- a/common/rfb/VNCServerST.cxx
+++ b/common/rfb/VNCServerST.cxx
@@ -507,6 +507,22 @@ void VNCServerST::checkUpdate()
comparer->clear();
}
+void VNCServerST::checkVideoUpdate()
+{
+ const Rect &videoRect = comparer->getVideoArea();
+ Region videoRegion(videoRect);
+
+ if (!videoRegion.is_empty()) {
+ pb->grabRegion(videoRegion);
+
+ std::list<VNCSConnectionST*>::iterator ci, ci_next;
+ for (ci = clients.begin(); ci != clients.end(); ci = ci_next) {
+ ci_next = ci; ci_next++;
+ (*ci)->set_video_area(videoRect);
+ }
+ }
+}
+
void VNCServerST::getConnInfo(ListConnInfo * listConn)
{
listConn->Clear();
diff --git a/common/rfb/VNCServerST.h b/common/rfb/VNCServerST.h
index 81ad4ecb..213f6b1f 100644
--- a/common/rfb/VNCServerST.h
+++ b/common/rfb/VNCServerST.h
@@ -238,6 +238,7 @@ namespace rfb {
bool needRenderedCursor();
void checkUpdate();
+ void checkVideoUpdate();
SSecurityFactory* securityFactory;
QueryConnectionHandler* queryConnectionHandler;