From fa14e7d12524e191cf92a8dc9090b77802a1ffc2 Mon Sep 17 00:00:00 2001 From: Joshua Goins Date: Sat, 12 Apr 2025 16:42:00 -0400 Subject: [PATCH] Add a spinbox to specify the number of pen buttons It was only after building this feature, that it makes no sense as we don't interact with libwacom yet. Oops? --- devicemanager.cpp | 26 +++++++++++++++++++++++--- devicemanager.h | 6 ++++++ ui/Main.qml | 8 ++++++++ 3 files changed, 37 insertions(+), 3 deletions(-) diff --git a/devicemanager.cpp b/devicemanager.cpp index ab79676..0553fee 100644 --- a/devicemanager.cpp +++ b/devicemanager.cpp @@ -44,6 +44,20 @@ void DeviceManager::setPad(bool pad) } } +int DeviceManager::penButtons() const +{ + return m_penButtons; +} + +void DeviceManager::setPenButtons(int num) +{ + if (m_penButtons != num) + { + m_penButtons = num; + Q_EMIT penButtonsChanged(); + } +} + void DeviceManager::recreateDevice() { destroyDevice(); @@ -78,9 +92,15 @@ void DeviceManager::recreateDevice() libevdev_enable_event_type(dev, EV_KEY); if (!m_pad) { - libevdev_enable_event_code(dev, EV_KEY, BTN_TOOL_PEN, NULL); - libevdev_enable_event_code(dev, EV_KEY, BTN_TOOL_RUBBER, NULL); - libevdev_enable_event_code(dev, EV_KEY, BTN_TOUCH, NULL); + if (m_penButtons >= 1) { + libevdev_enable_event_code(dev, EV_KEY, BTN_TOOL_PEN, NULL); + } + if (m_penButtons >= 2) { + libevdev_enable_event_code(dev, EV_KEY, BTN_TOOL_RUBBER, NULL); + } + if (m_penButtons >= 3) { + libevdev_enable_event_code(dev, EV_KEY, BTN_TOUCH, NULL); + } libevdev_enable_event_code(dev, EV_KEY, BTN_STYLUS, NULL); libevdev_enable_event_type(dev, EV_ABS); diff --git a/devicemanager.h b/devicemanager.h index c65b58e..4aa1c47 100644 --- a/devicemanager.h +++ b/devicemanager.h @@ -14,6 +14,7 @@ class DeviceManager : public QObject { Q_PROPERTY(QString name WRITE setName READ name NOTIFY nameChanged) Q_PROPERTY(bool direct WRITE setDirect READ direct NOTIFY directChanged) Q_PROPERTY(bool pad WRITE setPad READ pad NOTIFY padChanged) + Q_PROPERTY(int penButtons WRITE setPenButtons READ penButtons NOTIFY penButtonsChanged) public: ~DeviceManager() override; @@ -27,6 +28,9 @@ public: bool pad() const; void setPad(bool pad); + int penButtons() const; + void setPenButtons(int num); + public Q_SLOTS: void recreateDevice(); void testButton(); @@ -35,6 +39,7 @@ Q_SIGNALS: void nameChanged(); void directChanged(); void padChanged(); + void penButtonsChanged(); private: void destroyDevice(); @@ -49,4 +54,5 @@ private: QString m_name; bool m_direct = false; bool m_pad = false; + int m_penButtons = 3; }; diff --git a/ui/Main.qml b/ui/Main.qml index 67a884d..1d514be 100644 --- a/ui/Main.qml +++ b/ui/Main.qml @@ -33,6 +33,14 @@ Kirigami.ApplicationWindow { onTextChanged: deviceManager.name = text } + FormCard.FormSpinBoxDelegate { + label: "Pen Buttons" + from: 0 + to: 3 + value: deviceManager.penButtons + onValueChanged: deviceManager.penButtons = value + } + FormCard.FormDelegateSeparator {} FormCard.FormCheckDelegate {