summaryrefslogtreecommitdiff
path: root/src/FbTk
diff options
context:
space:
mode:
Diffstat (limited to 'src/FbTk')
-rw-r--r--src/FbTk/FbPixmap.cc97
-rw-r--r--src/FbTk/FbPixmap.hh3
2 files changed, 54 insertions, 46 deletions
diff --git a/src/FbTk/FbPixmap.cc b/src/FbTk/FbPixmap.cc
index ce28f0e..b8c2856 100644
--- a/src/FbTk/FbPixmap.cc
+++ b/src/FbTk/FbPixmap.cc
@@ -357,55 +357,62 @@ void FbPixmap::setRootPixmap(int screen_num, Pixmap pm) {
357} 357}
358 358
359Pixmap FbPixmap::getRootPixmap(int screen_num) { 359Pixmap FbPixmap::getRootPixmap(int screen_num) {
360 if (!FbTk::Transparent::haveRender()) 360 /*
361 return None; 361 if (!FbTk::Transparent::haveRender())
362 362 return None;
363 if (!m_root_pixmaps) { 363 */
364 int numscreens = ScreenCount(display()); 364
365 for (int i=0; i < numscreens; ++i) { 365 // check and see if if we have the pixmaps in cache
366 Atom real_type; 366 if (m_root_pixmaps)
367 int real_format; 367 return m_root_pixmaps[screen_num];
368 unsigned long items_read, items_left; 368
369 unsigned long *data; 369 // else setup pixmap cache
370 370 int numscreens = ScreenCount(display());
371 unsigned int prop = 0; 371 for (int i=0; i < numscreens; ++i) {
372 372 Atom real_type;
373 static bool print_error = true; // print error_message only once 373 int real_format;
374 static const char* error_message = { "\n\n !!! WARNING WARNING WARNING WARNING !!!!!\n" 374 unsigned long items_read, items_left;
375 " if you experience problems with transparency:\n" 375 unsigned long *data;
376 " you are using a wallpapersetter that \n" 376
377 " uses _XSETROOT_ID .. which we do not support.\n" 377 unsigned int prop = 0;
378 " consult 'fbsetbg -i' or try any other wallpapersetter\n" 378
379 " that uses _XROOTPMAP_ID !\n" 379 static bool print_error = true; // print error_message only once
380 " !!! WARNING WARNING WARNING WARNING !!!!!!\n\n" 380 static const char* error_message = {
381 }; 381 "\n\n !!! WARNING WARNING WARNING WARNING !!!!!\n"
382 382 " if you experience problems with transparency:\n"
383 Pixmap root_pm = None; 383 " you are using a wallpapersetter that \n"
384 for (prop = 0; root_prop_ids[prop]; prop++) { 384 " uses _XSETROOT_ID .. which we do not support.\n"
385 checkAtoms(); 385 " consult 'fbsetbg -i' or try any other wallpapersetter\n"
386 if (XGetWindowProperty(display(), 386 " that uses _XROOTPMAP_ID !\n"
387 RootWindow(display(), i), 387 " !!! WARNING WARNING WARNING WARNING !!!!!!\n\n"
388 root_prop_atoms[i], 388 };
389 0l, 1l, 389
390 False, XA_PIXMAP, 390 Pixmap root_pm = None;
391 &real_type, &real_format, 391 for (prop = 0; root_prop_ids[prop]; prop++) {
392 &items_read, &items_left, 392 checkAtoms();
393 (unsigned char **) &data) == Success) { 393 if (XGetWindowProperty(display(),
394 if (real_format == 32 && items_read == 1) { 394 RootWindow(display(), i),
395 if (print_error && strcmp(root_prop_ids[prop], "_XSETROOT_ID") == 0) { 395 root_prop_atoms[i],
396 cerr<<error_message; 396 0l, 1l,
397 print_error = false; 397 False, XA_PIXMAP,
398 } else 398 &real_type, &real_format,
399 root_pm = (Pixmap) (*data); 399 &items_read, &items_left,
400 } 400 (unsigned char **) &data) == Success) {
401 XFree(data); 401 if (real_format == 32 && items_read == 1) {
402 if (root_pm != None) 402 if (print_error && strcmp(root_prop_ids[prop], "_XSETROOT_ID") == 0) {
403 break; 403 cerr<<error_message;
404 print_error = false;
405 } else
406 root_pm = (Pixmap) (*data);
404 } 407 }
408 XFree(data);
409 if (root_pm != None)
410 break;
405 } 411 }
406 setRootPixmap(i, root_pm);
407 } 412 }
413 setRootPixmap(i, root_pm);
408 } 414 }
415
409 return m_root_pixmaps[screen_num]; 416 return m_root_pixmaps[screen_num];
410} 417}
411 418
diff --git a/src/FbTk/FbPixmap.hh b/src/FbTk/FbPixmap.hh
index c26c17b..a974feb 100644
--- a/src/FbTk/FbPixmap.hh
+++ b/src/FbTk/FbPixmap.hh
@@ -69,6 +69,7 @@ public:
69 inline int depth() const { return m_depth; } 69 inline int depth() const { return m_depth; }
70 70
71 static Pixmap getRootPixmap(int screen_num); 71 static Pixmap getRootPixmap(int screen_num);
72 static void setRootPixmap(int screen_num, Pixmap pm);
72 static void rootwinPropertyNotify(int screen_num, Atom atom); 73 static void rootwinPropertyNotify(int screen_num, Atom atom);
73 74
74 void create(Drawable src, 75 void create(Drawable src,
@@ -83,7 +84,7 @@ private:
83 84
84 /// Functions relating to the maintenance of root window pixmap caching 85 /// Functions relating to the maintenance of root window pixmap caching
85 static void checkAtoms(); 86 static void checkAtoms();
86 static void setRootPixmap(int screen_num, Pixmap pm); 87
87 // array of pixmaps: 1 per screen 88 // array of pixmaps: 1 per screen
88 static Pixmap *m_root_pixmaps; 89 static Pixmap *m_root_pixmaps;
89 static const char *root_prop_ids[]; 90 static const char *root_prop_ids[];