X11rdp: input delay motion

ulab-next
Jay Sorg 11 years ago
parent fa40106a69
commit ee98f1cdd4

@ -44,6 +44,12 @@ keyboard and mouse stuff
#define DEBUG_OUT_INPUT(arg) ErrorF arg
#endif
#define LOG_LEVEL 1
#define LLOG(_level, _args) \
do { if (_level < LOG_LEVEL) { ErrorF _args ; } } while (0)
#define LLOGLN(_level, _args) \
do { if (_level < LOG_LEVEL) { ErrorF _args ; ErrorF("\n"); } } while (0)
extern ScreenPtr g_pScreen; /* in rdpmain.c */
extern DeviceIntPtr g_pointer; /* in rdpmain.c */
extern DeviceIntPtr g_keyboard; /* in rdpmain.c */
@ -59,6 +65,12 @@ static int g_tab_down = 0;
above *_down vars */
static int g_scroll_lock_down = 0;
static OsTimerPtr g_timer = 0;
static int g_x = 0;
static int g_y = 0;
static int g_timer_schedualed = 0;
static int g_delay_motion = 1;
#define MIN_KEY_CODE 8
#define MAX_KEY_CODE 255
#define NO_OF_KEYS ((MAX_KEY_CODE - MIN_KEY_CODE) + 1)
@ -779,6 +791,7 @@ rdpEnqueueButton(int type, int buttons)
EventListPtr rdp_events;
xEvent *pev;
LLOGLN(10, ("rdpEnqueueButton:"));
i = GetEventList(&rdp_events);
n = GetPointerEvents(rdp_events, g_pointer, type, buttons, 0, 0, 0, 0);
@ -808,6 +821,16 @@ rdpEnqueueKey(int type, int scancode)
}
}
/******************************************************************************/
static CARD32
rdpDeferredInputCallback(OsTimerPtr timer, CARD32 now, pointer arg)
{
LLOGLN(10, ("rdpDeferredInputCallback"));
g_timer_schedualed = 0;
rdpEnqueueMotion(g_x, g_y);
return 0;
}
/******************************************************************************/
void
PtrAddEvent(int buttonMask, int x, int y)
@ -815,29 +838,49 @@ PtrAddEvent(int buttonMask, int x, int y)
int i;
int type;
int buttons;
int send_now;
rdpEnqueueMotion(x, y);
for (i = 0; i < 5; i++)
LLOGLN(10, ("PtrAddEvent:"));
send_now = (buttonMask ^ g_old_button_mask) || (g_delay_motion == 0);
LLOGLN(10, ("PtrAddEvent: send_now %d", send_now));
if (send_now)
{
if ((buttonMask ^ g_old_button_mask) & (1 << i))
if (g_timer_schedualed)
{
if (buttonMask & (1 << i))
{
type = ButtonPress;
buttons = i + 1;
rdpEnqueueButton(type, buttons);
}
else
g_timer_schedualed = 0;
TimerCancel(g_timer);
}
rdpEnqueueMotion(x, y);
for (i = 0; i < 5; i++)
{
if ((buttonMask ^ g_old_button_mask) & (1 << i))
{
type = ButtonRelease;
buttons = i + 1;
rdpEnqueueButton(type, buttons);
if (buttonMask & (1 << i))
{
type = ButtonPress;
buttons = i + 1;
rdpEnqueueButton(type, buttons);
}
else
{
type = ButtonRelease;
buttons = i + 1;
rdpEnqueueButton(type, buttons);
}
}
}
g_old_button_mask = buttonMask;
}
else
{
g_x = x;
g_y = y;
if (!g_timer_schedualed)
{
g_timer_schedualed = 1;
g_timer = TimerSet(g_timer, 0, 60, rdpDeferredInputCallback, 0);
}
}
g_old_button_mask = buttonMask;
}
/******************************************************************************/

Loading…
Cancel
Save