--- /dev/null
+diff -up tigervnc-1.0.90/unix/xserver/hw/vnc/Input.cc.xorg111 tigervnc-1.0.90/unix/xserver/hw/vnc/Input.cc
+--- tigervnc-1.0.90/unix/xserver/hw/vnc/Input.cc.xorg111 2011-05-12 10:42:52.813229993 +0200
++++ tigervnc-1.0.90/unix/xserver/hw/vnc/Input.cc 2011-05-12 10:52:41.036211939 +0200
+@@ -305,7 +305,7 @@ static inline void pressKey(DeviceIntPtr
+ vlog.debug("%s %d %s", msg, kc, down ? "down" : "up");
+
+ action = down ? KeyPress : KeyRelease;
+- n = GetKeyboardEvents(eventq, dev, action, kc);
++ n = GetKeyboardEvents(eventq, dev, action, kc, NULL);
+ enqueueEvents(dev, n);
+ }
+
+@@ -341,8 +341,11 @@ public:
+ int state, maxKeysPerMod, keycode;
+ #if XORG >= 17
+ KeyCode *modmap = NULL;
++ DeviceIntPtr master;
+
+- state = XkbStateFieldFromRec(&dev->u.master->key->xkbInfo->state);
++ master = GetMaster(dev, MASTER_KEYBOARD);
++
++ state = XkbStateFieldFromRec(&master->key->xkbInfo->state);
+ #else
+ KeyClassPtr keyc = dev->key;
+ state = keyc->state;
+@@ -379,8 +382,10 @@ public:
+ KeyClassPtr keyc;
+ #if XORG >= 17
+ KeyCode *modmap = NULL;
++ DeviceIntPtr master;
+
+- keyc = dev->u.master->key;
++ master = GetMaster(dev, MASTER_KEYBOARD);
++ keyc = master->key;
+ state = XkbStateFieldFromRec(&keyc->xkbInfo->state);
+ #else
+ keyc = dev->key;
+@@ -565,9 +570,7 @@ static inline int isModifier(KeySymsPtr
+
+ void InputDevice::keyEvent(rdr::U32 keysym, bool down)
+ {
+-#if XORG < 17
+ DeviceIntPtr master;
+-#endif
+ KeyClassPtr keyc;
+ KeySymsPtr keymap = NULL;
+ KeySym *map = NULL;
+@@ -596,7 +599,8 @@ void InputDevice::keyEvent(rdr::U32 keys
+ }
+
+ #if XORG >= 17
+- keyc = keyboardDev->u.master->key;
++ master = GetMaster(keyboardDev, MASTER_KEYBOARD);
++ keyc = master->key;
+
+ keymap = XkbGetCoreMap(keyboardDev);
+ if (!keymap) {
+@@ -753,7 +757,7 @@ ModeSwitchFound:
+ XkbApplyMappingChange(keyboardDev, keymap, minKeyCode,
+ maxKeyCode - minKeyCode + 1,
+ NULL, serverClient);
+- XkbCopyDeviceKeymap(keyboardDev->u.master, keyboardDev);
++ XkbCopyDeviceKeymap(master, keyboardDev);
+ #endif /* XORG < 17 */
+ break;
+ }
+diff -up tigervnc-1.0.90/unix/xserver/hw/vnc/xorg-version.h.xorg111 tigervnc-1.0.90/unix/xserver/hw/vnc/xorg-version.h
+--- tigervnc-1.0.90/unix/xserver/hw/vnc/xorg-version.h.xorg111 2011-05-12 10:40:34.109227333 +0200
++++ tigervnc-1.0.90/unix/xserver/hw/vnc/xorg-version.h 2011-05-12 10:41:10.970229530 +0200
+@@ -36,6 +36,8 @@
+ #define XORG 19
+ #elif XORG_VERSION_CURRENT < ((1 * 10000000) + (10 * 100000) + (99 * 1000))
+ #define XORG 110
++#elif XORG_VERSION_CURRENT < ((1 * 10000000) + (11 * 100000) + (99 * 1000))
++#define XORG 111
+ #else
+ #error "X.Org newer than 1.10 is not supported"
+ #endif
+diff -up tigervnc-1.0.90/unix/xserver/hw/vnc/xvnc.cc.xorg111 tigervnc-1.0.90/unix/xserver/hw/vnc/xvnc.cc
+--- tigervnc-1.0.90/unix/xserver/hw/vnc/xvnc.cc.xorg111 2011-05-12 10:54:21.068235787 +0200
++++ tigervnc-1.0.90/unix/xserver/hw/vnc/xvnc.cc 2011-05-12 10:59:01.867225478 +0200
+@@ -670,8 +670,13 @@ vfbUninstallColormap(ColormapPtr pmap)
+ {
+ if (pmap->mid != pmap->pScreen->defColormap)
+ {
++#if XORG < 111
+ curpmap = (ColormapPtr) LookupIDByType(pmap->pScreen->defColormap,
+ RT_COLORMAP);
++#else
++ dixLookupResourceByType((pointer *) &curpmap, pmap->pScreen->defColormap,
++ RT_COLORMAP, serverClient, DixUnknownAccess);
++#endif
+ (*pmap->pScreen->InstallColormap)(curpmap);
+ }
+ }