1 /**************************************************************************
5 Copyright (c) 2013 Samsung Electronics Co., Ltd All Rights Reserved
7 Contact: Boram Park <boram1288.park@samsung.com>
8 Sangjin LEE <lsj119@samsung.com>
10 Permission is hereby granted, free of charge, to any person obtaining a
11 copy of this software and associated documentation files (the
12 "Software"), to deal in the Software without restriction, including
13 without limitation the rights to use, copy, modify, merge, publish,
14 distribute, sub license, and/or sell copies of the Software, and to
15 permit persons to whom the Software is furnished to do so, subject to
16 the following conditions:
18 The above copyright notice and this permission notice (including the
19 next paragraph) shall be included in all copies or substantial portions
22 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
23 OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
24 MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
25 IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR
26 ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
27 TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
28 SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
30 **************************************************************************/
39 #include <sys/types.h>
40 #include <sys/fcntl.h>
51 #include <X11/Xatom.h>
53 #include <windowstr.h>
54 #include <X11/extensions/gesture.h>
55 #include <X11/extensions/gestureproto.h>
58 #include "xdbg_types.h"
59 #include "xdbg_evlog_gesture.h"
60 #include "xdbg_evlog.h"
63 _EvlogRequestGesture(EvlogInfo *evinfo, int detail_level, char *reply, int *len)
65 xReq *req = evinfo->req.ptr;
69 case X_GestureSelectEvents:
71 xGestureSelectEventsReq *stuff = (xGestureSelectEventsReq *)req;
73 (unsigned int)stuff->window);
75 if (detail_level >= EVLOG_PRINT_DETAIL)
78 (unsigned int)stuff->mask);
84 case X_GestureGetSelectedEvents:
86 xGestureGetSelectedEventsReq *stuff = (xGestureGetSelectedEventsReq *)req;
88 (unsigned int)stuff->window);
93 case X_GestureGrabEvent:
95 xGestureGrabEventReq *stuff = (xGestureGrabEventReq *)req;
97 (unsigned int)stuff->window);
99 if (detail_level >= EVLOG_PRINT_DETAIL)
101 const char *event_type;
102 char devent_type[10];
104 switch (stuff->eventType)
106 case GestureNotifyFlick: event_type = "GestureNotifyFlick"; break;
107 case GestureNotifyPan: event_type = "GestureNotifyPan"; break;
108 case GestureNotifyPinchRotation: event_type = "GestureNotifyPinchRotation"; break;
109 case GestureNotifyTap: event_type = "GestureNotifyTap"; break;
110 case GestureNotifyTapNHold: event_type = "GestureNotifyTapNHold"; break;
111 case GestureNotifyHold: event_type = "GestureNotifyHold"; break;
112 case GestureNotifyGroup: event_type = "GestureNotifyGroup"; break;
113 default: event_type = devent_type; sprintf (devent_type, "%ld", (long int)stuff->eventType); break;
116 REPLY (" event_type(%s) num_finger(%d) time(%lums)",
119 (unsigned long)stuff->time);
125 case X_GestureUngrabEvent:
127 xGestureUngrabEventReq *stuff = (xGestureUngrabEventReq *)req;
128 REPLY (": XID(0x%x)",
129 (unsigned int)stuff->window);
131 if (detail_level >= EVLOG_PRINT_DETAIL)
133 const char *event_type;
134 char devent_type[10];
136 switch (stuff->eventType)
138 case GestureNotifyFlick: event_type = "GestureNotifyFlick"; break;
139 case GestureNotifyPan: event_type = "GestureNotifyPan"; break;
140 case GestureNotifyPinchRotation: event_type = "GestureNotifyPinchRotation"; break;
141 case GestureNotifyTap: event_type = "GestureNotifyTap"; break;
142 case GestureNotifyTapNHold: event_type = "GestureNotifyTapNHold"; break;
143 case GestureNotifyHold: event_type = "GestureNotifyHold"; break;
144 case GestureNotifyGroup: event_type = "GestureNotifyGroup"; break;
145 default: event_type = devent_type; sprintf (devent_type, "%ld", (long int)stuff->eventType); break;
148 REPLY (" event_type(%s) num_finger(%d) time(%lums)",
151 (unsigned long)stuff->time);
165 _EvlogEventGesture (EvlogInfo *evinfo, int first_base, int detail_level, char *reply, int *len)
167 xEvent *evt = evinfo->evt.ptr;
169 switch ((evt->u.u.type & 0x7F) - first_base)
171 case GestureNotifyFlick:
173 xGestureNotifyFlickEvent *stuff = (xGestureNotifyFlickEvent *) evt;
174 REPLY (": XID(0x%x)",
175 (unsigned int)stuff->window);
177 if (detail_level >= EVLOG_PRINT_DETAIL)
184 case GestureEnd: kind = "GestureEnd"; break;
185 case GestureBegin: kind = "GestureBegin"; break;
186 case GestureUpdate: kind = "GestureUpdate"; break;
187 case GestureDone: kind = "GestureDone"; break;
188 default: kind = dkind; snprintf (dkind, 10, "%d", stuff->kind); break;
191 REPLY (" kind(%s) time(%lums) num_finger(%d) direction(%d) distance(%d)",
193 (unsigned long)stuff->time,
199 REPLY ("%67s duration(%lums) angle(%ld)",
201 (unsigned long)stuff->duration,
202 (long int)stuff->angle);
208 case GestureNotifyPan:
210 xGestureNotifyPanEvent *stuff = (xGestureNotifyPanEvent *) evt;
211 REPLY (": XID(0x%x)",
212 (unsigned int)stuff->window);
214 if (detail_level >= EVLOG_PRINT_DETAIL)
221 case GestureEnd: kind = "GestureEnd"; break;
222 case GestureBegin: kind = "GestureBegin"; break;
223 case GestureUpdate: kind = "GestureUpdate"; break;
224 case GestureDone: kind = "GestureDone"; break;
225 default: kind = dkind; snprintf (dkind, 10, "%d", stuff->kind); break;
228 REPLY (" kind(%s) sequence_num(%d) time(%lums) num_finger(%d) direction(%d) ",
230 stuff->sequenceNumber,
231 (unsigned long)stuff->time,
236 REPLY ("%67s distance(%d) duration(%ldms) coord(%d,%d)",
239 (long int)stuff->duration,
247 case GestureNotifyPinchRotation:
249 xGestureNotifyPinchRotationEvent *stuff = (xGestureNotifyPinchRotationEvent *) evt;
250 REPLY (": XID(0x%x)",
251 (unsigned int)stuff->window);
253 if (detail_level >= EVLOG_PRINT_DETAIL)
260 case GestureEnd: kind = "GestureEnd"; break;
261 case GestureBegin: kind = "GestureBegin"; break;
262 case GestureUpdate: kind = "GestureUpdate"; break;
263 case GestureDone: kind = "GestureDone"; break;
264 default: kind = dkind; snprintf (dkind, 10, "%d", stuff->kind); break;
267 REPLY (" kind(%s) sequence_num(%d) time(%lums) num_finger(%d) distance(%d)",
269 stuff->sequenceNumber,
270 (unsigned long)stuff->time,
275 REPLY ("%67s coord(%d,%d) zoom(%ld) angle(%ld)",
279 (long int)stuff->zoom,
280 (long int)stuff->angle);
286 case GestureNotifyTap:
288 xGestureNotifyTapEvent *stuff = (xGestureNotifyTapEvent *) evt;
289 REPLY (": XID(0x%x)",
290 (unsigned int)stuff->window);
292 if (detail_level >= EVLOG_PRINT_DETAIL)
299 case GestureEnd: kind = "GestureEnd"; break;
300 case GestureBegin: kind = "GestureBegin"; break;
301 case GestureUpdate: kind = "GestureUpdate"; break;
302 case GestureDone: kind = "GestureDone"; break;
303 default: kind = dkind; snprintf (dkind, 10, "%d", stuff->kind); break;
306 REPLY (" kind(%s) sequence_num(%d) time(%lums) num_finger(%d) coord(%d,%d)",
308 stuff->sequenceNumber,
309 (unsigned long)stuff->time,
315 REPLY ("%67s tap_repeat(%d) interval(%lums)",
318 (unsigned long)stuff->interval);
324 case GestureNotifyTapNHold:
326 xGestureNotifyTapNHoldEvent *stuff = (xGestureNotifyTapNHoldEvent *) evt;
327 REPLY (": XID(0x%x)",
328 (unsigned int)stuff->window);
330 if (detail_level >= EVLOG_PRINT_DETAIL)
337 case GestureEnd: kind = "GestureEnd"; break;
338 case GestureBegin: kind = "GestureBegin"; break;
339 case GestureUpdate: kind = "GestureUpdate"; break;
340 case GestureDone: kind = "GestureDone"; break;
341 default: kind = dkind; snprintf (dkind, 10, "%d", stuff->kind); break;
344 REPLY (" kind(%s) sequence_num(%d) time(%lums) num_finger(%d) coord(%d,%d)",
346 stuff->sequenceNumber,
347 (unsigned long)stuff->time,
353 REPLY ("%67s interval(%lums) hold_time(%lums)",
355 (unsigned long)stuff->interval,
356 (unsigned long)stuff->holdtime);
362 case GestureNotifyHold:
364 xGestureNotifyHoldEvent *stuff = (xGestureNotifyHoldEvent *) evt;
365 REPLY (": XID(0x%x)",
366 (unsigned int)stuff->window);
368 if (detail_level >= EVLOG_PRINT_DETAIL)
375 case GestureEnd: kind = "GestureEnd"; break;
376 case GestureBegin: kind = "GestureBegin"; break;
377 case GestureUpdate: kind = "GestureUpdate"; break;
378 case GestureDone: kind = "GestureDone"; break;
379 default: kind = dkind; snprintf (dkind, 10, "%d", stuff->kind); break;
382 REPLY (" kind(%s) sequence_num(%d) time(%lums) num_finger(%d) coord(%d,%d) ",
384 stuff->sequenceNumber,
385 (unsigned long)stuff->time,
391 REPLY ("%67s hold_time(%lums)",
393 (unsigned long)stuff->holdtime);
399 case GestureNotifyGroup:
401 xGestureNotifyGroupEvent *stuff = (xGestureNotifyGroupEvent *) evt;
402 REPLY (": XID(0x%x) groupID(%d) groupNum(%d)",
403 (unsigned int)stuff->window,
407 if (detail_level >= EVLOG_PRINT_DETAIL)
414 case GestureGroupRemoved: kind = "GestureGroupRemoved"; break;
415 case GestureGroupAdded: kind = "GestureGroupAdded"; break;
416 case GestureGroupCurrent: kind = "GestureGroupCurrent"; break;
417 default: kind = dkind; snprintf (dkind, 10, "%d", stuff->kind); break;
421 REPLY ("%67s kind(%s) sequence_num(%d) time(%lums) group_id(%d) num_group(%d)",
424 stuff->sequenceNumber,
425 (unsigned long)stuff->time,
441 _EvlogReplyGesture (EvlogInfo *evinfo, int detail_level, char *reply, int *len)
444 xGenericReply *rep = evinfo->rep.ptr;
446 switch (evinfo->rep.reqData)
457 xDbgEvlogGestureGetBase (ExtensionInfo *extinfo)
460 RETURN_IF_FAIL (extinfo != NULL);
462 extinfo->req_func = _EvlogRequestGesture;
463 extinfo->evt_func = _EvlogEventGesture;
464 extinfo->rep_func = _EvlogReplyGesture;
466 ExtensionEntry *xext = CheckExtension (GESTURE_EXT_NAME);
467 RETURN_IF_FAIL (xext != NULL);
468 RETURN_IF_FAIL (extinfo != NULL);
470 extinfo->opcode = xext->base;
471 extinfo->evt_base = xext->eventBase;
472 extinfo->err_base = xext->errorBase;
473 extinfo->req_func = _EvlogRequestGesture;
474 extinfo->evt_func = _EvlogEventGesture;
475 extinfo->rep_func = _EvlogReplyGesture;