aboutsummaryrefslogtreecommitdiffstats
path: root/common/rfb
diff options
context:
space:
mode:
authorPierre Ossman <ossman@cendio.se>2018-12-10 20:16:12 +0100
committerPierre Ossman <ossman@cendio.se>2018-12-10 20:16:12 +0100
commitdfc28f12d334900a681e2c522293e0efa70e8ca4 (patch)
tree255d089eef52b6d6d7406308af898761150731d7 /common/rfb
parentb03512c65d962485efc9d2b206d293916e1cf01c (diff)
downloadtigervnc-dfc28f12d334900a681e2c522293e0efa70e8ca4.tar.gz
tigervnc-dfc28f12d334900a681e2c522293e0efa70e8ca4.zip
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.
Diffstat (limited to 'common/rfb')
-rw-r--r--common/rfb/SMsgWriter.cxx10
-rw-r--r--common/rfb/SMsgWriter.h6
-rw-r--r--common/rfb/VNCSConnectionST.cxx10
3 files changed, 7 insertions, 19 deletions
diff --git a/common/rfb/SMsgWriter.cxx b/common/rfb/SMsgWriter.cxx
index 766b0cb3..0ca19812 100644
--- a/common/rfb/SMsgWriter.cxx
+++ b/common/rfb/SMsgWriter.cxx
@@ -138,9 +138,7 @@ bool SMsgWriter::writeExtendedDesktopSize() {
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 @@ bool SMsgWriter::writeExtendedDesktopSize(rdr::U16 reason, rdr::U16 result,
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 @@ void SMsgWriter::writeNoDataRects()
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 ddddb095..1fe50434 100644
--- a/common/rfb/SMsgWriter.h
+++ b/common/rfb/SMsgWriter.h
@@ -72,9 +72,7 @@ namespace rfb {
// 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 @@ namespace rfb {
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 15b2f9ad..e4e5ab3e 100644
--- a/common/rfb/VNCSConnectionST.cxx
+++ b/common/rfb/VNCSConnectionST.cxx
@@ -716,8 +716,7 @@ void VNCSConnectionST::setDesktopSize(int fb_width, int fb_height,
// 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 @@ void VNCSConnectionST::setDesktopSize(int fb_width, int fb_height,
// 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 @@ void VNCSConnectionST::screenLayoutChange(rdr::U16 reason)
if (state() != RFBSTATE_NORMAL)
return;
- writer()->writeExtendedDesktopSize(reason, 0,
- client.width(), client.height(),
- client.screenLayout());
+ writer()->writeExtendedDesktopSize(reason, 0);
}