This patch fixes problems with picking a good visual on certain 24-bit Sun systems. *** ../xv-3.10a/xv.c Thu Jan 19 13:08:43 1995 --- xv.c Mon Mar 06 17:59:59 1995 *************** *** 326,363 **** */ - /* 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) { XVisualInfo *vinfo, rvinfo; int best, numvis; long flags; ! best = -1; rvinfo.class = TrueColor; rvinfo.screen = theScreen; ! flags = VisualClassMask | VisualScreenMask; vinfo = XGetVisualInfo(theDisp, flags, &rvinfo, &numvis); ! if (vinfo) { /* look for a TrueColor, 24-bit or more (pref 24) */ ! for (i=0, best = -1; i24 && best<0) 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; i24 && best<0) best = i; } } } --- 326,377 ---- */ /* 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; rvinfo.class = TrueColor; rvinfo.screen = theScreen; ! flags = VisualClassMask | VisualScreenMask; ! defvid = XVisualIDFromVisual(DefaultVisual(theDisp, ! DefaultScreen(theDisp))); vinfo = XGetVisualInfo(theDisp, flags, &rvinfo, &numvis); ! if (vinfo) { ! /* Check list, use 'default', first 24-bit, or first >24-bit */ ! for (i=0; i= 24)) 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; i= 24)) best=i; ! } ! for (i=0; i24-bit ? */ + if (vinfo[i].depth >= 24) best = i; + } } } *************** *** 364,371 **** if (best>=0 && best=0 && best