fix bug in generic event handling on xlib side of ecore_x

SVN revision: 63475
This commit is contained in:
Carsten Haitzler 2011-09-19 10:11:53 +00:00
parent 0de47ae436
commit 0849e320a0
2 changed files with 25 additions and 7 deletions

View File

@ -296,3 +296,8 @@
* Add ECORE_CON_EVENT_CLIENT_WRITE, ECORE_CON_EVENT_SERVER_WRITE for
obtaining progress of socket writes
2011-09-18 Carsten Haitzler (The Rasterman)
* Fix bug in Ecore_X generic event handling for extended event
sizes when freeing (and allocating) the data.

View File

@ -2229,9 +2229,16 @@ _ecore_x_event_free_generic_event(void *data, void *ev)
#ifdef ECORE_XI2
Ecore_X_Event_Generic *e = (Ecore_X_Event_Generic *)ev;
if (e->data)
XFreeEventData(_ecore_x_disp, (XGenericEventCookie *)data);
if (data)
{
if (e->data)
XFreeEventData(_ecore_x_disp, (XGenericEventCookie *)data);
free(data);
}
free(e);
#else
return;
data = NULL; ev = NULL;
#endif /* ifdef ECORE_XI2 */
} /* _ecore_x_event_free_generic_event */
@ -2241,7 +2248,8 @@ _ecore_x_event_handle_generic_event(XEvent *event)
#ifdef ECORE_XI2
XGenericEvent *generic_event;
Ecore_X_Event_Generic *e;
XGenericEventCookie *data;
LOGFN(__FILE__, __LINE__, __FUNCTION__);
generic_event = (XGenericEvent *)event;
@ -2249,7 +2257,7 @@ _ecore_x_event_handle_generic_event(XEvent *event)
if (!e)
return;
if (XGetEventData(_ecore_x_disp, &event->xcookie))
if (XGetEventData(_ecore_x_disp, &(event->xcookie)))
{
e->cookie = event->xcookie.cookie;
e->data = event->xcookie.data;
@ -2265,11 +2273,16 @@ _ecore_x_event_handle_generic_event(XEvent *event)
if (e->extension == _ecore_x_xi2_opcode)
_ecore_x_input_handler(event);
data = malloc(sizeof(XGenericEventCookie));
if (data) memcpy(data, &(event->xcookie), sizeof(XGenericEventCookie));
ecore_event_add(ECORE_X_EVENT_GENERIC,
e,
_ecore_x_event_free_generic_event,
event);
data);
#else
return;
event = NULL;
#endif /* ifdef ECORE_XI2 */
} /* _ecore_x_event_handle_generic_event */