Always send current screen layout to client
This is what the protocol requires, rather than sending what the
client specified in the request. This should be the same in practice
except for failures and possibly some races.
diff --git a/common/rfb/SMsgWriter.cxx b/common/rfb/SMsgWriter.cxx
index 766b0cb..0ca1981 100644
--- a/common/rfb/SMsgWriter.cxx
+++ b/common/rfb/SMsgWriter.cxx
@@ -138,9 +138,7 @@
return true;
}
-bool SMsgWriter::writeExtendedDesktopSize(rdr::U16 reason, rdr::U16 result,
- int fb_width, int fb_height,
- const ScreenSet& layout) {
+bool SMsgWriter::writeExtendedDesktopSize(rdr::U16 reason, rdr::U16 result) {
ExtendedDesktopSizeMsg msg;
if (!client->supportsEncoding(pseudoEncodingExtendedDesktopSize))
@@ -148,9 +146,6 @@
msg.reason = reason;
msg.result = result;
- msg.fb_width = fb_width;
- msg.fb_height = fb_height;
- msg.layout = layout;
extendedDesktopSizeMsgs.push_back(msg);
@@ -415,7 +410,8 @@
for (ri = extendedDesktopSizeMsgs.begin();ri != extendedDesktopSizeMsgs.end();++ri) {
writeExtendedDesktopSizeRect(ri->reason, ri->result,
- ri->fb_width, ri->fb_height, ri->layout);
+ client->width(), client->height(),
+ client->screenLayout());
}
extendedDesktopSizeMsgs.clear();
diff --git a/common/rfb/SMsgWriter.h b/common/rfb/SMsgWriter.h
index ddddb09..1fe5043 100644
--- a/common/rfb/SMsgWriter.h
+++ b/common/rfb/SMsgWriter.h
@@ -72,9 +72,7 @@
// generic update of the current server state, but the second queues a
// specific message.
bool writeExtendedDesktopSize();
- bool writeExtendedDesktopSize(rdr::U16 reason, rdr::U16 result,
- int fb_width, int fb_height,
- const ScreenSet& layout);
+ bool writeExtendedDesktopSize(rdr::U16 reason, rdr::U16 result);
bool writeSetDesktopName();
@@ -159,8 +157,6 @@
typedef struct {
rdr::U16 reason, result;
- int fb_width, fb_height;
- ScreenSet layout;
} ExtendedDesktopSizeMsg;
std::list<ExtendedDesktopSizeMsg> extendedDesktopSizeMsgs;
diff --git a/common/rfb/VNCSConnectionST.cxx b/common/rfb/VNCSConnectionST.cxx
index 15b2f9a..e4e5ab3 100644
--- a/common/rfb/VNCSConnectionST.cxx
+++ b/common/rfb/VNCSConnectionST.cxx
@@ -716,8 +716,7 @@
// Don't bother the desktop with an invalid configuration
if (!layout.validate(fb_width, fb_height)) {
- writer()->writeExtendedDesktopSize(reasonClient, resultInvalid,
- fb_width, fb_height, layout);
+ writer()->writeExtendedDesktopSize(reasonClient, resultInvalid);
return;
}
@@ -726,8 +725,7 @@
// protocol-wise, but unnecessary.
result = server->desktop->setScreenLayout(fb_width, fb_height, layout);
- writer()->writeExtendedDesktopSize(reasonClient, result,
- fb_width, fb_height, layout);
+ writer()->writeExtendedDesktopSize(reasonClient, result);
// Only notify other clients on success
if (result == resultSuccess) {
@@ -1127,9 +1125,7 @@
if (state() != RFBSTATE_NORMAL)
return;
- writer()->writeExtendedDesktopSize(reason, 0,
- client.width(), client.height(),
- client.screenLayout());
+ writer()->writeExtendedDesktopSize(reason, 0);
}