diff options
author | pekdon <pekdon> | 2002-01-18 23:01:20 (GMT) |
---|---|---|
committer | pekdon <pekdon> | 2002-01-18 23:01:20 (GMT) |
commit | 0cd4c92647f1e11f4ff8af11af906005c1a21f04 (patch) | |
tree | c9ace71ddefb326789a27a7f4a23ce8330dd17d3 /util/bsetroot.cc | |
parent | 74454c8f2a8f1fcae493930a5a00cafab0959a4c (diff) | |
download | fluxbox_lack-0cd4c92647f1e11f4ff8af11af906005c1a21f04.zip fluxbox_lack-0cd4c92647f1e11f4ff8af11af906005c1a21f04.tar.bz2 |
bsetroot now sets backgrounds that trans Eterms can use
Diffstat (limited to 'util/bsetroot.cc')
-rw-r--r-- | util/bsetroot.cc | 537 |
1 files changed, 331 insertions, 206 deletions
diff --git a/util/bsetroot.cc b/util/bsetroot.cc index 7f13854..4a610a7 100644 --- a/util/bsetroot.cc +++ b/util/bsetroot.cc | |||
@@ -14,287 +14,412 @@ | |||
14 | #include "../src/i18n.hh" | 14 | #include "../src/i18n.hh" |
15 | #include "bsetroot.hh" | 15 | #include "bsetroot.hh" |
16 | 16 | ||
17 | #include <iostream> | ||
17 | 18 | ||
18 | bsetroot::bsetroot(int argc, char **argv, char *dpy_name) | 19 | bsetroot::bsetroot(int argc, char **argv, char *dpy_name) |
19 | : BaseDisplay(argv[0], dpy_name) | 20 | : BaseDisplay(argv[0], dpy_name) { |
20 | { | ||
21 | pixmaps = (Pixmap *) 0; | ||
22 | grad = fore = back = (char *) 0; | ||
23 | |||
24 | Bool mod = False, sol = False, grd = False; | ||
25 | int mod_x = 0, mod_y = 0, i = 0; | ||
26 | img_ctrl = new BImageControl*[10]; | ||
27 | for (; i < getNumberOfScreens(); i++) { | ||
28 | img_ctrl[i] = new BImageControl(this, getScreenInfo(i), True); | ||
29 | |||
30 | } | ||
31 | 21 | ||
32 | for (i = 1; i < argc; i++) { | 22 | pixmaps = (Pixmap *) 0; |
33 | if (! strcmp("-help", argv[i])) { | 23 | grad = fore = back = (char *) 0; |
34 | usage(); | ||
35 | } else if ((! strcmp("-fg", argv[i])) || | ||
36 | (! strcmp("-foreground", argv[i])) || | ||
37 | (! strcmp("-from", argv[i]))) { | ||
38 | if ((++i) >= argc) usage(1); | ||
39 | 24 | ||
40 | fore = argv[i]; | 25 | Bool mod = False, sol = False, grd = False; |
41 | } else if ((! strcmp("-bg", argv[i])) || | 26 | int mod_x = 0, mod_y = 0, i = 0; |
42 | (! strcmp("-background", argv[i])) || | ||
43 | (! strcmp("-to", argv[i]))) { | ||
44 | if ((++i) >= argc) usage(1); | ||
45 | 27 | ||
46 | back = argv[i]; | 28 | img_ctrl = new BImageControl*[10]; |
47 | } else if (! strcmp("-solid", argv[i])) { | 29 | for (; i < getNumberOfScreens(); i++) { |
48 | if ((++i) >= argc) usage(1); | 30 | img_ctrl[i] = new BImageControl(this, getScreenInfo(i), True); |
31 | } | ||
49 | 32 | ||
33 | for (i = 1; i < argc; i++) { | ||
34 | if (! strcmp("-help", argv[i])) { | ||
35 | usage(); | ||
36 | |||
37 | } else if ((! strcmp("-fg", argv[i])) || | ||
38 | (! strcmp("-foreground", argv[i])) || | ||
39 | (! strcmp("-from", argv[i]))) { | ||
40 | if ((++i) >= argc) | ||
41 | usage(1); | ||
42 | fore = argv[i]; | ||
43 | |||
44 | } else if ((! strcmp("-bg", argv[i])) || | ||
45 | (! strcmp("-background", argv[i])) || | ||
46 | (! strcmp("-to", argv[i]))) { | ||
47 | if ((++i) >= argc) | ||
48 | usage(1); | ||
49 | back = argv[i]; | ||
50 | |||
51 | } else if (! strcmp("-solid", argv[i])) { | ||
52 | if ((++i) >= argc) | ||
53 | usage(1); | ||
50 | fore = argv[i]; | 54 | fore = argv[i]; |
51 | sol = True; | 55 | sol = True; |
52 | } else if (! strcmp("-mod", argv[i])) { | ||
53 | if ((++i) >= argc) usage(); | ||
54 | |||
55 | mod_x = atoi(argv[i]); | ||
56 | |||
57 | if ((++i) >= argc) usage(); | ||
58 | |||
59 | mod_y = atoi(argv[i]); | ||
60 | |||
61 | if (mod_x < 1) mod_x = 1; | ||
62 | if (mod_y < 1) mod_y = 1; | ||
63 | 56 | ||
64 | mod = True; | 57 | } else if (! strcmp("-mod", argv[i])) { |
65 | } else if (! strcmp("-gradient", argv[i])) { | 58 | if ((++i) >= argc) |
66 | if ((++i) >= argc) usage(); | 59 | usage(); |
67 | 60 | mod_x = atoi(argv[i]); | |
68 | grad = argv[i]; | 61 | if ((++i) >= argc) |
69 | grd = True; | 62 | usage(); |
70 | } else if (! strcmp("-display", argv[i])) { | 63 | mod_y = atoi(argv[i]); |
71 | // -display passed through tests ealier... we just skip it now | 64 | if (mod_x < 1) |
72 | i++; | 65 | mod_x = 1; |
73 | } else | 66 | if (mod_y < 1) |
74 | usage(); | 67 | mod_y = 1; |
75 | } | 68 | mod = True; |
69 | |||
70 | } else if (! strcmp("-gradient", argv[i])) { | ||
71 | if ((++i) >= argc) | ||
72 | usage(); | ||
73 | |||
74 | grad = argv[i]; | ||
75 | grd = True; | ||
76 | |||
77 | } else if (! strcmp("-display", argv[i])) { | ||
78 | // -display passed through tests earlier... we just skip it now | ||
79 | i++; | ||
80 | |||
81 | } else | ||
82 | usage(); | ||
83 | } | ||
76 | 84 | ||
77 | if ((mod + sol + grd) != True) { | 85 | if ((mod + sol + grd) != True) { |
78 | fprintf(stderr, | 86 | fprintf(stderr, |
79 | I18n::instance()-> | 87 | I18n::instance()-> |
80 | getMessage( | 88 | getMessage( |
81 | #ifdef NLS | 89 | #ifdef NLS |
82 | bsetrootSet, bsetrootMustSpecify, | 90 | bsetrootSet, bsetrootMustSpecify, |
83 | #else // !NLS | 91 | #else // !NLS |
84 | 0, 0, | 92 | 0, 0, |
85 | #endif // NLS | 93 | #endif // NLS |
86 | "%s: error: must specify on of: -solid, -mod, -gradient\n"), | 94 | "%s: error: must specify on of: -solid, -mod, -gradient\n"), |
87 | getApplicationName()); | 95 | getApplicationName()); |
88 | 96 | ||
89 | usage(2); | 97 | usage(2); |
90 | } | 98 | } |
91 | 99 | ||
92 | if (sol && fore) solid(); | ||
93 | else if (mod && mod_x && mod_y && fore && back) modula(mod_x, mod_y); | ||
94 | else if (grd && grad && fore && back) gradient(); | ||
95 | else usage(); | ||
96 | display = getXDisplay(); | 100 | display = getXDisplay(); |
97 | num_screens = getNumberOfScreens(); | 101 | num_screens = getNumberOfScreens(); |
102 | |||
103 | if (sol && fore) | ||
104 | solid(); | ||
105 | else if (mod && mod_x && mod_y && fore && back) | ||
106 | modula(mod_x, mod_y); | ||
107 | else if (grd && grad && fore && back) | ||
108 | gradient(); | ||
109 | else | ||
110 | usage(); | ||
111 | |||
98 | } | 112 | } |
99 | 113 | ||
100 | 114 | ||
101 | bsetroot::~bsetroot(void) { | 115 | bsetroot::~bsetroot(void) { |
102 | XKillClient(display, AllTemporary); | 116 | XKillClient(display, AllTemporary); |
103 | 117 | ||
104 | if (pixmaps) { | 118 | if (pixmaps) { // should always be true |
105 | int i; | 119 | XSetCloseDownMode(display, RetainTemporary); |
106 | for (i = 0; i < num_screens; i++) | ||
107 | if (pixmaps[i] != None) { | ||
108 | XSetCloseDownMode(display, RetainTemporary); | ||
109 | break; | ||
110 | } | ||
111 | 120 | ||
112 | delete [] pixmaps; | 121 | delete [] pixmaps; |
113 | } | 122 | } |
123 | #ifdef DEBUG | ||
124 | else | ||
125 | cerr<<"~bsetroot: why don't we have any pixmaps?"<<endl; | ||
126 | #endif // DEBUG | ||
127 | |||
128 | if (img_ctrl) { | ||
129 | int i = 0; | ||
130 | for (; i < num_screens; i++) | ||
131 | delete img_ctrl[i]; | ||
132 | |||
133 | delete [] img_ctrl; | ||
134 | } | ||
135 | } | ||
114 | 136 | ||
115 | if (img_ctrl) { | 137 | //------------ setRootAtoms --------------- |
116 | int i = 0; | 138 | // set root pixmap atoms so that apps like |
117 | for (; i < num_screens; i++) | 139 | // Eterm and xchat will be able to use |
118 | delete img_ctrl[i]; | 140 | // transparent background |
141 | //----------------------------------------- | ||
142 | void bsetroot::setRootAtoms(Pixmap pixmap, int screen) { | ||
143 | Atom atom_root, atom_eroot, type; | ||
144 | unsigned char *data_root, *data_eroot; | ||
145 | int format; | ||
146 | unsigned long length, after; | ||
147 | |||
148 | atom_root = XInternAtom(display, "_XROOTMAP_ID", true); | ||
149 | atom_eroot = XInternAtom(display, "ESETROOT_PMAP_ID", true); | ||
150 | |||
151 | // doing this to clean up after old background | ||
152 | if (atom_root != None && atom_eroot != None) { | ||
153 | XGetWindowProperty(display, getScreenInfo(screen)->getRootWindow(), | ||
154 | atom_root, 0L, 1L, false, AnyPropertyType, | ||
155 | &type, &format, &length, &after, &data_root); | ||
156 | |||
157 | if (type == XA_PIXMAP) { | ||
158 | XGetWindowProperty(display, getScreenInfo(screen)->getRootWindow(), | ||
159 | atom_eroot, 0L, 1L, False, AnyPropertyType, | ||
160 | &type, &format, &length, &after, &data_eroot); | ||
161 | |||
162 | if (data_root && data_eroot && type == XA_PIXMAP && | ||
163 | *((Pixmap *) data_root) == *((Pixmap *) data_eroot)) { | ||
164 | |||
165 | XKillClient(display, *((Pixmap *) data_root)); | ||
166 | } | ||
167 | } | ||
168 | } | ||
119 | 169 | ||
120 | delete [] img_ctrl; | 170 | atom_root = XInternAtom(display, "_XROOTPMAP_ID", false); |
121 | } | 171 | atom_eroot = XInternAtom(display, "ESETROOT_PMAP_ID", false); |
122 | |||
123 | } | ||
124 | 172 | ||
173 | if (atom_root == None || atom_eroot == None) { | ||
174 | cerr<<"couldn't create pixmap atoms, giving up!"<<endl; | ||
175 | exit(1); | ||
176 | } | ||
125 | 177 | ||
178 | // setting new background atoms | ||
179 | XChangeProperty(display, getScreenInfo(screen)->getRootWindow(), | ||
180 | atom_root, XA_PIXMAP, 32, PropModeReplace, (unsigned char *) &pixmap, 1); | ||
181 | XChangeProperty(display, getScreenInfo(screen)->getRootWindow(), | ||
182 | atom_eroot, XA_PIXMAP, 32, PropModeReplace, (unsigned char *) &pixmap, 1); | ||
183 | |||
184 | } | ||
185 | |||
186 | //-------------- solid -------------------- | ||
187 | // draws pixmaps with a single color | ||
188 | //----------------------------------------- | ||
126 | void bsetroot::solid(void) { | 189 | void bsetroot::solid(void) { |
127 | register int screen = 0; | 190 | register int screen = 0; |
128 | 191 | ||
192 | pixmaps = new Pixmap[getNumberOfScreens()]; | ||
193 | |||
129 | for (; screen < getNumberOfScreens(); screen++) { | 194 | for (; screen < getNumberOfScreens(); screen++) { |
130 | BColor c; | 195 | BColor c; |
196 | GC gc; | ||
197 | XGCValues gcv; | ||
131 | 198 | ||
132 | img_ctrl[screen]->parseColor(&c, fore); | 199 | img_ctrl[screen]->parseColor(&c, fore); |
133 | if (! c.isAllocated()) c.setPixel(BlackPixel(getXDisplay(), screen)); | 200 | if (! c.isAllocated()) |
201 | c.setPixel(BlackPixel(getXDisplay(), screen)); | ||
202 | |||
203 | gcv.foreground = c.getPixel(); | ||
204 | gc = XCreateGC(getXDisplay(), getScreenInfo(screen)->getRootWindow(), | ||
205 | GCForeground , &gcv); | ||
206 | |||
207 | pixmaps[screen] = XCreatePixmap(getXDisplay(), | ||
208 | getScreenInfo(screen)->getRootWindow(), | ||
209 | getScreenInfo(screen)->getWidth(), getScreenInfo(screen)->getHeight(), | ||
210 | getScreenInfo(screen)->getDepth()); | ||
211 | |||
212 | XFillRectangle(getXDisplay(), pixmaps[screen], gc, 0, 0, | ||
213 | getScreenInfo(screen)->getWidth(), getScreenInfo(screen)->getHeight()); | ||
214 | |||
215 | setRootAtoms(pixmaps[screen], screen); | ||
216 | |||
217 | XSetWindowBackgroundPixmap(getXDisplay(), | ||
218 | getScreenInfo(screen)->getRootWindow(), pixmaps[screen]); | ||
134 | 219 | ||
135 | XSetWindowBackground(getXDisplay(), getScreenInfo(screen)->getRootWindow(), | ||
136 | c.getPixel()); | ||
137 | XClearWindow(getXDisplay(), getScreenInfo(screen)->getRootWindow()); | 220 | XClearWindow(getXDisplay(), getScreenInfo(screen)->getRootWindow()); |
221 | |||
222 | XFreeGC(getXDisplay(), gc); | ||
138 | } | 223 | } |
139 | } | 224 | } |
140 | 225 | ||
141 | 226 | //-------------- modula ------------------ | |
227 | // draws pixmaps with an 16x16 pattern with | ||
228 | // fg and bg colors. | ||
229 | //----------------------------------------- | ||
142 | void bsetroot::modula(int x, int y) { | 230 | void bsetroot::modula(int x, int y) { |
143 | char data[32]; | 231 | char data[32]; |
144 | long pattern; | 232 | long pattern; |
145 | 233 | ||
146 | register int screen, i; | 234 | register int screen, i; |
147 | 235 | ||
148 | pixmaps = new Pixmap[getNumberOfScreens()]; | 236 | pixmaps = new Pixmap[getNumberOfScreens()]; |
149 | 237 | ||
150 | for (pattern = 0, screen = 0; screen < getNumberOfScreens(); screen++) { | 238 | for (pattern = 0, screen = 0; screen < getNumberOfScreens(); screen++) { |
151 | for (i = 0; i < 16; i++) { | ||
152 | pattern <<= 1; | ||
153 | if ((i % x) == 0) | ||
154 | pattern |= 0x0001; | ||
155 | } | ||
156 | 239 | ||
157 | for (i = 0; i < 16; i++) | 240 | for (i = 0; i < 16; i++) { |
158 | if ((i % y) == 0) { | 241 | pattern <<= 1; |
159 | data[(i * 2)] = (char) 0xff; | 242 | if ((i % x) == 0) |
160 | data[(i * 2) + 1] = (char) 0xff; | 243 | pattern |= 0x0001; |
161 | } else { | 244 | } |
162 | data[(i * 2)] = pattern & 0xff; | ||
163 | data[(i * 2) + 1] = (pattern >> 8) & 0xff; | ||
164 | } | ||
165 | 245 | ||
166 | BColor f, b; | 246 | for (i = 0; i < 16; i++) { |
167 | GC gc; | 247 | if ((i % y) == 0) { |
168 | Pixmap bitmap; | 248 | data[(i * 2)] = (char) 0xff; |
169 | XGCValues gcv; | 249 | data[(i * 2) + 1] = (char) 0xff; |
250 | } else { | ||
251 | data[(i * 2)] = pattern & 0xff; | ||
252 | data[(i * 2) + 1] = (pattern >> 8) & 0xff; | ||
253 | } | ||
254 | } | ||
170 | 255 | ||
171 | bitmap = | 256 | BColor f, b; |
172 | XCreateBitmapFromData(getXDisplay(), | 257 | GC gc; |
173 | getScreenInfo(screen)->getRootWindow(), data, | 258 | Pixmap bitmap, r_bitmap; |
174 | 16, 16); | 259 | XGCValues gcv; |
175 | 260 | ||
176 | img_ctrl[screen]->parseColor(&f, fore); | 261 | bitmap = XCreateBitmapFromData(getXDisplay(), |
177 | img_ctrl[screen]->parseColor(&b, back); | 262 | getScreenInfo(screen)->getRootWindow(), data, 16, 16); |
178 | 263 | ||
179 | if (! f.isAllocated()) f.setPixel(WhitePixel(getXDisplay(), screen)); | 264 | // bitmap used as tile, needs to have the same depth as background pixmap |
180 | if (! b.isAllocated()) b.setPixel(BlackPixel(getXDisplay(), screen)); | 265 | r_bitmap = XCreatePixmap(getXDisplay(), |
266 | getScreenInfo(screen)->getRootWindow(), 16, 16, | ||
267 | getScreenInfo(screen)->getDepth()); | ||
181 | 268 | ||
182 | gcv.foreground = f.getPixel(); | 269 | img_ctrl[screen]->parseColor(&f, fore); |
183 | gcv.background = b.getPixel(); | 270 | img_ctrl[screen]->parseColor(&b, back); |
184 | 271 | ||
185 | gc = XCreateGC(getXDisplay(), getScreenInfo(screen)->getRootWindow(), | 272 | if (! f.isAllocated()) |
186 | GCForeground | GCBackground, &gcv); | 273 | f.setPixel(WhitePixel(getXDisplay(), screen)); |
274 | if (! b.isAllocated()) | ||
275 | b.setPixel(BlackPixel(getXDisplay(), screen)); | ||
187 | 276 | ||
188 | pixmaps[screen] = | 277 | gcv.foreground = f.getPixel(); |
189 | XCreatePixmap(getXDisplay(), getScreenInfo(screen)->getRootWindow(), | 278 | gcv.background = b.getPixel(); |
190 | 16, 16, getScreenInfo(screen)->getDepth()); | ||
191 | 279 | ||
192 | XCopyPlane(getXDisplay(), bitmap, pixmaps[screen], gc, | 280 | gc = XCreateGC(getXDisplay(), getScreenInfo(screen)->getRootWindow(), |
193 | 0, 0, 16, 16, 0, 0, 1l); | 281 | GCForeground | GCBackground, &gcv); |
194 | XSetWindowBackgroundPixmap(getXDisplay(), | ||
195 | getScreenInfo(screen)->getRootWindow(), | ||
196 | pixmaps[screen]); | ||
197 | XClearWindow(getXDisplay(), getScreenInfo(screen)->getRootWindow()); | ||
198 | 282 | ||
199 | XFreeGC(getXDisplay(), gc); | 283 | // copying bitmap to the one going to be used as tile |
200 | XFreePixmap(getXDisplay(), bitmap); | 284 | XCopyPlane(getXDisplay(), bitmap, r_bitmap, gc, |
285 | 0, 0, 16, 16, 0, 0, 1l); | ||
201 | 286 | ||
202 | if (! (getScreenInfo(screen)->getVisual()->c_class & 1)) { | 287 | XSetTile(getXDisplay(), gc, r_bitmap); |
203 | XFreePixmap(getXDisplay(), pixmaps[screen]); | 288 | XSetFillStyle(getXDisplay(), gc, FillTiled); |
204 | pixmaps[screen] = None; | 289 | |
205 | } | 290 | pixmaps[screen] = XCreatePixmap(getXDisplay(), |
206 | } | 291 | getScreenInfo(screen)->getRootWindow(), |
207 | } | 292 | getScreenInfo(screen)->getWidth(), getScreenInfo(screen)->getHeight(), |
293 | getScreenInfo(screen)->getDepth()); | ||
294 | |||
295 | XFillRectangle(getXDisplay(), pixmaps[screen], gc, 0, 0, | ||
296 | getScreenInfo(screen)->getWidth(), getScreenInfo(screen)->getHeight()); | ||
208 | 297 | ||
298 | setRootAtoms(pixmaps[screen], screen); | ||
209 | 299 | ||
300 | XSetWindowBackgroundPixmap(getXDisplay(), | ||
301 | getScreenInfo(screen)->getRootWindow(), pixmaps[screen]); | ||
302 | |||
303 | XClearWindow(getXDisplay(), getScreenInfo(screen)->getRootWindow()); | ||
304 | |||
305 | XFreeGC(getXDisplay(), gc); | ||
306 | XFreePixmap(getXDisplay(), bitmap); | ||
307 | XFreePixmap(getXDisplay(), r_bitmap); | ||
308 | } | ||
309 | } | ||
310 | |||
311 | //-------------- gradient ----------------- | ||
312 | // draws pixmaps with a fluxbox texure | ||
313 | //----------------------------------------- | ||
210 | void bsetroot::gradient(void) { | 314 | void bsetroot::gradient(void) { |
211 | register int screen; | 315 | register int screen; |
316 | // using temporaray pixmap and then copying it to background pixmap, as it'll | ||
317 | // get crashed somewhere on the way causing apps like XChat chrashing | ||
318 | // as the pixmap has been destroyed | ||
319 | Pixmap tmp; | ||
320 | pixmaps = new Pixmap[getNumberOfScreens()]; | ||
321 | |||
322 | for (screen = 0; screen < getNumberOfScreens(); screen++) { | ||
323 | BTexture texture; | ||
324 | GC gc; | ||
325 | XGCValues gcv; | ||
326 | |||
327 | img_ctrl[screen]->parseTexture(&texture, grad); | ||
328 | img_ctrl[screen]->parseColor(texture.getColor(), fore); | ||
329 | img_ctrl[screen]->parseColor(texture.getColorTo(), back); | ||
330 | |||
331 | if (! texture.getColor()->isAllocated()) | ||
332 | texture.getColor()->setPixel(WhitePixel(getXDisplay(), screen)); | ||
333 | if (! texture.getColorTo()->isAllocated()) | ||
334 | texture.getColorTo()->setPixel(BlackPixel(getXDisplay(), screen)); | ||
212 | 335 | ||
213 | pixmaps = new Pixmap[getNumberOfScreens()]; | 336 | tmp = img_ctrl[screen]->renderImage(getScreenInfo(screen)->getWidth(), |
337 | getScreenInfo(screen)->getHeight(), &texture); | ||
214 | 338 | ||
215 | for (screen = 0; screen < getNumberOfScreens(); screen++) { | 339 | pixmaps[screen] = XCreatePixmap(getXDisplay(), |
216 | BTexture texture; | 340 | getScreenInfo(screen)->getRootWindow(), |
217 | img_ctrl[screen]->parseTexture(&texture, grad); | 341 | getScreenInfo(screen)->getWidth(), getScreenInfo(screen)->getHeight(), |
218 | img_ctrl[screen]->parseColor(texture.getColor(), fore); | 342 | getScreenInfo(screen)->getDepth()); |
219 | img_ctrl[screen]->parseColor(texture.getColorTo(), back); | ||
220 | 343 | ||
221 | if (! texture.getColor()->isAllocated()) | 344 | gc = XCreateGC(getXDisplay(), getScreenInfo(screen)->getRootWindow(), |
222 | texture.getColor()->setPixel(WhitePixel(getXDisplay(), screen)); | 345 | GCForeground , &gcv); |
223 | if (! texture.getColorTo()->isAllocated()) | ||
224 | texture.getColorTo()->setPixel(BlackPixel(getXDisplay(), screen)); | ||
225 | 346 | ||
226 | pixmaps[screen] = | 347 | XCopyArea(getXDisplay(), tmp, pixmaps[screen], gc, 0, 0, |
227 | img_ctrl[screen]->renderImage(getScreenInfo(screen)->getWidth(), | 348 | getScreenInfo(screen)->getWidth(), getScreenInfo(screen)->getHeight(), |
228 | getScreenInfo(screen)->getHeight(), | 349 | 0, 0); |
229 | &texture); | 350 | |
351 | setRootAtoms(pixmaps[screen], screen); | ||
230 | 352 | ||
231 | XSetWindowBackgroundPixmap(getXDisplay(), | 353 | XSetWindowBackgroundPixmap(getXDisplay(), |
232 | getScreenInfo(screen)->getRootWindow(), | 354 | getScreenInfo(screen)->getRootWindow(), pixmaps[screen]); |
233 | pixmaps[screen]); | ||
234 | XClearWindow(getXDisplay(), getScreenInfo(screen)->getRootWindow()); | ||
235 | 355 | ||
236 | if (! (getScreenInfo(screen)->getVisual()->c_class & 1)) { | 356 | XClearWindow(getXDisplay(), getScreenInfo(screen)->getRootWindow()); |
237 | img_ctrl[screen]->removeImage(pixmaps[screen]); | ||
238 | img_ctrl[screen]->timeout(); | ||
239 | pixmaps[screen] = None; | ||
240 | } | ||
241 | } | ||
242 | } | ||
243 | 357 | ||
358 | if (! (getScreenInfo(screen)->getVisual()->c_class & 1)) { | ||
359 | img_ctrl[screen]->removeImage(tmp); | ||
360 | img_ctrl[screen]->timeout(); | ||
361 | } | ||
244 | 362 | ||
363 | XFreeGC(getXDisplay(), gc); | ||
364 | } | ||
365 | } | ||
366 | |||
367 | //-------------- usage -------------------- | ||
368 | // shows information about usage | ||
369 | //----------------------------------------- | ||
245 | void bsetroot::usage(int exit_code) { | 370 | void bsetroot::usage(int exit_code) { |
246 | fprintf(stderr, | 371 | fprintf(stderr, |
247 | I18n::instance()-> | 372 | I18n::instance()->getMessage( |
248 | getMessage( | 373 | #ifdef NLS |
249 | #ifdef NLS | 374 | bsetrootSet, bsetrootUsage, |
250 | bsetrootSet, bsetrootUsage, | ||
251 | #else // !NLS | 375 | #else // !NLS |
252 | 0, 0, | 376 | 0, 0, |
253 | #endif // NLS | 377 | #endif // NLS |
254 | "%s 2.0 : (c) 1997-1999 Brad Hughes\n\n" | 378 | "%s 2.1 : (c) 2002 Claes Nasten\n" |
255 | " -display <string> display connection\n" | 379 | "%s 2.0 : (c) 1997-2000 Brad Hughes\n\n" |
256 | " -mod <x> <y> modula pattern\n" | 380 | " -display <string> display connection\n" |
257 | " -foreground, -fg <color> modula foreground color\n" | 381 | " -mod <x> <y> modula pattern\n" |
258 | " -background, -bg <color> modula background color\n\n" | 382 | " -foreground, -fg <color> modula foreground color\n" |
259 | " -gradient <texture> gradient texture\n" | 383 | " -background, -bg <color> modula background color\n\n" |
260 | " -from <color> gradient start color\n" | 384 | " -gradient <texture> gradient texture\n" |
261 | " -to <color> gradient end color\n\n" | 385 | " -from <color> gradient start color\n" |
262 | " -solid <color> solid color\n\n" | 386 | " -to <color> gradient end color\n\n" |
263 | " -help print this help text and exit\n"), | 387 | " -solid <color> solid color\n\n" |
264 | getApplicationName()); | 388 | " -help print this help text and exit\n"), |
265 | 389 | getApplicationName(), getApplicationName()); | |
266 | exit(exit_code); | 390 | |
391 | exit(exit_code); | ||
267 | } | 392 | } |
268 | 393 | ||
269 | 394 | ||
270 | int main(int argc, char **argv) { | 395 | int main(int argc, char **argv) { |
271 | char *display_name = (char *) 0; | 396 | char *display_name = (char *) 0; |
272 | int i = 1; | 397 | int i = 1; |
273 | 398 | ||
274 | NLSInit("blackbox.cat"); | 399 | NLSInit("blackbox.cat"); |
275 | 400 | ||
276 | for (; i < argc; i++) { | 401 | for (; i < argc; i++) { |
277 | if (! strcmp(argv[i], "-display")) { | 402 | if (! strcmp(argv[i], "-display")) { |
278 | // check for -display option | 403 | // check for -display option |
279 | 404 | ||
280 | if ((++i) >= argc) { | 405 | if ((++i) >= argc) { |
281 | fprintf(stderr, | 406 | fprintf(stderr, |
282 | I18n::instance()->getMessage( | 407 | I18n::instance()->getMessage( |
283 | #ifdef NLS | 408 | #ifdef NLS |
284 | mainSet, mainDISPLAYRequiresArg, | 409 | mainSet, mainDISPLAYRequiresArg, |
285 | #else // !NLS | 410 | #else // !NLS |
286 | 0, 0, | 411 | 0, 0, |
287 | #endif // NLS | 412 | #endif // NLS |
288 | "error: '-display' requires an argument\n")); | 413 | "error: '-display' requires an argument\n")); |
289 | 414 | ||
290 | ::exit(1); | 415 | ::exit(1); |
291 | } | 416 | } |
292 | 417 | ||
293 | display_name = argv[i]; | 418 | display_name = argv[i]; |
294 | } | 419 | } |
295 | } | 420 | } |
296 | 421 | ||
297 | bsetroot app(argc, argv, display_name); | 422 | bsetroot app(argc, argv, display_name); |
298 | 423 | ||
299 | return 0; | 424 | return (0); |
300 | } | 425 | } |