aboutsummaryrefslogtreecommitdiffstats
path: root/common
diff options
context:
space:
mode:
authorPierre Ossman <ossman@cendio.se>2018-10-31 17:08:59 +0100
committerPierre Ossman <ossman@cendio.se>2018-11-01 16:11:42 +0100
commitdd45b4490100f70e21000c5181540c224e0f3c41 (patch)
tree440df3c66f396e20c1dc40989d1ee40211252d26 /common
parent2affd7753274ddf3b93505f0ae26af3c45aa3fec (diff)
downloadtigervnc-dd45b4490100f70e21000c5181540c224e0f3c41.tar.gz
tigervnc-dd45b4490100f70e21000c5181540c224e0f3c41.zip
Let CMsgHandler::serverInit() handle initial set up
Avoid using the callbacks used for runtime changes for the initial setup. They weren't really useful anyway as you could not allocate a framebuffer without also knowing the pixel format. So make things more clear by letting serverInit() get the initial settings.
Diffstat (limited to 'common')
-rw-r--r--common/rfb/CConnection.cxx10
-rw-r--r--common/rfb/CConnection.h10
-rw-r--r--common/rfb/CMsgHandler.cxx9
-rw-r--r--common/rfb/CMsgHandler.h10
-rw-r--r--common/rfb/CMsgReader.cxx5
5 files changed, 32 insertions, 12 deletions
diff --git a/common/rfb/CConnection.cxx b/common/rfb/CConnection.cxx
index 805c8c31..14ef221f 100644
--- a/common/rfb/CConnection.cxx
+++ b/common/rfb/CConnection.cxx
@@ -16,6 +16,7 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
* USA.
*/
+#include <assert.h>
#include <stdio.h>
#include <string.h>
@@ -335,12 +336,19 @@ void CConnection::setExtendedDesktopSize(unsigned reason,
CMsgHandler::setExtendedDesktopSize(reason, result, w, h, layout);
}
-void CConnection::serverInit()
+void CConnection::serverInit(int width, int height,
+ const PixelFormat& pf,
+ const char* name)
{
+ CMsgHandler::serverInit(width, height, pf, name);
+
state_ = RFBSTATE_NORMAL;
vlog.debug("initialisation done");
initDone();
+ assert(framebuffer != NULL);
+ assert(framebuffer->width() == server.width());
+ assert(framebuffer->height() == server.height());
}
void CConnection::readAndDecodeRect(const Rect& r, int encoding,
diff --git a/common/rfb/CConnection.h b/common/rfb/CConnection.h
index c996ecf4..7623c02e 100644
--- a/common/rfb/CConnection.h
+++ b/common/rfb/CConnection.h
@@ -100,7 +100,9 @@ namespace rfb {
int w, int h,
const ScreenSet& layout);
- virtual void serverInit();
+ virtual void serverInit(int width, int height,
+ const PixelFormat& pf,
+ const char* name);
virtual void readAndDecodeRect(const Rect& r, int encoding,
ModifiablePixelBuffer* pb);
@@ -118,8 +120,10 @@ namespace rfb {
// initDone() is called when the connection is fully established
// and standard messages can be sent. This is called before the
// initial FramebufferUpdateRequest giving a derived class the
- // chance to modify pixel format and settings.
- virtual void initDone();
+ // chance to modify pixel format and settings. The derived class
+ // must also make sure it has provided a valid framebuffer before
+ // returning.
+ virtual void initDone() = 0;
// Other methods
diff --git a/common/rfb/CMsgHandler.cxx b/common/rfb/CMsgHandler.cxx
index 4289cbf1..4fe50414 100644
--- a/common/rfb/CMsgHandler.cxx
+++ b/common/rfb/CMsgHandler.cxx
@@ -74,6 +74,15 @@ void CMsgHandler::supportsQEMUKeyEvent()
server.supportsQEMUKeyEvent = true;
}
+void CMsgHandler::serverInit(int width, int height,
+ const PixelFormat& pf,
+ const char* name)
+{
+ server.setDimensions(width, height);
+ server.setPF(pf);
+ server.setName(name);
+}
+
void CMsgHandler::framebufferUpdateStart()
{
}
diff --git a/common/rfb/CMsgHandler.h b/common/rfb/CMsgHandler.h
index 55241dac..effdaabf 100644
--- a/common/rfb/CMsgHandler.h
+++ b/common/rfb/CMsgHandler.h
@@ -41,9 +41,9 @@ namespace rfb {
// The following methods are called as corresponding messages are read. A
// derived class should override these methods as desired. Note that for
- // the setDesktopSize(), setExtendedDesktopSize(), setPixelFormat() and
- // setName() methods, a derived class should call on to CMsgHandler's
- // methods to set the members of "server" appropriately.
+ // the setDesktopSize(), setExtendedDesktopSize(), setPixelFormat(),
+ // setName() and serverInit() methods, a derived class should call on to
+ // CMsgHandler's methods to set the members of "server" appropriately.
virtual void setDesktopSize(int w, int h);
virtual void setExtendedDesktopSize(unsigned reason, unsigned result,
@@ -56,7 +56,9 @@ namespace rfb {
virtual void fence(rdr::U32 flags, unsigned len, const char data[]);
virtual void endOfContinuousUpdates();
virtual void supportsQEMUKeyEvent();
- virtual void serverInit() = 0;
+ virtual void serverInit(int width, int height,
+ const PixelFormat& pf,
+ const char* name) = 0;
virtual void readAndDecodeRect(const Rect& r, int encoding,
ModifiablePixelBuffer* pb) = 0;
diff --git a/common/rfb/CMsgReader.cxx b/common/rfb/CMsgReader.cxx
index 3ce74731..17152ab7 100644
--- a/common/rfb/CMsgReader.cxx
+++ b/common/rfb/CMsgReader.cxx
@@ -43,13 +43,10 @@ void CMsgReader::readServerInit()
{
int width = is->readU16();
int height = is->readU16();
- handler->setDesktopSize(width, height);
PixelFormat pf;
pf.read(is);
- handler->setPixelFormat(pf);
CharArray name(is->readString());
- handler->setName(name.buf);
- handler->serverInit();
+ handler->serverInit(width, height, pf, name.buf);
}
void CMsgReader::readMsg()