mirror of https://github.com/encounter/SDL.git
Query version for X11 XInput2 multitouch separately from base XInput2.
This commit is contained in:
parent
9095952ac4
commit
a218717111
|
@ -59,6 +59,18 @@ static void parse_valuators(const double *input_values,unsigned char *mask,int m
|
||||||
z++;
|
z++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static SDL_bool
|
||||||
|
xinput2_version_okay(Display *display, const int major, const int minor)
|
||||||
|
{
|
||||||
|
int outmajor = major;
|
||||||
|
int outminor = minor;
|
||||||
|
if (X11_XIQueryVersion(display, &outmajor, &outminor) != Success) {
|
||||||
|
return SDL_FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ( ((outmajor * 1000) + outminor) >= ((major * 1000) + minor) );
|
||||||
|
}
|
||||||
#endif /* SDL_VIDEO_DRIVER_X11_XINPUT2 */
|
#endif /* SDL_VIDEO_DRIVER_X11_XINPUT2 */
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -70,11 +82,6 @@ X11_InitXinput2(_THIS)
|
||||||
XIEventMask eventmask;
|
XIEventMask eventmask;
|
||||||
unsigned char mask[3] = { 0,0,0 };
|
unsigned char mask[3] = { 0,0,0 };
|
||||||
int event, err;
|
int event, err;
|
||||||
int major = 2, minor = 0;
|
|
||||||
int outmajor,outminor;
|
|
||||||
#if SDL_VIDEO_DRIVER_X11_XINPUT2_SUPPORTS_MULTITOUCH
|
|
||||||
minor = 2;
|
|
||||||
#endif
|
|
||||||
/*
|
/*
|
||||||
* Initialize XInput 2
|
* Initialize XInput 2
|
||||||
* According to http://who-t.blogspot.com/2009/05/xi2-recipes-part-1.html its better
|
* According to http://who-t.blogspot.com/2009/05/xi2-recipes-part-1.html its better
|
||||||
|
@ -86,24 +93,17 @@ X11_InitXinput2(_THIS)
|
||||||
*/
|
*/
|
||||||
if (!SDL_X11_HAVE_XINPUT2 ||
|
if (!SDL_X11_HAVE_XINPUT2 ||
|
||||||
!X11_XQueryExtension(data->display, "XInputExtension", &xinput2_opcode, &event, &err)) {
|
!X11_XQueryExtension(data->display, "XInputExtension", &xinput2_opcode, &event, &err)) {
|
||||||
return;
|
return; /* X server does not have XInput at all */
|
||||||
}
|
}
|
||||||
|
|
||||||
outmajor = major;
|
if (!xinput2_version_okay(data->display, 2, 0)) {
|
||||||
outminor = minor;
|
return; /* X server does not support the version we want */
|
||||||
if (X11_XIQueryVersion(data->display, &outmajor, &outminor) != Success) {
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Check supported version */
|
|
||||||
if(outmajor * 1000 + outminor < major * 1000 + minor) {
|
|
||||||
/* X server does not support the version we want */
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
xinput2_initialized = 1;
|
xinput2_initialized = 1;
|
||||||
|
|
||||||
#if SDL_VIDEO_DRIVER_X11_XINPUT2_SUPPORTS_MULTITOUCH
|
#if SDL_VIDEO_DRIVER_X11_XINPUT2_SUPPORTS_MULTITOUCH
|
||||||
/* XInput 2.2 */
|
if (xinput2_version_okay(data->display, 2, 2)) { /* Multitouch needs XInput 2.2 */
|
||||||
if(outmajor * 1000 + outminor >= major * 1000 + minor) {
|
|
||||||
xinput2_multitouch_supported = 1;
|
xinput2_multitouch_supported = 1;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue