Merge client resize capabilities
No need to have one setting for each extension. All the client code
needs to indicate is if it supports resize. The common code can then
map this to relevant extensions.
diff --git a/common/rfb/CConnection.cxx b/common/rfb/CConnection.cxx
index e61c2e7..98ef586 100644
--- a/common/rfb/CConnection.cxx
+++ b/common/rfb/CConnection.cxx
@@ -73,6 +73,11 @@
{
decoder.flush();
+ if (fb) {
+ assert(fb->width() == server.width());
+ assert(fb->height() == server.height());
+ }
+
if ((framebuffer != NULL) && (fb != NULL)) {
Rect rect;
@@ -334,6 +339,11 @@
writer()->writeEnableContinuousUpdates(true, 0, 0,
server.width(),
server.height());
+
+ resizeFramebuffer();
+ assert(framebuffer != NULL);
+ assert(framebuffer->width() == server.width());
+ assert(framebuffer->height() == server.height());
}
void CConnection::setExtendedDesktopSize(unsigned reason,
@@ -349,6 +359,11 @@
writer()->writeEnableContinuousUpdates(true, 0, 0,
server.width(),
server.height());
+
+ resizeFramebuffer();
+ assert(framebuffer != NULL);
+ assert(framebuffer->width() == server.width());
+ assert(framebuffer->height() == server.height());
}
void CConnection::endOfContinuousUpdates()
@@ -452,6 +467,11 @@
{
}
+void CConnection::resizeFramebuffer()
+{
+ assert(false);
+}
+
void CConnection::refreshFramebuffer()
{
forceNonincremental = true;
@@ -575,10 +595,10 @@
encodings.push_back(pseudoEncodingCursor);
encodings.push_back(pseudoEncodingXCursor);
}
- if (server.supportsDesktopResize)
+ if (server.supportsDesktopResize) {
encodings.push_back(pseudoEncodingDesktopSize);
- if (server.supportsExtendedDesktopSize)
encodings.push_back(pseudoEncodingExtendedDesktopSize);
+ }
if (server.supportsLEDState)
encodings.push_back(pseudoEncodingLEDState);
diff --git a/common/rfb/CConnection.h b/common/rfb/CConnection.h
index 56e6d14..a0fa54a 100644
--- a/common/rfb/CConnection.h
+++ b/common/rfb/CConnection.h
@@ -127,6 +127,11 @@
// returning.
virtual void initDone() = 0;
+ // resizeFramebuffer() is called whenever the framebuffer
+ // dimensions or the screen layout changes. A subclass must make
+ // sure the pixel buffer has been updated once this call returns.
+ virtual void resizeFramebuffer();
+
// Other methods
diff --git a/common/rfb/ServerParams.cxx b/common/rfb/ServerParams.cxx
index 9ae8a60..289c864 100644
--- a/common/rfb/ServerParams.cxx
+++ b/common/rfb/ServerParams.cxx
@@ -26,7 +26,7 @@
ServerParams::ServerParams()
: majorVersion(0), minorVersion(0),
supportsLocalCursor(false),
- supportsDesktopResize(false), supportsExtendedDesktopSize(false),
+ supportsDesktopResize(false),
supportsLEDState(false), supportsQEMUKeyEvent(false),
supportsSetDesktopSize(false), supportsFence(false),
supportsContinuousUpdates(false),
diff --git a/common/rfb/ServerParams.h b/common/rfb/ServerParams.h
index cae38cb..09ebddc 100644
--- a/common/rfb/ServerParams.h
+++ b/common/rfb/ServerParams.h
@@ -71,7 +71,6 @@
bool supportsLocalCursor;
bool supportsDesktopResize;
- bool supportsExtendedDesktopSize;
bool supportsLEDState;
bool supportsQEMUKeyEvent;