From 16186ac4879e2daec92dbb7612dc71c9ac9a82e3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc-Andr=C3=A9=20Moreau?= Date: Thu, 9 May 2013 00:52:37 -0400 Subject: [PATCH] channels/rdpei: define message interface ids --- client/X11/xf_input.c | 156 ++++++++++++++++++++++++++++---------- client/X11/xf_input.h | 9 +-- client/X11/xf_interface.c | 5 ++ include/freerdp/message.h | 20 +++++ 4 files changed, 143 insertions(+), 47 deletions(-) diff --git a/client/X11/xf_input.c b/client/X11/xf_input.c index c90cb38f4..5ab5ce6f3 100644 --- a/client/X11/xf_input.c +++ b/client/X11/xf_input.c @@ -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); +} diff --git a/client/X11/xf_input.h b/client/X11/xf_input.h index 6c540fef5..85428ae6c 100644 --- a/client/X11/xf_input.h +++ b/client/X11/xf_input.h @@ -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 diff --git a/client/X11/xf_interface.c b/client/X11/xf_interface.c index c1d5f87e7..236125650 100644 --- a/client/X11/xf_interface.c +++ b/client/X11/xf_interface.c @@ -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; } diff --git a/include/freerdp/message.h b/include/freerdp/message.h index 754802ba2..e275849b4 100644 --- a/include/freerdp/message.h +++ b/include/freerdp/message.h @@ -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 */