From 8bb90e55aa5cb80c7a8366c3faa0bba508b1e89f Mon Sep 17 00:00:00 2001 From: Frediano Ziglio Date: Thu, 20 Aug 2020 11:31:36 +0100 Subject: [PATCH] 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 Acked-by: Kevin Pouget --- server/inputs-channel.cpp | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/server/inputs-channel.cpp b/server/inputs-channel.cpp index f22421f3..80ea8a89 100644 --- a/server/inputs-channel.cpp +++ b/server/inputs-channel.cpp @@ -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() {