From ecb591aa8446dd7b133e1674287924a5e2c0ac14 Mon Sep 17 00:00:00 2001 From: tpearson Date: Fri, 12 Aug 2011 08:51:01 +0000 Subject: Export the kdm background pixmap via standard Xorg mechanisims for greater flexibility git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdebase@1246636 283d02a7-25f6-0310-bc7c-ecb5cbfe19da --- kdm/kfrontend/krootimage.cpp | 24 +++++++++++++++++++++--- kwin/kompmgr/kompmgr.c | 6 +++--- 2 files changed, 24 insertions(+), 6 deletions(-) diff --git a/kdm/kfrontend/krootimage.cpp b/kdm/kfrontend/krootimage.cpp index a92c6aab1..390601c8d 100644 --- a/kdm/kfrontend/krootimage.cpp +++ b/kdm/kfrontend/krootimage.cpp @@ -30,6 +30,7 @@ Boston, MA 02110-1301, USA. #include "krootimage.h" #include +#include #include @@ -43,6 +44,8 @@ static KCmdLineOptions options[] = { KCmdLineLastOption }; +static Atom prop_root; +static bool properties_inited = false; MyApplication::MyApplication( const char *conf ) : KApplication(), @@ -54,14 +57,28 @@ MyApplication::MyApplication( const char *conf ) renderer.changeWallpaper(); // cannot do it when we're killed, so do it now timer.start( 60000 ); renderer.start(); + + if( !properties_inited ) { + prop_root = XInternAtom(qt_xdisplay(), "_XROOTPMAP_ID", False); + properties_inited = true; + } } void MyApplication::renderDone() { - TQT_TQWIDGET(desktop())->setBackgroundPixmap( renderer.pixmap() ); + // Get the newly drawn pixmap... + TQPixmap pm = renderer.pixmap(); + + // ...set it to the desktop widget... + TQT_TQWIDGET(desktop())->setBackgroundPixmap( pm ); TQT_TQWIDGET(desktop())->tqrepaint( true ); + + // ...and export it via Esetroot-style so that composition managers can use it! + Pixmap bgPm = pm.handle(); // fetch the actual X handle to it + XChangeProperty(qt_xdisplay(), qt_xrootwin(), prop_root, XA_PIXMAP, 32, PropModeReplace, (unsigned char *) &bgPm, 1); + renderer.saveCacheFile(); renderer.cleanup(); for (unsigned i=0; ibackgroundMode() == KBackgroundSettings::Program || (r->multiWallpaperMode() != KBackgroundSettings::NoMulti && - r->multiWallpaperMode() != KBackgroundSettings::NoMultiRandom)) + r->multiWallpaperMode() != KBackgroundSettings::NoMultiRandom)) { return; + } } - quit(); + } void diff --git a/kwin/kompmgr/kompmgr.c b/kwin/kompmgr/kompmgr.c index 8b6220785..8a7abb94e 100644 --- a/kwin/kompmgr/kompmgr.c +++ b/kwin/kompmgr/kompmgr.c @@ -2527,7 +2527,7 @@ usage (char *program) exit (1); } - static void +static void give_me_a_name(void) { Window w; @@ -2538,7 +2538,7 @@ give_me_a_name(void) NULL); } - int +int main (int argc, char **argv) { XEvent ev; @@ -2562,7 +2562,7 @@ main (int argc, char **argv) int o; char *fill_color_name = NULL; - char **res = NULL; + char **res = NULL; shadowColor.red = 0; shadowColor.green = 0; -- cgit v1.2.3