Annotation of /trunk/vnc/patches/vnc-viewer-reparent.patch
Parent Directory | Revision Log
Revision 153 -
(hide 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 | niro | 153 | --- 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[]; |