From f8a66b1b3f7e2628149a329499a31b22b3c1a20d Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Thu, 1 Jan 2009 18:58:26 +0000 Subject: [PATCH] Fixed DirectColor visual window creation problem --- TODO | 1 - src/video/x11/SDL_x11modes.c | 10 +++------- src/video/x11/SDL_x11window.c | 8 +++++++- 3 files changed, 10 insertions(+), 9 deletions(-) diff --git a/TODO b/TODO index 20a60fb9f..7190d42b0 100644 --- a/TODO +++ b/TODO @@ -7,7 +7,6 @@ * Implement icon support (with translucency?) * Add diagonal line clipping to SDL_IntersectRectAndLine() * Add OpenGL 3.0 context support - * Have Bob look at why DirectColor visuals fail with XA_RGB_BEST_MAP error * Verify mouse grab support * Properly handle mouse grab with Vista DPI scaling * Make sure the mouse is where it's supposed to be when un-grabbed diff --git a/src/video/x11/SDL_x11modes.c b/src/video/x11/SDL_x11modes.c index cc6f69564..68d197ed5 100644 --- a/src/video/x11/SDL_x11modes.c +++ b/src/video/x11/SDL_x11modes.c @@ -32,13 +32,9 @@ static int get_visualinfo(Display * display, int screen, XVisualInfo * vinfo) { const char *visual_id = SDL_getenv("SDL_VIDEO_X11_VISUALID"); - /* FIXME FIXME FIXME - * Window creation fails in the colormap code on DirectColor visuals: - * XA_RGB_BEST_MAP not found and could not be created - * I'm disabling this for now until Bob can look at it. We don't need - * it until we implement the gamma fading using DirectColor RGB ramps - */ - int use_directcolor = 0; + /* We really don't need DirectColor visuals until we implement + * gamma ramps, but we'll leave it on for now to catch bugs */ + int use_directcolor = 1; int depth; /* Look for an exact visual, if requested */ diff --git a/src/video/x11/SDL_x11window.c b/src/video/x11/SDL_x11window.c index e1f05d6f0..8d178e2ed 100644 --- a/src/video/x11/SDL_x11window.c +++ b/src/video/x11/SDL_x11window.c @@ -212,7 +212,7 @@ X11_CreateWindow(_THIS, SDL_Window * window) xattr.background_pixel = 0; xattr.border_pixel = 0; - if (visual->class == DirectColor || visual->class == PseudoColor) { + if (visual->class == PseudoColor) { int nmaps; XStandardColormap cmap; XStandardColormap *stdmaps; @@ -299,6 +299,12 @@ X11_CreateWindow(_THIS, SDL_Window * window) X11_TrackColormap(data->display, displaydata->screen, colormap, &cmap, visual); } + } else if (visual->class == DirectColor) { + /* FIXME: Allocate a read-write colormap for gamma fading someday */ + xattr.colormap = + XCreateColormap(data->display, + RootWindow(data->display, displaydata->screen), + visual, AllocNone); } else { xattr.colormap = XCreateColormap(data->display,