This patch fixes problems with picking a good visual on certain 24-bit Sun systems. --- xv-3.10a.old/xv.c +++ xv-3.10a/xv.c @@ -326,37 +326,51 @@ */ - /* if we *haven't* had a non-default visual specified, see if we have a TrueColor or DirectColor visual of 24 or 32 bits, and if so, use that as the default visual (prefer TrueColor) */ if (!visualstr && !useroot) { + VisualID defvid; XVisualInfo *vinfo, rvinfo; int best, numvis; long flags; - best = -1; + best = -1; rvinfo.class = TrueColor; rvinfo.screen = theScreen; - flags = VisualClassMask | VisualScreenMask; + flags = VisualClassMask | VisualScreenMask; + defvid = XVisualIDFromVisual(DefaultVisual(theDisp, + DefaultScreen(theDisp))); vinfo = XGetVisualInfo(theDisp, flags, &rvinfo, &numvis); - if (vinfo) { /* look for a TrueColor, 24-bit or more (pref 24) */ - for (i=0, best = -1; i24-bit */ + for (i=0; i= 24)) best=i; + } + for (i=0; i24 && best<0) best = i; + } + for (i=0; i24-bit ? */ + if (vinfo[i].depth >= 24) best = i; } } - + if (best == -1) { /* look for a DirectColor, 24-bit or more (pref 24) */ rvinfo.class = DirectColor; if (vinfo) XFree((char *) vinfo); + vinfo = XGetVisualInfo(theDisp, flags, &rvinfo, &numvis); if (vinfo) { - for (i=0, best = -1; i= 24)) best=i; + } + for (i=0; i24 && best<0) best = i; + } + for (i=0; i24-bit ? */ + if (vinfo[i].depth >= 24) best = i; } } } @@ -364,8 +378,8 @@ if (best>=0 && best