24#include <KPluginMetaData>
26#include <QAbstractEventDispatcher>
27#include <QPluginLoader>
28#include <QSocketNotifier>
30#include <QtConcurrentRun>
34#include <sys/socket.h>
38#if KWIN_BUILD_GLOBALSHORTCUTS
42Q_IMPORT_PLUGIN(KWinIdleTimePoller)
50 QStandardPaths::setTestModeEnabled(
true);
52 const QStringList configs{
53 QStringLiteral(
"kaccessrc"),
54 QStringLiteral(
"kglobalshortcutsrc"),
56 for (
const QString &
config : configs) {
57 if (
const QString &fileName = QStandardPaths::locate(QStandardPaths::ConfigLocation,
config); !fileName.isEmpty()) {
58 QFile::remove(fileName);
62 QIcon::setThemeName(QStringLiteral(
"breeze"));
63#if KWIN_BUILD_ACTIVITIES
64 setUseKActivities(
false);
66 qputenv(
"KWIN_COMPOSE", QByteArrayLiteral(
"Q"));
67 qputenv(
"XDG_CURRENT_DESKTOP", QByteArrayLiteral(
"KDE"));
68 qunsetenv(
"XKB_DEFAULT_RULES");
69 qunsetenv(
"XKB_DEFAULT_MODEL");
70 qunsetenv(
"XKB_DEFAULT_LAYOUT");
71 qunsetenv(
"XKB_DEFAULT_VARIANT");
72 qunsetenv(
"XKB_DEFAULT_OPTIONS");
74 auto breezerc = KSharedConfig::openConfig(QStringLiteral(
"breezerc"));
75 breezerc->group(QStringLiteral(
"Common")).writeEntry(QStringLiteral(
"OutlineIntensity"), QStringLiteral(
"OutlineOff"));
78 auto config = KSharedConfig::openConfig(QString(), KConfig::SimpleConfig);
79 KConfigGroup windowsGroup =
config->group(QStringLiteral(
"Windows"));
84 const auto ownPath = libraryPaths().last();
85 removeLibraryPath(ownPath);
86 addLibraryPath(ownPath);
90 WaylandServer::create(
this);
103 destroyVirtualInputDevices();
111void WaylandTestApplication::createVirtualInputDevices()
113 m_virtualKeyboard = std::make_unique<Test::VirtualInputDevice>();
114 m_virtualKeyboard->setName(QStringLiteral(
"Virtual Keyboard 1"));
115 m_virtualKeyboard->setKeyboard(
true);
117 m_virtualPointer = std::make_unique<Test::VirtualInputDevice>();
118 m_virtualPointer->setName(QStringLiteral(
"Virtual Pointer 1"));
119 m_virtualPointer->setPointer(
true);
121 m_virtualTouch = std::make_unique<Test::VirtualInputDevice>();
122 m_virtualTouch->setName(QStringLiteral(
"Virtual Touch 1"));
123 m_virtualTouch->setTouch(
true);
130void WaylandTestApplication::destroyVirtualInputDevices()
132 if (m_virtualPointer) {
135 if (m_virtualTouch) {
138 if (m_virtualKeyboard) {
145 if (!m_inputMethodServerToStart.isEmpty()) {
147 if (m_inputMethodServerToStart != QStringLiteral(
"internal")) {
161 createVirtualInputDevices();
172void WaylandTestApplication::continueStartupWithScene()
179 qFatal(
"Failed to initialize the Wayland server, exiting now");
183 m_xwayland = std::make_unique<Xwl::Xwayland>(
this);
192 return m_virtualPointer.get();
197 return m_virtualKeyboard.get();
202 return m_virtualTouch.get();
207 return m_xwayland.get();
222 return m_preferredScale;
227 m_preferredScale = scale;
232 QList<VirtualBackend::OutputInfo> converted;
233 std::transform(geometries.begin(), geometries.end(), std::back_inserter(converted), [](
const auto &geometry) {
234 return VirtualBackend::OutputInfo{
235 .geometry = geometry,
238 static_cast<VirtualBackend *
>(kwinApp()->outputBackend())->setVirtualOutputs(converted);
243 QList<VirtualBackend::OutputInfo> converted;
244 std::transform(infos.begin(), infos.end(), std::back_inserter(converted), [](
const auto &info) {
245 return VirtualBackend::OutputInfo{
246 .geometry = info.geometry,
248 .internal = info.internal,
251 static_cast<VirtualBackend *
>(kwinApp()->outputBackend())->setVirtualOutputs(converted);
255#include "moc_kwin_wayland_test.cpp"
OutputBackend * outputBackend() const
void destroyColorManager()
void createTabletModeManager()
void setSession(std::unique_ptr< Session > &&session)
void setConfig(KSharedConfigPtr config)
void setOutputBackend(std::unique_ptr< OutputBackend > &&backend)
void setProcessStartupEnvironment(const QProcessEnvironment &environment)
void destroyInputMethod()
void createColorManager()
InputMethod * inputMethod() const
OperationMode operationMode() const
The operation mode used by KWin.
OperationMode
This enum provides the various operation modes of KWin depending on the available Windowing Systems a...
@ OperationModeXwayland
KWin uses Wayland and controls a nested Xwayland server.
static Compositor * self()
static const char * policyToString(PlacementPolicy policy)
static std::unique_ptr< Session > create()
~FractionalScaleManagerV1() override
~FractionalScaleV1() override
void wp_fractional_scale_v1_preferred_scale(uint32_t scale) override
static WaylandCompositor * create(QObject *parent=nullptr)
XwaylandInterface * xwayland() const override
void performStartup() override
Test::VirtualInputDevice * virtualPointer() const
Test::VirtualInputDevice * virtualTouch() const
Test::VirtualInputDevice * virtualKeyboard() const
~WaylandTestApplication() override
WaylandTestApplication(OperationMode mode, int &argc, char **argv)
void setOutputConfig(const QList< QRect > &geometries)
WaylandServer * waylandServer()
InputRedirection * input()