]>
Commit | Line | Data |
---|---|---|
13a33bd9 JR |
1 | diff -up tightvnc-1.5.0-20081015svn3022/unix/tx/TXViewport.cxx.viewer-reparent tightvnc-1.5.0-20081015svn3022/unix/tx/TXViewport.cxx |
2 | --- tightvnc-1.5.0-20081015svn3022/unix/tx/TXViewport.cxx.viewer-reparent 2008-03-14 14:37:09.000000000 +0100 | |
3 | +++ tightvnc-1.5.0-20081015svn3022/unix/tx/TXViewport.cxx 2008-10-23 13:11:39.000000000 +0200 | |
4 | @@ -44,6 +44,21 @@ TXViewport::~TXViewport() | |
5 | delete vScrollbar; | |
6 | } | |
7 | ||
8 | +void TXViewport::reparent(long embed_window) | |
9 | +{ | |
10 | + XReparentWindow(dpy, win(), (Window)embed_window, 0, 0); | |
11 | + XSelectInput(dpy, embed_window, child->eventMask); | |
12 | + if (!eventHandler) | |
13 | + this->setEventHandler(this); | |
14 | +} | |
15 | + | |
16 | +void TXViewport::handleEvent(TXWindow* w, XEvent* ev) | |
17 | +{ | |
18 | + if (child && child->eventHandler) | |
19 | + ((TXEventHandler *)child->eventHandler)->handleEvent(child, ev); | |
20 | +} | |
21 | + | |
22 | + | |
23 | void TXViewport::setChild(TXWindow* child_) | |
24 | { | |
25 | child = child_; | |
26 | diff -up tightvnc-1.5.0-20081015svn3022/unix/tx/TXViewport.h.viewer-reparent tightvnc-1.5.0-20081015svn3022/unix/tx/TXViewport.h | |
27 | --- tightvnc-1.5.0-20081015svn3022/unix/tx/TXViewport.h.viewer-reparent 2008-03-14 14:37:09.000000000 +0100 | |
28 | +++ tightvnc-1.5.0-20081015svn3022/unix/tx/TXViewport.h 2008-10-23 13:11:39.000000000 +0200 | |
29 | @@ -32,8 +32,8 @@ | |
30 | #include "TXWindow.h" | |
31 | #include "TXScrollbar.h" | |
32 | ||
33 | -class TXViewport : public TXWindow, public TXScrollbarCallback, | |
34 | - public rfb::Timer::Callback { | |
35 | +class TXViewport : public TXWindow, public TXScrollbarCallback, | |
36 | + public TXEventHandler, public rfb::Timer::Callback { | |
37 | public: | |
38 | TXViewport(Display* dpy_, int width, int height, TXWindow* parent_=0); | |
39 | virtual ~TXViewport(); | |
40 | @@ -59,6 +59,12 @@ public: | |
41 | // normally. | |
42 | bool bumpScrollEvent(XMotionEvent* ev); | |
43 | ||
44 | + // reparent the viewport into a new window | |
45 | + void reparent(long embed_window); | |
46 | + | |
47 | + // event handler | |
48 | + void handleEvent(TXWindow* w, XEvent* ev); | |
49 | + | |
50 | private: | |
51 | virtual void resizeNotify(); | |
52 | virtual void scrollbarPos(int x, int y, TXScrollbar* sb); | |
53 | diff -up tightvnc-1.5.0-20081015svn3022/unix/tx/TXWindow.h.viewer-reparent tightvnc-1.5.0-20081015svn3022/unix/tx/TXWindow.h | |
54 | --- tightvnc-1.5.0-20081015svn3022/unix/tx/TXWindow.h.viewer-reparent 2006-05-18 13:08:21.000000000 +0200 | |
55 | +++ tightvnc-1.5.0-20081015svn3022/unix/tx/TXWindow.h 2008-10-23 13:11:39.000000000 +0200 | |
56 | @@ -183,6 +183,9 @@ public: | |
57 | ||
58 | Display* const dpy; | |
59 | ||
60 | + TXEventHandler* eventHandler; | |
61 | + long eventMask; | |
62 | + | |
63 | int xPad, yPad, bevel; | |
64 | ||
65 | private: | |
66 | @@ -195,9 +198,7 @@ private: | |
67 | TXWindow* parent; | |
68 | Window win_; | |
69 | int width_, height_; | |
70 | - TXEventHandler* eventHandler; | |
71 | TXDeleteWindowCallback* dwc; | |
72 | - long eventMask; | |
73 | XSizeHints sizeHints; | |
74 | std::map<Atom,Time> selectionOwnTime; | |
75 | std::map<Atom,bool> selectionOwner_; | |
7470b97a JR |
76 | diff -up tightvnc-1.5.0-20081015svn3022/vncviewer/CConn.cxx.viewer-reparent tightvnc-1.5.0-20081015svn3022/vncviewer/CConn.cxx |
77 | --- tightvnc-1.5.0-20081015svn3022/vncviewer/CConn.cxx.viewer-reparent 2008-10-23 13:11:39.000000000 +0200 | |
78 | +++ tightvnc-1.5.0-20081015svn3022/vncviewer/CConn.cxx 2008-10-23 13:11:39.000000000 +0200 | |
13a33bd9 JR |
79 | @@ -647,10 +647,18 @@ void CConn::recreateViewport() |
80 | ||
81 | void CConn::reconfigureViewport() | |
82 | { | |
83 | + const char * par = embedParent.getValueStr(); | |
84 | viewport->setMaxSize(cp.width, cp.height); | |
85 | if (fullScreen) { | |
86 | viewport->resize(DisplayWidth(dpy,DefaultScreen(dpy)), | |
87 | DisplayHeight(dpy,DefaultScreen(dpy))); | |
88 | + } else if (strlen(par) != 0) { | |
89 | + XWindowAttributes win_attr; | |
90 | + Window w = strtol(par, (char **)NULL, 0); | |
91 | + | |
92 | + XGetWindowAttributes(dpy, w, &win_attr); | |
93 | + viewport->reparent(w); | |
94 | + viewport->resize(win_attr.width, win_attr.height); | |
95 | } else { | |
96 | int w = cp.width; | |
97 | int h = cp.height; | |
7470b97a JR |
98 | diff -up tightvnc-1.5.0-20081015svn3022/vncviewer/parameters.h.viewer-reparent tightvnc-1.5.0-20081015svn3022/vncviewer/parameters.h |
99 | --- tightvnc-1.5.0-20081015svn3022/vncviewer/parameters.h.viewer-reparent 2008-10-23 13:11:39.000000000 +0200 | |
100 | +++ tightvnc-1.5.0-20081015svn3022/vncviewer/parameters.h 2008-10-23 13:12:41.000000000 +0200 | |
13a33bd9 JR |
101 | @@ -42,6 +42,7 @@ extern rfb::IntParameter compressLevel; |
102 | extern rfb::BoolParameter noJpeg; | |
103 | extern rfb::IntParameter qualityLevel; | |
104 | extern rfb::BoolParameter passwdInput; | |
105 | +extern rfb::StringParameter embedParent; | |
106 | ||
107 | extern char aboutText[]; | |
108 | extern char* programName; | |
7470b97a JR |
109 | diff -up tightvnc-1.5.0-20081015svn3022/vncviewer/parameters.cxx.viewer-reparent tightvnc-1.5.0-20081015svn3022/vncviewer/parameters.cxx |
110 | --- tightvnc-1.5.0-20081015svn3022/vncviewer/parameters.cxx.viewer-reparent 2008-10-23 13:11:39.000000000 +0200 | |
111 | +++ tightvnc-1.5.0-20081015svn3022/vncviewer/parameters.cxx 2008-10-23 13:12:59.000000000 +0200 | |
13a33bd9 | 112 | @@ -106,6 +106,9 @@ StringParameter displayname("display", " |
7470b97a JR |
113 | StringParameter preferredEncoding("PreferredEncoding", |
114 | "Preferred encoding to use (Tight, ZRLE, Hextile or" | |
115 | " Raw)", "Tight"); | |
13a33bd9 JR |
116 | +/* Support for reparenting */ |
117 | +StringParameter embedParent("Parent", "X Window to use as a parent", ""); | |
118 | + | |
119 | BoolParameter customCompressLevel("CustomCompressLevel", | |
7470b97a JR |
120 | "Use custom compression level. " |
121 | "Default if CompressLevel is specified.", false); |