diff options
author | Ian Fan <ianfan0@gmail.com> | 2018-07-13 16:58:45 +0100 |
---|---|---|
committer | Ian Fan <ianfan0@gmail.com> | 2018-08-01 16:57:14 +0100 |
commit | e8b179e313632c150ff7775f4f740296465cb58a (patch) | |
tree | 923ad08e8bd5b658283e5c39507b6e649b2f9777 | |
parent | Merge pull request #2397 from chr0me-sh/hide-cursor-if-no-pointer (diff) | |
download | sway-e8b179e313632c150ff7775f4f740296465cb58a.tar.gz sway-e8b179e313632c150ff7775f4f740296465cb58a.tar.zst sway-e8b179e313632c150ff7775f4f740296465cb58a.zip |
ipc: add shutdown event
-rw-r--r-- | include/ipc.h | 5 | ||||
-rw-r--r-- | include/sway/ipc-server.h | 1 | ||||
-rw-r--r-- | sway/ipc-server.c | 16 | ||||
-rw-r--r-- | sway/main.c | 1 |
4 files changed, 21 insertions, 2 deletions
diff --git a/include/ipc.h b/include/ipc.h index 0010718b..ffc57d1b 100644 --- a/include/ipc.h +++ b/include/ipc.h | |||
@@ -27,8 +27,9 @@ enum ipc_command_type { | |||
27 | IPC_EVENT_WINDOW = ((1<<31) | 3), | 27 | IPC_EVENT_WINDOW = ((1<<31) | 3), |
28 | IPC_EVENT_BARCONFIG_UPDATE = ((1<<31) | 4), | 28 | IPC_EVENT_BARCONFIG_UPDATE = ((1<<31) | 4), |
29 | IPC_EVENT_BINDING = ((1<<31) | 5), | 29 | IPC_EVENT_BINDING = ((1<<31) | 5), |
30 | IPC_EVENT_MODIFIER = ((1<<31) | 6), | 30 | IPC_EVENT_SHUTDOWN = ((1<<31) | 6), |
31 | IPC_EVENT_INPUT = ((1<<31) | 7), | 31 | IPC_EVENT_MODIFIER = ((1<<31) | 16), |
32 | IPC_EVENT_INPUT = ((1<<31) | 17), | ||
32 | }; | 33 | }; |
33 | 34 | ||
34 | #endif | 35 | #endif |
diff --git a/include/sway/ipc-server.h b/include/sway/ipc-server.h index 6469f097..a11735cf 100644 --- a/include/sway/ipc-server.h +++ b/include/sway/ipc-server.h | |||
@@ -16,5 +16,6 @@ void ipc_event_workspace(struct sway_container *old, | |||
16 | void ipc_event_window(struct sway_container *window, const char *change); | 16 | void ipc_event_window(struct sway_container *window, const char *change); |
17 | void ipc_event_barconfig_update(struct bar_config *bar); | 17 | void ipc_event_barconfig_update(struct bar_config *bar); |
18 | void ipc_event_mode(const char *mode, bool pango); | 18 | void ipc_event_mode(const char *mode, bool pango); |
19 | void ipc_event_shutdown(const char *reason); | ||
19 | 20 | ||
20 | #endif | 21 | #endif |
diff --git a/sway/ipc-server.c b/sway/ipc-server.c index be703915..72031e24 100644 --- a/sway/ipc-server.c +++ b/sway/ipc-server.c | |||
@@ -353,6 +353,20 @@ void ipc_event_mode(const char *mode, bool pango) { | |||
353 | json_object_put(obj); | 353 | json_object_put(obj); |
354 | } | 354 | } |
355 | 355 | ||
356 | void ipc_event_shutdown(const char *reason) { | ||
357 | if (!ipc_has_event_listeners(IPC_EVENT_SHUTDOWN)) { | ||
358 | return; | ||
359 | } | ||
360 | wlr_log(WLR_DEBUG, "Sending shutdown::%s event", reason); | ||
361 | |||
362 | json_object *json = json_object_new_object(); | ||
363 | json_object_object_add(json, "change", json_object_new_string(reason)); | ||
364 | |||
365 | const char *json_string = json_object_to_json_string(json); | ||
366 | ipc_send_event(json_string, IPC_EVENT_SHUTDOWN); | ||
367 | json_object_put(json); | ||
368 | } | ||
369 | |||
356 | int ipc_client_handle_writable(int client_fd, uint32_t mask, void *data) { | 370 | int ipc_client_handle_writable(int client_fd, uint32_t mask, void *data) { |
357 | struct ipc_client *client = data; | 371 | struct ipc_client *client = data; |
358 | 372 | ||
@@ -549,6 +563,8 @@ void ipc_client_handle_command(struct ipc_client *client) { | |||
549 | client->subscribed_events |= event_mask(IPC_EVENT_BARCONFIG_UPDATE); | 563 | client->subscribed_events |= event_mask(IPC_EVENT_BARCONFIG_UPDATE); |
550 | } else if (strcmp(event_type, "mode") == 0) { | 564 | } else if (strcmp(event_type, "mode") == 0) { |
551 | client->subscribed_events |= event_mask(IPC_EVENT_MODE); | 565 | client->subscribed_events |= event_mask(IPC_EVENT_MODE); |
566 | } else if (strcmp(event_type, "shutdown") == 0) { | ||
567 | client->subscribed_events |= event_mask(IPC_EVENT_SHUTDOWN); | ||
552 | } else if (strcmp(event_type, "window") == 0) { | 568 | } else if (strcmp(event_type, "window") == 0) { |
553 | client->subscribed_events |= event_mask(IPC_EVENT_WINDOW); | 569 | client->subscribed_events |= event_mask(IPC_EVENT_WINDOW); |
554 | } else if (strcmp(event_type, "modifier") == 0) { | 570 | } else if (strcmp(event_type, "modifier") == 0) { |
diff --git a/sway/main.c b/sway/main.c index a20f1dac..477ffa5a 100644 --- a/sway/main.c +++ b/sway/main.c | |||
@@ -36,6 +36,7 @@ struct sway_server server; | |||
36 | void sway_terminate(int exit_code) { | 36 | void sway_terminate(int exit_code) { |
37 | terminate_request = true; | 37 | terminate_request = true; |
38 | exit_value = exit_code; | 38 | exit_value = exit_code; |
39 | ipc_event_shutdown("exit"); | ||
39 | wl_display_terminate(server.wl_display); | 40 | wl_display_terminate(server.wl_display); |
40 | } | 41 | } |
41 | 42 | ||