diff --git a/src/x11/ffi.rs b/src/x11/ffi.rs index d127a270..2bd2075d 100644 --- a/src/x11/ffi.rs +++ b/src/x11/ffi.rs @@ -1406,6 +1406,8 @@ extern "C" { pub fn glXMakeCurrent(dpy: *mut Display, drawable: GLXDrawable, ctx: GLXContext) -> Bool; pub fn glXSwapBuffers(dpy: *mut Display, drawable: GLXDrawable); + + pub fn XkbSetDetectableAutoRepeat(dpy: *mut Display, detectable: bool, supported_rtm: *mut bool) -> bool; } /* @@ -1462,4 +1464,4 @@ extern const char *glXGetClientString( Display *dpy, int name ); extern Display *glXGetCurrentDisplay( void ); -*/ \ No newline at end of file +*/ diff --git a/src/x11/mod.rs b/src/x11/mod.rs index 07105440..1b1e1165 100644 --- a/src/x11/mod.rs +++ b/src/x11/mod.rs @@ -179,6 +179,16 @@ impl Window { ic }; + // Attempt to make keyboard input repeat detectable + unsafe { + let mut supported_ptr = false; + ffi::XkbSetDetectableAutoRepeat(display, true, &mut supported_ptr); + if !supported_ptr { + return Err(format!("XkbSetDetectableAutoRepeat failed")); + } + } + + // creating GL context let context = unsafe { let mut attributes = Vec::new();