]> git.neil.brown.name Git - edlib.git/commitdiff
doc: remove dependence on view notifier.
authorNeilBrown <neil@brown.name>
Mon, 25 Jan 2016 02:49:54 +0000 (13:49 +1100)
committerNeilBrown <neil@brown.name>
Mon, 25 Jan 2016 02:51:02 +0000 (13:51 +1100)
A view can now have no notifier, and everything should work as expected.

Signed-off-by: NeilBrown <neil@brown.name>
core-doc.c
core-editor.c
core-mark.c
core.h

index 3f0558e1ce18da62e053febe0c2f56517139a8d8..ff068f749f2f375db70c18f1c5376c7a7565abba 100644 (file)
@@ -41,7 +41,7 @@ static int do_doc_add_view(struct doc *d, struct command *c)
        int i;
 
        for (ret = 0; ret < d->nviews; ret++)
-               if (d->views[ret].notify == NULL)
+               if (d->views[ret].state == 0)
                        break;
        if (ret == d->nviews) {
                /* Resize the view list */
@@ -469,8 +469,6 @@ DEF_CMD(doc_handle)
                                 NULL, dd->doc->name, 0);
 
        if (strcmp(ci->key, "doc:add-view") == 0) {
-               if (!ci->comm2)
-                       return -1;
                return 1 + do_doc_add_view(dd->doc, ci->comm2);
        }
 
@@ -975,7 +973,7 @@ static int do_doc_destroy(struct doc *d)
        d->deleting = 0;
 
        for (i = 0; i < d->nviews; i++)
-               if (d->views[i].notify)
+               if (d->views[i].state)
                        /* still in use */
                        return -1;
        if (d == d->ed->docs)
index 6b91d0e25d38dda1346a82e67bfed8b852e3748b..cf6d13c8401b23c189d0eb6fb20aca3c325993f4 100644 (file)
@@ -86,7 +86,7 @@ struct pane *editor_choose_doc(struct editor *ed)
                        continue;
                last = d;
                for (i = 0; i < d->nviews; i++)
-                       if (d->views[i].notify == NULL)
+                       if (d->views[i].state == 0)
                                break;
                if (i == d->nviews) {
                        choice = d;
index d78a5fe8d28c107dadea857c08c371740869f7dd..5475fd8c72c47970421775e2a25b92b1fe2d85ec 100644 (file)
@@ -297,7 +297,7 @@ void __mark_reset(struct doc *d, struct mark *m, int new, int end)
 
        lnk = m->mdata;;
        for (i = 0; i < lnk->size; i++)
-               if (d->views[i].notify) {
+               if (d->views[i].state) {
                        if (!new)
                                tlist_del(&lnk->lists[i]);
                        if (end)
@@ -374,7 +374,7 @@ struct mark *doc_new_mark(struct doc *d, int view)
 {
        struct mark *ret;
 
-       if (view == MARK_POINT || view >= d->nviews || d->views[view].notify == NULL)
+       if (view == MARK_POINT || view >= d->nviews || d->views[view].state != 1)
                return NULL;
        ret = calloc(sizeof(*ret), 1);
        ret->viewnum = view;
@@ -1007,7 +1007,7 @@ static void point_notify_change(struct doc *d, struct mark *p, struct mark *m)
                struct tlist_head *tl = &lnk->lists[i];
                struct command *c = d->views[i].notify;
 
-               if (!c)
+               if (!c || d->views[i].state == 0)
                        continue;
                ci.comm = c;
                while (TLIST_TYPE(tl) == GRP_LIST)
@@ -1080,7 +1080,7 @@ void doc_notify_change(struct doc *d, struct mark *m, struct mark *m2)
                                        continue;
                                done[i] = 1;
                                remaining -= 1;
-                               if (!c)
+                               if (!c || d->views[i].state == 0)
                                        continue;
                                while (TLIST_TYPE(tl) == GRP_LIST)
                                        tl = TLIST_PTR(tl->prev);
@@ -1099,7 +1099,7 @@ void doc_notify_change(struct doc *d, struct mark *m, struct mark *m2)
                        struct command *c = d->views[m->viewnum].notify;
                        done[m->viewnum] = 1;
                        remaining -= 1;
-                       if (c) {
+                       if (c && d->views[m->viewnum].state) {
                                ci.mark = m;
                                ci.comm = c;
                                c->func(&ci);
@@ -1111,7 +1111,7 @@ void doc_notify_change(struct doc *d, struct mark *m, struct mark *m2)
                                struct command *c = d->views[i].notify;
                                if (done[i])
                                        continue;
-                               if (!c)
+                               if (!c || d->views[i].state == 0)
                                        continue;
                                ci.mark = NULL;
                                ci.comm = c;
@@ -1141,7 +1141,7 @@ void doc_check_consistent(struct doc *d)
                seq = m->seq + 1;
        }
        for (i = 0; i < d->nviews; i++)
-               if (d->views[i].notify == NULL) {
+               if (d->views[i].state == 0) {
                        if (!tlist_empty(&d->views[i].head)) abort();
                } else {
                        struct tlist_head *tl;
diff --git a/core.h b/core.h
index 562717cef2cc0fd813b36656a780c2d32f365ba8..21989138423dc6156926efa35dbc324e0dec8b72 100644 (file)
--- a/core.h
+++ b/core.h
@@ -96,7 +96,7 @@ struct doc {
        struct docview {
                struct tlist_head head;
                struct command    *notify;
-               short           state;  /* 0 = unused, 1 = active, 2 = being deleted */
+               short             state;        /* 0 = unused, 1 = active, 2 = being deleted */
        } *views;
        struct attrset          *attrs;
        int                     nviews;