From a69ded9c8a77e8177e1bb972043cdd05371c564d Mon Sep 17 00:00:00 2001
From: Emilio Cobos Álvarez <ecoal95@gmail.com>
Date: Mon, 14 Dec 2015 23:05:07 +0100
Subject: x11: Improve xlib error reporting

---
 src/api/x11/xdisplay.rs | 14 ++++----------
 1 file changed, 4 insertions(+), 10 deletions(-)

(limited to 'src/api/x11')

diff --git a/src/api/x11/xdisplay.rs b/src/api/x11/xdisplay.rs
index 2b77d9c..8205c66 100644
--- a/src/api/x11/xdisplay.rs
+++ b/src/api/x11/xdisplay.rs
@@ -23,24 +23,18 @@ pub struct XConnection {
 unsafe impl Send for XConnection {}
 unsafe impl Sync for XConnection {}
 
+pub type XErrorHandler = Option<unsafe extern fn(*mut ffi::Display, *mut ffi::XErrorEvent) -> libc::c_int>;
+
 impl XConnection {
-    pub fn new() -> Result<XConnection, XNotSupported> {
+    pub fn new(error_handler: XErrorHandler) -> Result<XConnection, XNotSupported> {
         // opening the libraries
         let xlib = try!(ffi::Xlib::open());
         let xcursor = try!(ffi::Xcursor::open());
         let xf86vmode = try!(ffi::Xf86vmode::open());
         let xinput2 = try!(ffi::XInput2::open());
 
-        unsafe extern "C" fn x_error_callback(_: *mut ffi::Display, event: *mut ffi::XErrorEvent)
-                                              -> libc::c_int
-        {
-            println!("[glutin] x error code={} major={} minor={}!", (*event).error_code,
-                     (*event).request_code, (*event).minor_code);
-            0
-        }
-
         unsafe { (xlib.XInitThreads)() };
-        unsafe { (xlib.XSetErrorHandler)(Some(x_error_callback)) };
+        unsafe { (xlib.XSetErrorHandler)(error_handler) };
 
         // TODO: use something safer than raw "dlopen"
         let glx = {
-- 
cgit v1.2.3