1
0
mirror of https://github.com/tmux/tmux.git synced 2025-04-13 14:58:50 +00:00

Correct ordering when adding after an existing item.

This commit is contained in:
nicm 2019-05-03 15:43:01 +00:00
parent 33298d6df6
commit cf6075fb29
2 changed files with 10 additions and 16 deletions

View File

@ -66,6 +66,7 @@ cmdq_append(struct client *c, struct cmdq_item *item)
item->queue = queue; item->queue = queue;
TAILQ_INSERT_TAIL(queue, item, entry); TAILQ_INSERT_TAIL(queue, item, entry);
log_debug("%s %s: %s", __func__, cmdq_name(c), item->name);
item = next; item = next;
} while (item != NULL); } while (item != NULL);
@ -81,18 +82,17 @@ cmdq_insert_after(struct cmdq_item *after, struct cmdq_item *item)
do { do {
next = item->next; next = item->next;
item->next = NULL; item->next = after->next;
after->next = item;
if (c != NULL) if (c != NULL)
c->references++; c->references++;
item->client = c; item->client = c;
item->queue = queue; item->queue = queue;
if (after->next != NULL) TAILQ_INSERT_AFTER(queue, after, item, entry);
TAILQ_INSERT_AFTER(queue, after->next, item, entry); log_debug("%s %s: %s after %s", __func__, cmdq_name(c),
else item->name, after->name);
TAILQ_INSERT_AFTER(queue, after, item, entry);
after->next = item;
item = next; item = next;
} while (item != NULL); } while (item != NULL);
@ -170,7 +170,7 @@ cmdq_remove(struct cmdq_item *item)
TAILQ_REMOVE(item->queue, item, entry); TAILQ_REMOVE(item->queue, item, entry);
free((void *)item->name); free(item->name);
free(item); free(item);
} }
@ -206,7 +206,6 @@ cmdq_get_command(struct cmd_list *cmdlist, struct cmd_find_state *current,
struct cmdq_item *item, *first = NULL, *last = NULL; struct cmdq_item *item, *first = NULL, *last = NULL;
struct cmd *cmd; struct cmd *cmd;
u_int group = cmdq_next_group(); u_int group = cmdq_next_group();
char *tmp;
struct cmdq_shared *shared; struct cmdq_shared *shared;
shared = xcalloc(1, sizeof *shared); shared = xcalloc(1, sizeof *shared);
@ -218,10 +217,8 @@ cmdq_get_command(struct cmd_list *cmdlist, struct cmd_find_state *current,
memcpy(&shared->mouse, m, sizeof shared->mouse); memcpy(&shared->mouse, m, sizeof shared->mouse);
TAILQ_FOREACH(cmd, &cmdlist->list, qentry) { TAILQ_FOREACH(cmd, &cmdlist->list, qentry) {
xasprintf(&tmp, "command[%s]", cmd->entry->name);
item = xcalloc(1, sizeof *item); item = xcalloc(1, sizeof *item);
item->name = tmp; xasprintf(&item->name, "[%s/%p]", cmd->entry->name, item);
item->type = CMDQ_COMMAND; item->type = CMDQ_COMMAND;
item->group = group; item->group = group;
@ -316,12 +313,9 @@ struct cmdq_item *
cmdq_get_callback1(const char *name, cmdq_cb cb, void *data) cmdq_get_callback1(const char *name, cmdq_cb cb, void *data)
{ {
struct cmdq_item *item; struct cmdq_item *item;
char *tmp;
xasprintf(&tmp, "callback[%s]", name);
item = xcalloc(1, sizeof *item); item = xcalloc(1, sizeof *item);
item->name = tmp; xasprintf(&item->name, "[%s/%p]", name, item);
item->type = CMDQ_CALLBACK; item->type = CMDQ_CALLBACK;
item->group = 0; item->group = 0;

2
tmux.h
View File

@ -1291,7 +1291,7 @@ struct cmdq_shared {
/* Command queue item. */ /* Command queue item. */
typedef enum cmd_retval (*cmdq_cb) (struct cmdq_item *, void *); typedef enum cmd_retval (*cmdq_cb) (struct cmdq_item *, void *);
struct cmdq_item { struct cmdq_item {
const char *name; char *name;
struct cmdq_list *queue; struct cmdq_list *queue;
struct cmdq_item *next; struct cmdq_item *next;