Use Wayland's event loop for signals

Now we don't require a global variable.
This commit is contained in:
Jente Hidskes 2018-12-16 21:58:54 +01:00
parent b22f4b465c
commit 4ea5cc6b32
No known key found for this signature in database
GPG key ID: 04BE5A29F32D91EA

25
cage.c
View file

@ -74,8 +74,6 @@ struct cg_keyboard {
struct wl_listener destroy; struct wl_listener destroy;
}; };
struct cg_server server = {0};
static inline bool static inline bool
is_fullscreen_view(struct cg_view *view) is_fullscreen_view(struct cg_view *view)
{ {
@ -660,15 +658,26 @@ spawn_primary_client(char *argv[], pid_t *pid_out)
return true; return true;
} }
static void static int
sig_handler(int signal) handle_signal(int signal, void *data)
{ {
wl_display_terminate(server.wl_display); struct wl_display *display = data;
switch (signal) {
case SIGINT:
/* Fallthrough */
case SIGTERM:
wl_display_terminate(display);
return 0;
default:
return 1;
}
} }
int int
main(int argc, char *argv[]) main(int argc, char *argv[])
{ {
struct cg_server server = {0};
int ret = 0; int ret = 0;
if (argc < 2) { if (argc < 2) {
@ -682,14 +691,16 @@ main(int argc, char *argv[])
wlr_log_init(WLR_ERROR, NULL); wlr_log_init(WLR_ERROR, NULL);
#endif #endif
signal(SIGTERM, sig_handler);
server.wl_display = wl_display_create(); server.wl_display = wl_display_create();
if (!server.wl_display) { if (!server.wl_display) {
wlr_log(WLR_ERROR, "Could not allocate a Wayland display"); wlr_log(WLR_ERROR, "Could not allocate a Wayland display");
return 1; return 1;
} }
struct wl_event_loop *event_loop = wl_display_get_event_loop(server.wl_display);
wl_event_loop_add_signal(event_loop, SIGINT, handle_signal, &server.wl_display);
wl_event_loop_add_signal(event_loop, SIGTERM, handle_signal, &server.wl_display);
server.backend = wlr_backend_autocreate(server.wl_display, NULL); server.backend = wlr_backend_autocreate(server.wl_display, NULL);
if (!server.backend) { if (!server.backend) {
wlr_log(WLR_ERROR, "Unable to create the wlroots backend"); wlr_log(WLR_ERROR, "Unable to create the wlroots backend");