Support extended mouse buttons 4 and 5 (ie back/forward buttons)
This commit is contained in:
parent
f616b2c1f9
commit
9889ed6457
@ -232,7 +232,8 @@ enum RDP_INPUT_DEVICE
|
|||||||
RDP_INPUT_CODEPOINT = 1,
|
RDP_INPUT_CODEPOINT = 1,
|
||||||
RDP_INPUT_VIRTKEY = 2,
|
RDP_INPUT_VIRTKEY = 2,
|
||||||
RDP_INPUT_SCANCODE = 4,
|
RDP_INPUT_SCANCODE = 4,
|
||||||
RDP_INPUT_MOUSE = 0x8001
|
RDP_INPUT_MOUSE = 0x8001,
|
||||||
|
RDP_INPUT_MOUSEX = 0x8002
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Device flags */
|
/* Device flags */
|
||||||
@ -257,6 +258,8 @@ enum RDP_INPUT_DEVICE
|
|||||||
#define MOUSE_FLAG_BUTTON3 0x4000
|
#define MOUSE_FLAG_BUTTON3 0x4000
|
||||||
#define MOUSE_FLAG_BUTTON4 0x0280
|
#define MOUSE_FLAG_BUTTON4 0x0280
|
||||||
#define MOUSE_FLAG_BUTTON5 0x0380
|
#define MOUSE_FLAG_BUTTON5 0x0380
|
||||||
|
#define MOUSEX_FLAG_BUTTON1 0x0001
|
||||||
|
#define MOUSEX_FLAG_BUTTON2 0x0002
|
||||||
#define MOUSE_FLAG_DOWN 0x8000
|
#define MOUSE_FLAG_DOWN 0x8000
|
||||||
|
|
||||||
/* Raster operation masks */
|
/* Raster operation masks */
|
||||||
|
2
proto.h
2
proto.h
@ -244,7 +244,7 @@ RD_BOOL handle_special_keys(uint32 keysym, unsigned int state, uint32 ev_time, R
|
|||||||
key_translation xkeymap_translate_key(uint32 keysym, unsigned int keycode, unsigned int state);
|
key_translation xkeymap_translate_key(uint32 keysym, unsigned int keycode, unsigned int state);
|
||||||
void xkeymap_send_keys(uint32 keysym, unsigned int keycode, unsigned int state, uint32 ev_time,
|
void xkeymap_send_keys(uint32 keysym, unsigned int keycode, unsigned int state, uint32 ev_time,
|
||||||
RD_BOOL pressed, uint8 nesting);
|
RD_BOOL pressed, uint8 nesting);
|
||||||
uint16 xkeymap_translate_button(unsigned int button);
|
uint16 xkeymap_translate_button(unsigned int button, uint16* input_type);
|
||||||
char *get_ksname(uint32 keysym);
|
char *get_ksname(uint32 keysym);
|
||||||
void save_remote_modifiers(uint8 scancode);
|
void save_remote_modifiers(uint8 scancode);
|
||||||
void restore_remote_modifiers(uint32 ev_time, uint8 scancode);
|
void restore_remote_modifiers(uint32 ev_time, uint8 scancode);
|
||||||
|
10
xkeymap.c
10
xkeymap.c
@ -883,8 +883,10 @@ xkeymap_send_keys(uint32 keysym, unsigned int keycode, unsigned int state, uint3
|
|||||||
}
|
}
|
||||||
|
|
||||||
uint16
|
uint16
|
||||||
xkeymap_translate_button(unsigned int button)
|
xkeymap_translate_button(unsigned int button, uint16* input_type)
|
||||||
{
|
{
|
||||||
|
*input_type = RDP_INPUT_MOUSE;
|
||||||
|
|
||||||
switch (button)
|
switch (button)
|
||||||
{
|
{
|
||||||
case Button1: /* left */
|
case Button1: /* left */
|
||||||
@ -897,6 +899,12 @@ xkeymap_translate_button(unsigned int button)
|
|||||||
return MOUSE_FLAG_BUTTON4;
|
return MOUSE_FLAG_BUTTON4;
|
||||||
case Button5: /* wheel down */
|
case Button5: /* wheel down */
|
||||||
return MOUSE_FLAG_BUTTON5;
|
return MOUSE_FLAG_BUTTON5;
|
||||||
|
case 8: /* button 4 */
|
||||||
|
*input_type = RDP_INPUT_MOUSEX;
|
||||||
|
return MOUSEX_FLAG_BUTTON1;
|
||||||
|
case 9: /* button 5 */
|
||||||
|
*input_type = RDP_INPUT_MOUSEX;
|
||||||
|
return MOUSEX_FLAG_BUTTON2;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
10
xwin.c
10
xwin.c
@ -2262,7 +2262,7 @@ xwin_toggle_fullscreen(void)
|
|||||||
static void
|
static void
|
||||||
handle_button_event(XEvent xevent, RD_BOOL down)
|
handle_button_event(XEvent xevent, RD_BOOL down)
|
||||||
{
|
{
|
||||||
uint16 button, flags = 0;
|
uint16 button, input_type, flags = 0;
|
||||||
g_last_gesturetime = xevent.xbutton.time;
|
g_last_gesturetime = xevent.xbutton.time;
|
||||||
/* Reverse the pointer button mapping, e.g. in the case of
|
/* Reverse the pointer button mapping, e.g. in the case of
|
||||||
"left-handed mouse mode"; the RDP session expects to
|
"left-handed mouse mode"; the RDP session expects to
|
||||||
@ -2270,7 +2270,7 @@ handle_button_event(XEvent xevent, RD_BOOL down)
|
|||||||
logical button behavior depends on the remote desktop's own
|
logical button behavior depends on the remote desktop's own
|
||||||
mouse settings */
|
mouse settings */
|
||||||
xevent.xbutton.button = g_pointer_log_to_phys_map[xevent.xbutton.button - 1];
|
xevent.xbutton.button = g_pointer_log_to_phys_map[xevent.xbutton.button - 1];
|
||||||
button = xkeymap_translate_button(xevent.xbutton.button);
|
button = xkeymap_translate_button(xevent.xbutton.button, &input_type);
|
||||||
if (button == 0)
|
if (button == 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@ -2306,7 +2306,7 @@ handle_button_event(XEvent xevent, RD_BOOL down)
|
|||||||
{
|
{
|
||||||
/* Release the mouse button outside the minimize button, to prevent the
|
/* Release the mouse button outside the minimize button, to prevent the
|
||||||
actual minimazation to happen */
|
actual minimazation to happen */
|
||||||
rdp_send_input(time(NULL), RDP_INPUT_MOUSE, button, 1, 1);
|
rdp_send_input(time(NULL), input_type, button, 1, 1);
|
||||||
XIconifyWindow(g_display, g_wnd, DefaultScreen(g_display));
|
XIconifyWindow(g_display, g_wnd, DefaultScreen(g_display));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -2343,13 +2343,13 @@ handle_button_event(XEvent xevent, RD_BOOL down)
|
|||||||
|
|
||||||
if (xevent.xmotion.window == g_wnd)
|
if (xevent.xmotion.window == g_wnd)
|
||||||
{
|
{
|
||||||
rdp_send_input(time(NULL), RDP_INPUT_MOUSE,
|
rdp_send_input(time(NULL), input_type,
|
||||||
flags | button, xevent.xbutton.x, xevent.xbutton.y);
|
flags | button, xevent.xbutton.x, xevent.xbutton.y);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* SeamlessRDP */
|
/* SeamlessRDP */
|
||||||
rdp_send_input(time(NULL), RDP_INPUT_MOUSE,
|
rdp_send_input(time(NULL), input_type,
|
||||||
flags | button, xevent.xbutton.x_root, xevent.xbutton.y_root);
|
flags | button, xevent.xbutton.x_root, xevent.xbutton.y_root);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user