From 981132ce0b6bd512b382fbefca44ca5e46e54f2c Mon Sep 17 00:00:00 2001 From: Marcello Haddeman Date: Thu, 16 Apr 2026 19:18:49 +0200 Subject: [PATCH] libinput: method to get `libinput_tablet_tool` from ITabletTool (#278) * libinput: method to get `libinput_tablet_tool` from ITabletTool Libinput has some configuration specific to the tablet tool that could be interesting to set for Tablet users. However there's currently no way of getting the required `libinput_tablet_tool` ptr from `ITabletTool`. Meaning it's not possible to build the configuration on Hyprland (or anything else using aquamarine). This change adds the virtual function `getLibinputTool()` to `ITabletTool` as well as an implementation for `CLibInputTabletTool` * Run clang-format --- include/aquamarine/backend/Session.hpp | 5 +++-- include/aquamarine/input/Input.hpp | 6 ++++-- src/backend/Session.cpp | 6 +++++- src/input/Input.cpp | 4 ++++ 4 files changed, 16 insertions(+), 5 deletions(-) diff --git a/include/aquamarine/backend/Session.hpp b/include/aquamarine/backend/Session.hpp index b0fb453..5d072b5 100644 --- a/include/aquamarine/backend/Session.hpp +++ b/include/aquamarine/backend/Session.hpp @@ -149,8 +149,9 @@ namespace Aquamarine { CLibinputTabletTool(Hyprutils::Memory::CSharedPointer dev, libinput_tablet_tool* tool); virtual ~CLibinputTabletTool(); - virtual libinput_device* getLibinputHandle(); - virtual const std::string& getName(); + virtual libinput_device* getLibinputHandle(); + virtual libinput_tablet_tool* getLibinputTool(); + virtual const std::string& getName(); private: Hyprutils::Memory::CWeakPointer device; diff --git a/include/aquamarine/input/Input.hpp b/include/aquamarine/input/Input.hpp index d4a8860..2361d40 100644 --- a/include/aquamarine/input/Input.hpp +++ b/include/aquamarine/input/Input.hpp @@ -4,6 +4,7 @@ #include struct libinput_device; +struct libinput_tablet_tool; namespace Aquamarine { class ITabletTool; @@ -291,8 +292,9 @@ namespace Aquamarine { events.destroy.emit(); } - virtual libinput_device* getLibinputHandle(); - virtual const std::string& getName() = 0; + virtual libinput_device* getLibinputHandle(); + virtual libinput_tablet_tool* getLibinputTool(); + virtual const std::string& getName() = 0; enum eTabletToolType : uint32_t { AQ_TABLET_TOOL_TYPE_INVALID = 0, diff --git a/src/backend/Session.cpp b/src/backend/Session.cpp index 5410494..87b51a1 100644 --- a/src/backend/Session.cpp +++ b/src/backend/Session.cpp @@ -689,7 +689,7 @@ void Aquamarine::CSession::handleLibinputEvent(libinput_event* e) { case LIBINPUT_SWITCH_LID: hlDevice->switchy->type = ISwitch::AQ_SWITCH_TYPE_LID; break; case LIBINPUT_SWITCH_TABLET_MODE: hlDevice->switchy->type = ISwitch::AQ_SWITCH_TYPE_TABLET_MODE; break; default: break; - } + } hlDevice->switchy->events.fire.emit(ISwitch::SFireEvent{ .timeMs = (uint32_t)(libinput_event_switch_get_time_usec(se) / 1000), @@ -1066,6 +1066,10 @@ libinput_device* Aquamarine::CLibinputTabletTool::getLibinputHandle() { return device->device; } +libinput_tablet_tool* Aquamarine::CLibinputTabletTool::getLibinputTool() { + return libinputTool; +} + const std::string& Aquamarine::CLibinputTabletTool::getName() { if (!device) return AQ_UNKNOWN_DEVICE_NAME; diff --git a/src/input/Input.cpp b/src/input/Input.cpp index a3c9450..6b04d43 100644 --- a/src/input/Input.cpp +++ b/src/input/Input.cpp @@ -20,6 +20,10 @@ libinput_device* Aquamarine::ITabletTool::getLibinputHandle() { return nullptr; } +libinput_tablet_tool* Aquamarine::ITabletTool::getLibinputTool() { + return nullptr; +} + libinput_device* Aquamarine::ITablet::getLibinputHandle() { return nullptr; }