59 , m_kwinProcess(new QProcess(this))
63 qFatal(
"Could not create wayland socket");
66 if (qApp->arguments().contains(QLatin1String(
"--xwayland"))) {
68 if (!m_xwlSocket->isValid()) {
69 qCWarning(KWIN_WRAPPER) <<
"Failed to create Xwayland connection sockets";
73 if (!qEnvironmentVariableIsSet(
"KWIN_WAYLAND_NO_XAUTHORITY")) {
75 qCWarning(KWIN_WRAPPER) <<
"Failed to create an Xauthority file";
96 m_kwinProcess->setProgram(
"kwin_wayland");
104 const auto xwaylandFileDescriptors = m_xwlSocket->fileDescriptors();
105 for (
const int &fileDescriptor : xwaylandFileDescriptors) {
106 args <<
"--xwayland-fd" << QString::number(fileDescriptor);
108 args <<
"--xwayland-display" << m_xwlSocket->name();
109 if (m_xauthorityFile.open()) {
110 args <<
"--xwayland-xauthority" << m_xauthorityFile.fileName();
116 args << qApp->arguments().mid(1);
118 m_kwinProcess->setProcessChannelMode(QProcess::ForwardedChannels);
119 m_kwinProcess->setArguments(args);
121 connect(m_kwinProcess, QOverload<int, QProcess::ExitStatus>::of(&QProcess::finished),
this, [
this](
int exitCode, QProcess::ExitStatus exitStatus) {
125 }
else if (exitCode == 133) {
131 if (m_crashCount > 10) {
135 qputenv(
"KWIN_RESTART_COUNT", QByteArray::number(m_crashCount));
137 m_kwinProcess->start();
140 m_kwinProcess->start();
142 QProcessEnvironment env;
145 env.insert(
"DISPLAY", m_xwlSocket->name());
146 if (m_xauthorityFile.open()) {
147 env.insert(
"XAUTHORITY", m_xauthorityFile.fileName());
151 auto envSyncJob =
new KUpdateLaunchEnvironmentJob(env);
152 connect(envSyncJob, &KUpdateLaunchEnvironmentJob::finished,
this, []() {
154 QDBusConnection::sessionBus().registerService(QStringLiteral(
"org.kde.KWinWrapper"));
160 QCoreApplication app(argc, argv);
161 app.setQuitLockEnabled(
false);
163 KSignalHandler::self()->watchSignal(SIGTERM);
164 QObject::connect(KSignalHandler::self(), &KSignalHandler::signalReceived, &app, [&app](
int signal) {
165 if (signal == SIGTERM) {