diff --git a/examples/plugin/.gitignore b/examples/plugin/.gitignore new file mode 100644 index 0000000000..378eac25d3 --- /dev/null +++ b/examples/plugin/.gitignore @@ -0,0 +1 @@ +build diff --git a/examples/plugin/CMakeLists.txt b/examples/plugin/CMakeLists.txt new file mode 100644 index 0000000000..5f4dce1b78 --- /dev/null +++ b/examples/plugin/CMakeLists.txt @@ -0,0 +1,36 @@ +# SPDX-FileCopyrightText: None +# SPDX-License-Identifier: CC0-1.0 + +cmake_minimum_required(VERSION 3.20) +project(quick-effect) + +set(KF6_MIN_VERSION "6.0.0") + +find_package(ECM ${KF6_MIN_VERSION} REQUIRED NO_MODULE) +set(CMAKE_MODULE_PATH ${ECM_MODULE_PATH}) + +include(FeatureSummary) +include(KDEInstallDirs) +include(KDECMakeSettings) +include(KDECompilerSettings NO_POLICY_SCOPE) + +find_package(Qt6 CONFIG REQUIRED COMPONENTS + Core + Widgets +) + +find_package(KWin REQUIRED COMPONENTS + kwin +) + +kcoreaddons_add_plugin(eventlistener INSTALL_NAMESPACE "kwin/plugins") +target_sources(eventlistener PRIVATE + main.cpp + eventlistener.cpp +) + +target_link_libraries(eventlistener PRIVATE + KWin::kwin +) + +feature_summary(WHAT ALL FATAL_ON_MISSING_REQUIRED_PACKAGES) diff --git a/examples/plugin/eventlistener.cpp b/examples/plugin/eventlistener.cpp new file mode 100644 index 0000000000..5a13b9e6b8 --- /dev/null +++ b/examples/plugin/eventlistener.cpp @@ -0,0 +1,34 @@ +/* + SPDX-FileCopyrightText: 2024 Vlad Zahorodnii + + SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL +*/ + +#include "eventlistener.h" +#include "kwin/input.h" +#include "kwin/input_event.h" + +#include + +namespace KWin +{ + +EventListener::EventListener() +{ + qDebug() << "Loaded demo event listener plugin"; + input()->installInputEventSpy(this); +} + +void EventListener::keyEvent(KeyEvent *event) +{ + qDebug() << event; +} + +void EventListener::pointerEvent(MouseEvent *event) +{ + qDebug() << event; +} + +} // namespace KWin + +#include "moc_eventlistener.cpp" diff --git a/examples/plugin/eventlistener.h b/examples/plugin/eventlistener.h new file mode 100644 index 0000000000..810b040ad2 --- /dev/null +++ b/examples/plugin/eventlistener.h @@ -0,0 +1,26 @@ +/* + SPDX-FileCopyrightText: 2024 Vlad Zahorodnii + + SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL +*/ + +#pragma once + +#include "kwin/plugin.h" +#include "kwin/input_event_spy.h" + +namespace KWin +{ + +class EventListener : public Plugin, public InputEventSpy +{ + Q_OBJECT + +public: + EventListener(); + + void keyEvent(KeyEvent *event) override; + void pointerEvent(MouseEvent *event) override; +}; + +} // namespace KWin diff --git a/examples/plugin/main.cpp b/examples/plugin/main.cpp new file mode 100644 index 0000000000..43d10c4885 --- /dev/null +++ b/examples/plugin/main.cpp @@ -0,0 +1,31 @@ +/* + SPDX-FileCopyrightText: 2024 Vlad Zahorodnii + + SPDX-License-Identifier: LGPL-2.0-or-later +*/ + +#include "eventlistener.h" + +#include + +namespace KWin +{ + +class KWIN_EXPORT EventListenerFactory : public PluginFactory +{ + Q_OBJECT + Q_PLUGIN_METADATA(IID PluginFactory_iid FILE "metadata.json") + Q_INTERFACES(KWin::PluginFactory) + +public: + explicit EventListenerFactory() = default; + + std::unique_ptr create() const override + { + return std::make_unique(); + } +}; + +} // namespace KWin + +#include "main.moc" diff --git a/examples/plugin/metadata.json b/examples/plugin/metadata.json new file mode 100644 index 0000000000..aa304f4093 --- /dev/null +++ b/examples/plugin/metadata.json @@ -0,0 +1,5 @@ +{ + "KPlugin": { + "EnabledByDefault": true + } +} diff --git a/examples/plugin/metadata.json.license b/examples/plugin/metadata.json.license new file mode 100644 index 0000000000..cf53d2bce1 --- /dev/null +++ b/examples/plugin/metadata.json.license @@ -0,0 +1,2 @@ +SPDX-FileCopyrightText: None +SPDX-License-Identifier: CC0-1.0