From 996b1ffa62e0770f0287122cc57619f0942788f5 Mon Sep 17 00:00:00 2001 From: taj_ny Date: Sun, 15 Mar 2026 09:02:37 +0100 Subject: [PATCH] add TextInput interface --- src/CMakeLists.txt | 1 + src/libinputactions/InputActionsMain.cpp | 3 ++ src/libinputactions/actions/InputAction.cpp | 3 +- .../input/devices/VirtualKeyboard.h | 1 - src/libinputactions/interfaces/TextInput.h | 37 +++++++++++++++++++ 5 files changed, 43 insertions(+), 2 deletions(-) create mode 100644 src/libinputactions/interfaces/TextInput.h diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index b63e572..4f9bdbc 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -75,6 +75,7 @@ set(libinputactions_SRCS libinputactions/interfaces/PointerPositionSetter.h libinputactions/interfaces/ProcessRunner.cpp libinputactions/interfaces/SessionLock.h + libinputactions/interfaces/TextInput.h libinputactions/interfaces/Window.h libinputactions/interfaces/WindowProvider.cpp libinputactions/triggers/core/DirectionalMotionTriggerCore.cpp diff --git a/src/libinputactions/InputActionsMain.cpp b/src/libinputactions/InputActionsMain.cpp index eeb561e..343b8fe 100644 --- a/src/libinputactions/InputActionsMain.cpp +++ b/src/libinputactions/InputActionsMain.cpp @@ -13,6 +13,7 @@ #include "interfaces/PointerPositionSetter.h" #include "interfaces/ProcessRunner.h" #include "interfaces/SessionLock.h" +#include "interfaces/TextInput.h" #include "interfaces/Window.h" #include "interfaces/WindowProvider.h" #include "interfaces/implementations/DBusNotificationManager.h" @@ -40,6 +41,7 @@ InputActionsMain::~InputActionsMain() g_pointerPositionGetter.reset(); g_pointerPositionSetter.reset(); g_processRunner.reset(); + g_textInput.reset(); g_sessionLock.reset(); g_windowProvider.reset(); @@ -85,6 +87,7 @@ void InputActionsMain::setMissingImplementations() setMissingImplementation(g_pointerPositionSetter); setMissingImplementation(g_plasmaGlobalShortcutInvoker); setMissingImplementation(g_processRunner); + setMissingImplementation(g_textInput); setMissingImplementation(g_sessionLock); setMissingImplementation(g_windowProvider); diff --git a/src/libinputactions/actions/InputAction.cpp b/src/libinputactions/actions/InputAction.cpp index 82145a3..c62c78b 100644 --- a/src/libinputactions/actions/InputAction.cpp +++ b/src/libinputactions/actions/InputAction.cpp @@ -23,6 +23,7 @@ #include #include #include +#include namespace InputActions { @@ -50,7 +51,7 @@ void InputAction::executeImpl(const ActionExecutionArguments &args) } else if (item.keyboardRelease.isValid()) { g_inputBackend->virtualKeyboard()->keyboardKey(item.keyboardRelease, false); } else if (keyboardText) { - g_inputBackend->virtualKeyboard()->keyboardText(keyboardText.value()); + g_textInput->writeText(keyboardText.value()); } else if (item.mousePress.isValid()) { g_inputBackend->virtualMouse()->mouseButton(item.mousePress, true); } else if (item.mouseRelease.isValid()) { diff --git a/src/libinputactions/input/devices/VirtualKeyboard.h b/src/libinputactions/input/devices/VirtualKeyboard.h index 66cff91..383bc89 100644 --- a/src/libinputactions/input/devices/VirtualKeyboard.h +++ b/src/libinputactions/input/devices/VirtualKeyboard.h @@ -40,7 +40,6 @@ class VirtualKeyboard * Must be called by the overriding method in order to track pressed keys. */ virtual void keyboardKey(KeyboardKey key, bool state); - virtual void keyboardText(const QString &text) {} protected: /** diff --git a/src/libinputactions/interfaces/TextInput.h b/src/libinputactions/interfaces/TextInput.h new file mode 100644 index 0000000..8582270 --- /dev/null +++ b/src/libinputactions/interfaces/TextInput.h @@ -0,0 +1,37 @@ +/* + Input Actions - Input handler that executes user-defined actions + Copyright (C) 2024-2026 Marcin Woźniak + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +#pragma once + +#include + +namespace InputActions +{ + +class TextInput +{ +public: + TextInput() = default; + virtual ~TextInput() = default; + + virtual void writeText(const QString &text) {} +}; + +inline std::shared_ptr g_textInput; + +} \ No newline at end of file