From: Quentin Glidic <sardemff7+...@sardemff7.net>

Signed-off-by: Quentin Glidic <sardemff7+...@sardemff7.net>
---
 libweston/compositor-x11.c | 64 +++++++++++++++++++++-------------------------
 1 file changed, 29 insertions(+), 35 deletions(-)

diff --git a/libweston/compositor-x11.c b/libweston/compositor-x11.c
index 14faeda03..7675b7275 100644
--- a/libweston/compositor-x11.c
+++ b/libweston/compositor-x11.c
@@ -81,7 +81,7 @@ struct x11_backend {
        xcb_screen_t            *screen;
        xcb_cursor_t             null_cursor;
        struct wl_array          keys;
-       struct wl_event_source  *xcb_source;
+       void                    *xcb_source;
        struct xkb_keymap       *xkb_keymap;
        unsigned int             has_xkb;
        uint8_t                  xkb_event_base;
@@ -122,7 +122,7 @@ struct x11_output {
        xcb_window_t            window;
        struct weston_mode      mode;
        struct weston_mode      native;
-       struct wl_event_source *finish_frame_timer;
+       void                   *finish_frame_timer;
 
        xcb_gc_t                gc;
        xcb_shm_seg_t           segment;
@@ -411,7 +411,9 @@ x11_output_repaint_gl(struct weston_output *output_base,
        pixman_region32_subtract(&ec->primary_plane.damage,
                                 &ec->primary_plane.damage, damage);
 
-       wl_event_source_timer_update(output->finish_frame_timer, 10);
+       weston_compositor_event_source_update_timeout(ec,
+                                                     
output->finish_frame_timer,
+                                                     10);
        return 0;
 }
 
@@ -498,11 +500,13 @@ x11_output_repaint_shm(struct weston_output *output_base,
                free(err);
        }
 
-       wl_event_source_timer_update(output->finish_frame_timer, 10);
+       weston_compositor_event_source_update_timeout(ec,
+                                                     
output->finish_frame_timer,
+                                                     10);
        return 0;
 }
 
-static int
+static enum weston_event_source_status
 finish_frame_handler(void *data)
 {
        struct x11_output *output = data;
@@ -511,7 +515,7 @@ finish_frame_handler(void *data)
        weston_compositor_read_presentation_clock(output->base.compositor, &ts);
        weston_output_finish_frame(&output->base, &ts, 0);
 
-       return 1;
+       return WESTON_EVENT_SOURCE_CONTINUE;
 }
 
 static void
@@ -874,7 +878,8 @@ x11_output_disable(struct weston_output *base)
        if (!output->base.enabled)
                return 0;
 
-       wl_event_source_remove(output->finish_frame_timer);
+       weston_compositor_event_source_remove(base->compositor,
+                                             output->finish_frame_timer);
 
        if (backend->use_pixman) {
                pixman_renderer_output_destroy(&output->base);
@@ -1044,7 +1049,11 @@ x11_output_enable(struct weston_output *base)
 
        loop = wl_display_get_event_loop(b->compositor->wl_display);
        output->finish_frame_timer =
-               wl_event_loop_add_timer(loop, finish_frame_handler, output);
+               weston_compositor_event_source_add_timeout(base->compositor,
+                                                          
WESTON_EVENT_SOURCE_PRIORITY_TIMEOUT,
+                                                          0,
+                                                          finish_frame_handler,
+                                                          output);
 
        weston_log("x11 output %dx%d, window id %d\n",
                   output->base.current_mode->width,
@@ -1394,20 +1403,8 @@ x11_backend_deliver_enter_event(struct x11_backend *b,
        b->prev_y = y;
 }
 
-static int
-x11_backend_next_event(struct x11_backend *b,
-                      xcb_generic_event_t **event, uint32_t mask)
-{
-       if (mask & WL_EVENT_READABLE)
-               *event = xcb_poll_for_event(b->conn);
-       else
-               *event = xcb_poll_for_queued_event(b->conn);
-
-       return *event != NULL;
-}
-
-static int
-x11_backend_handle_event(int fd, uint32_t mask, void *data)
+static enum weston_event_source_status
+x11_backend_handle_event(int fd, enum weston_event_source_fd_events mask, void 
*data)
 {
        struct x11_backend *b = data;
        struct x11_output *output;
@@ -1424,12 +1421,10 @@ x11_backend_handle_event(int fd, uint32_t mask, void 
*data)
        uint32_t *k;
        uint32_t i, set;
        uint8_t response_type;
-       int count;
        struct timespec time;
 
        prev = NULL;
-       count = 0;
-       while (x11_backend_next_event(b, &event, mask)) {
+       while ((event = xcb_poll_for_event(b->conn)) != NULL) {
                response_type = event->response_type & ~0x80;
 
                switch (prev ? prev->response_type & ~0x80 : 0x80) {
@@ -1637,7 +1632,6 @@ x11_backend_handle_event(int fd, uint32_t mask, void 
*data)
                }
 #endif
 
-               count++;
                if (prev != event)
                        free (event);
        }
@@ -1659,7 +1653,7 @@ x11_backend_handle_event(int fd, uint32_t mask, void 
*data)
                break;
        }
 
-       return count;
+       return WESTON_EVENT_SOURCE_CONTINUE;
 }
 
 #define F(field) offsetof(struct x11_backend, field)
@@ -1747,7 +1741,8 @@ x11_destroy(struct weston_compositor *ec)
 {
        struct x11_backend *backend = to_x11_backend(ec);
 
-       wl_event_source_remove(backend->xcb_source);
+       weston_compositor_event_source_remove(backend->compositor,
+                                             backend->xcb_source);
        x11_input_destroy(backend);
 
        weston_compositor_shutdown(ec); /* destroys outputs, too */
@@ -1783,7 +1778,6 @@ x11_backend_create(struct weston_compositor *compositor,
                   struct weston_x11_backend_config *config)
 {
        struct x11_backend *b;
-       struct wl_event_loop *loop;
        int ret;
 
        b = zalloc(sizeof *b);
@@ -1840,13 +1834,13 @@ x11_backend_create(struct weston_compositor *compositor,
                goto err_renderer;
        }
 
-       loop = wl_display_get_event_loop(compositor->wl_display);
        b->xcb_source =
-               wl_event_loop_add_fd(loop,
-                                    xcb_get_file_descriptor(b->conn),
-                                    WL_EVENT_READABLE,
-                                    x11_backend_handle_event, b);
-       wl_event_source_check(b->xcb_source);
+               weston_compositor_event_source_add_fd(compositor,
+                                                     
WESTON_EVENT_SOURCE_PRIORITY_DEFAULT,
+                                                     
xcb_get_file_descriptor(b->conn),
+                                                     WESTON_EVENT_SOURCE_FD_IN,
+                                                     x11_backend_handle_event,
+                                                     b);
 
        if (compositor->renderer->import_dmabuf) {
                if (linux_dmabuf_setup(compositor) < 0)
-- 
2.15.1

_______________________________________________
wayland-devel mailing list
wayland-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/wayland-devel

Reply via email to