1 /*
2    visual.c
3 
4    Bill Kendrick & Mike Hufnagel
5    Last modified: 11/18/95 (clean up)
6 */
7 
8 #include <X11/Xlib.h>
9 #include <X11/Xutil.h>
10 #include "visual.h"
11 
SetUpVisual(Display * display,int screen,Visual ** visual,int * depth)12 int SetUpVisual(Display *display, int screen, Visual **visual, int *depth)
13 {
14   int number_visuals;
15   XVisualInfo *visual_array;
16   XVisualInfo visual_info_template;
17   int status;
18 
19   status = False;
20 
21   /* Will the default visual work? */
22   if (DefaultVisual(display,screen)->class == PseudoColor ||
23       DefaultVisual(display,screen)->class == TrueColor)
24     {
25       *visual = DefaultVisual(display,screen);
26       *depth = DefaultDepth(display,screen);
27       status = True;
28     }
29   else
30     {
31       /* we look for a PseudoColor visual on the current screen */
32       visual_info_template.class = PseudoColor;
33       visual_info_template.screen = screen;
34       visual_array = XGetVisualInfo(display,VisualClassMask | VisualScreenMask,
35                                   &visual_info_template,&number_visuals);
36 
37       /* Did we find one? */
38       if ((number_visuals>0) && (visual_array != NULL))
39         {
40           /* Choose the first PseudoColor visual (LAZY!) */
41           *visual = visual_array[0].visual;
42           *depth = visual_array[0].depth;
43           XFree(visual_array);   /* done with this chunk of RAM */
44           status = True;
45         }
46       else
47         {
48           *visual = CopyFromParent;
49           status = False;  /* sorry - live with what's left */
50         }
51     }
52 
53   return(status);
54 }
55