--- kscreenlocker-5.12.9/CMakeLists.txt.old 2019-09-10 10:30:52.000000000 +0000
+++ kscreenlocker-5.12.9/CMakeLists.txt 2019-12-29 16:39:31.945860585 +0000
@@ -73,16 +73,16 @@
find_package(Qt5 ${QT_MIN_VERSION} CONFIG REQUIRED COMPONENTS X11Extras)
-find_package(KF5Wayland CONFIG REQUIRED)
+find_package(KF5Wayland)
set_package_properties(KF5Wayland PROPERTIES
- TYPE REQUIRED
- PURPOSE "Required for building screenlocker")
+ TYPE OPTIONAL
+ PURPOSE "Required for building Wayland screenlocker")
find_package(WaylandScanner)
find_package(Wayland 1.3 COMPONENTS Client Server)
set_package_properties(Wayland PROPERTIES
- TYPE REQUIRED
- PURPOSE "Required for building screenlocker")
+ TYPE OPTIONAL
+ PURPOSE "Required for building Wayland screenlocker")
find_package(loginctl)
set_package_properties(loginctl PROPERTIES
@@ -138,9 +138,7 @@
interface.cpp
globalaccel.cpp
x11locker.cpp
- waylandlocker.cpp
logind.cpp
- waylandserver.cpp
powermanagement.cpp
powermanagement_inhibition.cpp
)
@@ -149,10 +147,20 @@
kconfig_add_kcfg_files(ksld_SRCS kcfg/kscreensaversettings.kcfgc)
qt5_add_dbus_interface(ksld_SRCS ${powerdevilpolicyagent_xml} powerdevilpolicyagent)
+if(KF5Wayland_FOUND)
+list(APPEND ksld_SRCS
+ waylandlocker.cpp
+ waylandserver.cpp
+)
ecm_add_wayland_server_protocol(ksld_SRCS
PROTOCOL protocols/ksld.xml
BASENAME ksld
)
+set(OPT_WL_LIBRARIES
+ KF5::WaylandServer
+ Wayland::Server
+)
+endif(KF5Wayland_FOUND)
add_library(KScreenLocker SHARED ${ksld_SRCS})
@@ -171,8 +179,7 @@
${X11_LIBRARIES}
XCB::XCB
XCB::KEYSYMS
- KF5::WaylandServer
- Wayland::Server
+ ${OPT_WL_LIBRARIES}
)
if (X11_Xinput_FOUND)
--- kscreenlocker-5.12.9/ksldapp.cpp.old 2019-09-10 10:30:16.000000000 +0000
+++ kscreenlocker-5.12.9/ksldapp.cpp 2019-12-29 17:00:37.930322855 +0000
@@ -38,9 +38,11 @@
#include <KNotification>
#include <KGlobalAccel>
+#ifdef WAYLAND_FOUND
//kwayland
#include <KWayland/Server/display.h>
#include <KWayland/Server/clientconnection.h>
+#endif
// Qt
#include <QAction>
@@ -84,8 +86,10 @@
, m_lockState(Unlocked)
, m_lockProcess(NULL)
, m_lockWindow(NULL)
+#ifdef WAYLAND_FOUND
, m_waylandServer(new WaylandServer(this))
, m_waylandDisplay(nullptr)
+#endif /* WAYLAND_FOUND */
, m_lockedTimer(QElapsedTimer())
, m_idleId(0)
, m_lockGrace(0)
@@ -96,8 +100,12 @@
, m_greeterEnv(QProcessEnvironment::systemEnvironment())
, m_powerManagementInhibition(new PowerManagementInhibition(this))
{
+#ifdef WAYLAND_FOUND
m_isX11 = QX11Info::isPlatformX11();
m_isWayland = QCoreApplication::instance()->property("platformName").toString().startsWith( QLatin1String("wayland"), Qt::CaseInsensitive);
+#else
+ m_isX11 = true;
+#endif
}
KSldApp::~KSldApp()
@@ -215,9 +223,11 @@
auto finishedSignal = static_cast<void (QProcess::*)(int, QProcess::ExitStatus)>(&QProcess::finished);
connect(m_lockProcess, finishedSignal, this,
[this](int exitCode, QProcess::ExitStatus exitStatus) {
+#ifdef WAYLAND_FOUND
if (m_isWayland && m_waylandDisplay && m_greeterClientConnection) {
m_greeterClientConnection->destroy();
}
+#endif /* WAYLAND_FOUND */
if ((!exitCode && exitStatus == QProcess::NormalExit) || s_graceTimeKill || s_logindExit) {
// unlock process finished successfully - we can remove the lock grab
s_graceTimeKill = false;
@@ -240,7 +250,9 @@
[this](QProcess::ProcessError error) {
if (error == QProcess::FailedToStart) {
doUnlock();
+#ifdef WAYLAND_FOUND
m_waylandServer->stop();
+#endif /* WAYLAND_FOUND */
qCritical() << "Greeter Process not available";
}
}
@@ -533,7 +545,9 @@
m_lockedTimer.invalidate();
m_greeterCrashedCounter = 0;
endGraceTime();
+#ifdef WAYLAND_FOUND
m_waylandServer->stop();
+#endif /* WAYLAND_FOUND */
KNotification::event(QStringLiteral("unlocked"),
i18n("Screen unlocked"),
QPixmap(),
@@ -553,6 +567,7 @@
{
QProcessEnvironment env = m_greeterEnv;
+#ifdef WAYLAND_FOUND
if (m_isWayland && m_waylandDisplay) {
int sx[2];
if (socketpair(AF_UNIX, SOCK_STREAM | SOCK_CLOEXEC, 0, sx) < 0) {
@@ -576,6 +591,7 @@
env.insert("WAYLAND_SOCKET", QByteArray::number(socket));
}
}
+#endif /* WAYLAND_FOUND */
QStringList args;
if (establishLock == EstablishLock::Immediate) {
args << QStringLiteral("--immediateLock");
@@ -596,6 +612,7 @@
env.insert(s_qtQuickBackend, QStringLiteral("software"));
}
+#ifdef WAYLAND_FOUND
// start the Wayland server
int fd = m_waylandServer->start();
if (fd == -1) {
@@ -605,10 +622,13 @@
args << QStringLiteral("--ksldfd");
args << QString::number(fd);
+#endif /* WAYLAND_FOUND */
m_lockProcess->setProcessEnvironment(env);
m_lockProcess->start(QStringLiteral(KSCREENLOCKER_GREET_BIN), args);
+#ifdef WAYLAND_FOUND
close(fd);
+#endif
}
void KSldApp::showLockWindow()
@@ -617,9 +637,11 @@
if (m_isX11) {
m_lockWindow = new X11Locker(this);
}
+#ifdef WAYLAND_FOUND
if (m_isWayland) {
m_lockWindow = new WaylandLocker(m_waylandDisplay, this);
}
+#endif /* WAYLAND_FOUND */
if (!m_lockWindow) {
return;
}
@@ -637,7 +659,9 @@
lockScreenShown();
}
, Qt::QueuedConnection);
+#ifdef WAYLAND_FOUND
connect(m_waylandServer, &WaylandServer::x11WindowAdded, m_lockWindow, &AbstractLocker::addAllowedWindow);
+#endif /* WAYLAND_FOUND */
}
m_lockWindow->showLockWindow();
if (m_isX11) {
@@ -702,12 +726,14 @@
}
}
+#ifdef WAYLAND_FOUND
void KSldApp::setWaylandDisplay(KWayland::Server::Display *display)
{
if (m_waylandDisplay != display) {
m_waylandDisplay = display;
}
}
+#endif /* WAYLAND_FOUND */
void KSldApp::lockScreenShown()
{
@@ -723,9 +749,11 @@
void KSldApp::setGreeterEnvironment(const QProcessEnvironment &env)
{
m_greeterEnv = env;
+#ifdef WAYLAND_FOUND
if (m_isWayland) {
m_greeterEnv.insert(QStringLiteral("QT_QPA_PLATFORM"), QStringLiteral("wayland"));
}
+#endif /* WAYLAND_FOUND */
}
bool KSldApp::event(QEvent *event)
--- kscreenlocker-5.12.9/autotests/CMakeLists.txt.old 2019-09-10 10:30:16.000000000 +0000
+++ kscreenlocker-5.12.9/autotests/CMakeLists.txt 2019-12-29 17:16:10.540254516 +0000
@@ -55,6 +55,7 @@
add_test(ksmserver-x11LockerTest x11LockerTest)
ecm_mark_as_test(x11LockerTest)
+if(KF5Wayland_FOUND)
#######################################
# NoScreensTest
#######################################
@@ -67,3 +68,4 @@
)
add_test(ksld-noScreensTest noScreensTest)
ecm_mark_as_test(noScreensTest)
+endif()
--- kscreenlocker-5.12.9/greeter/greeterapp.cpp.old 2019-09-10 10:30:16.000000000 +0000
+++ kscreenlocker-5.12.9/greeter/greeterapp.cpp 2019-12-29 17:14:57.458241696 +0000
@@ -26,6 +26,7 @@
#include "lnf_integration.h"
#include <config-kscreenlocker.h>
+#include <config-workspace.h>
// KDE
#include <KAuthorized>
@@ -40,12 +41,14 @@
#include <KPackage/Package>
#include <KPackage/PackageStructure>
#include <KPackage/PackageLoader>
+#ifdef WAYLAND_FOUND
// KWayland
#include <KWayland/Client/connection_thread.h>
#include <KWayland/Client/event_queue.h>
#include <KWayland/Client/plasmashell.h>
#include <KWayland/Client/registry.h>
#include <KWayland/Client/surface.h>
+#endif
// Qt
#include <QClipboard>
#include <QAbstractNativeEventFilter>
@@ -63,9 +66,11 @@
#include <QQmlExpression>
#include <QX11Info>
+#ifdef WAYLAND_FOUND
// Wayland
#include <wayland-client.h>
#include <wayland-ksld-client-protocol.h>
+#endif
// X11
#include <X11/Xatom.h>
#include <X11/Xlib.h>
@@ -137,6 +142,7 @@
}
qDeleteAll(m_views);
+#ifdef WAYLAND_FOUND
if (m_ksldInterface) {
org_kde_ksld_destroy(m_ksldInterface);
}
@@ -148,6 +154,7 @@
m_ksldConnectionThread->quit();
m_ksldConnectionThread->wait();
}
+#endif /* WAYLAND_FOUND */
}
Authenticator *UnlockApp::createAuthenticator()
@@ -165,7 +172,10 @@
void UnlockApp::initialize()
{
+#ifdef WAYLAND_FOUND
initializeWayland();
+#endif /* WAYLAND_FOUND */
+
// set up the request ignore timeout, so that multiple requests to sleep/suspend/shutdown
// are not processed in quick (and confusing) succession)
m_resetRequestIgnoreTimer->setSingleShot(true);
@@ -205,6 +215,7 @@
if (!platformName().startsWith(QLatin1String("wayland"), Qt::CaseInsensitive)) {
return;
}
+#ifdef WAYLAND_FOUND
using namespace KWayland::Client;
auto *c = ConnectionThread::fromApplication(this);
if (!c) {
@@ -219,6 +230,7 @@
return;
}
m_plasmaShell = r->createPlasmaShell(i.name, i.version, this);
+#endif /* WAYLAND_FOUND */
}
void UnlockApp::loadWallpaperPlugin(KQuickAddons::QuickViewSharedEngine *view)
@@ -281,6 +293,7 @@
}
}
+#ifdef WAYLAND_FOUND
if (m_ksldInterface) {
view->create();
org_kde_ksld_x11window(m_ksldInterface, view->winId());
@@ -294,6 +307,7 @@
view->setProperty("plasmaShellSurface", QVariant::fromValue(shellSurface));
}
}
+#endif /* WAYLAND_FOUND */
// engine stuff
QQmlContext* context = view->engine()->rootContext();
@@ -353,10 +367,14 @@
auto screen = QGuiApplication::screens()[i];
view->setGeometry(screen->geometry());
+#ifdef WAYLAND_FOUND
KWayland::Client::PlasmaShellSurface *plasmaSurface = view->property("plasmaShellSurface").value<KWayland::Client::PlasmaShellSurface *>();
if (plasmaSurface) {
plasmaSurface->setPosition(view->geometry().topLeft());
}
+#else
+ void *plasmaSurface = nullptr;
+#endif /* WAYLAND_FOUND */
if (auto object = view->property("wallpaperGraphicsObject").value<KDeclarative::QmlObjectSharedEngine*>()) {
//initialize with our size to avoid as much resize events as possible
object->completeInitialization({
@@ -370,9 +388,11 @@
view,
[view, plasmaSurface](const QRect &geo) {
view->setGeometry(geo);
+#ifdef WAYLAND_FOUND
if (plasmaSurface) {
plasmaSurface->setPosition(view->geometry().topLeft());
}
+#endif /* WAYLAND_FOUND */
}
);
@@ -477,6 +497,7 @@
void UnlockApp::suspendToRam()
{
+#ifdef WAYLAND_FOUND
if (m_ignoreRequests) {
return;
}
@@ -485,11 +506,12 @@
m_resetRequestIgnoreTimer->start();
org_kde_ksld_suspendSystem(m_ksldInterface);
-
+#endif /* WAYLAND_FOUND */
}
void UnlockApp::suspendToDisk()
{
+#ifdef WAYLAND_FOUND
if (m_ignoreRequests) {
return;
}
@@ -498,6 +520,7 @@
m_resetRequestIgnoreTimer->start();
org_kde_ksld_hibernateSystem(m_ksldInterface);
+#endif /* WAYLAND_FOUND */
}
void UnlockApp::setTesting(bool enable)
@@ -626,7 +649,7 @@
m_defaultToSwitchUser = defaultToSwitchUser;
}
-
+#ifdef WAYLAND_FOUND
static void osdProgress(void *data, org_kde_ksld *org_kde_ksld, const char *icon, int32_t percent, const char *text)
{
Q_UNUSED(org_kde_ksld)
@@ -657,9 +680,11 @@
canSuspend,
canHibernate
};
+#endif /* WAYLAND_FOUND */
void UnlockApp::setKsldSocket(int socket)
{
+#ifdef WAYLAND_FOUND
using namespace KWayland::Client;
m_ksldConnection = new ConnectionThread;
m_ksldConnection->setSocketFd(socket);
@@ -697,6 +722,7 @@
m_ksldConnection->moveToThread(m_ksldConnectionThread);
m_ksldConnectionThread->start();
m_ksldConnection->initConnection();
+#endif /* WAYLAND_FOUND */
}
void UnlockApp::osdProgress(const QString &icon, int percent, const QString &additionalText)
--- kscreenlocker-5.12.9/greeter/CMakeLists.txt.old 2019-09-10 10:30:16.000000000 +0000
+++ kscreenlocker-5.12.9/greeter/CMakeLists.txt 2019-12-29 17:29:44.832222068 +0000
@@ -24,10 +24,16 @@
qt5_add_resources(kscreenlocker_greet_SRCS fallbacktheme.qrc)
kconfig_add_kcfg_files(kscreenlocker_greet_SRCS ${CMAKE_CURRENT_SOURCE_DIR}/../kcfg/kscreensaversettings.kcfgc)
+if(KF5Wayland_FOUND)
ecm_add_wayland_client_protocol(kscreenlocker_greet_SRCS
PROTOCOL ../protocols/ksld.xml
BASENAME ksld
)
+set(OPT_WL_CLI_LIBRARIES
+ KF5::WaylandClient
+ Wayland::Client
+)
+endif()
add_executable(kscreenlocker_greet ${kscreenlocker_greet_SRCS})
@@ -43,8 +49,7 @@
Qt5::Qml
Qt5::X11Extras
${X11_LIBRARIES}
- KF5::WaylandClient
- Wayland::Client
+ ${OPT_WL_CLI_LIBRARIES}
)
if(HAVE_SECCOMP)
target_link_libraries(kscreenlocker_greet Qt5::DBus Seccomp::Seccomp)