aboutsummaryrefslogtreecommitdiffstats
path: root/vncviewer/CConn.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'vncviewer/CConn.cxx')
-rw-r--r--vncviewer/CConn.cxx26
1 files changed, 19 insertions, 7 deletions
diff --git a/vncviewer/CConn.cxx b/vncviewer/CConn.cxx
index 4cc09f22..fbd9a8ed 100644
--- a/vncviewer/CConn.cxx
+++ b/vncviewer/CConn.cxx
@@ -72,7 +72,7 @@ CConn::CConn(const char* vncServerName)
pendingPFChange(false),
currentEncoding(encodingTight), lastServerEncoding((unsigned int)-1),
formatChange(false), encodingChange(false),
- firstUpdate(true), pendingUpdate(false),
+ firstUpdate(true), pendingUpdate(false), continuousUpdates(false),
forceNonincremental(true), supportsSyncFence(false)
{
setShared(::shared);
@@ -306,8 +306,8 @@ void CConn::framebufferUpdateEnd()
if (firstUpdate) {
int width, height;
- // We need fences to make extra update requests "safe".
- // See fence() for the next step.
+ // We need fences to make extra update requests and continuous
+ // updates "safe". See fence() for the next step.
if (cp.supportsFence)
writer()->writeFence(fenceFlagRequest | fenceFlagSyncNext, 0, NULL);
@@ -448,8 +448,15 @@ void CConn::fence(rdr::U32 flags, unsigned len, const char data[])
if (len == 0) {
// Initial probe
- if (flags & fenceFlagSyncNext)
+ if (flags & fenceFlagSyncNext) {
supportsSyncFence = true;
+
+ if (cp.supportsContinuousUpdates) {
+ vlog.info(_("Enabling continuous updates"));
+ continuousUpdates = true;
+ writer()->writeEnableContinuousUpdates(true, 0, 0, cp.width, cp.height);
+ }
+ }
} else {
// Pixel format change
rdr::MemInStream memStream(data, len);
@@ -477,6 +484,9 @@ void CConn::resizeFramebuffer()
if (!desktop)
return;
+ if (continuousUpdates)
+ writer()->writeEnableContinuousUpdates(true, 0, 0, cp.width, cp.height);
+
desktop->resizeFramebuffer(cp.width, cp.height);
}
@@ -609,9 +619,11 @@ void CConn::requestNewUpdate()
checkEncodings();
- pendingUpdate = true;
- writer()->writeFramebufferUpdateRequest(Rect(0, 0, cp.width, cp.height),
- !forceNonincremental);
+ if (forceNonincremental || !continuousUpdates) {
+ pendingUpdate = true;
+ writer()->writeFramebufferUpdateRequest(Rect(0, 0, cp.width, cp.height),
+ !forceNonincremental);
+ }
forceNonincremental = false;
}