channels/rdpei: define message interface ids

This commit is contained in:
Marc-André Moreau 2013-05-09 00:52:37 -04:00
parent 335d13d65f
commit 16186ac487
4 changed files with 143 additions and 47 deletions

View File

@ -205,47 +205,8 @@ void xf_input_detect_pinch(xfInfo* xfi)
#endif
int xf_input_handle_event(xfInfo* xfi, XEvent* event)
{
#ifdef WITH_XI
XGenericEventCookie* cookie = &event->xcookie;
XGetEventData(xfi->display, cookie);
if ((cookie->type == GenericEvent) && (cookie->extension == xfi->XInputOpcode))
{
switch(cookie->evtype)
{
case XI_TouchBegin:
if (xf_input_is_duplicate(cookie->data) == FALSE)
xf_input_touch_begin(xfi, cookie->data);
xf_input_save_last_event(cookie->data);
break;
case XI_TouchUpdate:
if (xf_input_is_duplicate(cookie->data) == FALSE)
xf_input_touch_update(xfi, cookie->data);
xf_input_save_last_event(cookie->data);
break;
case XI_TouchEnd:
if (xf_input_is_duplicate(cookie->data) == FALSE)
xf_input_touch_end(xfi, cookie->data);
xf_input_save_last_event(cookie->data);
break;
default:
printf("unhandled xi type= %d\n", cookie->evtype);
break;
}
}
XFreeEventData(xfi->display,cookie);
#endif
return 0;
}
#ifdef WITH_XI
void xf_input_touch_begin(xfInfo* xfi, XIDeviceEvent* event)
{
int i;
@ -306,3 +267,120 @@ void xf_input_touch_end(xfInfo* xfi, XIDeviceEvent* event)
}
#endif
int xf_input_handle_event_local(xfInfo* xfi, XEvent* event)
{
#ifdef WITH_XI
XGenericEventCookie* cookie = &event->xcookie;
XGetEventData(xfi->display, cookie);
if ((cookie->type == GenericEvent) && (cookie->extension == xfi->XInputOpcode))
{
switch (cookie->evtype)
{
case XI_TouchBegin:
if (xf_input_is_duplicate(cookie->data) == FALSE)
xf_input_touch_begin(xfi, cookie->data);
xf_input_save_last_event(cookie->data);
break;
case XI_TouchUpdate:
if (xf_input_is_duplicate(cookie->data) == FALSE)
xf_input_touch_update(xfi, cookie->data);
xf_input_save_last_event(cookie->data);
break;
case XI_TouchEnd:
if (xf_input_is_duplicate(cookie->data) == FALSE)
xf_input_touch_end(xfi, cookie->data);
xf_input_save_last_event(cookie->data);
break;
default:
printf("unhandled xi type= %d\n", cookie->evtype);
break;
}
}
XFreeEventData(xfi->display,cookie);
#endif
return 0;
}
#ifdef WITH_XI
int xf_input_touch_begin_remote(xfInfo* xfi, XIDeviceEvent* event)
{
return 0;
}
int xf_input_touch_update_remote(xfInfo* xfi, XIDeviceEvent* event)
{
return 0;
}
int xf_input_touch_end_remote(xfInfo* xfi, XIDeviceEvent* event)
{
return 0;
}
#endif
int xf_input_handle_event_remote(xfInfo* xfi, XEvent* event)
{
#ifdef WITH_XI
XGenericEventCookie* cookie = &event->xcookie;
XGetEventData(xfi->display, cookie);
if ((cookie->type == GenericEvent) && (cookie->extension == xfi->XInputOpcode))
{
switch (cookie->evtype)
{
case XI_TouchBegin:
xf_input_touch_begin_remote(xfi, cookie->data);
break;
case XI_TouchUpdate:
xf_input_touch_update_remote(xfi, cookie->data);
break;
case XI_TouchEnd:
xf_input_touch_end_remote(xfi, cookie->data);
break;
default:
break;
}
}
XFreeEventData(xfi->display,cookie);
#endif
return 0;
}
void xf_process_rdpei_event(xfInfo* xfi, wMessage* event)
{
switch (GetMessageType(event->id))
{
case RdpeiChannel_ServerReady:
break;
case RdpeiChannel_SuspendTouch:
break;
case RdpeiChannel_ResumeTouch:
break;
}
}
int xf_input_handle_event(xfInfo* xfi, XEvent* event)
{
if (xfi->settings->MultiTouchInput)
{
return xf_input_handle_event_remote(xfi, event);
}
return xf_input_handle_event_local(xfi, event);
}

View File

@ -29,13 +29,6 @@
int xf_input_init(xfInfo* xfi, Window win);
int xf_input_handle_event(xfInfo* xfi, XEvent* event);
#ifdef WITH_XI
void xf_input_touch_begin(xfInfo* xfi, XIDeviceEvent* event);
void xf_input_touch_update(xfInfo* xfi, XIDeviceEvent* event);
void xf_input_touch_end(xfInfo* xfi, XIDeviceEvent* event);
#endif
void xf_process_rdpei_event(xfInfo* xfi, wMessage* event);
#endif

View File

@ -77,6 +77,7 @@
#include "xf_rail.h"
#include "xf_tsmf.h"
#include "xf_event.h"
#include "xf_input.h"
#include "xf_cliprdr.h"
#include "xf_monitor.h"
#include "xf_graphics.h"
@ -1024,6 +1025,10 @@ void xf_process_channel_event(rdpChannels* channels, freerdp* instance)
xf_process_cliprdr_event(xfi, event);
break;
case RdpeiChannel_Class:
xf_process_rdpei_event(xfi, event);
break;
default:
break;
}

View File

@ -324,5 +324,25 @@
#define FREERDP_RAIL_CHANNEL_CLIENT_GET_APP_ID_REQUEST MakeMessageId(RailChannel, ClientGetAppIdRequest)
#define FREERDP_RAIL_CHANNEL_SERVER_GET_APP_ID_RESPONSE MakeMessageId(RailChannel, ServerGetAppIdResponse)
/**
* MultiTouch Input Channel Extension (MS-RDPEDI)
*/
#define RdpeiChannel_Class (Channel_Base + 5)
#define RdpeiChannel_ServerReady 1
#define RdpeiChannel_ClientReady 2
#define RdpeiChannel_TouchEvent 3
#define RdpeiChannel_SuspendTouch 4
#define RdpeiChannel_ResumeTouch 5
#define RdpeiChannel_DismissHoveringContact 6
#define FREERDP_RDPEI_CHANNEL_SERVER_READY MakeMessageId(RdpeiChannel, ServerReady)
#define FREERDP_RDPEI_CHANNEL_CLIENT_READY MakeMessageId(RdpeiChannel, ClientReady)
#define FREERDP_RDPEI_CHANNEL_TOUCH_EVENT MakeMessageId(RdpeiChannel, TouchEvent)
#define FREERDP_RDPEI_CHANNEL_SUSPEND_TOUCH MakeMessageId(RdpeiChannel, SuspendTouch)
#define FREERDP_RDPEI_CHANNEL_RESUME_TOUCH MakeMessageId(RdpeiChannel, ResumeTouch)
#define FREERDP_RDPEI_CHANNEL_DISMISS_HOVERING_CONTACT MakeMessageId(RdpeiChannel, DismissHoveringContact)
#endif /* FREERDP_CORE_MESSAGE_H */