diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 460022f..422a708 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,5 +1,7 @@ include_directories(${CMAKE_SOURCE_DIR} ${CMAKE_BINARY_DIR} ${CMAKE_CURRENT_BINARY_DIR} ${QT_INCLUDES}) +configure_file(config-libkscreen.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config-libkscreen.h) + set(libkscreen_SRCS backendloader.cpp config.cpp diff --git a/src/backendloader.cpp b/src/backendloader.cpp index b93e469..8aebc14 100644 --- a/src/backendloader.cpp +++ b/src/backendloader.cpp @@ -16,6 +16,7 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * *************************************************************************************/ +#include "config-libkscreen.h" #include "backendloader.h" #include "debug_p.h" #include "backends/abstractbackend.h" @@ -40,55 +41,54 @@ bool BackendLoader::init() const QString backend = qgetenv("KSCREEN_BACKEND").constData(); const QString backendFilter = QString::fromLatin1("KSC_%1*").arg(backend); - const QStringList paths = QCoreApplication::libraryPaths(); - Q_FOREACH (const QString &path, paths) { - const QDir dir(path + QDir::separator() + QLatin1String("/kf5/kscreen/"), - backendFilter, - QDir::SortFlags(QDir::QDir::NoSort), - QDir::NoDotAndDotDot | QDir::Files); - const QFileInfoList finfos = dir.entryInfoList(); - Q_FOREACH (const QFileInfo &finfo, finfos) { - // Skip "Fake" backend unless explicitly specified via KSCREEN_BACKEND - if (backend.isEmpty() && finfo.fileName().contains(QLatin1String("KSC_Fake"))) { - continue; - } + QString path = QFile::decodeName(CMAKE_INSTALL_PREFIX "/" PLUGIN_INSTALL_DIR "/"); - // When on X11, skip the QScreen backend, instead use the XRandR backend, - // if not specified in KSCREEN_BACKEND - if (backend.isEmpty() && - finfo.fileName().contains(QLatin1String("KSC_QScreen")) && - QX11Info::isPlatformX11()) { - continue; - } + const QDir dir(path + QDir::separator() + QLatin1String("/kf5/kscreen/"), + backendFilter, + QDir::SortFlags(QDir::QDir::NoSort), + QDir::NoDotAndDotDot | QDir::Files); + const QFileInfoList finfos = dir.entryInfoList(); + Q_FOREACH (const QFileInfo &finfo, finfos) { + // Skip "Fake" backend unless explicitly specified via KSCREEN_BACKEND + if (backend.isEmpty() && finfo.fileName().contains(QLatin1String("KSC_Fake"))) { + continue; + } - // When not on X11, skip the XRandR backend, and fall back to QSCreen - // if not specified in KSCREEN_BACKEND - if (backend.isEmpty() && - finfo.fileName().contains(QLatin1String("KSC_XRandR")) && - !QX11Info::isPlatformX11()) { - continue; - } + // When on X11, skip the QScreen backend, instead use the XRandR backend, + // if not specified in KSCREEN_BACKEND + if (backend.isEmpty() && + finfo.fileName().contains(QLatin1String("KSC_QScreen")) && + QX11Info::isPlatformX11()) { + continue; + } + + // When not on X11, skip the XRandR backend, and fall back to QSCreen + // if not specified in KSCREEN_BACKEND + if (backend.isEmpty() && + finfo.fileName().contains(QLatin1String("KSC_XRandR")) && + !QX11Info::isPlatformX11()) { + continue; + } - QPluginLoader loader(finfo.filePath()); - loader.load(); - QObject *instance = loader.instance(); - if (!instance) { + QPluginLoader loader(finfo.filePath()); + loader.load(); + QObject *instance = loader.instance(); + if (!instance) { + loader.unload(); + continue; + } + + s_backend = qobject_cast< AbstractBackend* >(instance); + if (s_backend) { + if (!s_backend->isValid()) { + qCDebug(KSCREEN) << "Skipping" << s_backend->name() << "backend"; + delete s_backend; + s_backend = 0; loader.unload(); continue; } - - s_backend = qobject_cast< AbstractBackend* >(instance); - if (s_backend) { - if (!s_backend->isValid()) { - qCDebug(KSCREEN) << "Skipping" << s_backend->name() << "backend"; - delete s_backend; - s_backend = 0; - loader.unload(); - continue; - } - qCDebug(KSCREEN) << "Loading" << s_backend->name() << "backend"; - return true; - } + qCDebug(KSCREEN) << "Loading" << s_backend->name() << "backend"; + return true; } } diff --git a/src/config-libkscreen.h.cmake b/src/config-libkscreen.h.cmake new file mode 100644 index 0000000..a99f3d1 --- /dev/null +++ b/src/config-libkscreen.h.cmake @@ -0,0 +1,2 @@ +#define CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}" +#define PLUGIN_INSTALL_DIR "${PLUGIN_INSTALL_DIR}"