Properly initialize keyboard auto-repeat for all X connections.
This commit is contained in:
parent
4fd679b0eb
commit
8d361bd41c
|
@ -58,9 +58,6 @@ WORD keyc2vkey[256], keyc2scan[256];
|
|||
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 @@ X11DRV_KEYBOARD_DetectLayout (void)
|
|||
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 @@ X11DRV_KEYBOARD_DetectLayout (void)
|
|||
*/
|
||||
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 @@ void X11DRV_InitKeyboard( BYTE *key_state_table )
|
|||
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 @@ void X11DRV_InitKeyboard( BYTE *key_state_table )
|
|||
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
|
||||
|
|
|
@ -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 @@ unsigned int screen_depth;
|
|||
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 @@ static void process_attach(void)
|
|||
}
|
||||
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 @@ struct x11drv_thread_data *x11drv_init_thread_data(void)
|
|||
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,
|
||||
|
|
|
@ -358,6 +358,7 @@ extern unsigned int screen_width;
|
|||
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;
|
||||
|
||||
|
|
Loading…
Reference in New Issue