Browse Source

Stop requiring CConnection::serverInit() to be overridden

Add an explicit callback for subclasses to do their startup in. This
makes it easier to do proper ordering, and avoids mistakes.
tags/v1.9.90
Pierre Ossman 5 years ago
parent
commit
2affd77532
4 changed files with 19 additions and 11 deletions
  1. 9
    3
      common/rfb/CConnection.cxx
  2. 7
    3
      common/rfb/CConnection.h
  3. 2
    4
      vncviewer/CConn.cxx
  4. 1
    1
      vncviewer/CConn.h

+ 9
- 3
common/rfb/CConnection.cxx View File

@@ -335,6 +335,14 @@ void CConnection::setExtendedDesktopSize(unsigned reason,
CMsgHandler::setExtendedDesktopSize(reason, result, w, h, layout);
}

void CConnection::serverInit()
{
state_ = RFBSTATE_NORMAL;
vlog.debug("initialisation done");

initDone();
}

void CConnection::readAndDecodeRect(const Rect& r, int encoding,
ModifiablePixelBuffer* pb)
{
@@ -363,10 +371,8 @@ void CConnection::authSuccess()
{
}

void CConnection::serverInit()
void CConnection::initDone()
{
state_ = RFBSTATE_NORMAL;
vlog.debug("initialisation done");
}

void CConnection::fence(rdr::U32 flags, unsigned len, const char data[])

+ 7
- 3
common/rfb/CConnection.h View File

@@ -100,6 +100,8 @@ namespace rfb {
int w, int h,
const ScreenSet& layout);

virtual void serverInit();

virtual void readAndDecodeRect(const Rect& r, int encoding,
ModifiablePixelBuffer* pb);

@@ -113,9 +115,11 @@ namespace rfb {
// authSuccess() is called when authentication has succeeded.
virtual void authSuccess();

// serverInit() is called when the ServerInit message is received. The
// derived class must call on to CConnection::serverInit().
virtual void serverInit();
// 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();


// Other methods

+ 2
- 4
vncviewer/CConn.cxx View File

@@ -308,13 +308,11 @@ void CConn::socketEvent(FL_SOCKET fd, void *data)

////////////////////// CConnection callback methods //////////////////////

// serverInit() is called when the serverInit message has been received. At
// initDone() is called when the serverInit message has been received. At
// this point we create the desktop window and display it. We also tell the
// server the pixel format and encodings to use and request the first update.
void CConn::serverInit()
void CConn::initDone()
{
CConnection::serverInit();

// If using AutoSelect with old servers, start in FullColor
// mode. See comment in autoSelectFormatAndEncoding.
if (server.beforeVersion(3, 8) && autoSelect)

+ 1
- 1
vncviewer/CConn.h View File

@@ -51,7 +51,7 @@ public:
static void socketEvent(FL_SOCKET fd, void *data);

// CConnection callback methods
void serverInit();
void initDone();

void setDesktopSize(int w, int h);
void setExtendedDesktopSize(unsigned reason, unsigned result,

Loading…
Cancel
Save