Browse Source

Modify screen savers detection that the XSCREENSAVER_DIRS

and XSCREENSAVER_CONFIG_DIRS variables allow multiple paths.

Likewise, the XSCREENSAVER HACKS DIRS variable used to search
for an screen saver executable can contain multiple paths.

This relates to TDE/tdeartwork#19.

Signed-off-by: Slávek Banko <slavek.banko@axis.cz>
pull/263/head
Slávek Banko 3 months ago
parent
commit
58d7c36054
No known key found for this signature in database
GPG Key ID: 608F5293A04BE668
  1. 6
      ConfigureChecks.cmake
  2. 72
      FindXscreensaver.cmake
  3. 2
      config.h.cmake
  4. 35
      kcontrol/screensaver/scrnsave.cpp

6
ConfigureChecks.cmake

@ -309,10 +309,10 @@ if( WITH_XSCREENSAVER )
# where xscreensaver stores its executables. So give the user the possibility
# to define XSCREENSAVER_DIR and speficy the location manually.
include( FindXscreensaver.cmake ) # not really good practise
if( NOT XSCREENSAVER_DIR )
if( NOT XSCREENSAVER_DIRS )
tde_message_fatal(
"xscreensaver is requested, but cmake can not determine the location of XSCREENSAVER_DIR
You have to either specify it manually with e.g. -DXSCREENSAVER_DIR=/usr/lib/misc/xscreensaver/
"xscreensaver is requested, but cmake can not determine the location of XSCREENSAVER_DIRS
You have to either specify it manually with e.g. -DXSCREENSAVER_DIRS=/usr/lib/misc/xscreensaver/
or make sure that xscreensaver installed properly" )
endif( )

72
FindXscreensaver.cmake

@ -8,29 +8,7 @@
if (NOT XSCREENSAVER_FOUND)
set(xscreensaver_alldirs)
set(xscreensaver_checkdirs ${TDE_INCLUDE_DIR}
/usr/
/usr/local/
/opt/local/
/usr/X11R6/
/opt/kde/
/opt/kde3/
/usr/kde/
/usr/local/kde/
/usr/local/xscreensaver/
/usr/openwin/lib/xscreensaver/
/etc/ )
foreach(suffix lib${LIB_SUFFIX}/xscreensaver lib${LIB_SUFFIX}/misc/xscreensaver lib/xscreensaver lib64/xscreensaver libexec/xscreensaver
bin/xscreensaver-hacks hacks)
foreach(xscreensaver_path ${xscreensaver_checkdirs} )
set(xscreensaver_alldirs ${xscreensaver_alldirs} ${xscreensaver_path}/${suffix})
endforeach(xscreensaver_path ${xscreensaver_checkdirs} )
endforeach(suffix lib${LIB_SUFFIX}/xscreensaver lib/xscreensaver lib64/xscreensaver libexec/xscreensaver bin/xscreensaver-hacks hacks)
FIND_PATH(XSCREENSAVER_DIR deco ${xscreensaver_alldirs})
set(XSCREENSAVER_CONFIG_DIR)
FIND_PATH(XSCREENSAVER_CONFIG_DECO config/deco.xml
${TDE_INCLUDE_DIR}
set(xscreensaver_checkdirs
/usr/
/usr/local/
/opt/local/
@ -45,33 +23,58 @@ bin/xscreensaver-hacks hacks)
/usr/openwin/lib/xscreensaver/
/etc/
)
#MESSAGE(STATUS "XSCREENSAVER_CONFIG_DIR :<${XSCREENSAVER_CONFIG_DIR}>")
foreach(suffix lib${LIB_SUFFIX}/xscreensaver lib${LIB_SUFFIX}/misc/xscreensaver
lib/xscreensaver lib64/xscreensaver libexec/xscreensaver
bin/xscreensaver-hacks hacks)
foreach(xscreensaver_path ${xscreensaver_checkdirs} )
set(xscreensaver_alldirs ${xscreensaver_alldirs} ${xscreensaver_path}/${suffix})
endforeach(xscreensaver_path ${xscreensaver_checkdirs} )
endforeach()
set(XSCREENSAVER_DIRS)
FIND_PATH(XSCREENSAVER_DIR_DECO deco ${xscreensaver_alldirs})
FIND_PATH(XSCREENSAVER_DIR_FLUX flux ${xscreensaver_alldirs})
if(XSCREENSAVER_DIR_DECO)
list(APPEND XSCREENSAVER_DIRS ${XSCREENSAVER_DIR_DECO})
endif(XSCREENSAVER_DIR_DECO)
if(XSCREENSAVER_DIR_FLUX)
list(APPEND XSCREENSAVER_DIRS ${XSCREENSAVER_DIR_FLUX})
endif(XSCREENSAVER_DIR_FLUX)
list( REMOVE_DUPLICATES XSCREENSAVER_DIRS )
string( REPLACE ";" ":" XSCREENSAVER_DIRS "${XSCREENSAVER_DIRS}" )
set(XSCREENSAVER_CONFIG_DIRS)
FIND_PATH(XSCREENSAVER_CONFIG_DECO config/deco.xml ${xscreensaver_checkdirs} )
FIND_PATH(XSCREENSAVER_CONFIG_FLUX config/flux.xml ${xscreensaver_checkdirs} )
if(XSCREENSAVER_CONFIG_DECO)
set(XSCREENSAVER_CONFIG_DIR "${XSCREENSAVER_CONFIG_DECO}/config/")
#MESSAGE(STATUS "XSCREENSAVER_CONFIG_DIR <${XSCREENSAVER_CONFIG_DIR}>")
list(APPEND XSCREENSAVER_CONFIG_DIRS "${XSCREENSAVER_CONFIG_DECO}/config/")
endif(XSCREENSAVER_CONFIG_DECO)
if(XSCREENSAVER_CONFIG_FLUX)
list(APPEND XSCREENSAVER_CONFIG_DIRS "${XSCREENSAVER_CONFIG_FLUX}/config/")
endif(XSCREENSAVER_CONFIG_FLUX)
# Try and locate XScreenSaver config when path doesn't include config
if(NOT XSCREENSAVER_CONFIG_DIR)
FIND_PATH(XSCREENSAVER_CONFIG_DIR deco.xml
if(NOT XSCREENSAVER_CONFIG_DIRS)
FIND_PATH(XSCREENSAVER_CONFIG_DIRS deco.xml
/etc/xscreensaver
)
endif(NOT XSCREENSAVER_CONFIG_DIR)
endif(NOT XSCREENSAVER_CONFIG_DIRS)
list( REMOVE_DUPLICATES XSCREENSAVER_CONFIG_DIRS )
string( REPLACE ";" ":" XSCREENSAVER_CONFIG_DIRS "${XSCREENSAVER_CONFIG_DIRS}" )
endif(NOT XSCREENSAVER_FOUND)
#MESSAGE(STATUS "XSCREENSAVER_CONFIG_DIR :<${XSCREENSAVER_CONFIG_DIR}>")
#MESSAGE(STATUS "XSCREENSAVER_DIR :<${XSCREENSAVER_DIR}>")
# Need to fix hack
if(XSCREENSAVER_DIR AND XSCREENSAVER_CONFIG_DIR)
if(XSCREENSAVER_DIRS AND XSCREENSAVER_CONFIG_DIRS)
set(XSCREENSAVER_FOUND TRUE)
endif(XSCREENSAVER_DIR AND XSCREENSAVER_CONFIG_DIR)
endif(XSCREENSAVER_DIRS AND XSCREENSAVER_CONFIG_DIRS)
if (XSCREENSAVER_FOUND)
if (NOT Xscreensaver_FIND_QUIETLY)
message(STATUS "Found SCREENSAVER_CONFIG_DIR <${XSCREENSAVER_CONFIG_DIR}>")
message(STATUS "Found SCREENSAVER_CONFIG_DIRS <${XSCREENSAVER_CONFIG_DIRS}>")
endif (NOT Xscreensaver_FIND_QUIETLY)
else (XSCREENSAVER_FOUND)
if (Xscreensaver_FIND_REQUIRED)
@ -79,5 +82,4 @@ else (XSCREENSAVER_FOUND)
endif (Xscreensaver_FIND_REQUIRED)
endif (XSCREENSAVER_FOUND)
MARK_AS_ADVANCED(XSCREENSAVER_DIR XSCREENSAVER_CONFIG_DIR)
MARK_AS_ADVANCED(XSCREENSAVER_DIRS XSCREENSAVER_CONFIG_DIRS)

2
config.h.cmake

@ -35,7 +35,7 @@
#cmakedefine HAVE_XSCREENSAVER 1
/* Defines where xscreensaver stores its graphic hacks */
#define XSCREENSAVER_HACKS_DIR "@XSCREENSAVER_DIR@"
#define XSCREENSAVER_HACKS_DIRS "@XSCREENSAVER_DIRS@"
// libart
#cmakedefine HAVE_LIBART 1

35
kcontrol/screensaver/scrnsave.cpp

@ -523,28 +523,39 @@ void KScreenSaver::findSavers()
i++, mNumLoaded++ ) {
TQString file = mSaverFileList[mNumLoaded];
SaverConfig *saver = new SaverConfig;
if (saver->read(file)) {
TQString saverexec = TQString("%1/%2").arg(XSCREENSAVER_HACKS_DIR).arg(saver->exec());
bool saverFound = false;
if (saver->read(file))
{
// 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);
TQStringList saverPaths = TQStringList::split(':', XSCREENSAVER_HACKS_DIRS);
for (TQStringList::ConstIterator it = saverPaths.begin(); it != saverPaths.end(); ++it)
{
checkExe.setFile((*it) + "/" + saver->exec());
if (checkExe.exists() && checkExe.isExecutable() && checkExe.isFile())
{
mSaverList.append(saver);
saverFound = true;
break;
}
}
else {
if (!saverFound)
{
// Executable not present in XScreenSaver directory!
// Try standard paths
if (TDEStandardDirs::findExe(saver->exec()) != TQString::null) {
if (TDEStandardDirs::findExe(saver->exec()) != TQString::null)
{
mSaverList.append(saver);
}
else {
delete saver;
saverFound = true;
}
}
}
else {
delete saver;
if (!saverFound)
{
delete saver;
}
}

Loading…
Cancel
Save