diff options
Diffstat (limited to 'kdm/kfrontend/krootimage.cpp')
-rw-r--r-- | kdm/kfrontend/krootimage.cpp | 122 |
1 files changed, 122 insertions, 0 deletions
diff --git a/kdm/kfrontend/krootimage.cpp b/kdm/kfrontend/krootimage.cpp new file mode 100644 index 000000000..c630d9fa7 --- /dev/null +++ b/kdm/kfrontend/krootimage.cpp @@ -0,0 +1,122 @@ +/* + +Copyright (C) 1999 Matthias Hoelzer-Kluepfel <[email protected]> +Copyright (C) 2002,2004 Oswald Buddenhagen <[email protected]> + +This program is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public +License version 2 as published by the Free Software Foundation. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; see the file COPYING. If not, write to +the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +Boston, MA 02110-1301, USA. + +*/ + +#include <config.h> + +#include <kcmdlineargs.h> +#include <ksimpleconfig.h> +#include <klocale.h> + +#include <qfile.h> + +#include "krootimage.h" + +#include <X11/Xlib.h> + +#include <stdlib.h> + +static const char description[] = + I18N_NOOP( "Fancy desktop background for kdm" ); + +static const char version[] = "v2.0"; + +static KCmdLineOptions options[] = { + { "+config", I18N_NOOP( "Name of the configuration file" ), 0 }, + KCmdLineLastOption +}; + + +MyApplication::MyApplication( const char *conf ) + : KApplication(), + renderer( 0, new KSimpleConfig( QFile::decodeName( conf ) ) ) +{ + connect( &timer, SIGNAL(timeout()), SLOT(slotTimeout()) ); + connect( &renderer, SIGNAL(imageDone( int )), this, SLOT(renderDone()) ); + renderer.enableTiling( true ); // optimize + renderer.changeWallpaper(); // cannot do it when we're killed, so do it now + timer.start( 60000 ); + renderer.start(); +} + + +void +MyApplication::renderDone() +{ + desktop()->setBackgroundPixmap( renderer.pixmap() ); + desktop()->repaint( true ); + renderer.saveCacheFile(); + renderer.cleanup(); + for (unsigned i=0; i<renderer.numRenderers(); ++i) + { + KBackgroundRenderer * r = renderer.renderer(i); + if (r->backgroundMode() == KBackgroundSettings::Program || + (r->multiWallpaperMode() != KBackgroundSettings::NoMulti && + r->multiWallpaperMode() != KBackgroundSettings::NoMultiRandom)) + return; + } + quit(); +} + +void +MyApplication::slotTimeout() +{ + bool change = false; + + if (renderer.needProgramUpdate()) { + renderer.programUpdate(); + change = true; + } + + if (renderer.needWallpaperChange()) { + renderer.changeWallpaper(); + change = true; + } + + if (change) + renderer.start(); +} + +int +main( int argc, char *argv[] ) +{ + KApplication::disableAutoDcopRegistration(); + + KLocale::setMainCatalogue( "kdesktop" ); + KCmdLineArgs::init( argc, argv, "krootimage", I18N_NOOP( "KRootImage" ), description, version ); + KCmdLineArgs::addCmdLineOptions( options ); + + KCmdLineArgs *args = KCmdLineArgs::parsedArgs(); + if (!args->count()) + args->usage(); + MyApplication app( args->arg( 0 ) ); + args->clear(); + + app.exec(); + + app.flushX(); + + // Keep color resources after termination + XSetCloseDownMode( qt_xdisplay(), RetainTemporary ); + + return 0; +} + +#include "krootimage.moc" |