diff options
author | Nicholas Marriott <nicm@openbsd.org> | 2009-08-13 20:11:58 +0000 |
---|---|---|
committer | Nicholas Marriott <nicm@openbsd.org> | 2009-08-13 20:11:58 +0000 |
commit | 3ad4de6c8cbdc767c6ac40b99764cc7bd8db066a (patch) | |
tree | 542f3ff53b0bc779bf29cb1ca1483e3636a86255 /window.c | |
parent | 3026118c702fc0f17b860197b5242816927bbadb (diff) | |
download | rtmux-3ad4de6c8cbdc767c6ac40b99764cc7bd8db066a.tar.gz rtmux-3ad4de6c8cbdc767c6ac40b99764cc7bd8db066a.tar.bz2 rtmux-3ad4de6c8cbdc767c6ac40b99764cc7bd8db066a.zip |
Add a base-index session option to specify the first index checked when looking
for an index for a new window.
Diffstat (limited to 'window.c')
-rw-r--r-- | window.c | 26 |
1 files changed, 14 insertions, 12 deletions
@@ -122,16 +122,20 @@ winlink_find_by_index(struct winlinks *wwl, int idx) } int -winlink_next_index(struct winlinks *wwl) +winlink_next_index(struct winlinks *wwl, int idx) { - u_int i; + int i; - for (i = 0; i < INT_MAX; i++) { + i = idx; + do { if (winlink_find_by_index(wwl, i) == NULL) return (i); - } - - fatalx("no free indexes"); + if (i == INT_MAX) + i = 0; + else + i++; + } while (i != idx); + return (-1); } u_int @@ -152,14 +156,12 @@ winlink_add(struct winlinks *wwl, struct window *w, int idx) { struct winlink *wl; - if (idx == -1) - idx = winlink_next_index(wwl); - else if (winlink_find_by_index(wwl, idx) != NULL) + if (idx < 0) { + if ((idx = winlink_next_index(wwl, -idx - 1)) == -1) + return (NULL); + } else if (winlink_find_by_index(wwl, idx) != NULL) return (NULL); - if (idx < 0) - fatalx("bad index"); - wl = xcalloc(1, sizeof *wl); wl->idx = idx; wl->window = w; |