parent
f372ccd2b8
commit
cbc74d99b0
5 changed files with 29 additions and 30 deletions
|
|
@ -24,6 +24,10 @@ public:
|
||||||
class ButtonInfo
|
class ButtonInfo
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
ButtonInfo(ButtonID button, KeyModifierMask mask) : m_button{button}, m_mask{mask}
|
||||||
|
{
|
||||||
|
// do nothing
|
||||||
|
}
|
||||||
static ButtonInfo *alloc(ButtonID, KeyModifierMask);
|
static ButtonInfo *alloc(ButtonID, KeyModifierMask);
|
||||||
static ButtonInfo *alloc(const ButtonInfo &);
|
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)");
|
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);
|
return new InputFilter::MouseButtonCondition(m_events, mouseInfo);
|
||||||
}
|
}
|
||||||
|
|
@ -998,11 +998,10 @@ void Config::parseAction(
|
||||||
throw ServerConfigReadException(s, "syntax for action: mousebutton(modifiers+button)");
|
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") {
|
if (name == "mousebutton") {
|
||||||
IPlatformScreen::ButtonInfo *mouseInfo2 = IPlatformScreen::ButtonInfo::alloc(*mouseInfo);
|
action = new InputFilter::MouseButtonAction(m_events, mouseInfo, true);
|
||||||
action = new InputFilter::MouseButtonAction(m_events, mouseInfo2, true);
|
|
||||||
rule.adoptAction(action, true);
|
rule.adoptAction(action, true);
|
||||||
action = new InputFilter::MouseButtonAction(m_events, mouseInfo, false);
|
action = new InputFilter::MouseButtonAction(m_events, mouseInfo, false);
|
||||||
activate = 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);
|
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;
|
std::string s = mouse;
|
||||||
|
|
||||||
|
|
@ -2034,7 +2033,7 @@ IPlatformScreen::ButtonInfo *ConfigReadContext::parseMouse(const std::string &mo
|
||||||
throw ServerConfigReadException(*this, "invalid button");
|
throw ServerConfigReadException(*this, "invalid button");
|
||||||
}
|
}
|
||||||
|
|
||||||
return IPlatformScreen::ButtonInfo::alloc(button, mask);
|
return IPlatformScreen::ButtonInfo{button, mask};
|
||||||
}
|
}
|
||||||
|
|
||||||
KeyModifierMask ConfigReadContext::parseModifier(const std::string &modifiers) const
|
KeyModifierMask ConfigReadContext::parseModifier(const std::string &modifiers) const
|
||||||
|
|
|
||||||
|
|
@ -506,7 +506,7 @@ public:
|
||||||
) const;
|
) const;
|
||||||
IPlatformScreen::KeyInfo *parseKeystroke(const std::string &keystroke) const;
|
IPlatformScreen::KeyInfo *parseKeystroke(const std::string &keystroke) const;
|
||||||
IPlatformScreen::KeyInfo *parseKeystroke(const std::string &keystroke, const std::set<std::string> &screens) 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;
|
KeyModifierMask parseModifier(const std::string &modifiers) const;
|
||||||
std::istream &getStream() const
|
std::istream &getStream() const
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -100,12 +100,12 @@ void InputFilter::KeystrokeCondition::disablePrimary(PrimaryClient *primary)
|
||||||
m_id = 0;
|
m_id = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
InputFilter::MouseButtonCondition::MouseButtonCondition(IEventQueue *events, IPlatformScreen::ButtonInfo *info)
|
InputFilter::MouseButtonCondition::MouseButtonCondition(IEventQueue *events, const IPlatformScreen::ButtonInfo &info)
|
||||||
: m_button(info->m_button),
|
: m_button(info.m_button),
|
||||||
m_mask(info->m_mask),
|
m_mask(info.m_mask),
|
||||||
m_events(events)
|
m_events(events)
|
||||||
{
|
{
|
||||||
free(info);
|
// do nothing
|
||||||
}
|
}
|
||||||
|
|
||||||
InputFilter::MouseButtonCondition::MouseButtonCondition(IEventQueue *events, ButtonID button, KeyModifierMask mask)
|
InputFilter::MouseButtonCondition::MouseButtonCondition(IEventQueue *events, ButtonID button, KeyModifierMask mask)
|
||||||
|
|
@ -492,7 +492,9 @@ const char *InputFilter::KeystrokeAction::formatName() const
|
||||||
return (m_press ? "keyDown" : "keyUp");
|
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_buttonInfo(info),
|
||||||
m_press(press),
|
m_press(press),
|
||||||
m_events(events)
|
m_events(events)
|
||||||
|
|
@ -500,12 +502,7 @@ InputFilter::MouseButtonAction::MouseButtonAction(IEventQueue *events, IPlatform
|
||||||
// do nothing
|
// do nothing
|
||||||
}
|
}
|
||||||
|
|
||||||
InputFilter::MouseButtonAction::~MouseButtonAction()
|
const IPlatformScreen::ButtonInfo &InputFilter::MouseButtonAction::getInfo() const
|
||||||
{
|
|
||||||
free(m_buttonInfo);
|
|
||||||
}
|
|
||||||
|
|
||||||
const IPlatformScreen::ButtonInfo *InputFilter::MouseButtonAction::getInfo() const
|
|
||||||
{
|
{
|
||||||
return m_buttonInfo;
|
return m_buttonInfo;
|
||||||
}
|
}
|
||||||
|
|
@ -517,16 +514,15 @@ bool InputFilter::MouseButtonAction::isOnPress() const
|
||||||
|
|
||||||
InputFilter::Action *InputFilter::MouseButtonAction::clone() const
|
InputFilter::Action *InputFilter::MouseButtonAction::clone() const
|
||||||
{
|
{
|
||||||
IPlatformScreen::ButtonInfo *info = IPrimaryScreen::ButtonInfo::alloc(*m_buttonInfo);
|
return new MouseButtonAction(m_events, m_buttonInfo, m_press);
|
||||||
return new MouseButtonAction(m_events, info, m_press);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string InputFilter::MouseButtonAction::format() const
|
std::string InputFilter::MouseButtonAction::format() const
|
||||||
{
|
{
|
||||||
const char *type = formatName();
|
const char *type = formatName();
|
||||||
|
|
||||||
std::string key = deskflow::KeyMap::formatKey(kKeyNone, m_buttonInfo->m_mask);
|
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);
|
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)
|
void InputFilter::MouseButtonAction::perform(const Event &event)
|
||||||
|
|
@ -535,16 +531,16 @@ void InputFilter::MouseButtonAction::perform(const Event &event)
|
||||||
// send modifiers
|
// send modifiers
|
||||||
using enum EventTypes;
|
using enum EventTypes;
|
||||||
IPlatformScreen::KeyInfo *modifierInfo = nullptr;
|
IPlatformScreen::KeyInfo *modifierInfo = nullptr;
|
||||||
if (m_buttonInfo->m_mask != 0) {
|
if (m_buttonInfo.m_mask != 0) {
|
||||||
KeyID key = m_press ? kKeySetModifiers : kKeyClearModifiers;
|
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));
|
m_events->addEvent(Event(KeyStateKeyDown, event.getTarget(), modifierInfo, Event::EventFlags::DeliverImmediately));
|
||||||
}
|
}
|
||||||
|
|
||||||
// send button
|
// send button
|
||||||
EventTypes type = m_press ? PrimaryScreenButtonDown : PrimaryScreenButtonUp;
|
EventTypes type = m_press ? PrimaryScreenButtonDown : PrimaryScreenButtonUp;
|
||||||
m_events->addEvent(Event(
|
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
|
class MouseButtonCondition : public Condition
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
MouseButtonCondition(IEventQueue *events, IPlatformScreen::ButtonInfo *);
|
MouseButtonCondition(IEventQueue *events, const IPlatformScreen::ButtonInfo &);
|
||||||
MouseButtonCondition(IEventQueue *events, ButtonID, KeyModifierMask mask);
|
MouseButtonCondition(IEventQueue *events, ButtonID, KeyModifierMask mask);
|
||||||
~MouseButtonCondition() override = default;
|
~MouseButtonCondition() override = default;
|
||||||
|
|
||||||
|
|
@ -286,15 +286,15 @@ public:
|
||||||
class MouseButtonAction : public Action
|
class MouseButtonAction : public Action
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
MouseButtonAction(IEventQueue *events, IPlatformScreen::ButtonInfo *adoptedInfo, bool press);
|
MouseButtonAction(IEventQueue *events, const IPlatformScreen::ButtonInfo &adoptedInfo, bool press);
|
||||||
MouseButtonAction(MouseButtonAction const &) = delete;
|
MouseButtonAction(MouseButtonAction const &) = delete;
|
||||||
MouseButtonAction(MouseButtonAction &&) = delete;
|
MouseButtonAction(MouseButtonAction &&) = delete;
|
||||||
~MouseButtonAction() override;
|
~MouseButtonAction() override = default;
|
||||||
|
|
||||||
MouseButtonAction &operator=(MouseButtonAction const &) = delete;
|
MouseButtonAction &operator=(MouseButtonAction const &) = delete;
|
||||||
MouseButtonAction &operator=(MouseButtonAction &&) = delete;
|
MouseButtonAction &operator=(MouseButtonAction &&) = delete;
|
||||||
|
|
||||||
const IPlatformScreen::ButtonInfo *getInfo() const;
|
const IPlatformScreen::ButtonInfo &getInfo() const;
|
||||||
bool isOnPress() const;
|
bool isOnPress() const;
|
||||||
|
|
||||||
// Action overrides
|
// Action overrides
|
||||||
|
|
@ -306,7 +306,7 @@ public:
|
||||||
virtual const char *formatName() const;
|
virtual const char *formatName() const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
IPlatformScreen::ButtonInfo *m_buttonInfo;
|
IPlatformScreen::ButtonInfo m_buttonInfo;
|
||||||
bool m_press;
|
bool m_press;
|
||||||
IEventQueue *m_events;
|
IEventQueue *m_events;
|
||||||
};
|
};
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue