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; i<numvis; i++) { if (vinfo[i].depth == 24) best = i; - else if (vinfo[i].depth>24 && 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; i<numvis; i++) { if (vinfo[i].depth == 24) best = i; - else if (vinfo[i].depth>24 && 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<numvis && best==-1; i++) { /* default? */ ! if ((vinfo[i].visualid == defvid) && (vinfo[i].depth >= 24)) best=i; ! } ! for (i=0; i<numvis && best==-1; i++) { /* 24-bit ? */ if (vinfo[i].depth == 24) best = i; } + for (i=0; i<numvis && best==-1; i++) { /* >24-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<numvis && best==-1; i++) { /* default? */ ! if ((vinfo[i].visualid == defvid) && (vinfo[i].depth >= 24)) best=i; ! } ! for (i=0; i<numvis && best==-1; i++) { /* 24-bit ? */ if (vinfo[i].depth == 24) best = i; } + for (i=0; i<numvis && best==-1; i++) { /* >24-bit ? */ + if (vinfo[i].depth >= 24) best = i; + } } } *************** *** 364,371 **** if (best>=0 && best<numvis) useOtherVisual(vinfo, best); if (vinfo) XFree((char *) vinfo); } ! ! if (visualstr && useroot) { fprintf(stderr, "%s: %sUsing default visual.\n", --- 378,385 ---- if (best>=0 && best<numvis) useOtherVisual(vinfo, best); if (vinfo) XFree((char *) vinfo); } ! ! if (visualstr && useroot) { fprintf(stderr, "%s: %sUsing default visual.\n",