35 unsigned long valuemask;
36 XSetWindowAttributes attributes;
44 valuemask = (CWBackPixel | CWOverrideRedirect | CWEventMask | CWCursor);
45 attributes.override_redirect = True;
46 attributes.event_mask = ExposureMask;
47 attributes.cursor = waitcursor;
48 attributes.background_pixel =
Scr->Black;
49 Scr->WindowMask = XCreateWindow(
dpy,
Scr->Root, 0, 0,
53 CopyFromParent, CopyFromParent,
54 CopyFromParent, valuemask,
56 XMapWindow(
dpy,
Scr->WindowMask);
57 XMaskEvent(
dpy, ExposureMask, &event);
59 if(
Scr->Monochrome != COLOR) {
67 Scr->WelcomeCmap = XCreateColormap(
dpy,
Scr->WindowMask,
Scr->d_visual,
69 if(!
Scr->WelcomeCmap) {
72 XSetWindowColormap(
dpy,
Scr->WindowMask,
Scr->WelcomeCmap);
76 XAllocColor(
dpy,
Scr->WelcomeCmap, &black);
80 Scr->WelcomeImage =
GetImage(
"xwd:welcome.xwd", WelcomeCp);
82 if(
Scr->WelcomeImage == None) {
83 Scr->WelcomeImage =
GetImage(
"xpm:welcome.xpm", WelcomeCp);
91 if(
Scr->WelcomeImage == None) {
99 else if(
CLarg.is_captive) {
100 XSetWindowColormap(
dpy,
Scr->WindowMask,
Scr->WelcomeCmap);
101 XSetWMColormapWindows(
dpy,
Scr->Root, &(
Scr->WindowMask), 1);
105 XInstallColormap(
dpy,
Scr->WelcomeCmap);
108 Scr->WelcomeGC = XCreateGC(
dpy,
Scr->WindowMask, 0, NULL);
109 x = (
Scr->rootw -
Scr->WelcomeImage->width) / 2;
110 y = (
Scr->rooth -
Scr->WelcomeImage->height) / 2;
112 XSetWindowBackground(
dpy,
Scr->WindowMask, black.pixel);
113 XClearWindow(
dpy,
Scr->WindowMask);
114 XCopyArea(
dpy,
Scr->WelcomeImage->pixmap,
Scr->WindowMask,
Scr->WelcomeGC, 0, 0,
115 Scr->WelcomeImage->width,
Scr->WelcomeImage->height,
x,
y);
123 struct timeval timeout;
124 Colormap stdcmap =
Scr->RootColormaps.cwins[0]->colormap->c;
126 XColor colors [256], stdcolors [256];
130 timeout.tv_usec = usec % (
unsigned long) 1000000;
131 timeout.tv_sec = usec / (
unsigned long) 1000000;
133 if(
Scr->WelcomeImage) {
136 cmap =
Scr->WelcomeCmap;
137 for(i = 0; i < 256; i++) {
139 colors [i].pixel = i;
141 XQueryColors(
dpy, cmap, colors, 256);
142 XFreeColors(
dpy, cmap, pixels, 256, 0L);
143 XFreeColors(
dpy, cmap, pixels, 256, 0L);
145 for(i = 0; i < 256; i++) {
146 colors [i].pixel = i;
147 colors [i].flags = DoRed | DoGreen | DoBlue;
148 stdcolors [i].red = colors [i].red;
149 stdcolors [i].green = colors [i].green;
150 stdcolors [i].blue = colors [i].blue;
152 for(i = 0; i < 128; i++) {
153 for(j = 0; j < 256; j++) {
154 colors [j].red = stdcolors [j].red * ((127.0 - i) / 128.0);
155 colors [j].green = stdcolors [j].green * ((127.0 - i) / 128.0);
156 colors [j].blue = stdcolors [j].blue * ((127.0 - i) / 128.0);
158 XStoreColors(
dpy, cmap, colors, 256);
159 select(0, NULL, NULL, NULL, &timeout);
161 XFreeColors(
dpy, cmap, pixels, 256, 0L);
162 XFreeGC(
dpy,
Scr->WelcomeGC);
165 if(
Scr->Monochrome != COLOR) {
169 cmap = XCreateColormap(
dpy,
Scr->Root,
Scr->d_visual, AllocNone);
173 for(i = 0; i < 256; i++) {
174 colors [i].pixel = i;
176 colors [i].green = 0;
178 colors [i].flags = DoRed | DoGreen | DoBlue;
180 XStoreColors(
dpy, cmap, colors, 256);
186 else if(
CLarg.is_captive) {
187 XSetWindowColormap(
dpy,
Scr->Root, cmap);
191 XInstallColormap(
dpy, cmap);
194 XUnmapWindow(
dpy,
Scr->WindowMask);
195 XClearWindow(
dpy,
Scr->Root);
199 for(i = 0; i < 256; i++) {
200 stdcolors [i].pixel = i;
202 XQueryColors(
dpy, stdcmap, stdcolors, 256);
203 for(i = 0; i < 128; i++) {
204 for(j = 0; j < 256; j++) {
205 colors [j].pixel = j;
206 colors [j].red = stdcolors [j].red * (i / 127.0);
207 colors [j].green = stdcolors [j].green * (i / 127.0);
208 colors [j].blue = stdcolors [j].blue * (i / 127.0);
209 colors [j].flags = DoRed | DoGreen | DoBlue;
211 XStoreColors(
dpy, cmap, colors, 256);
212 select(0, NULL, NULL, NULL, &timeout);
219 else if(
CLarg.is_captive) {
220 XSetWindowColormap(
dpy,
Scr->Root, stdcmap);
224 XInstallColormap(
dpy, stdcmap);
227 XFreeColormap(
dpy, cmap);
230 if(
Scr->WelcomeCmap) {
231 XFreeColormap(
dpy,
Scr->WelcomeCmap);
233 XDestroyWindow(
dpy,
Scr->WindowMask);
234 Scr->WindowMask = (Window) 0;