packages: tigervnc/tigervnc-cookie.patch (NEW), tigervnc/tigervnc-ldnow.pat...

baggins baggins at pld-linux.org
Sun Oct 10 20:22:50 CEST 2010


Author: baggins                      Date: Sun Oct 10 18:22:49 2010 GMT
Module: packages                      Tag: HEAD
---- Log message:
- fixes from fedora

---- Files affected:
packages/tigervnc:
   tigervnc-cookie.patch (NONE -> 1.1)  (NEW), tigervnc-ldnow.patch (NONE -> 1.1)  (NEW), tigervnc-rh102434.patch (NONE -> 1.1)  (NEW), tigervnc-rh611677-generate_modkeymap-max_keys.patch (NONE -> 1.1)  (NEW), tigervnc-rh611677.patch (NONE -> 1.1)  (NEW), tigervnc-rh633931.patch (NONE -> 1.1)  (NEW), tigervnc-viewer-reparent.patch (NONE -> 1.1)  (NEW)

---- Diffs:

================================================================
Index: packages/tigervnc/tigervnc-cookie.patch
diff -u /dev/null packages/tigervnc/tigervnc-cookie.patch:1.1
--- /dev/null	Sun Oct 10 20:22:50 2010
+++ packages/tigervnc/tigervnc-cookie.patch	Sun Oct 10 20:22:44 2010
@@ -0,0 +1,37 @@
+diff -up tigervnc-1.0.90-20091221svn3929/unix/vncserver.cookie tigervnc-1.0.90-20091221svn3929/unix/vncserver
+--- tigervnc-1.0.90-20091221svn3929/unix/vncserver.cookie	2009-11-12 11:39:54.000000000 +0100
++++ tigervnc-1.0.90-20091221svn3929/unix/vncserver	2009-12-21 16:15:01.907799091 +0100
+@@ -189,27 +189,12 @@ $vncPort = 5900 + $displayNumber;
+ $desktopLog = "$vncUserDir/$host:$displayNumber.log";
+ unlink($desktopLog);
+ 
+-# Make an X server cookie - use /dev/urandom on systems that have it,
+-# otherwise use perl's random number generator, seeded with the sum
+-# of the current time, our PID and part of the encrypted form of the password.
+-
+-my $cookie = "";
+-if (open(URANDOM, '<', '/dev/urandom')) {
+-  my $randata;
+-  if (sysread(URANDOM, $randata, 16) == 16) {
+-    $cookie = unpack 'h*', $randata;
+-  }
+-  close(URANDOM);
+-}
+-if ($cookie eq "") {
+-  srand(time+$$+unpack("L",`cat $vncUserDir/passwd`));
+-  for (1..16) {
+-    $cookie .= sprintf("%02x", int(rand(256)) % 256);
+-  }
+-}
+-
+-system("xauth -f $xauthorityFile add $host:$displayNumber . $cookie");
+-system("xauth -f $xauthorityFile add $host/unix:$displayNumber . $cookie"); 
++# Make an X server cookie - use mcookie
++$cookie = `/usr/bin/mcookie`;
++open (XAUTH, "|xauth -f $xauthorityFile source -");
++print XAUTH "add $host:$displayNumber . $cookie\n";
++print XAUTH "add $host/unix:$displayNumber . $cookie\n";
++close XAUTH;
+ 
+ if ($opt{'-name'}) {
+     $desktopName = $opt{'-name'};

================================================================
Index: packages/tigervnc/tigervnc-ldnow.patch
diff -u /dev/null packages/tigervnc/tigervnc-ldnow.patch:1.1
--- /dev/null	Sun Oct 10 20:22:50 2010
+++ packages/tigervnc/tigervnc-ldnow.patch	Sun Oct 10 20:22:44 2010
@@ -0,0 +1,12 @@
+diff -up tigervnc-1.0.90-20100721svn4113/unix/xserver/hw/vnc/Makefile.am.ldnow tigervnc-1.0.90-20100721svn4113/unix/xserver/hw/vnc/Makefile.am
+--- tigervnc-1.0.90-20100721svn4113/unix/xserver/hw/vnc/Makefile.am.ldnow	2010-05-18 15:48:02.000000000 +0200
++++ tigervnc-1.0.90-20100721svn4113/unix/xserver/hw/vnc/Makefile.am	2010-07-21 17:05:45.242942531 +0200
+@@ -50,7 +50,7 @@ libvnc_la_CPPFLAGS = $(XVNC_CPPFLAGS) -I
+ 	-I$(top_srcdir)/hw/xfree86/os-support/bus \
+ 	-I$(includedir)/pixman-1 -I$(includedir)
+ 
+-libvnc_la_LDFLAGS = -module -avoid-version
++libvnc_la_LDFLAGS = -module -avoid-version -Wl,-z,now
+ 
+ libvnc_la_LIBADD = libvnccommon.la $(COMMON_LIBS)
+ 

================================================================
Index: packages/tigervnc/tigervnc-rh102434.patch
diff -u /dev/null packages/tigervnc/tigervnc-rh102434.patch:1.1
--- /dev/null	Sun Oct 10 20:22:50 2010
+++ packages/tigervnc/tigervnc-rh102434.patch	Sun Oct 10 20:22:44 2010
@@ -0,0 +1,66 @@
+diff -up tigervnc-1.0.90-20100721svn4113/unix/vncviewer/CConn.cxx.102434 tigervnc-1.0.90-20100721svn4113/unix/vncviewer/CConn.cxx
+--- tigervnc-1.0.90-20100721svn4113/unix/vncviewer/CConn.cxx.102434	2010-07-20 17:07:44.000000000 +0200
++++ tigervnc-1.0.90-20100721svn4113/unix/vncviewer/CConn.cxx	2010-07-21 17:02:09.900085594 +0200
+@@ -40,6 +40,8 @@
+ #include "ServerDialog.h"
+ #include "PasswdDialog.h"
+ #include "parameters.h"
++#include <string>
++#include <iostream>
+ 
+ using namespace rfb;
+ 
+@@ -214,6 +216,15 @@ void CConn::getUserPasswd(char** user, c
+     return;
+   }
+ 
++  /* XXX Who wrote this code? Yes, it is really ugly */
++  if (passwdInput) {
++   std::string s;
++   std::cin >> s;
++   *password = strdup(s.c_str());
++   if (user) *user = 0;
++     return;
++  }
++
+   const char* secType = secTypeName(csecurity->getType());
+   const char* titlePrefix = _("VNC authentication");
+   unsigned int titleLen = strlen(titlePrefix) + strlen(secType) + 4;
+diff -up tigervnc-1.0.90-20100721svn4113/unix/vncviewer/parameters.h.102434 tigervnc-1.0.90-20100721svn4113/unix/vncviewer/parameters.h
+--- tigervnc-1.0.90-20100721svn4113/unix/vncviewer/parameters.h.102434	2009-03-23 17:49:47.000000000 +0100
++++ tigervnc-1.0.90-20100721svn4113/unix/vncviewer/parameters.h	2010-07-21 16:55:44.414314911 +0200
+@@ -42,6 +42,7 @@ extern rfb::BoolParameter customCompress
+ extern rfb::IntParameter compressLevel;
+ extern rfb::BoolParameter noJpeg;
+ extern rfb::IntParameter qualityLevel;
++extern rfb::BoolParameter passwdInput;
+ 
+ extern char aboutText[];
+ extern char* programName;
+diff -up tigervnc-1.0.90-20100721svn4113/unix/vncviewer/vncviewer.cxx.102434 tigervnc-1.0.90-20100721svn4113/unix/vncviewer/vncviewer.cxx
+--- tigervnc-1.0.90-20100721svn4113/unix/vncviewer/vncviewer.cxx.102434	2010-04-23 16:06:38.000000000 +0200
++++ tigervnc-1.0.90-20100721svn4113/unix/vncviewer/vncviewer.cxx	2010-07-21 17:01:05.979161234 +0200
+@@ -59,7 +59,7 @@ IntParameter wmDecorationHeight("WMDecor
+ StringParameter passwordFile("PasswordFile",
+                              "Password file for VNC authentication", "");
+ AliasParameter passwd("passwd", "Alias for PasswordFile", &passwordFile);
+-
++BoolParameter passwdInput("passwdInput", "Gets password from stdin", false);
+ BoolParameter useLocalCursor("UseLocalCursor",
+                              "Render the mouse cursor locally", true);
+ BoolParameter dotWhenNoCursor("DotWhenNoCursor",
+diff -up tigervnc-1.0.90-20100721svn4113/unix/vncviewer/vncviewer.man.102434 tigervnc-1.0.90-20100721svn4113/unix/vncviewer/vncviewer.man
+--- tigervnc-1.0.90-20100721svn4113/unix/vncviewer/vncviewer.man.102434	2009-10-07 17:13:00.000000000 +0200
++++ tigervnc-1.0.90-20100721svn4113/unix/vncviewer/vncviewer.man	2010-07-21 16:55:44.414314911 +0200
+@@ -119,6 +119,11 @@ the server, you can specify it here to a
+ "~/.vnc/passwd".
+ 
+ .TP
++.B \-passwdInput \fItrue, false\fP
++Force standard vnc dialog to getting password and reads password from stdin.
++Default is false(shows dialog window)
++
++.TP
+ .B \-Shared
+ When you make a connection to a VNC server, all other existing connections are
+ normally closed.  This option requests that they be left open, allowing you to

================================================================
Index: packages/tigervnc/tigervnc-rh611677-generate_modkeymap-max_keys.patch
diff -u /dev/null packages/tigervnc/tigervnc-rh611677-generate_modkeymap-max_keys.patch:1.1
--- /dev/null	Sun Oct 10 20:22:50 2010
+++ packages/tigervnc/tigervnc-rh611677-generate_modkeymap-max_keys.patch	Sun Oct 10 20:22:44 2010
@@ -0,0 +1,60 @@
+From 3fae47581a47613f1117b8794ae37b75ace73f3e Mon Sep 17 00:00:00 2001
+From: Adam Tkac <atkac at redhat.com>
+Date: Tue, 24 Aug 2010 17:21:30 +0200
+Subject: [PATCH] Return Success from generate_modkeymap() when max_keys_per_mod is zero.
+
+max_keys_per_mod equal to zero is a valid situation so generate_modkeymap
+should not return BadAlloc in this case.
+
+Signed-off-by: Adam Tkac <atkac at redhat.com>
+---
+ dix/inpututils.c |   24 +++++++++++++-----------
+ 1 files changed, 13 insertions(+), 11 deletions(-)
+
+diff --git a/dix/inpututils.c b/dix/inpututils.c
+index 8ec80b5..6693c67 100644
+--- a/dix/inpututils.c
++++ b/dix/inpututils.c
+@@ -286,7 +286,7 @@ int generate_modkeymap(ClientPtr client, DeviceIntPtr dev,
+ {
+     CARD8 keys_per_mod[8];
+     int max_keys_per_mod;
+-    KeyCode *modkeymap;
++    KeyCode *modkeymap = NULL;
+     int i, j, ret;
+ 
+     ret = XaceHook(XACE_DEVICE_ACCESS, client, dev, DixGetAttrAccess);
+@@ -310,18 +310,20 @@ int generate_modkeymap(ClientPtr client, DeviceIntPtr dev,
+         }
+     }
+ 
+-    modkeymap = calloc(max_keys_per_mod * 8, sizeof(KeyCode));
+-    if (!modkeymap)
+-        return BadAlloc;
++    if (max_keys_per_mod != 0) {
++        modkeymap = calloc(max_keys_per_mod * 8, sizeof(KeyCode));
++        if (!modkeymap)
++            return BadAlloc;
+ 
+-    for (i = 0; i < 8; i++)
+-        keys_per_mod[i] = 0;
++        for (i = 0; i < 8; i++)
++            keys_per_mod[i] = 0;
+ 
+-    for (i = 8; i < MAP_LENGTH; i++) {
+-        for (j = 0; j < 8; j++) {
+-            if (dev->key->xkbInfo->desc->map->modmap[i] & (1 << j)) {
+-                modkeymap[(j * max_keys_per_mod) + keys_per_mod[j]] = i;
+-                keys_per_mod[j]++;
++        for (i = 8; i < MAP_LENGTH; i++) {
++            for (j = 0; j < 8; j++) {
++                if (dev->key->xkbInfo->desc->map->modmap[i] & (1 << j)) {
++                    modkeymap[(j * max_keys_per_mod) + keys_per_mod[j]] = i;
++                    keys_per_mod[j]++;
++                }
+             }
+         }
+     }
+-- 
+1.7.2.2
+

================================================================
Index: packages/tigervnc/tigervnc-rh611677.patch
diff -u /dev/null packages/tigervnc/tigervnc-rh611677.patch:1.1
--- /dev/null	Sun Oct 10 20:22:50 2010
+++ packages/tigervnc/tigervnc-rh611677.patch	Sun Oct 10 20:22:44 2010
@@ -0,0 +1,98 @@
+diff -up tigervnc-1.0.90-20100420svn4030/unix/xserver/hw/vnc/Input.cc.rh611677 tigervnc-1.0.90-20100420svn4030/unix/xserver/hw/vnc/Input.cc
+--- tigervnc-1.0.90-20100420svn4030/unix/xserver/hw/vnc/Input.cc.rh611677	2010-08-24 17:40:00.511860227 +0200
++++ tigervnc-1.0.90-20100420svn4030/unix/xserver/hw/vnc/Input.cc	2010-08-24 17:49:23.169007409 +0200
+@@ -322,6 +322,11 @@ public:
+ 			return;
+ 		}
+ 
++		if (maxKeysPerMod == 0) {
++			vlog.debug("Keyboard has no modifiers");
++			return;
++		}
++
+ 		keycode = modmap[modIndex * maxKeysPerMod];
+ 		xfree(modmap);
+ #else
+@@ -355,6 +360,11 @@ public:
+ 			vlog.error("generate_modkeymap failed");
+ 			return;
+ 		}
++
++		if (maxKeysPerMod == 0) {
++			vlog.debug("Keyboard has no modifiers");
++			return;
++		}
+ #else
+ 		maxKeysPerMod = keyc->maxKeysPerModifier;
+ #endif
+@@ -530,6 +540,9 @@ void InputDevice::keyEvent(rdr::U32 keys
+ 		return;
+ 	}
+ 
++	if (maxKeysPerMod == 0)
++		vlog.debug("Keyboard has no modifiers");
++
+ 	state = XkbStateFieldFromRec(&keyc->xkbInfo->state);
+ #else
+ 	keyc = keyboardDev->key;
+@@ -565,11 +578,13 @@ void InputDevice::keyEvent(rdr::U32 keys
+ ModeSwitchFound:
+ 
+ 	int col = 0;
+-	if ((state & (1 << ShiftMapIndex)) != 0)
+-		col |= 1;
+-	if (modeSwitchMapIndex != 0 &&
+-	    ((state & (1 << modeSwitchMapIndex))) != 0)
+-		col |= 2;
++	if (maxKeysPerMod != 0) {
++		if ((state & (1 << ShiftMapIndex)) != 0)
++			col |= 1;
++		if (modeSwitchMapIndex != 0 &&
++		    ((state & (1 << modeSwitchMapIndex))) != 0)
++			col |= 2;
++	}
+ 
+ 	int kc = KeysymToKeycode(keymap, keysym, &col);
+ 
+@@ -581,7 +596,8 @@ ModeSwitchFound:
+ 	 * We never get ISO_Left_Tab here because it's already been translated
+ 	 * in VNCSConnectionST.
+ 	 */
+-	if (keysym == XK_Tab && ((state & (1 << ShiftMapIndex))) != 0)
++	if (maxKeysPerMod != 0 && keysym == XK_Tab &&
++	    ((state & (1 << ShiftMapIndex))) != 0)
+ 		col |= 1;
+ 
+ 	if (kc == 0) {
+@@ -662,18 +678,20 @@ ModeSwitchFound:
+ 		}
+ 	}
+ 
+-	ModifierState shift(keyboardDev, ShiftMapIndex);
+-	ModifierState modeSwitch(keyboardDev, modeSwitchMapIndex);
+-	if (down) {
+-		if (col & 1)
+-			shift.press();
+-		else
+-			shift.release();
+-		if (modeSwitchMapIndex) {
+-			if (col & 2)
+-				modeSwitch.press();
++	if (maxKeysPerMod != 0) {
++		ModifierState shift(keyboardDev, ShiftMapIndex);
++		ModifierState modeSwitch(keyboardDev, modeSwitchMapIndex);
++		if (down) {
++			if (col & 1)
++				shift.press();
+ 			else
+-				modeSwitch.release();
++				shift.release();
++			if (modeSwitchMapIndex) {
++				if (col & 2)
++					modeSwitch.press();
++				else
++					modeSwitch.release();
++			}
+ 		}
+ 	}
+ 

================================================================
Index: packages/tigervnc/tigervnc-rh633931.patch
diff -u /dev/null packages/tigervnc/tigervnc-rh633931.patch:1.1
--- /dev/null	Sun Oct 10 20:22:50 2010
+++ packages/tigervnc/tigervnc-rh633931.patch	Sun Oct 10 20:22:44 2010
@@ -0,0 +1,87 @@
+diff -up tigervnc-1.0.90-20100813svn4123/unix/xserver/hw/vnc/Input.cc.rh633931 tigervnc-1.0.90-20100813svn4123/unix/xserver/hw/vnc/Input.cc
+--- tigervnc-1.0.90-20100813svn4123/unix/xserver/hw/vnc/Input.cc.rh633931	2010-09-16 11:29:33.670000097 +0200
++++ tigervnc-1.0.90-20100813svn4123/unix/xserver/hw/vnc/Input.cc	2010-09-16 12:59:31.530002411 +0200
+@@ -271,6 +271,19 @@ void InputDevice::initInputDevice(void)
+ #endif
+ }
+ 
++static inline void pressKey(DeviceIntPtr dev, int kc, bool down, const char *msg)
++{
++	int action;
++	unsigned int n;
++
++	if (msg != NULL)
++		vlog.debug("%s %d %s", msg, kc, down ? "down" : "up");
++
++	action = down ? KeyPress : KeyRelease;
++	n = GetKeyboardEvents(eventq, dev, action, kc);
++	enqueueEvents(dev, n);
++}
++
+ #define IS_PRESSED(keyc, keycode) \
+ 	((keyc)->down[(keycode) >> 3] & (1 << ((keycode) & 7)))
+ 
+@@ -294,7 +307,7 @@ public:
+ 	~ModifierState()
+ 	{
+ 		for (int i = 0; i < nKeys; i++)
+-			generateXKeyEvent(keys[i], !pressed);
++			pressKey(dev, keys[i], !pressed, "fake keycode");
+ 		delete [] keys;
+ 	}
+ 
+@@ -389,22 +402,10 @@ private:
+ 		if (keycode) {
+ 			if (!keys) keys = new int[maxKeysPerMod];
+ 			keys[nKeys++] = keycode;
+-			generateXKeyEvent(keycode, down);
++			pressKey(dev, keycode, down, "fake keycode");
+ 		}
+ 	}
+ 
+-	void generateXKeyEvent(int keycode, bool down)
+-	{
+-		int n, action;
+-
+-		action = down ? KeyPress : KeyRelease;
+-		n = GetKeyboardEvents(eventq, dev, action, keycode);
+-		enqueueEvents(dev, n);
+-
+-		vlog.debug("fake keycode %d %s", keycode,
+-			   down ? "down" : "up");
+-	}
+-
+ 	int modIndex;
+ 	int nKeys;
+ 	int *keys;
+@@ -503,8 +504,8 @@ void InputDevice::keyEvent(rdr::U32 keys
+ 	KeyCode minKeyCode, maxKeyCode;
+ 	KeyCode *modmap = NULL;
+ 	int mapWidth;
+-	unsigned int i, n;
+-	int j, k, action, state, maxKeysPerMod;
++	unsigned int i;
++	int j, k, state, maxKeysPerMod;
+ 
+ 	initInputDevice();
+ 
+@@ -691,12 +692,14 @@ ModeSwitchFound:
+ 					modeSwitch.release();
+ 			}
+ 		}
+-	}
++		/*
++		 * Ensure ModifierState objects are not destroyed before
++		 * pressKey call, otherwise fake modifier keypress can be lost.
++		 */
++		pressKey(keyboardDev, kc, down, "keycode");
++	} else
++		pressKey(keyboardDev, kc, down, "keycode");
+ 
+-	vlog.debug("keycode %d %s", kc, down ? "down" : "up");
+-	action = down ? KeyPress : KeyRelease;
+-	n = GetKeyboardEvents(eventq, keyboardDev, action, kc);
+-	enqueueEvents(keyboardDev, n);
+ 
+         FREE_MAPS;
+ 	

================================================================
Index: packages/tigervnc/tigervnc-viewer-reparent.patch
diff -u /dev/null packages/tigervnc/tigervnc-viewer-reparent.patch:1.1
--- /dev/null	Sun Oct 10 20:22:50 2010
+++ packages/tigervnc/tigervnc-viewer-reparent.patch	Sun Oct 10 20:22:44 2010
@@ -0,0 +1,121 @@
+diff -up tightvnc-1.5.0-20081015svn3022/unix/tx/TXViewport.cxx.viewer-reparent tightvnc-1.5.0-20081015svn3022/unix/tx/TXViewport.cxx
+--- tightvnc-1.5.0-20081015svn3022/unix/tx/TXViewport.cxx.viewer-reparent	2008-03-14 14:37:09.000000000 +0100
++++ tightvnc-1.5.0-20081015svn3022/unix/tx/TXViewport.cxx	2008-10-23 13:11:39.000000000 +0200
+@@ -44,6 +44,21 @@ TXViewport::~TXViewport()
+   delete vScrollbar;
+ }
+ 
++void TXViewport::reparent(long embed_window)
++{
++    XReparentWindow(dpy, win(), (Window)embed_window, 0, 0);
++    XSelectInput(dpy, embed_window, child->eventMask);
++    if (!eventHandler)
++       this->setEventHandler(this);
++}
++
++void TXViewport::handleEvent(TXWindow* w, XEvent* ev)
++{
++    if (child && child->eventHandler)
++       ((TXEventHandler *)child->eventHandler)->handleEvent(child, ev);
++}
++
++
+ void TXViewport::setChild(TXWindow* child_)
+ {
+   child = child_;
+diff -up tightvnc-1.5.0-20081015svn3022/unix/tx/TXViewport.h.viewer-reparent tightvnc-1.5.0-20081015svn3022/unix/tx/TXViewport.h
+--- tightvnc-1.5.0-20081015svn3022/unix/tx/TXViewport.h.viewer-reparent	2008-03-14 14:37:09.000000000 +0100
++++ tightvnc-1.5.0-20081015svn3022/unix/tx/TXViewport.h	2008-10-23 13:11:39.000000000 +0200
+@@ -32,8 +32,8 @@
+ #include "TXWindow.h"
+ #include "TXScrollbar.h"
+ 
+-class TXViewport : public TXWindow, public TXScrollbarCallback,
+-                   public rfb::Timer::Callback {
++class TXViewport : public TXWindow, public TXScrollbarCallback, 
++                   public TXEventHandler, public rfb::Timer::Callback {
+ public:
+   TXViewport(Display* dpy_, int width, int height, TXWindow* parent_=0);
+   virtual ~TXViewport();
+@@ -59,6 +59,12 @@ public:
+   // normally.
+   bool bumpScrollEvent(XMotionEvent* ev);
+ 
++  // reparent the viewport into a new window
++  void reparent(long embed_window);
++
++  // event handler
++  void handleEvent(TXWindow* w, XEvent* ev);
++
+ private:
+   virtual void resizeNotify();
+   virtual void scrollbarPos(int x, int y, TXScrollbar* sb);
+diff -up tightvnc-1.5.0-20081015svn3022/unix/tx/TXWindow.h.viewer-reparent tightvnc-1.5.0-20081015svn3022/unix/tx/TXWindow.h
+--- tightvnc-1.5.0-20081015svn3022/unix/tx/TXWindow.h.viewer-reparent	2006-05-18 13:08:21.000000000 +0200
++++ tightvnc-1.5.0-20081015svn3022/unix/tx/TXWindow.h	2008-10-23 13:11:39.000000000 +0200
+@@ -183,6 +183,9 @@ public:
+ 
+   Display* const dpy;
+ 
++  TXEventHandler* eventHandler;
++  long eventMask;
++
+   int xPad, yPad, bevel;
+ 
+ private:
+@@ -195,9 +198,7 @@ private:
+   TXWindow* parent;
+   Window win_;
+   int width_, height_;
+-  TXEventHandler* eventHandler;
+   TXDeleteWindowCallback* dwc;
+-  long eventMask;
+   XSizeHints sizeHints;
+   std::map<Atom,Time> selectionOwnTime;
+   std::map<Atom,bool> selectionOwner_;
+diff -up tightvnc-1.5.0-20081015svn3022/unix/vncviewer/CConn.cxx.viewer-reparent tightvnc-1.5.0-20081015svn3022/unix/vncviewer/CConn.cxx
+--- tightvnc-1.5.0-20081015svn3022/unix/vncviewer/CConn.cxx.viewer-reparent	2008-10-23 13:11:39.000000000 +0200
++++ tightvnc-1.5.0-20081015svn3022/unix/vncviewer/CConn.cxx	2008-10-23 13:11:39.000000000 +0200
+@@ -647,10 +647,18 @@ void CConn::recreateViewport()
+ 
+ void CConn::reconfigureViewport()
+ {
++  const char * par = embedParent.getValueStr();
+   viewport->setMaxSize(cp.width, cp.height);
+   if (fullScreen) {
+     viewport->resize(DisplayWidth(dpy,DefaultScreen(dpy)),
+                      DisplayHeight(dpy,DefaultScreen(dpy)));
++ } else if (strlen(par) != 0) {
++   XWindowAttributes win_attr;
++   Window w = strtol(par, (char **)NULL, 0);
++
++   XGetWindowAttributes(dpy, w, &win_attr);
++   viewport->reparent(w);
++   viewport->resize(win_attr.width, win_attr.height);
+   } else {
+     int w = cp.width;
+     int h = cp.height;
+diff -up tightvnc-1.5.0-20081015svn3022/unix/vncviewer/parameters.h.viewer-reparent tightvnc-1.5.0-20081015svn3022/unix/vncviewer/parameters.h
+--- tightvnc-1.5.0-20081015svn3022/unix/vncviewer/parameters.h.viewer-reparent	2008-10-23 13:11:39.000000000 +0200
++++ tightvnc-1.5.0-20081015svn3022/unix/vncviewer/parameters.h	2008-10-23 13:12:41.000000000 +0200
+@@ -42,6 +42,7 @@ extern rfb::IntParameter compressLevel;
+ extern rfb::BoolParameter noJpeg;
+ extern rfb::IntParameter qualityLevel;
+ extern rfb::BoolParameter passwdInput;
++extern rfb::StringParameter embedParent;
+ 
+ extern char aboutText[];
+ extern char* programName;
+diff -up tightvnc-1.5.0-20081015svn3022/unix/vncviewer/vncviewer.cxx.viewer-reparent tightvnc-1.5.0-20081015svn3022/unix/vncviewer/vncviewer.cxx
+--- tightvnc-1.5.0-20081015svn3022/unix/vncviewer/vncviewer.cxx.viewer-reparent	2008-10-23 13:11:39.000000000 +0200
++++ tightvnc-1.5.0-20081015svn3022/unix/vncviewer/vncviewer.cxx	2008-10-23 13:12:59.000000000 +0200
+@@ -106,6 +106,9 @@ StringParameter displayname("display", "
+ 
+ StringParameter via("via", "Gateway to tunnel via", "");
+ 
++/* Support for reparenting */
++StringParameter embedParent("Parent", "X Window to use as a parent", "");
++
+ BoolParameter customCompressLevel("CustomCompressLevel",
+ 				 "Use custom compression level. "
+ 				 "Default if CompressLevel is specified.", false);
================================================================


More information about the pld-cvs-commit mailing list