elput: Store touch timestamp and slot

This patch adds a timestamp field to the touch structure so that we
can store it and do not have to refetch the timestamp when sending
touch events.

Signed-off-by: Chris Michael <cp.michael@samsung.com>
This commit is contained in:
Chris Michael 2017-01-12 10:24:18 -05:00
parent 078a4eef71
commit 343a272328
2 changed files with 19 additions and 15 deletions

View File

@ -582,6 +582,8 @@ _touch_create(Elput_Seat *seat)
touch = calloc(1, sizeof(Elput_Touch));
if (!touch) return NULL;
touch->x = -1;
touch->y = -1;
touch->seat = seat;
return touch;
@ -955,7 +957,7 @@ _pointer_axis(struct libinput_device *idevice, struct libinput_event_pointer *ev
}
static void
_touch_event_send(Elput_Device *dev, struct libinput_event_touch *event, int type)
_touch_event_send(Elput_Device *dev, int type)
{
Elput_Touch *touch;
Ecore_Event_Mouse_Button *ev;
@ -970,7 +972,7 @@ _touch_event_send(Elput_Device *dev, struct libinput_event_touch *event, int typ
ev->window = dev->seat->manager->window;
ev->event_window = dev->seat->manager->window;
ev->root_window = dev->seat->manager->window;
ev->timestamp = libinput_event_touch_get_time(event);
ev->timestamp = touch->timestamp;
ev->same_screen = 1;
ev->x = touch->x;
@ -1008,8 +1010,6 @@ _touch_down(struct libinput_device *idevice, struct libinput_event_touch *event)
{
Elput_Device *dev;
Elput_Touch *touch;
unsigned int timestamp;
int slot;
dev = libinput_device_get_user_data(idevice);
if (!dev) return;
@ -1017,8 +1017,8 @@ _touch_down(struct libinput_device *idevice, struct libinput_event_touch *event)
touch = _evdev_touch_get(dev->seat);
if (!touch) return;
slot = libinput_event_touch_get_seat_slot(event);
timestamp = libinput_event_touch_get_time(event);
touch->slot = libinput_event_touch_get_seat_slot(event);
touch->timestamp = libinput_event_touch_get_time(event);
touch->x = libinput_event_touch_get_x_transformed(event, dev->ow);
touch->y = libinput_event_touch_get_y_transformed(event, dev->oh);
@ -1028,23 +1028,22 @@ _touch_down(struct libinput_device *idevice, struct libinput_event_touch *event)
/* touch->x, touch->y, */
/* &touch->x, &touch->y); */
if (slot == touch->grab.id)
if (touch->slot == touch->grab.id)
{
touch->grab.x = touch->x;
touch->grab.y = touch->y;
}
touch->slot = slot;
touch->points++;
_touch_event_send(dev, event, ECORE_EVENT_MOUSE_BUTTON_DOWN);
_touch_event_send(dev, ECORE_EVENT_MOUSE_BUTTON_DOWN);
if (touch->points == 1)
{
touch->grab.id = slot;
touch->grab.id = touch->slot;
touch->grab.x = touch->x;
touch->grab.y = touch->y;
touch->grab.timestamp = timestamp;
touch->grab.timestamp = touch->timestamp;
}
}
@ -1062,12 +1061,15 @@ _touch_up(struct libinput_device *idevice, struct libinput_event_touch *event)
touch->points--;
touch->slot = libinput_event_touch_get_seat_slot(event);
touch->timestamp = libinput_event_touch_get_time(event);
touch->x = 0;
touch->y = 0;
_touch_event_send(dev, event, ECORE_EVENT_MOUSE_BUTTON_UP);
_touch_event_send(dev, ECORE_EVENT_MOUSE_BUTTON_UP);
}
static void
_touch_motion_send(Elput_Device *dev, struct libinput_event_touch *event)
_touch_motion_send(Elput_Device *dev)
{
Elput_Touch *touch;
Ecore_Event_Mouse_Move *ev;
@ -1081,7 +1083,7 @@ _touch_motion_send(Elput_Device *dev, struct libinput_event_touch *event)
ev->window = dev->seat->manager->window;
ev->event_window = dev->seat->manager->window;
ev->root_window = dev->seat->manager->window;
ev->timestamp = libinput_event_touch_get_time(event);
ev->timestamp = touch->timestamp;
ev->same_screen = 1;
ev->x = touch->x;
@ -1126,8 +1128,9 @@ _touch_motion(struct libinput_device *idevice, struct libinput_event_touch *even
/* &touch->x, &touch->y); */
touch->slot = libinput_event_touch_get_seat_slot(event);
touch->timestamp = libinput_event_touch_get_time(event);
_touch_motion_send(dev, event);
_touch_motion_send(dev);
}
void

View File

@ -175,6 +175,7 @@ struct _Elput_Touch
double x, y;
int slot;
unsigned int points;
unsigned int timestamp;
struct
{