Handle mouse wheel

The RDP compositor was ignoring mouse wheel events, this patch adds
support for it.
This commit is contained in:
Hardening 2013-06-03 22:55:47 +02:00 committed by Kristian Høgsberg
parent 3b64d6236c
commit b60e46f6ba

View file

@ -42,6 +42,7 @@
#include "pixman-renderer.h"
#define MAX_FREERDP_FDS 32
#define DEFAULT_AXIS_STEP_DISTANCE wl_fixed_from_int(10)
struct rdp_compositor_config {
int width;
@ -758,7 +759,7 @@ xf_peer_activate(freerdp_peer *client)
static void
xf_mouseEvent(rdpInput *input, UINT16 flags, UINT16 x, UINT16 y) {
wl_fixed_t wl_x, wl_y;
wl_fixed_t wl_x, wl_y, axis;
RdpPeerContext *peerContext = (RdpPeerContext *)input->context;
struct rdp_output *output;
uint32_t button = 0;
@ -785,6 +786,22 @@ xf_mouseEvent(rdpInput *input, UINT16 flags, UINT16 x, UINT16 y) {
(flags & PTR_FLAGS_DOWN) ? WL_POINTER_BUTTON_STATE_PRESSED : WL_POINTER_BUTTON_STATE_RELEASED
);
}
if (flags & PTR_FLAGS_WHEEL) {
/* DEFAULT_AXIS_STEP_DISTANCE is stolen from compositor-x11.c
* The RDP specs says the lower bits of flags contains the "the number of rotation
* units the mouse wheel was rotated".
*
* http://blogs.msdn.com/b/oldnewthing/archive/2013/01/23/10387366.aspx explains the 120 value
*/
axis = (DEFAULT_AXIS_STEP_DISTANCE * (flags & 0xff)) / 120;
if (flags & PTR_FLAGS_WHEEL_NEGATIVE)
axis = -axis;
notify_axis(&peerContext->item.seat, weston_compositor_get_time(),
WL_POINTER_AXIS_VERTICAL_SCROLL,
axis);
}
}
static void