From 5327f3913400794d6c117b6590155515c2f8f449 Mon Sep 17 00:00:00 2001 From: Michael Grant <mgrant@grant.org> Date: Wed, 12 Mar 2025 13:52:17 -0400 Subject: [PATCH] Try 2. Move popup focus flag into client struct. --- popup.c | 14 ++++---------- server-client.c | 6 +++--- tmux.h | 2 +- 3 files changed, 8 insertions(+), 14 deletions(-) diff --git a/popup.c b/popup.c index 6d2a0c6c..48a61450 100644 --- a/popup.c +++ b/popup.c @@ -489,8 +489,6 @@ popup_key_cb(struct client *c, void *data, struct key_event *event) size_t len; u_int px, py, x; enum { NONE, LEFT, RIGHT, TOP, BOTTOM } border = NONE; - struct window *w; - struct window_pane *wp; if (pd->md != NULL) { if (menu_key_cb(c, pd->md, event) == 1) { @@ -509,20 +507,16 @@ popup_key_cb(struct client *c, void *data, struct key_event *event) popup_handle_drag(c, pd, m); goto out; } - w = c->session->curw->window; - wp = w->active; if (m->x < pd->px || m->x > pd->px + pd->sx - 1 || m->y < pd->py || m->y > pd->py + pd->sy - 1) { if (MOUSE_BUTTONS(m->b) == MOUSE_BUTTON_3) goto menu; - wp->flags |= PANE_FOCUSED; - pd->flags &= ~POPUP_FOCUSED; + c->flags &= ~CLIENT_OVERLAYPOPUP_FOCUSED; return (0); } - wp->flags &= ~PANE_FOCUSED; - pd->flags |= POPUP_FOCUSED; + c->flags |= CLIENT_OVERLAYPOPUP_FOCUSED; if (pd->border_lines != BOX_LINES_NONE) { if (m->x == pd->px) border = LEFT; @@ -569,7 +563,7 @@ popup_key_cb(struct client *c, void *data, struct key_event *event) bufferevent_write(job_get_event(pd->job), buf, len); return (0); } - if (pd->flags & POPUP_FOCUSED) + if (c->flags & CLIENT_OVERLAYPOPUP_FOCUSED) input_key(&pd->s, job_get_event(pd->job), event->key); } return (0); @@ -734,7 +728,7 @@ popup_display(int flags, enum box_lines lines, struct cmdq_item *item, u_int px, server_client_set_overlay(c, 0, popup_check_cb, popup_mode_cb, popup_draw_cb, popup_key_cb, popup_free_cb, popup_resize_cb, pd); - pd->flags |= POPUP_FOCUSED; + c->flags |= CLIENT_OVERLAYPOPUP_FOCUSED; return (0); } diff --git a/server-client.c b/server-client.c index ffeb690b..28e7d7af 100644 --- a/server-client.c +++ b/server-client.c @@ -2630,7 +2630,7 @@ server_client_handle_key(struct client *c, struct key_event *event) if (c->overlay_key != NULL) { done = c->overlay_key(c, c->overlay_data, event); TAILQ_FOREACH(wp, &c->session->curw->window->panes, entry) { - if (wp->flags & PANE_FOCUSED) + if (~c->flags & CLIENT_OVERLAYPOPUP_FOCUSED) goto focused; } if (done) @@ -2915,7 +2915,7 @@ server_client_reset_state(struct client *c) tty->flags &= ~TTY_BLOCK; /* Get mode from overlay if any, else from screen. */ - if (c->overlay_draw != NULL && ~wp->flags & PANE_FOCUSED) { + if (c->overlay_draw != NULL && c->flags & CLIENT_OVERLAYPOPUP_FOCUSED) { if (c->overlay_mode != NULL) s = c->overlay_mode(c, c->overlay_data, &cx, &cy); } else if (c->prompt_string == NULL) @@ -2946,7 +2946,7 @@ server_client_reset_state(struct client *c) cy = tty->sy - n; } cx = c->prompt_cursor; - } else if (c->overlay_draw == NULL || wp->flags & PANE_FOCUSED) { + } else if (c->overlay_draw == NULL || ~c->flags & CLIENT_OVERLAYPOPUP_FOCUSED) { cursor = 0; tty_window_offset(tty, &ox, &oy, &sx, &sy); if (wp->xoff + s->cx >= ox && wp->xoff + s->cx <= ox + sx && diff --git a/tmux.h b/tmux.h index 73c4ba44..c7602533 100644 --- a/tmux.h +++ b/tmux.h @@ -1982,6 +1982,7 @@ struct client { #define CLIENT_ASSUMEPASTING 0x2000000000ULL #define CLIENT_REDRAWSCROLLBARS 0x4000000000ULL #define CLIENT_NO_DETACH_ON_DESTROY 0x8000000000ULL +#define CLIENT_OVERLAYPOPUP_FOCUSED 0x10000000000ULL #define CLIENT_ALLREDRAWFLAGS \ (CLIENT_REDRAWWINDOW| \ CLIENT_REDRAWSTATUS| \ @@ -3555,7 +3556,6 @@ int menu_key_cb(struct client *, void *, struct key_event *); #define POPUP_CLOSEEXIT 0x1 #define POPUP_CLOSEEXITZERO 0x2 #define POPUP_INTERNAL 0x4 -#define POPUP_FOCUSED 0x8 typedef void (*popup_close_cb)(int, void *); typedef void (*popup_finish_edit_cb)(char *, size_t, void *); int popup_display(int, enum box_lines, struct cmdq_item *, u_int,