diff --git a/src/core/display-private.h b/src/core/display-private.h index b03fffd69..3996bd66d 100644 --- a/src/core/display-private.h +++ b/src/core/display-private.h @@ -283,7 +283,10 @@ struct _MetaDisplay int damage_error_base; int xfixes_event_base; int xfixes_error_base; - + int xinput_error_base; + int xinput_event_base; + int xinput_opcode; + #ifdef HAVE_STARTUP_NOTIFICATION SnDisplay *sn_display; #endif diff --git a/src/core/display.c b/src/core/display.c index 1fd845f53..d01aff3d9 100644 --- a/src/core/display.c +++ b/src/core/display.c @@ -779,7 +779,26 @@ meta_display_open (void) the_display->xfixes_error_base, the_display->xfixes_event_base); } - + + { + int major = 2, minor = 2; + gboolean has_xi = FALSE; + + if (XQueryExtension (the_display->xdisplay, + "XInputExtension", + &the_display->xinput_opcode, + &the_display->xinput_error_base, + &the_display->xinput_event_base)) + { + if (XIQueryVersion (the_display->xdisplay, &major, &minor) == Success) + if (((major * 10) + minor) >= 22) + has_xi = TRUE; + } + + if (!has_xi) + meta_fatal ("X server doesn't have the XInput extension, version 2.2 or newer\n"); + } + #ifdef HAVE_XCURSOR { XcursorSetTheme (the_display->xdisplay, meta_prefs_get_cursor_theme ());