From b710ed0eeace5561ccec1b1558ad26abb4af0da3 Mon Sep 17 00:00:00 2001 From: Robert Bragg Date: Thu, 20 Aug 2009 11:53:37 +0100 Subject: [PATCH] [backend-egl] fix clutter_backend_egl_get_visual_info to not use Xalloc It looks like the intention was to duplicate an XVisualInfo in such a way that the pointer could be returned and then later freed using XFree. But Xalloc isn't an Xlib counterpart to XFree; Xlib doesn't provide a general purpose malloc wrapper afik. By shuffling things about a bit, it was possible to avoid the need for this hack. --- clutter/eglx/clutter-backend-egl.c | 46 +++++++++++++------------------------- 1 file changed, 15 insertions(+), 31 deletions(-) diff --git a/clutter/eglx/clutter-backend-egl.c b/clutter/eglx/clutter-backend-egl.c index 35f6530..7a6c851 100644 --- a/clutter/eglx/clutter-backend-egl.c +++ b/clutter/eglx/clutter-backend-egl.c @@ -266,40 +266,24 @@ static XVisualInfo * clutter_backend_egl_get_visual_info (ClutterBackendX11 *backend_x11, gboolean for_offscreen) { - EGLint visualId; - int i,nxvisuals; - XVisualInfo *visual_list, *visinfo = None; - XVisualInfo visual_template; ClutterBackendEGL *backend_egl = CLUTTER_BACKEND_EGL (backend_x11); - - /* Find all the visuals in the screen */ - nxvisuals = 0; - visual_template.screen = backend_x11->xscreen_num; - visual_list = XGetVisualInfo (backend_x11->xdpy, VisualScreenMask, - &visual_template, - &nxvisuals); - if (!visual_list) + EGLint visualid; + XVisualInfo visinfo_template; + XVisualInfo *visinfo = None; + int visinfos_count; + + eglGetConfigAttrib (backend_egl->edpy, backend_egl->egl_config, + EGL_NATIVE_VISUAL_ID, &visualid); + + visinfo_template.screen = backend_x11->xscreen_num; + visinfo_template.visualid = visualid; + visinfo = XGetVisualInfo (backend_x11->xdpy, + VisualScreenMask | VisualIDMask, + &visinfo_template, + &visinfos_count); + if (!visinfo) return None; - /*get xvisual id*/ - eglGetConfigAttrib (backend_egl->edpy, backend_egl->egl_config, - EGL_NATIVE_VISUAL_ID, &visualId); - - /* look up the xvisual matching with egl native visual id*/ - for( i = 0; i < nxvisuals; i++) - { - if (visual_list[i].visualid == visualId) - break; - } - - if (i < nxvisuals) - { - visinfo = (XVisualInfo*) Xalloc (sizeof (XVisualInfo)); - *visinfo = visual_list[i]; - } - - XFree (visual_list); - return visinfo; } -- 2.7.4