From 1e75b8955212ad081d95606575db7809ea7ee9d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Ekl=C3=B6f?= Date: Sun, 27 Oct 2019 19:11:35 +0100 Subject: [PATCH] wayland: integrate directly with the FDM --- main.c | 16 ---------------- wayland.c | 24 +++++++++++++++++++++++- 2 files changed, 23 insertions(+), 17 deletions(-) diff --git a/main.c b/main.c index eb91ce5b..fc9c2e8f 100644 --- a/main.c +++ b/main.c @@ -44,20 +44,6 @@ #define min(x, y) ((x) < (y) ? (x) : (y)) #define max(x, y) ((x) > (y) ? (x) : (y)) -static bool -fdm_wayl(struct fdm *fdm, int fd, int events, void *data) -{ - struct wayland *wayl = data; - int event_count = wl_display_dispatch(wayl->display); - - if (events & EPOLLHUP) { - LOG_ERR("disconnected from Wayland"); - return false; - } - - return event_count != -1 && !wayl->term->quit; -} - static bool fdm_ptmx(struct fdm *fdm, int fd, int events, void *data) { @@ -650,7 +636,6 @@ main(int argc, char *const *argv) } } - fdm_add(fdm, wl_display_get_fd(term.wl->display), EPOLLIN, &fdm_wayl, term.wl); fdm_add(fdm, term.ptmx, EPOLLIN, &fdm_ptmx, &term); fdm_add(fdm, term.wl->kbd.repeat.fd, EPOLLIN, &fdm_repeat, term.wl); fdm_add(fdm, term.flash.fd, EPOLLIN, &fdm_flash, &term); @@ -669,7 +654,6 @@ main(int argc, char *const *argv) out: if (fdm != NULL) { - fdm_del(fdm, wl_display_get_fd(term.wl->display)); fdm_del(fdm, term.ptmx); fdm_del(fdm, term.wl->kbd.repeat.fd); fdm_del(fdm, term.flash.fd); diff --git a/wayland.c b/wayland.c index 227f9fc4..e6b6ad7d 100644 --- a/wayland.c +++ b/wayland.c @@ -2,6 +2,7 @@ #include #include +#include #include #include @@ -378,6 +379,20 @@ static const struct wl_registry_listener registry_listener = { .global_remove = &handle_global_remove, }; +static bool +fdm_wayl(struct fdm *fdm, int fd, int events, void *data) +{ + struct wayland *wayl = data; + int event_count = wl_display_dispatch(wayl->display); + + if (events & EPOLLHUP) { + LOG_ERR("disconnected from Wayland"); + return false; + } + + return event_count != -1 && !wayl->term->quit; +} + struct wayland * wayl_init(struct fdm *fdm) { @@ -476,6 +491,11 @@ wayl_init(struct fdm *fdm) goto out; } + if (!fdm_add(fdm, wl_display_get_fd(wayl->display), EPOLLIN, &fdm_wayl, wayl)) { + LOG_ERR("failed to register Wayland connection with the FDM"); + goto out; + } + return wayl; out: @@ -553,8 +573,10 @@ wayl_destroy(struct wayland *wayl) wl_compositor_destroy(wayl->compositor); if (wayl->registry != NULL) wl_registry_destroy(wayl->registry); - if (wayl->display != NULL) + if (wayl->display != NULL) { + fdm_del(wayl->fdm, wl_display_get_fd(wayl->display)); wl_display_disconnect(wayl->display); + } } struct wl_window *