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:
parent
078a4eef71
commit
343a272328
|
@ -582,6 +582,8 @@ _touch_create(Elput_Seat *seat)
|
||||||
touch = calloc(1, sizeof(Elput_Touch));
|
touch = calloc(1, sizeof(Elput_Touch));
|
||||||
if (!touch) return NULL;
|
if (!touch) return NULL;
|
||||||
|
|
||||||
|
touch->x = -1;
|
||||||
|
touch->y = -1;
|
||||||
touch->seat = seat;
|
touch->seat = seat;
|
||||||
|
|
||||||
return touch;
|
return touch;
|
||||||
|
@ -955,7 +957,7 @@ _pointer_axis(struct libinput_device *idevice, struct libinput_event_pointer *ev
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
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;
|
Elput_Touch *touch;
|
||||||
Ecore_Event_Mouse_Button *ev;
|
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->window = dev->seat->manager->window;
|
||||||
ev->event_window = dev->seat->manager->window;
|
ev->event_window = dev->seat->manager->window;
|
||||||
ev->root_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->same_screen = 1;
|
||||||
|
|
||||||
ev->x = touch->x;
|
ev->x = touch->x;
|
||||||
|
@ -1008,8 +1010,6 @@ _touch_down(struct libinput_device *idevice, struct libinput_event_touch *event)
|
||||||
{
|
{
|
||||||
Elput_Device *dev;
|
Elput_Device *dev;
|
||||||
Elput_Touch *touch;
|
Elput_Touch *touch;
|
||||||
unsigned int timestamp;
|
|
||||||
int slot;
|
|
||||||
|
|
||||||
dev = libinput_device_get_user_data(idevice);
|
dev = libinput_device_get_user_data(idevice);
|
||||||
if (!dev) return;
|
if (!dev) return;
|
||||||
|
@ -1017,8 +1017,8 @@ _touch_down(struct libinput_device *idevice, struct libinput_event_touch *event)
|
||||||
touch = _evdev_touch_get(dev->seat);
|
touch = _evdev_touch_get(dev->seat);
|
||||||
if (!touch) return;
|
if (!touch) return;
|
||||||
|
|
||||||
slot = libinput_event_touch_get_seat_slot(event);
|
touch->slot = libinput_event_touch_get_seat_slot(event);
|
||||||
timestamp = libinput_event_touch_get_time(event);
|
touch->timestamp = libinput_event_touch_get_time(event);
|
||||||
|
|
||||||
touch->x = libinput_event_touch_get_x_transformed(event, dev->ow);
|
touch->x = libinput_event_touch_get_x_transformed(event, dev->ow);
|
||||||
touch->y = libinput_event_touch_get_y_transformed(event, dev->oh);
|
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, */
|
||||||
/* &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.x = touch->x;
|
||||||
touch->grab.y = touch->y;
|
touch->grab.y = touch->y;
|
||||||
}
|
}
|
||||||
|
|
||||||
touch->slot = slot;
|
|
||||||
touch->points++;
|
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)
|
if (touch->points == 1)
|
||||||
{
|
{
|
||||||
touch->grab.id = slot;
|
touch->grab.id = touch->slot;
|
||||||
touch->grab.x = touch->x;
|
touch->grab.x = touch->x;
|
||||||
touch->grab.y = touch->y;
|
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->points--;
|
||||||
touch->slot = libinput_event_touch_get_seat_slot(event);
|
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
|
static void
|
||||||
_touch_motion_send(Elput_Device *dev, struct libinput_event_touch *event)
|
_touch_motion_send(Elput_Device *dev)
|
||||||
{
|
{
|
||||||
Elput_Touch *touch;
|
Elput_Touch *touch;
|
||||||
Ecore_Event_Mouse_Move *ev;
|
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->window = dev->seat->manager->window;
|
||||||
ev->event_window = dev->seat->manager->window;
|
ev->event_window = dev->seat->manager->window;
|
||||||
ev->root_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->same_screen = 1;
|
||||||
|
|
||||||
ev->x = touch->x;
|
ev->x = touch->x;
|
||||||
|
@ -1126,8 +1128,9 @@ _touch_motion(struct libinput_device *idevice, struct libinput_event_touch *even
|
||||||
/* &touch->x, &touch->y); */
|
/* &touch->x, &touch->y); */
|
||||||
|
|
||||||
touch->slot = libinput_event_touch_get_seat_slot(event);
|
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
|
void
|
||||||
|
|
|
@ -175,6 +175,7 @@ struct _Elput_Touch
|
||||||
double x, y;
|
double x, y;
|
||||||
int slot;
|
int slot;
|
||||||
unsigned int points;
|
unsigned int points;
|
||||||
|
unsigned int timestamp;
|
||||||
|
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue