From: Sung-Jin Park <sj76.park@samsung.com>

Subject: [E-devel] Bug fix : ecore x XI2 handler not to make button
event twice

Dear developers,
I have fixed a bug in ecore x xi2 handler.

Currently, ecore mouse down/move/up event are made twice for a X touch
event.
Among a couple of events, the first one is made by a X touch event and
the other is made
by a button event whose flags has XIPointerEmulated flag.
The (latter) button event is made from the (former) X touch event
whose flags has XITouchEmulatingPointer flag.
Basically, X touch events doesn't have XITouchEmulatingPointer flag in
its flags when it doesn't make a
(XIPointerEmulated) button event.

Thus I correct ecore_x_xi2.c not to make a mouse down/move/up event
when a X touch event has 
XITouchEmulatingPointer flag.



SVN revision: 82869
This commit is contained in:
Sung-Jin Park 2013-01-16 09:03:55 +00:00 committed by Carsten Haitzler
parent 73b2f09b74
commit 01452373c7
1 changed files with 11 additions and 0 deletions

View File

@ -20,6 +20,10 @@ int _ecore_x_xi2_opcode = -1;
#ifdef ECORE_XI2
#ifdef ECORE_XI2_2
#ifndef XITouchEmulatingPointer
#define XITouchEmulatingPointer (1 << 17)
#endif
typedef struct _Ecore_X_Touch_Device_Info
{
EINA_INLIST;
@ -307,6 +311,7 @@ _ecore_x_input_handler(XEvent *xevent)
case XI_TouchUpdate:
#ifdef ECORE_XI2_2
i = _ecore_x_input_touch_index_get(devid, evd->detail, XI_TouchUpdate);
if ((i == 0) && (evd->flags & XITouchEmulatingPointer)) return;
#endif /* #ifdef ECORE_XI2_2 */
_ecore_mouse_move
(evd->time,
@ -333,6 +338,7 @@ _ecore_x_input_handler(XEvent *xevent)
case XI_TouchBegin:
#ifdef ECORE_XI2_2
i = _ecore_x_input_touch_index_get(devid, evd->detail, XI_TouchBegin);
if ((i == 0) && (evd->flags & XITouchEmulatingPointer)) return;
#endif /* #ifdef ECORE_XI2_2 */
_ecore_mouse_button
(ECORE_EVENT_MOUSE_BUTTON_DOWN,
@ -361,6 +367,11 @@ _ecore_x_input_handler(XEvent *xevent)
case XI_TouchEnd:
#ifdef ECORE_XI2_2
i = _ecore_x_input_touch_index_get(devid, evd->detail, XI_TouchEnd);
if ((i == 0) && (evd->flags & XITouchEmulatingPointer))
{
_ecore_x_input_touch_index_clear(devid, i);
return;
}
#endif /* #ifdef ECORE_XI2_2 */
_ecore_mouse_button
(ECORE_EVENT_MOUSE_BUTTON_UP,