summaryrefslogtreecommitdiffstats
path: root/popup.c
diff options
context:
space:
mode:
authornicm <nicm>2021-08-11 20:49:55 +0000
committernicm <nicm>2021-08-11 20:49:55 +0000
commit7eea3d7ab850bb8fbeeccbb4b0fe84b9274965af (patch)
tree7967e985cb56c93a0fd80dfebe01079c4dbdd43e /popup.c
parent01fd4b997e3a0a74ea57d6830cf97f98ea2c2a7c (diff)
Break the colour palette into a struct rather than just a single array
and use that to support the OSC palette-setting sequences in popups. Also add a pane-colours array option to specify the defaults. GitHub issue 2815.
Diffstat (limited to 'popup.c')
-rw-r--r--popup.c19
1 files changed, 14 insertions, 5 deletions
diff --git a/popup.c b/popup.c
index dbddc66e..57ce80be 100644
--- a/popup.c
+++ b/popup.c
@@ -33,6 +33,7 @@ struct popup_data {
int flags;
struct screen s;
+ struct colour_palette palette;
struct job *job;
struct input_ctx *ictx;
int status;
@@ -101,6 +102,7 @@ popup_init_ctx_cb(struct screen_write_ctx *ctx, struct tty_ctx *ttyctx)
{
struct popup_data *pd = ctx->arg;
+ ttyctx->palette = &pd->palette;
ttyctx->redraw_cb = popup_redraw_cb;
ttyctx->set_client_cb = popup_set_client_cb;
ttyctx->arg = pd;
@@ -136,6 +138,8 @@ popup_draw_cb(struct client *c, __unused struct screen_redraw_ctx *ctx0)
struct screen s;
struct screen_write_ctx ctx;
u_int i, px = pd->px, py = pd->py;
+ struct colour_palette *palette = &pd->palette;
+ struct grid_cell gc;
screen_init(&s, pd->sx, pd->sy, 0);
screen_write_start(&ctx, &s);
@@ -150,11 +154,13 @@ popup_draw_cb(struct client *c, __unused struct screen_redraw_ctx *ctx0)
}
screen_write_stop(&ctx);
+ memcpy(&gc, &grid_default_cell, sizeof gc);
+ gc.fg = pd->palette.fg;
+ gc.bg = pd->palette.bg;
+
c->overlay_check = NULL;
- for (i = 0; i < pd->sy; i++){
- tty_draw_line(tty, &s, 0, i, pd->sx, px, py + i,
- &grid_default_cell, NULL);
- }
+ for (i = 0; i < pd->sy; i++)
+ tty_draw_line(tty, &s, 0, i, pd->sx, px, py + i, &gc, palette);
c->overlay_check = popup_check_cb;
}
@@ -180,6 +186,7 @@ popup_free_cb(struct client *c)
input_free(pd->ictx);
screen_free(&pd->s);
+ colour_palette_free(&pd->palette);
free(pd);
}
@@ -389,6 +396,8 @@ popup_display(int flags, struct cmdq_item *item, u_int px, u_int py, u_int sx,
pd->status = 128 + SIGHUP;
screen_init(&pd->s, sx - 2, sy - 2, 0);
+ colour_palette_init(&pd->palette);
+ colour_palette_from_option(&pd->palette, global_w_options);
pd->px = px;
pd->py = py;
@@ -403,7 +412,7 @@ popup_display(int flags, struct cmdq_item *item, u_int px, u_int py, u_int sx,
pd->job = job_run(shellcmd, argc, argv, s, cwd,
popup_job_update_cb, popup_job_complete_cb, NULL, pd,
JOB_NOWAIT|JOB_PTY|JOB_KEEPWRITE, pd->sx - 2, pd->sy - 2);
- pd->ictx = input_init(NULL, job_get_event(pd->job));
+ pd->ictx = input_init(NULL, job_get_event(pd->job), &pd->palette);
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);