aboutsummaryrefslogtreecommitdiffstats
path: root/sway/tree/view.c
diff options
context:
space:
mode:
authorLibravatar Ryan Dwyer <ryandwyer1@gmail.com>2018-05-14 22:47:10 +1000
committerLibravatar Ryan Dwyer <ryandwyer1@gmail.com>2018-05-15 11:18:27 +1000
commit22d38600d0edbb35029b3076c14e0e119dbf3dd2 (patch)
treead548731ca215e2ec0f56cde86a6ff16df8cb323 /sway/tree/view.c
parentMerge pull request #1978 from RedSoxFan/fix-1975 (diff)
downloadsway-22d38600d0edbb35029b3076c14e0e119dbf3dd2.tar.gz
sway-22d38600d0edbb35029b3076c14e0e119dbf3dd2.tar.zst
sway-22d38600d0edbb35029b3076c14e0e119dbf3dd2.zip
Implement marks
Diffstat (limited to 'sway/tree/view.c')
-rw-r--r--sway/tree/view.c49
1 files changed, 49 insertions, 0 deletions
diff --git a/sway/tree/view.c b/sway/tree/view.c
index 8da72667..ec7f3031 100644
--- a/sway/tree/view.c
+++ b/sway/tree/view.c
@@ -23,6 +23,7 @@ void view_init(struct sway_view *view, enum sway_view_type type,
23 view->type = type; 23 view->type = type;
24 view->impl = impl; 24 view->impl = impl;
25 view->executed_criteria = create_list(); 25 view->executed_criteria = create_list();
26 view->marks = create_list();
26 wl_signal_init(&view->events.unmap); 27 wl_signal_init(&view->events.unmap);
27} 28}
28 29
@@ -37,6 +38,11 @@ void view_destroy(struct sway_view *view) {
37 38
38 list_free(view->executed_criteria); 39 list_free(view->executed_criteria);
39 40
41 for (int i = 0; i < view->marks->length; ++i) {
42 free(view->marks->items[i]);
43 }
44 list_free(view->marks);
45
40 container_destroy(view->swayc); 46 container_destroy(view->swayc);
41 47
42 if (view->impl->destroy) { 48 if (view->impl->destroy) {
@@ -721,3 +727,46 @@ void view_update_title(struct sway_view *view, bool force) {
721 container_notify_child_title_changed(view->swayc->parent); 727 container_notify_child_title_changed(view->swayc->parent);
722 config_update_font_height(false); 728 config_update_font_height(false);
723} 729}
730
731static bool find_by_mark_iterator(struct sway_container *con,
732 void *data) {
733 char *mark = data;
734 return con->type == C_VIEW && view_has_mark(con->sway_view, mark);
735}
736
737bool view_find_and_unmark(char *mark) {
738 struct sway_container *container = container_find(&root_container,
739 find_by_mark_iterator, mark);
740 if (!container) {
741 return false;
742 }
743 struct sway_view *view = container->sway_view;
744
745 for (int i = 0; i < view->marks->length; ++i) {
746 char *view_mark = view->marks->items[i];
747 if (strcmp(view_mark, mark) == 0) {
748 free(view_mark);
749 list_del(view->marks, i);
750 return true;
751 }
752 }
753 return false;
754}
755
756void view_clear_marks(struct sway_view *view) {
757 for (int i = 0; i < view->marks->length; ++i) {
758 free(view->marks->items[i]);
759 }
760 list_free(view->marks);
761 view->marks = create_list();
762}
763
764bool view_has_mark(struct sway_view *view, char *mark) {
765 for (int i = 0; i < view->marks->length; ++i) {
766 char *item = view->marks->items[i];
767 if (strcmp(item, mark) == 0) {
768 return true;
769 }
770 }
771 return false;
772}