+static gboolean gtk_gl_errors;
+static int gtk_gl_handler(Display *xdisplay, XErrorEvent *xerror)
+{
+ gtk_gl_errors = TRUE;
+ return 0;
+}
+static GLXContext gtk_gl_create_context(Display *xdisplay, XVisualInfo *xvinfo,
+ GLXContext shared, Bool direct)
+{
+ gtk_gl_errors = FALSE;
+ XSync(xdisplay, False);
+ void *handler = XSetErrorHandler(gtk_gl_handler);
+ GLXContext context = glXCreateContext(xdisplay, xvinfo, shared, direct);
+ XSync(xdisplay, False);
+ XSetErrorHandler(handler);
+
+ if (gtk_gl_errors)
+ return 0;
+ return context;
+}