Browse Source

Add parameter to make client attempt to resize server desktop on connect.


git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@3712 3789f03b-4d11-0410-bbf8-ca57d06f2519
tags/v0.0.90
Pierre Ossman 15 years ago
parent
commit
eb3cecb856
4 changed files with 47 additions and 2 deletions
  1. 41
    2
      unix/vncviewer/CConn.cxx
  2. 1
    0
      unix/vncviewer/CConn.h
  3. 1
    0
      unix/vncviewer/parameters.h
  4. 4
    0
      unix/vncviewer/vncviewer.cxx

+ 41
- 2
unix/vncviewer/CConn.cxx View File

@@ -62,7 +62,7 @@ CConn::CConn(Display* dpy_, int argc_, char** argv_, network::Socket* sock_,
encodingChange(false), sameMachine(false), fullScreen(::fullScreen),
ctrlDown(false), altDown(false),
menuKeysym(0), menu(dpy, this), options(dpy, this), about(dpy), info(dpy),
reverseConnection(reverse)
reverseConnection(reverse), firstUpdate(true)
{
CharArray menuKeyStr(menuKey.getData());
menuKeysym = XStringToKeysym(menuKeyStr.buf);
@@ -277,8 +277,10 @@ void CConn::setExtendedDesktopSize(int reason, int result, int w, int h,
const rfb::ScreenSet& layout) {
CConnection::setExtendedDesktopSize(reason, result, w, h, layout);

if ((reason == reasonClient) && (result != resultSuccess))
if ((reason == reasonClient) && (result != resultSuccess)) {
vlog.error("SetDesktopSize failed: %d", result);
return;
}

resizeFramebuffer();
}
@@ -316,6 +318,43 @@ void CConn::framebufferUpdateEnd() {
debugRects.clear();
}
desktop->framebufferUpdateEnd();

if (firstUpdate) {
int width, height;

if (cp.supportsSetDesktopSize &&
sscanf(desktopSize.getValueStr(), "%dx%d", &width, &height) == 2) {
ScreenSet layout;

layout = cp.screenLayout;

if (layout.num_screens() == 0)
layout.add_screen(rfb::Screen());
else if (layout.num_screens() != 1) {
ScreenSet::iterator iter;

while (true) {
iter = layout.begin();
++iter;

if (iter == layout.end())
break;

layout.remove_screen(iter->id);
}
}

layout.begin()->dimensions.tl.x = 0;
layout.begin()->dimensions.tl.y = 0;
layout.begin()->dimensions.br.x = width;
layout.begin()->dimensions.br.y = height;

writer()->writeSetDesktopSize(width, height, layout);
}

firstUpdate = false;
}

if (autoSelect)
autoSelectFormatAndEncoding();
requestNewUpdate();

+ 1
- 0
unix/vncviewer/CConn.h View File

@@ -130,6 +130,7 @@ private:
AboutDialog about;
InfoDialog info;
bool reverseConnection;
bool firstUpdate;
};

#endif

+ 1
- 0
unix/vncviewer/parameters.h View File

@@ -35,6 +35,7 @@ extern rfb::BoolParameter shared;
extern rfb::BoolParameter acceptClipboard;
extern rfb::BoolParameter sendClipboard;
extern rfb::BoolParameter sendPrimary;
extern rfb::StringParameter desktopSize;
extern rfb::BoolParameter fullScreen;
extern rfb::StringParameter geometry;
extern rfb::BoolParameter customCompressLevel;

+ 4
- 0
unix/vncviewer/vncviewer.cxx View File

@@ -98,6 +98,10 @@ BoolParameter sendPrimary("SendPrimary",
"server as well as the clipboard selection",
true);

StringParameter desktopSize("DesktopSize",
"Reconfigure desktop size on the server on "
"connect (if possible)", "");

BoolParameter listenMode("listen", "Listen for connections from VNC servers",
false);
StringParameter geometry("geometry", "X geometry specification", "");

Loading…
Cancel
Save