inputs-channel: Support more mouse buttons

Extend mouse button bits support.
Allows to support up to 16 buttons.

Partly based on a patch from Kevin Pouget (RED_MOUSE_BUTTON_STATE_TO_AGENT
macro, updated on new protocol constants).

Signed-off-by: Frediano Ziglio <freddy77@gmail.com>
Acked-by: Kevin Pouget <kpouget@redhat.com>
This commit is contained in:
Frediano Ziglio 2020-08-20 11:31:36 +01:00
parent 2899fd91fb
commit 8bb90e55aa

View File

@ -117,15 +117,16 @@ const VDAgentMouseState *InputsChannel::get_mouse_state()
return &mouse_state;
}
#define RED_MOUSE_STATE_TO_LOCAL(state) \
((state & SPICE_MOUSE_BUTTON_MASK_LEFT) | \
((state & SPICE_MOUSE_BUTTON_MASK_MIDDLE) << 1) | \
// middle and right states are inverted
// all buttons from SPICE_MOUSE_BUTTON_MASK_SIDE are mapped a bit higher
// to avoid conflicting with some internal Qemu bit
#define RED_MOUSE_STATE_TO_LOCAL(state) \
((state & SPICE_MOUSE_BUTTON_MASK_LEFT) | \
((state & (SPICE_MOUSE_BUTTON_MASK_MIDDLE|0xffe0)) << 1) | \
((state & SPICE_MOUSE_BUTTON_MASK_RIGHT) >> 1))
#define RED_MOUSE_BUTTON_STATE_TO_AGENT(state) \
(((state & SPICE_MOUSE_BUTTON_MASK_LEFT) ? VD_AGENT_LBUTTON_MASK : 0) | \
((state & SPICE_MOUSE_BUTTON_MASK_MIDDLE) ? VD_AGENT_MBUTTON_MASK : 0) | \
((state & SPICE_MOUSE_BUTTON_MASK_RIGHT) ? VD_AGENT_RBUTTON_MASK : 0))
// mouse button constants are defined to be off-one between agent and SPICE protocol
#define RED_MOUSE_BUTTON_STATE_TO_AGENT(state) ((state) << 1)
void InputsChannel::activate_modifiers_watch()
{