diff options
author | tpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2011-08-12 08:51:01 +0000 |
---|---|---|
committer | tpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2011-08-12 08:51:01 +0000 |
commit | ecb591aa8446dd7b133e1674287924a5e2c0ac14 (patch) | |
tree | e76bc4331afa099819ec15438fb4567085d976f4 /kdm | |
parent | 5292ca5c9f8467aa40313b25de8121aebae3f22b (diff) | |
download | tdebase-ecb591aa8446dd7b133e1674287924a5e2c0ac14.tar.gz tdebase-ecb591aa8446dd7b133e1674287924a5e2c0ac14.zip |
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
Diffstat (limited to 'kdm')
-rw-r--r-- | kdm/kfrontend/krootimage.cpp | 24 |
1 files changed, 21 insertions, 3 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 <X11/Xlib.h> +#include <X11/Xatom.h> #include <stdlib.h> @@ -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; i<renderer.numRenderers(); ++i) @@ -69,10 +86,11 @@ MyApplication::renderDone() KBackgroundRenderer * r = renderer.renderer(i); if (r->backgroundMode() == KBackgroundSettings::Program || (r->multiWallpaperMode() != KBackgroundSettings::NoMulti && - r->multiWallpaperMode() != KBackgroundSettings::NoMultiRandom)) + r->multiWallpaperMode() != KBackgroundSettings::NoMultiRandom)) { return; + } } - quit(); + } void |