git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@3699 3789f03b-4d11-0410-bbf8-ca57d06f2519tags/v0.0.90
@@ -1,4 +1,5 @@ | |||
/* Copyright (C) 2002-2005 RealVNC Ltd. All Rights Reserved. | |||
* Copyright 2009 Pierre Ossman for Cendio AB | |||
* | |||
* This is free software; you can redistribute it and/or modify | |||
* it under the terms of the GNU General Public License as published by | |||
@@ -17,6 +18,7 @@ | |||
*/ | |||
#include <rfb/Exception.h> | |||
#include <rfb/CMsgHandler.h> | |||
#include <rfb/screenTypes.h> | |||
using namespace rfb; | |||
@@ -34,6 +36,15 @@ void CMsgHandler::setDesktopSize(int width, int height) | |||
cp.height = height; | |||
} | |||
void CMsgHandler::setExtendedDesktopSize(int reason, int result, int width, int height) | |||
{ | |||
if ((reason == reasonClient) && (result != resultSuccess)) | |||
return; | |||
cp.width = width; | |||
cp.height = height; | |||
} | |||
void CMsgHandler::setCursor(int w, int h, const Point& hotspot, void* data, void* mask) | |||
{ | |||
} |
@@ -1,4 +1,5 @@ | |||
/* Copyright (C) 2002-2005 RealVNC Ltd. All Rights Reserved. | |||
* Copyright 2009 Pierre Ossman for Cendio AB | |||
* | |||
* This is free software; you can redistribute it and/or modify | |||
* it under the terms of the GNU General Public License as published by | |||
@@ -38,11 +39,12 @@ 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(), setPixelFormat() and setName() methods, a derived | |||
// class should call on to CMsgHandler's methods to set the members of cp | |||
// appropriately. | |||
// the setDesktopSize(), setExtendedDesktopSize(), setPixelFormat() and | |||
// setName() methods, a derived class should call on to CMsgHandler's | |||
// methods to set the members of cp appropriately. | |||
virtual void setDesktopSize(int w, int h); | |||
virtual void setExtendedDesktopSize(int reason, int result, int w, int h); | |||
virtual void setCursor(int width, int height, const Point& hotspot, | |||
void* data, void* mask); | |||
virtual void setPixelFormat(const PixelFormat& pf); |
@@ -1,4 +1,5 @@ | |||
/* Copyright (C) 2002-2005 RealVNC Ltd. All Rights Reserved. | |||
* Copyright 2009 Pierre Ossman for Cendio AB | |||
* | |||
* This is free software; you can redistribute it and/or modify | |||
* it under the terms of the GNU General Public License as published by | |||
@@ -76,6 +77,9 @@ void CMsgReaderV3::readMsg() | |||
case pseudoEncodingDesktopSize: | |||
handler->setDesktopSize(w, h); | |||
break; | |||
case pseudoEncodingExtendedDesktopSize: | |||
readExtendedDesktopSize(x, y, w, h); | |||
break; | |||
case pseudoEncodingDesktopName: | |||
readSetDesktopName(x, y, w, h); | |||
break; | |||
@@ -115,3 +119,16 @@ void CMsgReaderV3::readSetDesktopName(int x, int y, int w, int h) | |||
delete [] name; | |||
} | |||
void CMsgReaderV3::readExtendedDesktopSize(int x, int y, int w, int h) | |||
{ | |||
unsigned int screens; | |||
screens = is->readU8(); | |||
is->skip(3); | |||
// XXX: We just ignore screen info right now | |||
is->skip(16 * screens); | |||
handler->setExtendedDesktopSize(x, y, w, h); | |||
} | |||
@@ -1,4 +1,5 @@ | |||
/* Copyright (C) 2002-2005 RealVNC Ltd. All Rights Reserved. | |||
* Copyright 2009 Pierre Ossman for Cendio AB | |||
* | |||
* This is free software; you can redistribute it and/or modify | |||
* it under the terms of the GNU General Public License as published by | |||
@@ -30,6 +31,7 @@ namespace rfb { | |||
private: | |||
virtual void readFramebufferUpdate(); | |||
virtual void readSetDesktopName(int x, int y, int w, int h); | |||
virtual void readExtendedDesktopSize(int x, int y, int w, int h); | |||
int nUpdateRectsLeft; | |||
}; | |||
} |
@@ -64,6 +64,8 @@ void CMsgWriter::writeSetEncodings(int preferredEncoding, bool useCopyRect) | |||
encodings[nEncodings++] = pseudoEncodingCursor; | |||
if (cp->supportsDesktopResize) | |||
encodings[nEncodings++] = pseudoEncodingDesktopSize; | |||
if (cp->supportsExtendedDesktopSize) | |||
encodings[nEncodings++] = pseudoEncodingExtendedDesktopSize; | |||
if (cp->supportsDesktopRename) | |||
encodings[nEncodings++] = pseudoEncodingDesktopName; | |||
if (Decoder::supported(preferredEncoding)) { |
@@ -1,4 +1,5 @@ | |||
/* Copyright (C) 2002-2005 RealVNC Ltd. All Rights Reserved. | |||
* Copyright 2009 Pierre Ossman for Cendio AB | |||
* | |||
* This is free software; you can redistribute it and/or modify | |||
* it under the terms of the GNU General Public License as published by | |||
@@ -30,6 +31,7 @@ | |||
#include <rfb/LogWriter.h> | |||
#include <rfb/util.h> | |||
#include <rfb/Password.h> | |||
#include <rfb/screenTypes.h> | |||
#include <network/TcpSocket.h> | |||
#include "TXViewport.h" | |||
@@ -74,6 +76,7 @@ CConn::CConn(Display* dpy_, int argc_, char** argv_, network::Socket* sock_, | |||
currentEncoding = encNum; | |||
} | |||
cp.supportsDesktopResize = true; | |||
cp.supportsExtendedDesktopSize = true; | |||
cp.supportsDesktopRename = true; | |||
cp.supportsLocalCursor = useLocalCursor; | |||
cp.customCompressLevel = customCompressLevel; | |||
@@ -266,10 +269,17 @@ void CConn::serverInit() { | |||
// it is set initially). | |||
void CConn::setDesktopSize(int w, int h) { | |||
CConnection::setDesktopSize(w,h); | |||
if (desktop) { | |||
desktop->resize(w, h); | |||
recreateViewport(); | |||
} | |||
resizeFramebuffer(); | |||
} | |||
// setExtendedDesktopSize() is a more advanced version of setDesktopSize() | |||
void CConn::setExtendedDesktopSize(int reason, int result, int w, int h) { | |||
CConnection::setExtendedDesktopSize(reason, result, w,h); | |||
if ((reason == reasonClient) && (result != resultSuccess)) | |||
return; | |||
resizeFramebuffer(); | |||
} | |||
// setName() is called when the desktop name changes | |||
@@ -617,6 +627,17 @@ void CConn::getOptions() { | |||
checkEncodings(); | |||
} | |||
void CConn::resizeFramebuffer() | |||
{ | |||
if (!desktop) | |||
return; | |||
if ((desktop->width() == cp.width) && (desktop->height() == cp.height)) | |||
return; | |||
desktop->resize(cp.width, cp.height); | |||
recreateViewport(); | |||
} | |||
void CConn::recreateViewport() | |||
{ | |||
TXViewport* oldViewport = viewport; |
@@ -1,4 +1,5 @@ | |||
/* Copyright (C) 2002-2005 RealVNC Ltd. All Rights Reserved. | |||
* Copyright 2009 Pierre Ossman for Cendio AB | |||
* | |||
* This is free software; you can redistribute it and/or modify | |||
* it under the terms of the GNU General Public License as published by | |||
@@ -74,6 +75,7 @@ public: | |||
rfb::CSecurity* getCSecurity(int secType); | |||
void serverInit(); | |||
void setDesktopSize(int w, int h); | |||
void setExtendedDesktopSize(int reason, int result, int w, int h); | |||
void setName(const char* name); | |||
void setColourMapEntries(int firstColour, int nColours, rdr::U16* rgbs); | |||
void bell(); | |||
@@ -89,6 +91,7 @@ public: | |||
private: | |||
void resizeFramebuffer(); | |||
void recreateViewport(); | |||
void reconfigureViewport(); | |||
void initMenu(); |