Magellan Linux

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1201 - (hide 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 niro 1201 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