From dfc28f12d334900a681e2c522293e0efa70e8ca4 Mon Sep 17 00:00:00 2001 From: Pierre Ossman Date: Mon, 10 Dec 2018 20:16:12 +0100 Subject: [PATCH] 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. --- common/rfb/SMsgWriter.cxx | 10 +++------- common/rfb/SMsgWriter.h | 6 +----- common/rfb/VNCSConnectionST.cxx | 10 +++------- 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 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); } -- 2.39.5