Magellan Linux

Contents of /trunk/tigervnc/patches/tigervnc-1.0.1-r3927.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1201 - (show annotations) (download)
Mon Nov 22 23:25:59 2010 UTC (13 years, 5 months ago) by niro
File size: 10361 byte(s)
-patches for 1.0.1 against xorg-server-1.7
1 Index: unix/xserver/hw/vnc/xvnc.cc
2 ===================================================================
3 --- unix/xserver/hw/vnc/xvnc.cc (revision 3926)
4 +++ unix/xserver/hw/vnc/xvnc.cc (revision 3927)
5 @@ -81,6 +81,12 @@
6 #endif /* RANDR */
7 #include <X11/keysym.h>
8 extern char buildtime[];
9 +#if XORG >= 17
10 +#undef VENDOR_RELEASE
11 +#undef VENDOR_STRING
12 +#include "version-config.h"
13 +#include "site.h"
14 +#endif
15 #undef class
16 #undef public
17 }
18 Index: unix/xserver/hw/vnc/Input.cc
19 ===================================================================
20 --- unix/xserver/hw/vnc/Input.cc (revision 3926)
21 +++ unix/xserver/hw/vnc/Input.cc (revision 3927)
22 @@ -43,9 +43,17 @@
23 #endif
24 #if XORG >= 16
25 #include "exevents.h"
26 +#endif
27 +#if XORG == 16
28 extern void
29 CopyKeyClass(DeviceIntPtr device, DeviceIntPtr master);
30 #endif
31 +#if XORG >= 17
32 +#include "xkbsrv.h"
33 +#include "xkbstr.h"
34 +#include "xserver-properties.h"
35 +extern _X_EXPORT DevPrivateKey CoreDevicePrivateKey;
36 +#endif
37 #include <X11/keysym.h>
38 #include <X11/Xutil.h>
39 #undef public
40 @@ -99,8 +107,10 @@
41 mieqEnqueue(dev,
42 #if XORG == 15
43 eventq + i
44 +#elif XORG == 16
45 + (eventq + i)->event
46 #else
47 - (eventq + i)->event
48 + (InternalEvent *) (eventq + i)->event
49 #endif
50 );
51 }
52 @@ -169,18 +179,43 @@
53 BYTE map[BUTTONS + 1];
54 DevicePtr pDev = (DevicePtr)pDevice;
55 int i;
56 +#if XORG >= 17
57 + /*
58 + * NOTE: map[] array is one element longer than btn_labels[] array. This
59 + * is not a bug.
60 + */
61 + Atom btn_labels[BUTTONS];
62 + Atom axes_labels[2];
63 +#endif
64
65 switch (onoff) {
66 case DEVICE_INIT:
67 for (i = 0; i < BUTTONS + 1; i++)
68 map[i] = i;
69
70 +#if XORG >= 17
71 + btn_labels[0] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_LEFT);
72 + btn_labels[1] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_MIDDLE);
73 + btn_labels[2] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_RIGHT);
74 + btn_labels[3] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_WHEEL_UP);
75 + btn_labels[4] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_WHEEL_DOWN);
76 +
77 + axes_labels[0] = XIGetKnownProperty(AXIS_LABEL_PROP_REL_X);
78 + axes_labels[1] = XIGetKnownProperty(AXIS_LABEL_PROP_REL_Y);
79 +#endif
80 +
81 InitPointerDeviceStruct(pDev, map, BUTTONS,
82 #if XORG == 15
83 GetMotionHistory,
84 +#elif XORG >= 17
85 + btn_labels,
86 #endif
87 (PtrCtrlProcPtr)NoopDDA,
88 - GetMotionHistorySize(), 2);
89 + GetMotionHistorySize(), 2
90 +#if XORG >= 17
91 + , axes_labels
92 +#endif
93 + );
94 break;
95 case DEVICE_ON:
96 pDev->on = TRUE;
97 @@ -239,33 +274,84 @@
98
99 void press()
100 {
101 + int state, index, maxKeysPerMod, keycode;
102 +#if XORG >= 17
103 + int ret;
104 + KeyCode *modmap = NULL;
105 +
106 + state = XkbStateFieldFromRec(&dev->u.master->key->xkbInfo->state);
107 +#else
108 KeyClassPtr keyc = dev->key;
109 - if (!(keyc->state & (1 << modIndex))) {
110 - int index = modIndex * keyc->maxKeysPerModifier;
111 - tempKeyEvent(keyc->modifierKeyMap[index], true);
112 - pressed = true;
113 + state = keyc->state;
114 +#endif
115 + if ((state & (1 << modIndex)) != 0)
116 + return;
117 +
118 +#if XORG >= 17
119 + if (generate_modkeymap(serverClient, dev, &modmap,
120 + &maxKeysPerMod) != Success) {
121 + vlog.error("generate_modkeymap failed");
122 + return;
123 }
124 +
125 + keycode = modmap[modIndex * maxKeysPerMod];
126 + xfree(modmap);
127 +#else
128 + maxKeysPerMod = keyc->maxKeysPerModifier;
129 + keycode = keyc->modifierKeyMap[modIndex * maxKeysPerMod];
130 +#endif
131 + tempKeyEvent(keycode, true, maxKeysPerMod);
132 + pressed = true;
133 }
134
135 void release()
136 {
137 - KeyClassPtr keyc = dev->key;
138 - if ((keyc->state & (1 << modIndex)) == 0)
139 + int state, maxKeysPerMod;
140 + KeyClassPtr keyc;
141 +#if XORG >= 17
142 + int ret;
143 + KeyCode *modmap = NULL;
144 +
145 + keyc = dev->u.master->key;
146 + state = XkbStateFieldFromRec(&keyc->xkbInfo->state);
147 +#else
148 + keyc = dev->key;
149 + state = keyc->state;
150 +#endif
151 + if ((state & (1 << modIndex)) == 0)
152 return;
153
154 - for (int k = 0; k < keyc->maxKeysPerModifier; k++) {
155 - int index = modIndex * keyc->maxKeysPerModifier + k;
156 - int keycode = keyc->modifierKeyMap[index];
157 +#if XORG >= 17
158 + if (generate_modkeymap(serverClient, dev, &modmap,
159 + &maxKeysPerMod) != Success) {
160 + vlog.error("generate_modkeymap failed");
161 + return;
162 + }
163 +#else
164 + maxKeysPerMod = keyc->maxKeysPerModifier;
165 +#endif
166 +
167 + for (int k = 0; k < maxKeysPerMod; k++) {
168 + int keycode;
169 + int index = modIndex * maxKeysPerMod + k;
170 +#if XORG >= 17
171 + keycode = modmap[index];
172 +#else
173 + keycode = keyc->modifierKeyMap[index];
174 +#endif
175 if (keycode && IS_PRESSED(keyc, keycode))
176 - tempKeyEvent(keycode, false);
177 + tempKeyEvent(keycode, false, maxKeysPerMod);
178 }
179 +#if XORG >= 17
180 + xfree(modmap);
181 +#endif
182 }
183
184 private:
185 - void tempKeyEvent(int keycode, bool down)
186 + void tempKeyEvent(int keycode, bool down, int maxKeysPerMod)
187 {
188 if (keycode) {
189 - if (!keys) keys = new int[dev->key->maxKeysPerModifier];
190 + if (!keys) keys = new int[maxKeysPerMod];
191 keys[nKeys++] = keycode;
192 generateXKeyEvent(keycode, down);
193 }
194 @@ -361,17 +447,28 @@
195 * synchronized with proper master device
196 */
197
198 +#if XORG >= 17
199 +#define FREE_MAPS \
200 + do { \
201 + xfree(modmap); \
202 + xfree(keymap->map); \
203 + xfree(keymap); \
204 + } while (0);
205 +#else
206 +#define FREE_MAPS
207 +#endif
208 +
209 void KeyboardDevice::keyEvent(rdr::U32 keysym, bool down)
210 {
211 DeviceIntPtr master;
212 - KeyClassPtr keyc = dev->key;
213 - KeySymsPtr keymap = &keyc->curKeySyms;
214 - KeySym *map = keymap->map;
215 - KeyCode minKeyCode = keymap->minKeyCode;
216 - KeyCode maxKeyCode = keymap->maxKeyCode;
217 - int mapWidth = keymap->mapWidth;
218 + KeyClassPtr keyc;
219 + KeySymsPtr keymap = NULL;
220 + KeySym *map = NULL;
221 + KeyCode minKeyCode, maxKeyCode;
222 + KeyCode *modmap = NULL;
223 + int mapWidth;
224 unsigned int i, n;
225 - int j, k, action;
226 + int j, k, action, state, maxKeysPerMod;
227
228 /*
229 * Since we are checking the current state to determine if we need
230 @@ -385,13 +482,43 @@
231 vlog.debug("Ignoring caps lock");
232 return;
233 }
234 +vlog.debug("keysym %d", keysym);
235 +#if XORG >= 17
236 + keyc = dev->u.master->key;
237
238 + keymap = XkbGetCoreMap(dev);
239 + if (!keymap) {
240 + vlog.error("VNC keyboard device has no map");
241 + return;
242 + }
243 +
244 + if (generate_modkeymap(serverClient, dev, &modmap, &maxKeysPerMod)
245 + != Success) {
246 + vlog.error("generate_modkeymap failed");
247 + xfree(keymap->map);
248 + xfree(keymap);
249 + return;
250 + }
251 +
252 + state = XkbStateFieldFromRec(&keyc->xkbInfo->state);
253 +#else
254 + keyc = dev->key;
255 + state = keyc->state;
256 + maxKeysPerMod = keyc->maxKeysPerModifier;
257 + keymap = &keyc->curKeySyms;
258 + modmap = keyc->modifierKeyMap;
259 +#endif
260 + map = keymap->map;
261 + minKeyCode = keymap->minKeyCode;
262 + maxKeyCode = keymap->maxKeyCode;
263 + mapWidth = keymap->mapWidth;
264 +
265 /* find which modifier Mode_switch is on. */
266 int modeSwitchMapIndex = 0;
267 for (i = 3; i < 8; i++) {
268 - for (k = 0; k < keyc->maxKeysPerModifier; k++) {
269 - int index = i * keyc->maxKeysPerModifier + k;
270 - int keycode = keyc->modifierKeyMap[index];
271 + for (k = 0; k < maxKeysPerMod; k++) {
272 + int index = i * maxKeysPerMod + k;
273 + int keycode = modmap[index];
274
275 if (keycode == 0)
276 continue;
277 @@ -408,10 +535,10 @@
278 ModeSwitchFound:
279
280 int col = 0;
281 - if ((keyc->state & (1 << ShiftMapIndex)) != 0)
282 + if ((state & (1 << ShiftMapIndex)) != 0)
283 col |= 1;
284 if (modeSwitchMapIndex != 0 &&
285 - ((keyc->state & (1 << modeSwitchMapIndex))) != 0)
286 + ((state & (1 << modeSwitchMapIndex))) != 0)
287 col |= 2;
288
289 int kc = KeysymToKeycode(keymap, keysym, &col);
290 @@ -424,7 +551,7 @@
291 * We never get ISO_Left_Tab here because it's already been translated
292 * in VNCSConnectionST.
293 */
294 - if (keysym == XK_Tab && ((keyc->state & (1 << ShiftMapIndex))) != 0)
295 + if (keysym == XK_Tab && ((state & (1 << ShiftMapIndex))) != 0)
296 col |= 1;
297
298 if (kc == 0) {
299 @@ -455,6 +582,8 @@
300
301 vlog.info("Added unknown keysym 0x%x to keycode %d",
302 keysym, kc);
303 +
304 +#if XORG < 17
305 #if XORG == 15
306 master = inputInfo.keyboard;
307 #else
308 @@ -471,6 +600,12 @@
309 CopyKeyClass(dev, master);
310 #endif
311 }
312 +#else /* XORG < 17 */
313 + XkbApplyMappingChange(dev, keymap, minKeyCode,
314 + maxKeyCode - minKeyCode + 1,
315 + NULL, serverClient);
316 + XkbCopyDeviceKeymap(dev->u.master, dev);
317 +#endif /* XORG < 17 */
318 break;
319 }
320 }
321 @@ -478,6 +613,7 @@
322 if (kc < minKeyCode) {
323 vlog.info("Keyboard mapping full - ignoring unknown keysym "
324 "0x%x",keysym);
325 + FREE_MAPS;
326 return;
327 }
328
329 @@ -487,11 +623,12 @@
330 * followed by a press.
331 */
332 for (i = 0; i < 8; i++) {
333 - for (k = 0; k < keyc->maxKeysPerModifier; k++) {
334 - int index = i * keyc->maxKeysPerModifier + k;
335 - if (kc == keyc->modifierKeyMap[index] &&
336 - IS_PRESSED(keyc,kc) && down)
337 + for (k = 0; k < maxKeysPerMod; k++) {
338 + int index = i * maxKeysPerMod + k;
339 + if (kc == modmap[index] && IS_PRESSED(keyc,kc) && down) {
340 + FREE_MAPS;
341 return;
342 + }
343 }
344 }
345
346 @@ -761,9 +898,16 @@
347
348 switch (onoff) {
349 case DEVICE_INIT:
350 +#if XORG < 17
351 GetMappings(&keySyms, modMap);
352 - InitKeyboardDeviceStruct(pDev, &keySyms, modMap, keyboardBell,
353 - (KbdCtrlProcPtr)NoopDDA);
354 +#endif
355 + InitKeyboardDeviceStruct(
356 +#if XORG >= 17
357 + pDevice, NULL,
358 +#else
359 + pDev, &keySyms, modMap,
360 +#endif
361 + keyboardBell, (KbdCtrlProcPtr)NoopDDA);
362 break;
363 case DEVICE_ON:
364 pDev->on = TRUE;
365 Index: unix/xserver/hw/vnc/xorg-version.h
366 ===================================================================
367 --- unix/xserver/hw/vnc/xorg-version.h (revision 3926)
368 +++ unix/xserver/hw/vnc/xorg-version.h (revision 3927)
369 @@ -26,8 +26,12 @@
370
371 #if XORG_VERSION_CURRENT < ((1 * 10000000) + (5 * 100000) + (99 * 1000))
372 #define XORG 15
373 +#elif XORG_VERSION_CURRENT < ((1 * 10000000) + (6 * 100000) + (99 * 1000))
374 +#define XORG 16
375 +#elif XORG_VERSION_CURRENT < ((1 * 10000000) + (7 * 100000) + (99 * 1000))
376 +#define XORG 17
377 #else
378 -#define XORG 16
379 +#error "X.Org newer than 1.7 is not supported"
380 #endif
381
382 #endif
383 Index: unix/xserver/hw/vnc/XserverDesktop.cc
384 ===================================================================
385 --- unix/xserver/hw/vnc/XserverDesktop.cc (revision 3926)
386 +++ unix/xserver/hw/vnc/XserverDesktop.cc (revision 3927)
387 @@ -54,6 +54,10 @@
388 #ifdef RANDR
389 #include "randrstr.h"
390 #endif
391 +#if XORG >= 17
392 +#include "cursorstr.h"
393 +#endif
394 +
395 #undef public
396 #undef class
397 }
398 @@ -185,6 +189,9 @@
399 int i;
400 pointer retval;
401
402 +#if XORG >= 17
403 +#define dixLookupResource dixLookupResourceByType
404 +#endif
405 i = dixLookupResource(&retval, pScreen->defColormap, RT_COLORMAP, NullClient,
406 DixReadAccess);
407