Contents of /trunk/vnc/patches/vnc-viewer-reparent.patch
Parent Directory | Revision Log
Revision 153 -
(show annotations)
(download)
Tue May 8 20:52:56 2007 UTC (17 years, 4 months ago) by niro
File size: 3899 byte(s)
Tue May 8 20:52:56 2007 UTC (17 years, 4 months ago) by niro
File size: 3899 byte(s)
-import
1 | --- vnc-4_1_1-unixsrc/unix/tx/TXWindow.h.viewer-reparent 2005-03-11 15:08:41.000000000 +0000 |
2 | +++ vnc-4_1_1-unixsrc/unix/tx/TXWindow.h 2005-12-01 17:55:38.000000000 +0000 |
3 | @@ -183,6 +183,9 @@ |
4 | |
5 | Display* const dpy; |
6 | |
7 | + TXEventHandler* eventHandler; |
8 | + long eventMask; |
9 | + |
10 | int xPad, yPad, bevel; |
11 | |
12 | private: |
13 | @@ -195,9 +198,7 @@ |
14 | TXWindow* parent; |
15 | Window win_; |
16 | int width_, height_; |
17 | - TXEventHandler* eventHandler; |
18 | TXDeleteWindowCallback* dwc; |
19 | - long eventMask; |
20 | XSizeHints sizeHints; |
21 | std::map<Atom,Time> selectionOwnTime; |
22 | std::map<Atom,bool> selectionOwner_; |
23 | --- vnc-4_1_1-unixsrc/unix/tx/TXViewport.cxx.viewer-reparent 2005-03-11 15:08:41.000000000 +0000 |
24 | +++ vnc-4_1_1-unixsrc/unix/tx/TXViewport.cxx 2005-12-01 17:55:38.000000000 +0000 |
25 | @@ -43,6 +43,21 @@ |
26 | delete vScrollbar; |
27 | } |
28 | |
29 | +void TXViewport::reparent(long embed_window) |
30 | +{ |
31 | + XReparentWindow(dpy, win(), (Window)embed_window, 0, 0); |
32 | + XSelectInput(dpy, embed_window, child->eventMask); |
33 | + if (!eventHandler) |
34 | + this->setEventHandler(this); |
35 | +} |
36 | + |
37 | +void TXViewport::handleEvent(TXWindow* w, XEvent* ev) |
38 | +{ |
39 | + if (child && child->eventHandler) |
40 | + ((TXEventHandler *)child->eventHandler)->handleEvent(child, ev); |
41 | +} |
42 | + |
43 | + |
44 | void TXViewport::setChild(TXWindow* child_) |
45 | { |
46 | child = child_; |
47 | --- vnc-4_1_1-unixsrc/unix/tx/TXViewport.h.viewer-reparent 2005-03-11 15:08:41.000000000 +0000 |
48 | +++ vnc-4_1_1-unixsrc/unix/tx/TXViewport.h 2005-12-01 17:55:38.000000000 +0000 |
49 | @@ -32,8 +32,8 @@ |
50 | #include "TXWindow.h" |
51 | #include "TXScrollbar.h" |
52 | |
53 | -class TXViewport : public TXWindow, public TXScrollbarCallback, |
54 | - public rfb::Timer::Callback { |
55 | +class TXViewport : public TXWindow, public TXScrollbarCallback, |
56 | + public TXEventHandler, public rfb::Timer::Callback { |
57 | public: |
58 | TXViewport(Display* dpy_, int width, int height, TXWindow* parent_=0); |
59 | virtual ~TXViewport(); |
60 | @@ -59,6 +59,12 @@ |
61 | // normally. |
62 | bool bumpScrollEvent(XMotionEvent* ev); |
63 | |
64 | + // reparent the viewport into a new window |
65 | + void reparent(long embed_window); |
66 | + |
67 | + // event handler |
68 | + void handleEvent(TXWindow* w, XEvent* ev); |
69 | + |
70 | private: |
71 | virtual void resizeNotify(); |
72 | virtual void scrollbarPos(int x, int y, TXScrollbar* sb); |
73 | --- vnc-4_1_1-unixsrc/unix/vncviewer/parameters.h.viewer-reparent 2005-03-11 15:08:41.000000000 +0000 |
74 | +++ vnc-4_1_1-unixsrc/unix/vncviewer/parameters.h 2005-12-01 17:55:38.000000000 +0000 |
75 | @@ -37,6 +37,7 @@ |
76 | extern rfb::BoolParameter sendPrimary; |
77 | extern rfb::BoolParameter fullScreen; |
78 | extern rfb::StringParameter geometry; |
79 | +extern rfb::StringParameter embedParent; |
80 | |
81 | extern char aboutText[]; |
82 | extern char* programName; |
83 | --- vnc-4_1_1-unixsrc/unix/vncviewer/CConn.cxx.viewer-reparent 2005-03-11 15:08:41.000000000 +0000 |
84 | +++ vnc-4_1_1-unixsrc/unix/vncviewer/CConn.cxx 2005-12-01 17:55:38.000000000 +0000 |
85 | @@ -586,10 +586,18 @@ |
86 | |
87 | void CConn::reconfigureViewport() |
88 | { |
89 | + const char * par = embedParent.getValueStr(); |
90 | viewport->setMaxSize(cp.width, cp.height); |
91 | if (fullScreen) { |
92 | viewport->resize(DisplayWidth(dpy,DefaultScreen(dpy)), |
93 | DisplayHeight(dpy,DefaultScreen(dpy))); |
94 | + } else if (strlen(par) != 0) { |
95 | + XWindowAttributes win_attr; |
96 | + Window w = strtol(par, (char **)NULL, 0); |
97 | + |
98 | + XGetWindowAttributes(dpy, w, &win_attr); |
99 | + viewport->reparent(w); |
100 | + viewport->resize(win_attr.width, win_attr.height); |
101 | } else { |
102 | int w = cp.width; |
103 | int h = cp.height; |
104 | --- vnc-4_1_1-unixsrc/unix/vncviewer/vncviewer.cxx.viewer-reparent 2005-12-01 17:54:46.000000000 +0000 |
105 | +++ vnc-4_1_1-unixsrc/unix/vncviewer/vncviewer.cxx 2005-12-01 17:55:38.000000000 +0000 |
106 | @@ -99,6 +99,9 @@ |
107 | /* Support for tunnelling */ |
108 | StringParameter via("via", "Gateway to tunnel via", ""); |
109 | |
110 | +/* Support for reparenting */ |
111 | +StringParameter embedParent("Parent", "X Window to use as a parent", ""); |
112 | + |
113 | char aboutText[256]; |
114 | char* programName; |
115 | extern char buildtime[]; |