mirror of
https://github.com/cage-kiosk/cage.git
synced 2026-03-22 05:34:01 -04:00
Use Wayland's event loop for signals
Now we don't require a global variable.
This commit is contained in:
parent
b22f4b465c
commit
4ea5cc6b32
1 changed files with 18 additions and 7 deletions
25
cage.c
25
cage.c
|
|
@ -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");
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue