1
0
mirror of https://github.com/wine-mirror/wine synced 2024-07-05 09:18:56 +00:00

winex11: Assume that Xkb extension is available.

This commit is contained in:
Rémi Bernon 2023-02-27 10:57:58 +01:00 committed by Alexandre Julliard
parent 0410660d6e
commit ad5cb8305f
6 changed files with 13 additions and 95 deletions

46
configure vendored
View File

@ -14465,52 +14465,6 @@ then :
fi
if test "$ac_cv_header_X11_XKBlib_h" = "yes"
then
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for XkbQueryExtension in -lX11" >&5
printf %s "checking for XkbQueryExtension in -lX11... " >&6; }
if test ${ac_cv_lib_X11_XkbQueryExtension+y}
then :
printf %s "(cached) " >&6
else $as_nop
ac_check_lib_save_LIBS=$LIBS
LIBS="-lX11 $X_LIBS $X_EXTRA_LIBS $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
/* Override any GCC internal prototype to avoid an error.
Use char because int might match the return type of a GCC
builtin and then its argument prototype would still apply. */
char XkbQueryExtension ();
int
main (void)
{
return XkbQueryExtension ();
;
return 0;
}
_ACEOF
if ac_fn_c_try_link "$LINENO"
then :
ac_cv_lib_X11_XkbQueryExtension=yes
else $as_nop
ac_cv_lib_X11_XkbQueryExtension=no
fi
rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_X11_XkbQueryExtension" >&5
printf "%s\n" "$ac_cv_lib_X11_XkbQueryExtension" >&6; }
if test "x$ac_cv_lib_X11_XkbQueryExtension" = xyes
then :
printf "%s\n" "#define HAVE_XKB 1" >>confdefs.h
fi
fi
if test "$ac_cv_header_X11_Xcursor_Xcursor_h" = "yes"
then
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for -lXcursor" >&5

View File

@ -1174,13 +1174,6 @@ then
# include <X11/Xutil.h>
#endif])
dnl *** Check for X keyboard extension
if test "$ac_cv_header_X11_XKBlib_h" = "yes"
then
AC_CHECK_LIB(X11, XkbQueryExtension,
AC_DEFINE(HAVE_XKB, 1, [Define if you have the XKB extension]),,[$X_LIBS $X_EXTRA_LIBS])
fi
dnl *** Check for X cursor
if test "$ac_cv_header_X11_Xcursor_Xcursor_h" = "yes"
then

View File

@ -34,9 +34,7 @@
#include <X11/Xlib.h>
#include <X11/Xresource.h>
#include <X11/Xutil.h>
#ifdef HAVE_X11_XKBLIB_H
#include <X11/XKBlib.h>
#endif
#include <ctype.h>
#include <stdarg.h>
@ -66,7 +64,6 @@ WINE_DECLARE_DEBUG_CHANNEL(key);
static const unsigned int ControlMask = 1 << 2;
static int min_keycode, max_keycode, keysyms_per_keycode;
static KeySym *key_mapping;
static WORD keyc2vkey[256], keyc2scan[256];
static int NumLockMask, ScrollLockMask, AltGrMask; /* mask in the XKeyEvent state */
@ -1089,14 +1086,6 @@ static const WORD xfree86_vendor_key_vkey[256] =
0, 0, 0, 0, 0, 0, 0, 0 /* 1008FFF8 */
};
static inline KeySym keycode_to_keysym( Display *display, KeyCode keycode, int index )
{
#ifdef HAVE_XKB
if (use_xkb) return XkbKeycodeToKeysym(display, keycode, 0, index);
#endif
return key_mapping[(keycode - min_keycode) * keysyms_per_keycode + index];
}
/* Returns the Windows virtual key code associated with the X event <e> */
/* kbd_section must be held */
static WORD EVENT_event_to_vkey( XIC xic, XKeyEvent *e)
@ -1442,13 +1431,11 @@ X11DRV_KEYBOARD_DetectLayout( Display *display )
for (keyc = min_keycode; keyc <= max_keycode; keyc++) {
/* get data for keycode from X server */
for (i = 0; i < syms; i++) {
if (!(keysym = keycode_to_keysym (display, keyc, i))) continue;
if (!(keysym = XkbKeycodeToKeysym( display, keyc, 0, i ))) continue;
/* Allow both one-byte and two-byte national keysyms */
if ((keysym < 0x8000) && (keysym != ' '))
{
#ifdef HAVE_XKB
if (!use_xkb || !XkbTranslateKeySym(display, &keysym, 0, &ckey[keyc][i], 1, NULL))
#endif
if (!XkbTranslateKeySym(display, &keysym, 0, &ckey[keyc][i], 1, NULL))
{
TRACE("XKB could not translate keysym %04lx\n", keysym);
/* FIXME: query what keysym is used as Mode_switch, fill XKeyEvent
@ -1597,9 +1584,7 @@ void X11DRV_InitKeyboard( Display *display )
pthread_mutex_lock( &kbd_mutex );
XDisplayKeycodes(display, &min_keycode, &max_keycode);
if (key_mapping) XFree( key_mapping );
key_mapping = XGetKeyboardMapping(display, min_keycode,
max_keycode + 1 - min_keycode, &keysyms_per_keycode);
XFree( XGetKeyboardMapping( display, min_keycode, max_keycode + 1 - min_keycode, &keysyms_per_keycode ) );
mmp = XGetModifierMapping(display);
kcp = mmp->modifiermap;
@ -1613,12 +1598,12 @@ void X11DRV_InitKeyboard( Display *display )
int k;
for (k = 0; k < keysyms_per_keycode; k += 1)
if (keycode_to_keysym(display, *kcp, k) == XK_Num_Lock)
if (XkbKeycodeToKeysym( display, *kcp, 0, k ) == XK_Num_Lock)
{
NumLockMask = 1 << i;
TRACE_(key)("NumLockMask is %x\n", NumLockMask);
}
else if (keycode_to_keysym(display, *kcp, k) == XK_Scroll_Lock)
else if (XkbKeycodeToKeysym( display, *kcp, 0, k ) == XK_Scroll_Lock)
{
ScrollLockMask = 1 << i;
TRACE_(key)("ScrollLockMask is %x\n", ScrollLockMask);
@ -1670,12 +1655,10 @@ void X11DRV_InitKeyboard( Display *display )
/* we seem to need to search the layout-dependent scancodes */
int maxlen=0,maxval=-1,ok;
for (i=0; i<syms; i++) {
keysym = keycode_to_keysym(display, keyc, i);
keysym = XkbKeycodeToKeysym( display, keyc, 0, i );
if ((keysym<0x8000) && (keysym!=' '))
{
#ifdef HAVE_XKB
if (!use_xkb || !XkbTranslateKeySym(display, &keysym, 0, &ckey[i], 1, NULL))
#endif
if (!XkbTranslateKeySym(display, &keysym, 0, &ckey[i], 1, NULL))
{
/* FIXME: query what keysym is used as Mode_switch, fill XKeyEvent
* with appropriate ShiftMask and Mode_switch, use XLookupString
@ -1822,7 +1805,7 @@ void X11DRV_InitKeyboard( Display *display )
for (scan = 0x60, keyc = min_keycode; keyc <= max_keycode; keyc++)
if (keyc2vkey[keyc]&&!keyc2scan[keyc]) {
const char *ksname;
keysym = keycode_to_keysym(display, keyc, 0);
keysym = XkbKeycodeToKeysym( display, keyc, 0, 0 );
ksname = XKeysymToString(keysym);
if (!ksname) ksname = "NoSymbol";
@ -1949,7 +1932,7 @@ SHORT X11DRV_VkKeyScanEx( WCHAR wChar, HKL hkl )
}
for (index = 0; index < 4; index++) /* find shift state */
if (keycode_to_keysym(display, keycode, index) == keysym) break;
if (XkbKeycodeToKeysym( display, keycode, 0, index ) == keysym) break;
pthread_mutex_unlock( &kbd_mutex );
@ -2201,7 +2184,7 @@ INT X11DRV_GetKeyNameText( LONG lParam, LPWSTR lpBuffer, INT nSize )
INT rc;
keyc = (KeyCode) keyi;
keys = keycode_to_keysym(display, keyc, 0);
keys = XkbKeycodeToKeysym( display, keyc, 0, 0 );
name = XKeysymToString(keys);
if (name && (vkey == VK_SHIFT || vkey == VK_CONTROL || vkey == VK_MENU))

View File

@ -433,7 +433,6 @@ extern Window root_window DECLSPEC_HIDDEN;
extern BOOL clipping_cursor DECLSPEC_HIDDEN;
extern BOOL keyboard_grabbed DECLSPEC_HIDDEN;
extern unsigned int screen_bpp DECLSPEC_HIDDEN;
extern BOOL use_xkb DECLSPEC_HIDDEN;
extern BOOL usexrandr DECLSPEC_HIDDEN;
extern BOOL usexvidmode DECLSPEC_HIDDEN;
extern BOOL ximInComposeMode DECLSPEC_HIDDEN;

View File

@ -36,9 +36,7 @@
#include <dlfcn.h>
#include <X11/cursorfont.h>
#include <X11/Xlib.h>
#ifdef HAVE_XKB
#include <X11/XKBlib.h>
#endif
#ifdef HAVE_X11_EXTENSIONS_XRENDER_H
#include <X11/extensions/Xrender.h>
#endif
@ -72,7 +70,6 @@ Window root_window;
BOOL usexvidmode = TRUE;
BOOL usexrandr = TRUE;
BOOL usexcomposite = TRUE;
BOOL use_xkb = TRUE;
BOOL use_take_focus = TRUE;
BOOL use_primary_selection = FALSE;
BOOL use_system_cursors = TRUE;
@ -708,9 +705,7 @@ static NTSTATUS x11drv_init( void *arg )
#endif
X11DRV_XInput2_Init();
#ifdef HAVE_XKB
if (use_xkb) use_xkb = XkbUseExtension( gdi_display, NULL, NULL );
#endif
XkbUseExtension( gdi_display, NULL, NULL );
X11DRV_InitKeyboard( gdi_display );
if (use_xim) use_xim = X11DRV_InitXIM( input_style );
@ -789,11 +784,8 @@ struct x11drv_thread_data *x11drv_init_thread_data(void)
fcntl( ConnectionNumber(data->display), F_SETFD, 1 ); /* set close on exec flag */
#ifdef HAVE_XKB
if (use_xkb && XkbUseExtension( data->display, NULL, NULL ))
XkbSetDetectableAutoRepeat( data->display, True, NULL );
#endif
XkbUseExtension( data->display, NULL, NULL );
XkbSetDetectableAutoRepeat( data->display, True, NULL );
if (TRACE_ON(synchronous)) XSynchronize( data->display, True );
set_queue_display_fd( data->display );

View File

@ -696,9 +696,6 @@
/* Define to 1 if `callback' is a member of `XICCallback'. */
#undef HAVE_XICCALLBACK_CALLBACK
/* Define if you have the XKB extension */
#undef HAVE_XKB
/* Define if Xrender has the XRenderCreateLinearGradient function */
#undef HAVE_XRENDERCREATELINEARGRADIENT