Comment #1 on issue 566 by StevensE...@gmail.com: xmonad gives bogus configure events http://code.google.com/p/xmonad/issues/detail?id=566 I should mention that the windows need to be console windows (the kind that have to be multiples of the console character size) to trigger the configure events. Also, here is a much simpler version of the code. #include <assert.h> #include <errno.h> #include <poll.h> #include <math.h> #include <stdbool.h> #include <stddef.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <GL/glx.h> #include <X11/Xlib.h> #include <unistd.h> int main(int argc, char *argv[]) { int error_status = 0; Display * display = XOpenDisplay(NULL); if (NULL == display) { perror("XOpenDisplay"); } unsigned screen_number = XDefaultScreen(display); /* Query framebuffer configurations */ XVisualInfo visual_info; { static int const attrib_list[] = { GLX_RGBA, True, GLX_RED_SIZE, 5, GLX_GREEN_SIZE, 5, GLX_BLUE_SIZE, 3, GLX_DOUBLEBUFFER, True, GLX_DEPTH_SIZE, 16, None }; XVisualInfo *ptr = glXChooseVisual(display, screen_number, (int*)attrib_list); if (NULL == ptr) { error_status = ENOSYS; goto disconnect; } visual_info = *ptr; XFree(ptr); } Colormap cmap = XCreateColormap(display, DefaultRootWindow(display), visual_info.visual, AllocNone); XSetWindowAttributes attributes; memset(&attributes, 0, sizeof attributes); attributes.colormap = cmap; attributes.event_mask = StructureNotifyMask; Window window = XCreateWindow(display, RootWindow(display, visual_info.screen), 0, 0, 600, 600, 0, visual_info.depth, InputOutput, visual_info.visual, CWColormap | CWEventMask, &attributes); XMapWindow(display, window); GLXContext glx_context = glXCreateContext(display, &visual_info, NULL, GL_TRUE); if (NULL == glx_context) { error_status = ENOSYS; goto destroy_window; } if (!glXMakeContextCurrent(display, window, window, glx_context)) { error_status = ENOSYS; goto destroy_window; } for (;;) { /* Handle GUI events first before rendering */ /* We have to use the Xlib event queue because of broken Mesa * libraries which abuse it. */ XEvent event; XNextEvent(display, &event); switch (event.type) { { case ConfigureNotify:; XConfigureEvent* configure_event = &event.xconfigure; fprintf(stderr, "Configure:\n" "serial: %lu\n" "send_event: %u\n" "display: %p\n" "x: %i y: %i\n" "width: %i height: %i!\n" "border_width: %u\n", configure_event->serial, configure_event->send_event, configure_event->display, configure_event->x, configure_event->y, configure_event->width, configure_event->height, configure_event->border_width); glViewport(0, 0, configure_event->width, configure_event->height); glClear(GL_COLOR_BUFFER_BIT); glXSwapBuffers(display, window); break; } case ClientMessage:; goto destroy_glx_context; default: /* Unknown event type, ignore it */ break; } } destroy_glx_context: glXMakeContextCurrent(display, None, None, NULL); glXDestroyContext(display, glx_context); destroy_window: XDestroyWindow(display, window); disconnect: XCloseDisplay(display); shutdown: return error_status; } -- You received this message because this project is configured to send all issue notifications to this address. You may adjust your notification preferences at: https://code.google.com/hosting/settings