xwaylandinterface: move global to Application

This commit is contained in:
Xaver Hugl 2022-08-03 12:31:27 +02:00
parent 53815e2b28
commit 039dd96f8d
13 changed files with 36 additions and 59 deletions

View file

@ -83,8 +83,7 @@ WaylandTestApplication::~WaylandTestApplication()
if (effects) {
static_cast<EffectsHandlerImpl *>(effects)->unloadAllEffects();
}
delete m_xwayland;
m_xwayland = nullptr;
m_xwayland.reset();
destroyVirtualInputDevices();
destroyWorkspace();
destroyInputMethod();
@ -157,8 +156,8 @@ void WaylandTestApplication::continueStartupWithScreens()
void WaylandTestApplication::finalizeStartup()
{
if (m_xwayland) {
disconnect(m_xwayland, &Xwl::Xwayland::errorOccurred, this, &WaylandTestApplication::finalizeStartup);
disconnect(m_xwayland, &Xwl::Xwayland::started, this, &WaylandTestApplication::finalizeStartup);
disconnect(m_xwayland.get(), &Xwl::Xwayland::errorOccurred, this, &WaylandTestApplication::finalizeStartup);
disconnect(m_xwayland.get(), &Xwl::Xwayland::started, this, &WaylandTestApplication::finalizeStartup);
}
notifyStarted();
}
@ -179,9 +178,9 @@ void WaylandTestApplication::continueStartupWithScene()
return;
}
m_xwayland = new Xwl::Xwayland(this);
connect(m_xwayland, &Xwl::Xwayland::errorOccurred, this, &WaylandTestApplication::finalizeStartup);
connect(m_xwayland, &Xwl::Xwayland::started, this, &WaylandTestApplication::finalizeStartup);
m_xwayland = std::make_unique<Xwl::Xwayland>(this);
connect(m_xwayland.get(), &Xwl::Xwayland::errorOccurred, this, &WaylandTestApplication::finalizeStartup);
connect(m_xwayland.get(), &Xwl::Xwayland::started, this, &WaylandTestApplication::finalizeStartup);
m_xwayland->start();
}
@ -199,4 +198,9 @@ Test::VirtualInputDevice *WaylandTestApplication::virtualTouch() const
{
return m_virtualTouch.get();
}
XwaylandInterface *WaylandTestApplication::xwayland() const
{
return m_xwayland.get();
}
}

View file

@ -83,6 +83,7 @@ public:
Test::VirtualInputDevice *virtualPointer() const;
Test::VirtualInputDevice *virtualKeyboard() const;
Test::VirtualInputDevice *virtualTouch() const;
XwaylandInterface *xwayland() const override;
protected:
void performStartup() override;
@ -95,7 +96,7 @@ private:
void createVirtualInputDevices();
void destroyVirtualInputDevices();
Xwl::Xwayland *m_xwayland = nullptr;
std::unique_ptr<Xwl::Xwayland> m_xwayland;
QString m_inputMethodServerToStart;
std::unique_ptr<Test::VirtualInputDevice> m_virtualPointer;

View file

@ -118,7 +118,7 @@ void XwaylandServerCrashTest::testCrash()
// Let's pretend that the Xwayland process has crashed.
QSignalSpy x11ConnectionChangedSpy(kwinApp(), &Application::x11ConnectionChanged);
QVERIFY(x11ConnectionChangedSpy.isValid());
Xwl::Xwayland *xwayland = static_cast<Xwl::Xwayland *>(XwaylandInterface::self());
Xwl::Xwayland *xwayland = static_cast<Xwl::Xwayland *>(kwinApp()->xwayland());
xwayland->xwaylandLauncher()->process()->terminate();
QVERIFY(x11ConnectionChangedSpy.wait());

View file

@ -69,7 +69,7 @@ void XwaylandServerRestartTest::testRestart()
{
// This test verifies that the Xwayland server will be restarted after a crash.
Xwl::Xwayland *xwayland = static_cast<Xwl::Xwayland *>(XwaylandInterface::self());
Xwl::Xwayland *xwayland = static_cast<Xwl::Xwayland *>(kwinApp()->xwayland());
// Pretend that the Xwayland process has crashed by sending a SIGKILL to it.
QSignalSpy startedSpy(xwayland, &Xwl::Xwayland::started);

View file

@ -162,7 +162,6 @@ target_sources(kwin PRIVATE
xdgshellwindow.cpp
xkb.cpp
xwaylandwindow.cpp
xwayland/xwayland_interface.cpp
)
target_link_libraries(kwin

View file

@ -2382,8 +2382,8 @@ static KWaylandServer::AbstractDropHandler *dropHandler(Window *window)
return dropTarget;
}
if (qobject_cast<X11Window *>(window) && xwayland()) {
return xwayland()->xwlDropHandler();
if (qobject_cast<X11Window *>(window) && kwinApp()->xwayland()) {
return kwinApp()->xwayland()->xwlDropHandler();
}
return nullptr;
@ -2433,7 +2433,7 @@ public:
}
m_dragTarget = dragTarget;
if (auto *xwl = xwayland()) {
if (auto *xwl = kwinApp()->xwayland()) {
const auto ret = xwl->dragMoveFilter(t, eventPos);
if (ret == Xwl::DragEventReply::Ignore) {
return false;

View file

@ -582,6 +582,11 @@ ColorManager *Application::colorManager() const
return m_colorManager.get();
}
XwaylandInterface *Application::xwayland() const
{
return nullptr;
}
#if KWIN_BUILD_SCREENLOCKER
ScreenLockerWatcher *Application::screenLockerWatcher() const
{

View file

@ -35,6 +35,7 @@ class InputMethod;
class ColorManager;
class ScreenLockerWatcher;
class TabletModeManager;
class XwaylandInterface;
class XcbEventFilter : public QAbstractNativeEventFilter
{
@ -238,6 +239,7 @@ public:
PluginManager *pluginManager() const;
InputMethod *inputMethod() const;
ColorManager *colorManager() const;
virtual XwaylandInterface *xwayland() const;
#if KWIN_BUILD_SCREENLOCKER
ScreenLockerWatcher *screenLockerWatcher() const;
#endif

View file

@ -276,6 +276,11 @@ void ApplicationWayland::startSession()
}
}
XwaylandInterface *ApplicationWayland::xwayland() const
{
return m_xwayland.get();
}
} // namespace
int main(int argc, char *argv[])

View file

@ -55,6 +55,8 @@ public:
m_sessionArgument = session;
}
XwaylandInterface *xwayland() const override;
protected:
void performStartup() override;

View file

@ -30,7 +30,7 @@ class XrandrEventFilter;
class XwaylandLauncher;
class DataBridge;
class KWIN_EXPORT Xwayland : public XwaylandInterface
class KWIN_EXPORT Xwayland : public QObject, public XwaylandInterface
{
Q_OBJECT

View file

@ -1,32 +0,0 @@
/*
KWin - the KDE window manager
This file is part of the KDE project.
SPDX-FileCopyrightText: 2019 Roman Gilg <subdiff@gmail.com>
SPDX-License-Identifier: GPL-2.0-or-later
*/
#include "xwayland_interface.h"
namespace KWin
{
XwaylandInterface *s_self = nullptr;
XwaylandInterface *XwaylandInterface::self()
{
return s_self;
}
XwaylandInterface::XwaylandInterface(QObject *parent)
: QObject(parent)
{
s_self = this;
}
XwaylandInterface::~XwaylandInterface()
{
s_self = nullptr;
}
} // namespace KWin

View file

@ -37,29 +37,20 @@ enum class DragEventReply {
};
} // namespace Xwl
class KWIN_EXPORT XwaylandInterface : public QObject
class KWIN_EXPORT XwaylandInterface
{
Q_OBJECT
public:
static XwaylandInterface *self();
virtual Xwl::DragEventReply dragMoveFilter(Window *target, const QPoint &pos) = 0;
virtual KWaylandServer::AbstractDropHandler *xwlDropHandler() = 0;
protected:
explicit XwaylandInterface(QObject *parent = nullptr);
~XwaylandInterface() override;
explicit XwaylandInterface() = default;
virtual ~XwaylandInterface() = default;
private:
Q_DISABLE_COPY(XwaylandInterface)
};
inline XwaylandInterface *xwayland()
{
return XwaylandInterface::self();
}
} // namespace KWin
#endif