aboutsummaryrefslogtreecommitdiff
path: root/cmd-queue.c
diff options
context:
space:
mode:
Diffstat (limited to 'cmd-queue.c')
-rw-r--r--cmd-queue.c12
1 files changed, 8 insertions, 4 deletions
diff --git a/cmd-queue.c b/cmd-queue.c
index 804216fa..a7a29b58 100644
--- a/cmd-queue.c
+++ b/cmd-queue.c
@@ -158,6 +158,8 @@ cmdq_get_command(struct cmd_list *cmdlist, struct cmd_find_state *current,
shared = xcalloc(1, sizeof *shared);
if (current != NULL)
cmd_find_copy_state(&shared->current, current);
+ else
+ cmd_find_clear_state(&shared->current, 0);
if (m != NULL)
memcpy(&shared->mouse, m, sizeof shared->mouse);
@@ -205,6 +207,7 @@ cmdq_fire_command(struct cmdq_item *item)
retval = CMD_RETURN_ERROR;
goto out;
}
+
if (item->client == NULL)
item->client = cmd_find_client(item, NULL, 1);
@@ -216,11 +219,12 @@ cmdq_fire_command(struct cmdq_item *item)
name = cmd->entry->name;
if (cmd_find_valid_state(&item->state.tflag))
fsp = &item->state.tflag;
- else {
- if (cmd_find_current(&fs, item, CMD_FIND_QUIET) != 0)
- goto out;
+ else if (cmd_find_valid_state(&item->shared->current))
+ fsp = &item->shared->current;
+ else if (cmd_find_from_client(&fs, item->client) == 0)
fsp = &fs;
- }
+ else
+ goto out;
hooks_insert(fsp->s->hooks, item, fsp, "after-%s", name);
}