Properly initialize keyboard auto-repeat for all X connections.

diff --git a/dlls/x11drv/keyboard.c b/dlls/x11drv/keyboard.c
index 2dd14ff..20b8214 100644
--- a/dlls/x11drv/keyboard.c
+++ b/dlls/x11drv/keyboard.c
@@ -58,9 +58,6 @@
 static LPBYTE pKeyStateTable;
 static int NumLockMask, AltGrMask; /* mask in the XKeyEvent state */
 static int kcControl, kcAlt, kcShift, kcNumLock, kcCapsLock; /* keycodes */
-#ifdef HAVE_XKB
-static int is_xkb, xkb_opcode, xkb_event, xkb_error;
-#endif
 
 static char KEYBOARD_MapDeadKeysym(KeySym keysym);
 
@@ -1124,7 +1121,7 @@
 	if ((keysym < 0x8000) && (keysym != ' '))
         {
 #ifdef HAVE_XKB
-            if (!is_xkb || !XkbTranslateKeySym(display, &keysym, 0, &ckey[i], 1, NULL))
+            if (!use_xkb || !XkbTranslateKeySym(display, &keysym, 0, &ckey[i], 1, NULL))
 #endif
             {
                 TRACE("XKB could not translate keysym %ld\n", keysym);
@@ -1200,9 +1197,6 @@
  */
 void X11DRV_InitKeyboard( BYTE *key_state_table )
 {
-#ifdef HAVE_XKB
-    int xkb_major = XkbMajorVersion, xkb_minor = XkbMinorVersion;
-#endif
     Display *display = thread_display();
     KeySym *ksp;
     XModifierKeymap *mmp;
@@ -1217,15 +1211,6 @@
     pKeyStateTable = key_state_table;
 
     wine_tsx11_lock();
-#ifdef HAVE_XKB
-    is_xkb = XkbQueryExtension(display,
-                               &xkb_opcode, &xkb_event, &xkb_error,
-                               &xkb_major, &xkb_minor);
-    if (is_xkb) {
-        /* we have XKB, approximate Windows behaviour */
-        XkbSetDetectableAutoRepeat(display, True, NULL);
-    }
-#endif
     XDisplayKeycodes(display, &min_keycode, &max_keycode);
     ksp = XGetKeyboardMapping(display, min_keycode,
                               max_keycode + 1 - min_keycode, &keysyms_per_keycode);
@@ -1291,7 +1276,7 @@
 		if ((keysym<0x8000) && (keysym!=' '))
                 {
 #ifdef HAVE_XKB
-                    if (!is_xkb || !XkbTranslateKeySym(display, &keysym, 0, &ckey[i], 1, NULL))
+                    if (!use_xkb || !XkbTranslateKeySym(display, &keysym, 0, &ckey[i], 1, NULL))
 #endif
                     {
                         /* FIXME: query what keysym is used as Mode_switch, fill XKeyEvent
diff --git a/dlls/x11drv/x11drv_main.c b/dlls/x11drv/x11drv_main.c
index 688551c..5e4df9d 100644
--- a/dlls/x11drv/x11drv_main.c
+++ b/dlls/x11drv/x11drv_main.c
@@ -33,6 +33,9 @@
 #endif
 #include <X11/cursorfont.h>
 #include "ts_xlib.h"
+#ifdef HAVE_XKB
+#include <X11/XKBlib.h>
+#endif
 
 #include "winbase.h"
 #include "wine/winbase16.h"
@@ -59,6 +62,7 @@
 Window root_window;
 DWORD desktop_tid = 0;
 int dxgrab, usedga, usexvidmode;
+int use_xkb = 1;
 int use_take_focus = 1;
 int managed_mode = 1;
 int client_side_with_core = 1;
@@ -318,6 +322,20 @@
     }
     else screen_depth = DefaultDepthOfScreen( screen );
 
+    /* check for Xkb extension */
+#ifdef HAVE_XKB
+    if (use_xkb)
+    {
+        int xkb_opcode, xkb_event, xkb_error;
+        int xkb_major = XkbMajorVersion, xkb_minor = XkbMinorVersion;
+
+        use_xkb = XkbQueryExtension(display, &xkb_opcode, &xkb_event, &xkb_error,
+                                    &xkb_major, &xkb_minor);
+        if (use_xkb) /* we have XKB, approximate Windows behaviour */
+            XkbSetDetectableAutoRepeat(display, True, NULL);
+    }
+#endif
+
     /* Initialize OpenGL */
     X11DRV_OpenGL_Init(display);
 
@@ -427,6 +445,10 @@
     if (!(data->xim = XOpenIM( data->display, NULL, NULL, NULL )))
         WARN("Can't open input method\n");
 
+#ifdef HAVE_XKB
+    if (use_xkb) XkbSetDetectableAutoRepeat( data->display, True, NULL );
+#endif
+
     if (synchronous) XSynchronize( data->display, True );
     wine_tsx11_unlock();
     if (wine_server_fd_to_handle( ConnectionNumber(data->display), GENERIC_READ | SYNCHRONIZE,
diff --git a/include/x11drv.h b/include/x11drv.h
index 58d54f4..4604861 100644
--- a/include/x11drv.h
+++ b/include/x11drv.h
@@ -358,6 +358,7 @@
 extern unsigned int screen_height;
 extern unsigned int screen_depth;
 extern unsigned int text_caps;
+extern int use_xkb;
 extern int use_take_focus;
 extern int managed_mode;