summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorKristian Høgsberg <krh@bitplanet.net>2012-03-05 17:49:30 -0500
committerKristian Høgsberg <krh@bitplanet.net>2012-03-05 18:06:08 -0500
commit7ea10864c2fc7370f5ada88a3fc91ab5f188da00 (patch)
tree90823b8fc85c4d36beafc642e0274fbc644d578d /src
parentabcef3cf7a40a15a0e0805919c37230f5bc8143f (diff)
compositor: Move input devices to their own event loop
First step towards only handling input at repaint time.
Diffstat (limited to 'src')
-rw-r--r--src/compositor.c19
-rw-r--r--src/compositor.h3
-rw-r--r--src/evdev.c4
3 files changed, 23 insertions, 3 deletions
diff --git a/src/compositor.c b/src/compositor.c
index 44faa94..62277b9 100644
--- a/src/compositor.c
+++ b/src/compositor.c
@@ -2268,6 +2268,16 @@ compositor_bind(struct wl_client *client,
&compositor_interface, id, compositor);
}
+static int
+weston_compositor_read_input(int fd, uint32_t mask, void *data)
+{
+ struct weston_compositor *compositor = data;
+
+ wl_event_loop_dispatch(compositor->input_loop, 0);
+
+ return 1;
+}
+
WL_EXPORT int
weston_compositor_init(struct weston_compositor *ec, struct wl_display *display)
{
@@ -2337,6 +2347,15 @@ weston_compositor_init(struct weston_compositor *ec, struct wl_display *display)
ec->idle_source = wl_event_loop_add_timer(loop, idle_handler, ec);
wl_event_source_timer_update(ec->idle_source, ec->idle_time * 1000);
+ ec->input_loop = wl_event_loop_create();
+
+ ec->input_loop_source =
+ wl_event_loop_add_fd(loop,
+ wl_event_loop_get_fd(ec->input_loop),
+ WL_EVENT_READABLE,
+ weston_compositor_read_input, ec);
+
+
weston_compositor_schedule_repaint(ec);
return 0;
diff --git a/src/compositor.h b/src/compositor.h
index 6f46249..b94731b 100644
--- a/src/compositor.h
+++ b/src/compositor.h
@@ -184,6 +184,9 @@ struct weston_compositor {
struct weston_shell *shell;
+ struct wl_event_loop *input_loop;
+ struct wl_event_source *input_loop_source;
+
/* There can be more than one, but not right now... */
struct wl_input_device *input_device;
diff --git a/src/evdev.c b/src/evdev.c
index f489ede..530eb6b 100644
--- a/src/evdev.c
+++ b/src/evdev.c
@@ -437,7 +437,6 @@ evdev_input_device_create(struct evdev_input *master,
struct wl_display *display, const char *path)
{
struct evdev_input_device *device;
- struct wl_event_loop *loop;
struct weston_compositor *ec;
device = malloc(sizeof *device);
@@ -463,8 +462,7 @@ evdev_input_device_create(struct evdev_input *master,
if (evdev_configure_device(device) == -1)
goto err1;
- loop = wl_display_get_event_loop(display);
- device->source = wl_event_loop_add_fd(loop, device->fd,
+ device->source = wl_event_loop_add_fd(ec->input_loop, device->fd,
WL_EVENT_READABLE,
evdev_input_device_data, device);
if (device->source == NULL)