From cbc74d99b04b626326e5346469b0b50365b62735 Mon Sep 17 00:00:00 2001 From: sithlord48 Date: Wed, 12 Nov 2025 19:26:37 -0500 Subject: [PATCH] refactor: server Store button info by value based on: https://github.com/input-leap/input-leap/pull/1554/commits/55e727be14b202c1f38f585fb9243fd376799091 --- src/lib/deskflow/IPrimaryScreen.h | 4 ++++ src/lib/server/Config.cpp | 11 +++++------ src/lib/server/Config.h | 2 +- src/lib/server/InputFilter.cpp | 32 ++++++++++++++----------------- src/lib/server/InputFilter.h | 10 +++++----- 5 files changed, 29 insertions(+), 30 deletions(-) diff --git a/src/lib/deskflow/IPrimaryScreen.h b/src/lib/deskflow/IPrimaryScreen.h index f2a1067f3..406deaeff 100644 --- a/src/lib/deskflow/IPrimaryScreen.h +++ b/src/lib/deskflow/IPrimaryScreen.h @@ -24,6 +24,10 @@ public: class ButtonInfo { public: + ButtonInfo(ButtonID button, KeyModifierMask mask) : m_button{button}, m_mask{mask} + { + // do nothing + } static ButtonInfo *alloc(ButtonID, KeyModifierMask); static ButtonInfo *alloc(const ButtonInfo &); diff --git a/src/lib/server/Config.cpp b/src/lib/server/Config.cpp index 0f0981f38..566d167c3 100644 --- a/src/lib/server/Config.cpp +++ b/src/lib/server/Config.cpp @@ -936,7 +936,7 @@ Config::parseCondition(const ConfigReadContext &s, const std::string &name, cons throw ServerConfigReadException(s, "syntax for condition: mousebutton(modifiers+button)"); } - IPlatformScreen::ButtonInfo *mouseInfo = s.parseMouse(args[0]); + auto mouseInfo = s.parseMouse(args[0]); return new InputFilter::MouseButtonCondition(m_events, mouseInfo); } @@ -998,11 +998,10 @@ void Config::parseAction( throw ServerConfigReadException(s, "syntax for action: mousebutton(modifiers+button)"); } - IPlatformScreen::ButtonInfo *mouseInfo = s.parseMouse(args[0]); + auto mouseInfo = s.parseMouse(args[0]); if (name == "mousebutton") { - IPlatformScreen::ButtonInfo *mouseInfo2 = IPlatformScreen::ButtonInfo::alloc(*mouseInfo); - action = new InputFilter::MouseButtonAction(m_events, mouseInfo2, true); + action = new InputFilter::MouseButtonAction(m_events, mouseInfo, true); rule.adoptAction(action, true); action = new InputFilter::MouseButtonAction(m_events, mouseInfo, false); activate = false; @@ -2016,7 +2015,7 @@ ConfigReadContext::parseKeystroke(const std::string &keystroke, const std::set &screens) const; - IPlatformScreen::ButtonInfo *parseMouse(const std::string &mouse) const; + IPlatformScreen::ButtonInfo parseMouse(const std::string &mouse) const; KeyModifierMask parseModifier(const std::string &modifiers) const; std::istream &getStream() const { diff --git a/src/lib/server/InputFilter.cpp b/src/lib/server/InputFilter.cpp index 1fe98f32f..85e53cd8e 100644 --- a/src/lib/server/InputFilter.cpp +++ b/src/lib/server/InputFilter.cpp @@ -100,12 +100,12 @@ void InputFilter::KeystrokeCondition::disablePrimary(PrimaryClient *primary) m_id = 0; } -InputFilter::MouseButtonCondition::MouseButtonCondition(IEventQueue *events, IPlatformScreen::ButtonInfo *info) - : m_button(info->m_button), - m_mask(info->m_mask), +InputFilter::MouseButtonCondition::MouseButtonCondition(IEventQueue *events, const IPlatformScreen::ButtonInfo &info) + : m_button(info.m_button), + m_mask(info.m_mask), m_events(events) { - free(info); + // do nothing } InputFilter::MouseButtonCondition::MouseButtonCondition(IEventQueue *events, ButtonID button, KeyModifierMask mask) @@ -492,7 +492,9 @@ const char *InputFilter::KeystrokeAction::formatName() const return (m_press ? "keyDown" : "keyUp"); } -InputFilter::MouseButtonAction::MouseButtonAction(IEventQueue *events, IPlatformScreen::ButtonInfo *info, bool press) +InputFilter::MouseButtonAction::MouseButtonAction( + IEventQueue *events, const IPlatformScreen::ButtonInfo &info, bool press +) : m_buttonInfo(info), m_press(press), m_events(events) @@ -500,12 +502,7 @@ InputFilter::MouseButtonAction::MouseButtonAction(IEventQueue *events, IPlatform // do nothing } -InputFilter::MouseButtonAction::~MouseButtonAction() -{ - free(m_buttonInfo); -} - -const IPlatformScreen::ButtonInfo *InputFilter::MouseButtonAction::getInfo() const +const IPlatformScreen::ButtonInfo &InputFilter::MouseButtonAction::getInfo() const { return m_buttonInfo; } @@ -517,16 +514,15 @@ bool InputFilter::MouseButtonAction::isOnPress() const InputFilter::Action *InputFilter::MouseButtonAction::clone() const { - IPlatformScreen::ButtonInfo *info = IPrimaryScreen::ButtonInfo::alloc(*m_buttonInfo); - return new MouseButtonAction(m_events, info, m_press); + return new MouseButtonAction(m_events, m_buttonInfo, m_press); } std::string InputFilter::MouseButtonAction::format() const { const char *type = formatName(); - std::string key = deskflow::KeyMap::formatKey(kKeyNone, m_buttonInfo->m_mask); - return deskflow::string::sprintf("%s(%s%s%d)", type, key.c_str(), key.empty() ? "" : "+", m_buttonInfo->m_button); + std::string key = deskflow::KeyMap::formatKey(kKeyNone, m_buttonInfo.m_mask); + return deskflow::string::sprintf("%s(%s%s%d)", type, key.c_str(), key.empty() ? "" : "+", m_buttonInfo.m_button); } void InputFilter::MouseButtonAction::perform(const Event &event) @@ -535,16 +531,16 @@ void InputFilter::MouseButtonAction::perform(const Event &event) // send modifiers using enum EventTypes; IPlatformScreen::KeyInfo *modifierInfo = nullptr; - if (m_buttonInfo->m_mask != 0) { + if (m_buttonInfo.m_mask != 0) { KeyID key = m_press ? kKeySetModifiers : kKeyClearModifiers; - modifierInfo = IKeyState::KeyInfo::alloc(key, m_buttonInfo->m_mask, 0, 1); + modifierInfo = IKeyState::KeyInfo::alloc(key, m_buttonInfo.m_mask, 0, 1); m_events->addEvent(Event(KeyStateKeyDown, event.getTarget(), modifierInfo, Event::EventFlags::DeliverImmediately)); } // send button EventTypes type = m_press ? PrimaryScreenButtonDown : PrimaryScreenButtonUp; m_events->addEvent(Event( - type, event.getTarget(), m_buttonInfo, Event::EventFlags::DeliverImmediately | Event::EventFlags::DontFreeData + type, event.getTarget(), &m_buttonInfo, Event::EventFlags::DeliverImmediately | Event::EventFlags::DontFreeData )); } diff --git a/src/lib/server/InputFilter.h b/src/lib/server/InputFilter.h index 99a752b68..322f119a0 100644 --- a/src/lib/server/InputFilter.h +++ b/src/lib/server/InputFilter.h @@ -76,7 +76,7 @@ public: class MouseButtonCondition : public Condition { public: - MouseButtonCondition(IEventQueue *events, IPlatformScreen::ButtonInfo *); + MouseButtonCondition(IEventQueue *events, const IPlatformScreen::ButtonInfo &); MouseButtonCondition(IEventQueue *events, ButtonID, KeyModifierMask mask); ~MouseButtonCondition() override = default; @@ -286,15 +286,15 @@ public: class MouseButtonAction : public Action { public: - MouseButtonAction(IEventQueue *events, IPlatformScreen::ButtonInfo *adoptedInfo, bool press); + MouseButtonAction(IEventQueue *events, const IPlatformScreen::ButtonInfo &adoptedInfo, bool press); MouseButtonAction(MouseButtonAction const &) = delete; MouseButtonAction(MouseButtonAction &&) = delete; - ~MouseButtonAction() override; + ~MouseButtonAction() override = default; MouseButtonAction &operator=(MouseButtonAction const &) = delete; MouseButtonAction &operator=(MouseButtonAction &&) = delete; - const IPlatformScreen::ButtonInfo *getInfo() const; + const IPlatformScreen::ButtonInfo &getInfo() const; bool isOnPress() const; // Action overrides @@ -306,7 +306,7 @@ public: virtual const char *formatName() const; private: - IPlatformScreen::ButtonInfo *m_buttonInfo; + IPlatformScreen::ButtonInfo m_buttonInfo; bool m_press; IEventQueue *m_events; };