[input] drop mouse events in right/bottom margins #2233

pull/2239/head
nick black 3 years ago
parent 9502fcea80
commit 4856431ff3
No known key found for this signature in database
GPG Key ID: 5F43400C21CBFACC

@ -906,7 +906,7 @@ ncdirect* ncdirect_core_init(const char* termtype, FILE* outfp, uint64_t flags){
int cursor_x = -1;
if(interrogate_terminfo(&ret->tcache, termtype, ret->ttyfp, utf8, 1,
flags & NCDIRECT_OPTION_INHIBIT_CBREAK,
0, &cursor_y, &cursor_x, &ret->stats, 0, 0,
0, &cursor_y, &cursor_x, &ret->stats, 0, 0, 0, 0,
flags & NCDIRECT_OPTION_DRAIN_INPUT)){
goto err;
}

@ -61,6 +61,7 @@ typedef struct inputctx {
#endif
int lmargin, tmargin; // margins in use at left and top
int rmargin, bmargin; // margins in use at right and bottom
automaton amata;
@ -387,6 +388,14 @@ mouse_click(inputctx* ictx, unsigned release, char follow){
logwarn("dropping click in margins %ld/%ld\n", y, x);
return;
}
if(x >= ictx->ti->dimx - (ictx->rmargin + ictx->lmargin)){
logwarn("dropping click in margins %ld/%ld\n", y, x);
return;
}
if(y >= ictx->ti->dimy - (ictx->bmargin + ictx->tmargin)){
logwarn("dropping click in margins %ld/%ld\n", y, x);
return;
}
pthread_mutex_lock(&ictx->ilock);
if(ictx->ivalid == ictx->isize){
pthread_mutex_unlock(&ictx->ilock);
@ -942,8 +951,8 @@ getpipes(int pipes[static 2]){
}
static inline inputctx*
create_inputctx(tinfo* ti, FILE* infp, int lmargin, int tmargin,
ncsharedstats* stats, unsigned drain,
create_inputctx(tinfo* ti, FILE* infp, int lmargin, int tmargin, int rmargin,
int bmargin, ncsharedstats* stats, unsigned drain,
int linesigs_enabled){
inputctx* i = malloc(sizeof(*i));
if(i){
@ -978,6 +987,8 @@ create_inputctx(tinfo* ti, FILE* infp, int lmargin, int tmargin,
i->midescape = 0;
i->lmargin = lmargin;
i->tmargin = tmargin;
i->rmargin = rmargin;
i->bmargin = bmargin;
i->drain = drain;
logdebug("input descriptors: %d/%d\n", i->stdinfd, i->termfd);
return i;
@ -1617,10 +1628,10 @@ input_thread(void* vmarshall){
}
int init_inputlayer(tinfo* ti, FILE* infp, int lmargin, int tmargin,
ncsharedstats* stats, unsigned drain,
int linesigs_enabled){
inputctx* ictx = create_inputctx(ti, infp, lmargin, tmargin, stats, drain,
linesigs_enabled);
int rmargin, int bmargin, ncsharedstats* stats,
unsigned drain, int linesigs_enabled){
inputctx* ictx = create_inputctx(ti, infp, lmargin, tmargin, rmargin,
bmargin, stats, drain, linesigs_enabled);
if(ictx == NULL){
return -1;
}

@ -14,9 +14,9 @@ struct inputctx;
struct ncsharedstats;
int init_inputlayer(struct tinfo* ti, FILE* infp, int lmargin, int tmargin,
struct ncsharedstats* stats, unsigned drain,
int linesigs_enabled)
__attribute__ ((nonnull (1, 2, 5)));
int rmargin, int bmargin, struct ncsharedstats* stats,
unsigned drain, int linesigs_enabled)
__attribute__ ((nonnull (1, 2, 7)));
int stop_inputlayer(struct tinfo* ti);

@ -1080,6 +1080,7 @@ notcurses* notcurses_core_init(const notcurses_options* opts, FILE* outfp){
opts->flags & NCOPTION_NO_FONT_CHANGES,
cursory, cursorx, &ret->stats,
ret->margin_l, ret->margin_t,
ret->margin_r, ret->margin_b,
opts->flags & NCOPTION_DRAIN_INPUT)){
fbuf_free(&ret->rstate.f);
pthread_mutex_destroy(&ret->pilelock);

@ -713,7 +713,8 @@ macos_early_matches(void){
int interrogate_terminfo(tinfo* ti, const char* termtype, FILE* out, unsigned utf8,
unsigned noaltscreen, unsigned nocbreak, unsigned nonewfonts,
int* cursor_y, int* cursor_x, ncsharedstats* stats,
int lmargin, int tmargin, unsigned draininput){
int lmargin, int tmargin, int rmargin, int bmargin,
unsigned draininput){
int foolcursor_x, foolcursor_y;
if(!cursor_x){
cursor_x = &foolcursor_x;
@ -790,8 +791,8 @@ int interrogate_terminfo(tinfo* ti, const char* termtype, FILE* out, unsigned ut
linesigs_enabled = 0;
}
}
if(init_inputlayer(ti, stdin, lmargin, tmargin, stats, draininput,
linesigs_enabled)){
if(init_inputlayer(ti, stdin, lmargin, tmargin, rmargin, bmargin,
stats, draininput, linesigs_enabled)){
goto err;
}
ti->sprixel_scale_height = 1;

@ -222,7 +222,7 @@ int interrogate_terminfo(tinfo* ti, const char* termtype, FILE* out,
unsigned utf8, unsigned noaltscreen, unsigned nocbreak,
unsigned nonewfonts, int* cursor_y, int* cursor_x,
struct ncsharedstats* stats, int lmargin, int tmargin,
unsigned draininput)
int rmargin, int bmargin, unsigned draininput)
__attribute__ ((nonnull (1, 3, 10)));
void free_terminfo_cache(tinfo* ti);

Loading…
Cancel
Save