}
static void
+_event_free(void *dev, void *ev)
+{
+ if (dev) efl_unref(dev);
+ free(ev);
+}
+
+static void
_keyboard_key_send(Elput_Device *dev, enum libinput_key_state state, const char *keyname, const char *key, const char *compose, unsigned int code, unsigned int timestamp)
{
Ecore_Event_Key *ev;
ev->timestamp = timestamp;
ev->same_screen = 1;
ev->dev = dev->evas_device;
+ if (ev->dev) efl_ref(ev->dev);
ev->window = dev->seat->manager->window;
ev->event_window = dev->seat->manager->window;
ev->root_window = dev->seat->manager->window;
if (state == LIBINPUT_KEY_STATE_PRESSED)
- ecore_event_add(ECORE_EVENT_KEY_DOWN, ev, NULL, NULL);
+ ecore_event_add(ECORE_EVENT_KEY_DOWN, ev, _event_free, ev->dev);
else
- ecore_event_add(ECORE_EVENT_KEY_UP, ev, NULL, NULL);
+ ecore_event_add(ECORE_EVENT_KEY_UP, ev, _event_free, ev->dev);
}
static void
ev->timestamp = ptr->timestamp;
ev->same_screen = 1;
ev->dev = edev->evas_device;
+ if (ev->dev) efl_ref(ev->dev);
ev->x = ptr->x;
ev->y = ptr->y;
ev->multi.root.x = ptr->x;
ev->multi.root.y = ptr->y;
- ecore_event_add(ECORE_EVENT_MOUSE_MOVE, ev, NULL, NULL);
+ ecore_event_add(ECORE_EVENT_MOUSE_MOVE, ev, _event_free, ev->dev);
}
static void
ev->timestamp = ptr->timestamp;
ev->same_screen = 1;
ev->dev = edev->evas_device;
+ if (ev->dev) efl_ref(ev->dev);
ev->x = ptr->x;
ev->y = ptr->y;
ev->modifiers = edev->seat->modifiers;
if (state)
- ecore_event_add(ECORE_EVENT_MOUSE_BUTTON_DOWN, ev, NULL, NULL);
+ ecore_event_add(ECORE_EVENT_MOUSE_BUTTON_DOWN, ev, _event_free, ev->dev);
else
- ecore_event_add(ECORE_EVENT_MOUSE_BUTTON_UP, ev, NULL, NULL);
+ ecore_event_add(ECORE_EVENT_MOUSE_BUTTON_UP, ev, _event_free, ev->dev);
}
static void
ev->timestamp = ptr->timestamp;
ev->same_screen = 1;
ev->dev = dev->evas_device;
+ if (ev->dev) efl_ref(ev->dev);
ev->x = ptr->x;
ev->y = ptr->y;
ev->modifiers = dev->seat->modifiers;
- ecore_event_add(ECORE_EVENT_MOUSE_WHEEL, ev, NULL, NULL);
+ ecore_event_add(ECORE_EVENT_MOUSE_WHEEL, ev, _event_free, ev->dev);
}
static double
ev->timestamp = touch->timestamp;
ev->same_screen = 1;
ev->dev = dev->evas_device;
+ if (ev->dev) efl_ref(ev->dev);
ev->x = lround(touch->x);
ev->y = lround(touch->y);
ev->multi.root.x = touch->x;
ev->multi.root.y = touch->y;
- ecore_event_add(ECORE_EVENT_MOUSE_MOVE, ev, NULL, NULL);
+ ecore_event_add(ECORE_EVENT_MOUSE_MOVE, ev, _event_free, ev->dev);
}
static void
{
Ecore_Event_Axis_Update *ev = event;
+ if (ev->dev) efl_unref(ev->dev);
free(ev->axis);
free(ev);
}
ev->timestamp = ptr->timestamp;
ev->naxis = num;
ev->dev = dev->evas_device;
+ if (ev->dev) efl_ref(ev->dev);
ev->axis = axis = calloc(num, sizeof(Ecore_Axis));
for (i = 0; i < num; i++)
{