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 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) (limited to 'kdm/kfrontend') 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 -- cgit v1.2.3