diff --git a/CMakeLists.txt b/CMakeLists.txt index 3bd43d3897..923dcbf56e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -74,6 +74,7 @@ find_package(KF5 ${KF5_MIN_VERSION} REQUIRED COMPONENTS ConfigWidgets CoreAddons Crash + DBusAddons GlobalAccel I18n IconThemes diff --git a/src/helpers/wayland_wrapper/CMakeLists.txt b/src/helpers/wayland_wrapper/CMakeLists.txt index 09aae2d8f3..3634b236e1 100644 --- a/src/helpers/wayland_wrapper/CMakeLists.txt +++ b/src/helpers/wayland_wrapper/CMakeLists.txt @@ -16,6 +16,6 @@ ecm_qt_declare_logging_category(kwin_wayland_wrapper_SOURCES add_executable(kwin_wayland_wrapper ${kwin_wayland_wrapper_SOURCES}) -target_link_libraries(kwin_wayland_wrapper Qt5::Core KWinXwaylandCommon) +target_link_libraries(kwin_wayland_wrapper Qt5::Core Qt5::DBus KF5::DBusAddons KWinXwaylandCommon) set_property(TARGET kwin_wayland_wrapper PROPERTY C_STANDARD 11) install(TARGETS kwin_wayland_wrapper ${KDE_INSTALL_TARGETS_DEFAULT_ARGS}) diff --git a/src/helpers/wayland_wrapper/kwin_wrapper.cpp b/src/helpers/wayland_wrapper/kwin_wrapper.cpp index 880ff52d88..2a42980e6e 100644 --- a/src/helpers/wayland_wrapper/kwin_wrapper.cpp +++ b/src/helpers/wayland_wrapper/kwin_wrapper.cpp @@ -23,8 +23,10 @@ #include #include #include - #include +#include + +#include #include @@ -119,8 +121,6 @@ void KWinWrapper::run() qApp->quit(); return; } else if (exitCode == 133) { - // Exit code 133 asks for kwin_wayland to restart itself, - // so we make sure the crash counter is fresh at 0. m_crashCount = 0; } else { m_crashCount++; @@ -136,6 +136,21 @@ void KWinWrapper::run() }); m_kwinProcess->start(); + + QProcessEnvironment env; + env.insert("WAYLAND_DISPLAY", QString::fromUtf8(wl_socket_get_display_name(m_socket))); + if (m_xwlSocket) { + env.insert("DISPLAY", m_xwlSocket->name()); + if (m_xauthorityFile.open()) { + env.insert("XAUTHORITY", m_xauthorityFile.fileName()); + } + } + + auto envSyncJob = new UpdateLaunchEnvironmentJob(env); + connect(envSyncJob, &UpdateLaunchEnvironmentJob::finished, this, []() { + // The service name is merely there to indicate to the world that we're up and ready with all envs exported + QDBusConnection::sessionBus().registerService(QStringLiteral("org.kde.KWinWrapper")); + }); } void sigtermHandler(int) @@ -146,6 +161,7 @@ void sigtermHandler(int) int main(int argc, char **argv) { QCoreApplication app(argc, argv); + app.setQuitLockEnabled(false); // don't exit when the first KJob finishes signal(SIGTERM, sigtermHandler);