=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/tmux/popup.c,v retrieving revision 1.35 retrieving revision 1.36 diff -c -r1.35 -r1.36 *** src/usr.bin/tmux/popup.c 2021/10/11 10:55:30 1.35 --- src/usr.bin/tmux/popup.c 2021/10/11 13:27:50 1.36 *************** *** 1,4 **** ! /* $OpenBSD: popup.c,v 1.35 2021/10/11 10:55:30 nicm Exp $ */ /* * Copyright (c) 2020 Nicholas Marriott --- 1,4 ---- ! /* $OpenBSD: popup.c,v 1.36 2021/10/11 13:27:50 nicm Exp $ */ /* * Copyright (c) 2020 Nicholas Marriott *************** *** 157,174 **** return (&pd->s); } ! static int ! popup_check_cb(struct client *c, void *data, u_int px, u_int py) { struct popup_data *pd = data; ! 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); } static void --- 157,205 ---- return (&pd->s); } ! /* 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) { ! /* 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