diff options
author | Ian Fan <ianfan0@gmail.com> | 2018-07-14 11:10:36 +0100 |
---|---|---|
committer | Ian Fan <ianfan0@gmail.com> | 2018-08-01 16:57:15 +0100 |
commit | 317217f2c87aba4463806e211c22296ac9230b6c (patch) | |
tree | dade74c4b5a98b4f1e71e28aad771e6726b0e9a3 | |
parent | ipc: add barconfig_update event on config reload (diff) | |
download | sway-317217f2c87aba4463806e211c22296ac9230b6c.tar.gz sway-317217f2c87aba4463806e211c22296ac9230b6c.tar.zst sway-317217f2c87aba4463806e211c22296ac9230b6c.zip |
ipc: add window::mark event
-rw-r--r-- | include/sway/tree/view.h | 2 | ||||
-rw-r--r-- | sway/commands/mark.c | 2 | ||||
-rw-r--r-- | sway/ipc-json.c | 9 | ||||
-rw-r--r-- | sway/tree/view.c | 13 |
4 files changed, 21 insertions, 5 deletions
diff --git a/include/sway/tree/view.h b/include/sway/tree/view.h index 0152ed55..800df073 100644 --- a/include/sway/tree/view.h +++ b/include/sway/tree/view.h | |||
@@ -311,6 +311,8 @@ void view_clear_marks(struct sway_view *view); | |||
311 | 311 | ||
312 | bool view_has_mark(struct sway_view *view, char *mark); | 312 | bool view_has_mark(struct sway_view *view, char *mark); |
313 | 313 | ||
314 | void view_add_mark(struct sway_view *view, char *mark); | ||
315 | |||
314 | void view_update_marks_textures(struct sway_view *view); | 316 | void view_update_marks_textures(struct sway_view *view); |
315 | 317 | ||
316 | /** | 318 | /** |
diff --git a/sway/commands/mark.c b/sway/commands/mark.c index 5a897e69..9ea8c301 100644 --- a/sway/commands/mark.c +++ b/sway/commands/mark.c | |||
@@ -58,7 +58,7 @@ struct cmd_results *cmd_mark(int argc, char **argv) { | |||
58 | view_find_and_unmark(mark); | 58 | view_find_and_unmark(mark); |
59 | 59 | ||
60 | if (!toggle || !had_mark) { | 60 | if (!toggle || !had_mark) { |
61 | list_add(view->marks, strdup(mark)); | 61 | view_add_mark(view, mark); |
62 | } | 62 | } |
63 | 63 | ||
64 | free(mark); | 64 | free(mark); |
diff --git a/sway/ipc-json.c b/sway/ipc-json.c index c49ea47e..4c2bcc98 100644 --- a/sway/ipc-json.c +++ b/sway/ipc-json.c | |||
@@ -201,6 +201,15 @@ static void ipc_json_describe_view(struct sway_container *c, json_object *object | |||
201 | bool urgent = c->type == C_VIEW ? | 201 | bool urgent = c->type == C_VIEW ? |
202 | view_is_urgent(c->sway_view) : container_has_urgent_child(c); | 202 | view_is_urgent(c->sway_view) : container_has_urgent_child(c); |
203 | json_object_object_add(object, "urgent", json_object_new_boolean(urgent)); | 203 | json_object_object_add(object, "urgent", json_object_new_boolean(urgent)); |
204 | |||
205 | if (c->type == C_VIEW) { | ||
206 | json_object *marks = json_object_new_array(); | ||
207 | list_t *view_marks = c->sway_view->marks; | ||
208 | for (int i = 0; i < view_marks->length; ++i) { | ||
209 | json_object_array_add(marks, json_object_new_string(view_marks->items[i])); | ||
210 | } | ||
211 | json_object_object_add(object, "marks", marks); | ||
212 | } | ||
204 | } | 213 | } |
205 | 214 | ||
206 | static void focus_inactive_children_iterator(struct sway_container *c, void *data) { | 215 | static void focus_inactive_children_iterator(struct sway_container *c, void *data) { |
diff --git a/sway/tree/view.c b/sway/tree/view.c index 7300f207..48b39e80 100644 --- a/sway/tree/view.c +++ b/sway/tree/view.c | |||
@@ -888,6 +888,7 @@ bool view_find_and_unmark(char *mark) { | |||
888 | free(view_mark); | 888 | free(view_mark); |
889 | list_del(view->marks, i); | 889 | list_del(view->marks, i); |
890 | view_update_marks_textures(view); | 890 | view_update_marks_textures(view); |
891 | ipc_event_window(container, "mark"); | ||
891 | return true; | 892 | return true; |
892 | } | 893 | } |
893 | } | 894 | } |
@@ -895,11 +896,10 @@ bool view_find_and_unmark(char *mark) { | |||
895 | } | 896 | } |
896 | 897 | ||
897 | void view_clear_marks(struct sway_view *view) { | 898 | void view_clear_marks(struct sway_view *view) { |
898 | for (int i = 0; i < view->marks->length; ++i) { | 899 | while (view->marks->length) { |
899 | free(view->marks->items[i]); | 900 | list_del(view->marks, 0); |
901 | ipc_event_window(view->swayc, "mark"); | ||
900 | } | 902 | } |
901 | list_free(view->marks); | ||
902 | view->marks = create_list(); | ||
903 | } | 903 | } |
904 | 904 | ||
905 | bool view_has_mark(struct sway_view *view, char *mark) { | 905 | bool view_has_mark(struct sway_view *view, char *mark) { |
@@ -912,6 +912,11 @@ bool view_has_mark(struct sway_view *view, char *mark) { | |||
912 | return false; | 912 | return false; |
913 | } | 913 | } |
914 | 914 | ||
915 | void view_add_mark(struct sway_view *view, char *mark) { | ||
916 | list_add(view->marks, strdup(mark)); | ||
917 | ipc_event_window(view->swayc, "mark"); | ||
918 | } | ||
919 | |||
915 | static void update_marks_texture(struct sway_view *view, | 920 | static void update_marks_texture(struct sway_view *view, |
916 | struct wlr_texture **texture, struct border_colors *class) { | 921 | struct wlr_texture **texture, struct border_colors *class) { |
917 | struct sway_container *output = container_parent(view->swayc, C_OUTPUT); | 922 | struct sway_container *output = container_parent(view->swayc, C_OUTPUT); |