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