elput: further simplify device internals

'window' and pointer max w/h attributes are set for a manager object,
so let the attributes stay there. this also resolves issues where devices
created at a later point would fail to be initialized with these attributes
This commit is contained in:
Mike Blumenkrantz 2016-05-25 12:49:44 -04:00
parent 7fdcf841f5
commit 8c3f0ff640
4 changed files with 25 additions and 64 deletions

View File

@ -300,9 +300,9 @@ _keyboard_key_send(Elput_Device *dev, enum libinput_key_state state, const char
ev->timestamp = timestamp;
ev->same_screen = 1;
ev->window = dev->window;
ev->event_window = dev->window;
ev->root_window = dev->window;
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);
@ -635,20 +635,20 @@ _pointer_motion_send(Elput_Device *edev)
if (x < ptr->minx)
x = ptr->minx;
else if (x >= ptr->minx + ptr->maxw)
x = ptr->minx + ptr->maxw - 1;
else if (x >= ptr->minx + ptr->seat->manager->input.pointer_w)
x = ptr->minx + ptr->seat->manager->input.pointer_w - 1;
if (y < ptr->miny)
y = ptr->miny;
else if (y >= ptr->miny + ptr->maxh)
y = ptr->miny + ptr->maxh - 1;
else if (y >= ptr->miny + ptr->seat->manager->input.pointer_h)
y = ptr->miny + ptr->seat->manager->input.pointer_h - 1;
ptr->x = x;
ptr->y = y;
ev->window = edev->window;
ev->event_window = edev->window;
ev->root_window = edev->window;
ev->window = edev->seat->manager->window;
ev->event_window = edev->seat->manager->window;
ev->root_window = edev->seat->manager->window;
ev->timestamp = ptr->timestamp;
ev->same_screen = 1;
@ -736,9 +736,9 @@ _pointer_button_send(Elput_Device *edev, enum libinput_button_state state)
ev = calloc(1, sizeof(Ecore_Event_Mouse_Button));
if (!ev) return;
ev->window = edev->window;
ev->event_window = edev->window;
ev->root_window = edev->window;
ev->window = edev->seat->manager->window;
ev->event_window = edev->seat->manager->window;
ev->root_window = edev->seat->manager->window;
ev->timestamp = ptr->timestamp;
ev->same_screen = 1;
@ -854,9 +854,9 @@ _pointer_axis_send(Elput_Device *dev, int direction, int value)
ev = calloc(1, sizeof(Ecore_Event_Mouse_Wheel));
if (!ev) return;
ev->window = dev->window;
ev->event_window = dev->window;
ev->root_window = dev->window;
ev->window = dev->seat->manager->window;
ev->event_window = dev->seat->manager->window;
ev->root_window = dev->seat->manager->window;
ev->timestamp = ptr->timestamp;
ev->same_screen = 1;
@ -960,9 +960,9 @@ _touch_event_send(Elput_Device *dev, struct libinput_event_touch *event, int typ
ev = calloc(1, sizeof(Ecore_Event_Mouse_Button));
if (!ev) return;
ev->window = dev->window;
ev->event_window = dev->window;
ev->root_window = dev->window;
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->same_screen = 1;
@ -1067,9 +1067,9 @@ _touch_motion_send(Elput_Device *dev, struct libinput_event_touch *event)
ev = calloc(1, sizeof(Ecore_Event_Mouse_Move));
if (!ev) return;
ev->window = dev->window;
ev->event_window = dev->window;
ev->root_window = dev->window;
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->same_screen = 1;

View File

@ -1,35 +1,6 @@
#include "elput_private.h"
#include <libudev.h>
void
_elput_input_window_update(Elput_Manager *manager)
{
Eina_List *l, *ll;
Elput_Seat *seat;
Elput_Device *device;
if (manager->input.thread) return;
EINA_LIST_FOREACH(manager->input.seats, l, seat)
EINA_LIST_FOREACH(seat->devices, ll, device)
device->window = manager->window;
}
void
_elput_input_pointer_max_update(Elput_Manager *manager)
{
Eina_List *l;
Elput_Seat *eseat;
if (manager->input.thread) return;
EINA_LIST_FOREACH(manager->input.seats, l, eseat)
{
if (!eseat->ptr) continue;
eseat->ptr->maxw = manager->input.pointer_w;
eseat->ptr->maxh = manager->input.pointer_h;
}
}
static int
_cb_open_restricted(const char *path, int flags, void *data)
{
@ -101,6 +72,7 @@ _udev_seat_create(Elput_Manager *em, const char *name)
eseat = calloc(1, sizeof(Elput_Seat));
if (!eseat) return NULL;
eseat->manager = em;
eseat->name = eina_stringshare_add(name);
em->input.seats = eina_list_append(em->input.seats, eseat);
@ -307,11 +279,7 @@ _elput_input_init_end(void *data, Ecore_Thread *eth EINA_UNUSED)
_cb_input_dispatch, &manager->input, NULL, NULL);
if (manager->input.hdlr)
{
_process_events(&manager->input);
_elput_input_window_update(manager);
_elput_input_pointer_max_update(manager);
}
_process_events(&manager->input);
else
{
ERR("Could not create input fd handler");
@ -496,12 +464,7 @@ elput_input_devices_get(Elput_Seat *seat)
EAPI void
elput_input_pointer_max_set(Elput_Manager *manager, int maxw, int maxh)
{
Eina_List *l;
Elput_Seat *eseat;
EINA_SAFETY_ON_NULL_RETURN(manager);
manager->input.pointer_w = maxw;
manager->input.pointer_h = maxh;
_elput_input_pointer_max_update(manager);
}

View File

@ -131,7 +131,6 @@ elput_manager_window_set(Elput_Manager *manager, unsigned int window)
EINA_SAFETY_ON_NULL_RETURN(manager);
manager->window = window;
_elput_input_window_update(manager);
}
EAPI const Eina_List *

View File

@ -149,7 +149,6 @@ struct _Elput_Pointer
unsigned int timestamp;
int minx, miny;
int maxw, maxh;
int hotx, hoty;
struct
@ -203,13 +202,13 @@ struct _Elput_Seat
Elput_Touch *touch;
Eina_List *devices;
Elput_Manager *manager;
};
struct _Elput_Device
{
Elput_Seat *seat;
uint32_t window;
uint32_t ow, oh;
const char *path;