mirror of
https://github.com/tmux/tmux.git
synced 2025-09-02 13:37:12 +00:00
Merge branch 'obsd-master' into master
This commit is contained in:
49
popup.c
49
popup.c
@ -156,18 +156,49 @@ popup_mode_cb(__unused struct client *c, void *data, u_int *cx, u_int *cy)
|
||||
return (&pd->s);
|
||||
}
|
||||
|
||||
static int
|
||||
popup_check_cb(struct client *c, void *data, u_int px, u_int py)
|
||||
/* Return parts of the input range which are not obstructed by the popup. */
|
||||
static void
|
||||
popup_check_cb(struct client* c, void *data, u_int px, u_int py, u_int nx,
|
||||
struct overlay_ranges *r)
|
||||
{
|
||||
struct popup_data *pd = data;
|
||||
struct overlay_ranges or[2];
|
||||
u_int i, j, k = 0;
|
||||
|
||||
if (pd->md != NULL && menu_check_cb(c, pd->md, px, py) == 0)
|
||||
return (0);
|
||||
if (px < pd->px || px > pd->px + pd->sx - 1)
|
||||
return (1);
|
||||
if (py < pd->py || py > pd->py + pd->sy - 1)
|
||||
return (1);
|
||||
return (0);
|
||||
if (pd->md != NULL) {
|
||||
/* Check each returned range for the menu against the popup. */
|
||||
menu_check_cb(c, pd->md, px, py, nx, r);
|
||||
for (i = 0; i < 2; i++) {
|
||||
server_client_overlay_range(pd->px, pd->py, pd->sx,
|
||||
pd->sy, r->px[i], py, r->nx[i], &or[i]);
|
||||
}
|
||||
|
||||
/*
|
||||
* or has up to OVERLAY_MAX_RANGES non-overlapping ranges,
|
||||
* ordered from left to right. Collect them in the output.
|
||||
*/
|
||||
for (i = 0; i < 2; i++) {
|
||||
/* Each or[i] only has 2 ranges. */
|
||||
for (j = 0; j < 2; j++) {
|
||||
if (or[i].nx[j] > 0) {
|
||||
r->px[k] = or[i].px[j];
|
||||
r->nx[k] = or[i].nx[j];
|
||||
k++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Zero remaining ranges if any. */
|
||||
for (i = k; i < OVERLAY_MAX_RANGES; i++) {
|
||||
r->px[i] = 0;
|
||||
r->nx[i] = 0;
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
server_client_overlay_range(pd->px, pd->py, pd->sx, pd->sy, px, py, nx,
|
||||
r);
|
||||
}
|
||||
|
||||
static void
|
||||
|
Reference in New Issue
Block a user