summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPierre Ossman <ossman@cendio.se>2018-10-05 17:32:57 +0200
committerPierre Ossman <ossman@cendio.se>2018-10-10 13:07:59 +0200
commit07e44cc508133d874767204d2f96407b0b713bb5 (patch)
tree777631b83cc6bff1668fc37bfef9708500255c82
parentb68434129bc7be45718940b999e0c93f773d1883 (diff)
downloadtigervnc-07e44cc508133d874767204d2f96407b0b713bb5.tar.gz
tigervnc-07e44cc508133d874767204d2f96407b0b713bb5.zip
Encapsulate setDesktopSize() in VNCServerST
More encapsulation of functions that require coordinate between clients.
-rw-r--r--common/rfb/VNCSConnectionST.cxx20
-rw-r--r--common/rfb/VNCServerST.cxx44
-rw-r--r--common/rfb/VNCServerST.h6
3 files changed, 38 insertions, 32 deletions
diff --git a/common/rfb/VNCSConnectionST.cxx b/common/rfb/VNCSConnectionST.cxx
index c83254fb..b5f81c61 100644
--- a/common/rfb/VNCSConnectionST.cxx
+++ b/common/rfb/VNCSConnectionST.cxx
@@ -687,27 +687,9 @@ void VNCSConnectionST::setDesktopSize(int fb_width, int fb_height,
if (!(accessRights & AccessSetDesktopSize)) return;
if (!rfb::Server::acceptSetDesktopSize) return;
- // 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);
- return;
- }
-
- // FIXME: the desktop will call back to VNCServerST and an extra set
- // of ExtendedDesktopSize messages will be sent. This is okay
- // protocol-wise, but unnecessary.
- result = server->desktop->setScreenLayout(fb_width, fb_height, layout);
-
+ result = server->setDesktopSize(this, fb_width, fb_height, layout);
writer()->writeExtendedDesktopSize(reasonClient, result,
fb_width, fb_height, layout);
-
- // Only notify other clients on success
- if (result == resultSuccess) {
- if (server->screenLayout != layout)
- throw Exception("Desktop configured a different screen layout than requested");
- server->notifyScreenLayoutChange(this);
- }
}
void VNCSConnectionST::fence(rdr::U32 flags, unsigned len, const char data[])
diff --git a/common/rfb/VNCServerST.cxx b/common/rfb/VNCServerST.cxx
index 6affe928..31ac5d1c 100644
--- a/common/rfb/VNCServerST.cxx
+++ b/common/rfb/VNCServerST.cxx
@@ -513,6 +513,39 @@ void VNCServerST::clientCutText(const char* str, int len)
desktop->clientCutText(str, len);
}
+unsigned int VNCServerST::setDesktopSize(VNCSConnectionST* requester,
+ int fb_width, int fb_height,
+ const ScreenSet& layout)
+{
+ unsigned int result;
+ std::list<VNCSConnectionST*>::iterator ci, ci_next;
+
+ // Don't bother the desktop with an invalid configuration
+ if (!layout.validate(fb_width, fb_height))
+ return resultInvalid;
+
+ // FIXME: the desktop will call back to VNCServerST and an extra set
+ // of ExtendedDesktopSize messages will be sent. This is okay
+ // protocol-wise, but unnecessary.
+ result = desktop->setScreenLayout(fb_width, fb_height, layout);
+ if (result != resultSuccess)
+ return result;
+
+ // Sanity check
+ if (screenLayout != layout)
+ throw Exception("Desktop configured a different screen layout than requested");
+
+ // Notify other clients
+ for (ci=clients.begin();ci!=clients.end();ci=ci_next) {
+ ci_next = ci; ci_next++;
+ if ((*ci) == requester)
+ continue;
+ (*ci)->screenLayoutChangeOrClose(reasonOtherClient);
+ }
+
+ return resultSuccess;
+}
+
// Other public methods
void VNCServerST::approveConnection(network::Socket* sock, bool accept,
@@ -774,17 +807,6 @@ void VNCServerST::setConnStatus(ListConnInfo* listConn)
}
}
-void VNCServerST::notifyScreenLayoutChange(VNCSConnectionST* requester)
-{
- std::list<VNCSConnectionST*>::iterator ci, ci_next;
- for (ci=clients.begin();ci!=clients.end();ci=ci_next) {
- ci_next = ci; ci_next++;
- if ((*ci) == requester)
- continue;
- (*ci)->screenLayoutChangeOrClose(reasonOtherClient);
- }
-}
-
bool VNCServerST::getComparerState()
{
if (rfb::Server::compareFB == 0)
diff --git a/common/rfb/VNCServerST.h b/common/rfb/VNCServerST.h
index eff52d07..54443e1f 100644
--- a/common/rfb/VNCServerST.h
+++ b/common/rfb/VNCServerST.h
@@ -125,6 +125,10 @@ namespace rfb {
void pointerEvent(VNCSConnectionST* client, const Point& pos, int buttonMask);
void clientCutText(const char* str, int len);
+ unsigned int setDesktopSize(VNCSConnectionST* requester,
+ int fb_width, int fb_height,
+ const ScreenSet& layout);
+
// closeClients() closes all RFB sessions, except the specified one (if
// any), and logs the specified reason for closure.
void closeClients(const char* reason, network::Socket* sock);
@@ -204,8 +208,6 @@ namespace rfb {
Region getPendingRegion();
const RenderedCursor* getRenderedCursor();
- void notifyScreenLayoutChange(VNCSConnectionST *requester);
-
bool getComparerState();
KeyRemapper* keyRemapper;