From 0d3ebd90203be2314e9c9fece66216f36dab3abe Mon Sep 17 00:00:00 2001 From: Timothy Pearson Date: Wed, 24 Jul 2013 14:04:34 -0500 Subject: Do not display screensavers in the configuration dialog that are not installed on the system --- kcontrol/screensaver/scrnsave.cpp | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) (limited to 'kcontrol') diff --git a/kcontrol/screensaver/scrnsave.cpp b/kcontrol/screensaver/scrnsave.cpp index 776c8e43a..8980c8e3c 100644 --- a/kcontrol/screensaver/scrnsave.cpp +++ b/kcontrol/screensaver/scrnsave.cpp @@ -27,6 +27,7 @@ #include #include #include +#include #include #include @@ -519,9 +520,28 @@ void KScreenSaver::findSavers() TQString file = mSaverFileList[mNumLoaded]; SaverConfig *saver = new SaverConfig; if (saver->read(file)) { - mSaverList.append(saver); - } else + TQString saverexec = TQString("%1/%2").arg(XSCREENSAVER_HACKS_DIR).arg(saver->exec()); + // find the xscreensaver executable + //work around a TDEStandardDirs::findExe() "feature" where it looks in $TDEDIR/bin first no matter what and sometimes finds the wrong executable + TQFileInfo checkExe; + checkExe.setFile(saverexec); + if (checkExe.exists() && checkExe.isExecutable() && checkExe.isFile()) { + mSaverList.append(saver); + } + else { + // Executable not present in XScreenSaver directory! + // Try standard paths + if (TDEStandardDirs::findExe(saver->exec()) != TQString::null) { + mSaverList.append(saver); + } + else { + delete saver; + } + } + } + else { delete saver; + } } if ( (unsigned)mNumLoaded == mSaverFileList.count() ) { -- cgit v1.2.1