122 lines
5.0 KiB
Diff
122 lines
5.0 KiB
Diff
|
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);
|