parent
f372ccd2b8
commit
cbc74d99b0
5 changed files with 29 additions and 30 deletions
|
|
@ -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 &);
|
||||
|
||||
|
|
|
|||
|
|
@ -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<s
|
|||
return IPlatformScreen::KeyInfo::alloc(key, mask, 0, 0, screens);
|
||||
}
|
||||
|
||||
IPlatformScreen::ButtonInfo *ConfigReadContext::parseMouse(const std::string &mouse) const
|
||||
IPlatformScreen::ButtonInfo ConfigReadContext::parseMouse(const std::string &mouse) const
|
||||
{
|
||||
std::string s = mouse;
|
||||
|
||||
|
|
@ -2034,7 +2033,7 @@ IPlatformScreen::ButtonInfo *ConfigReadContext::parseMouse(const std::string &mo
|
|||
throw ServerConfigReadException(*this, "invalid button");
|
||||
}
|
||||
|
||||
return IPlatformScreen::ButtonInfo::alloc(button, mask);
|
||||
return IPlatformScreen::ButtonInfo{button, mask};
|
||||
}
|
||||
|
||||
KeyModifierMask ConfigReadContext::parseModifier(const std::string &modifiers) const
|
||||
|
|
|
|||
|
|
@ -506,7 +506,7 @@ public:
|
|||
) const;
|
||||
IPlatformScreen::KeyInfo *parseKeystroke(const std::string &keystroke) const;
|
||||
IPlatformScreen::KeyInfo *parseKeystroke(const std::string &keystroke, const std::set<std::string> &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
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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
|
||||
));
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
};
|
||||
|
|
|
|||
Loading…
Reference in a new issue