The mousebinding code missing a break once it had found the correct

binding, this expose another issue that's still being debugged.
Issue pointed out by Dan Harnett, thanks!

While i'm here KNF and rework the logic to not be ass-backwards.

ok okan.
This commit is contained in:
oga 2008-06-17 20:21:17 +00:00
parent 867652c484
commit 9657664c7b

View File

@ -220,32 +220,33 @@ xev_handle_leavenotify(struct xevent *xev, XEvent *ee)
void
xev_handle_buttonpress(struct xevent *xev, XEvent *ee)
{
XButtonEvent *e = &ee->xbutton;
struct client_ctx *cc;
struct screen_ctx *sc = screen_fromroot(e->root);
char *wname;
struct mousebinding *mb;
XButtonEvent *e = &ee->xbutton;
struct client_ctx *cc;
struct screen_ctx *sc = screen_fromroot(e->root);
struct mousebinding *mb;
char *wname;
cc = client_find(e->window);
if (sc->rootwin == e->window)
if (e->window == sc->rootwin) {
TAILQ_FOREACH(mb, &Conf.mousebindingq, entry) {
if(e->button!=mb->button || e->state!=mb->modmask ||
mb->context!=MOUSEBIND_CTX_ROOT)
continue;
(*mb->callback)(cc, e);
if (e->button == mb->button && e->state == mb->modmask
&& mb->context == MOUSEBIND_CTX_ROOT) {
(*mb->callback)(cc, e);
break;
}
}
}
if (cc == NULL || e->state == 0)
goto out;
TAILQ_FOREACH(mb, &Conf.mousebindingq, entry) {
if(e->button!=mb->button || e->state!=mb->modmask ||
mb->context!=MOUSEBIND_CTX_WIN)
continue;
(*mb->callback)(cc, NULL);
break;
if (e->button == mb->button && e->state == mb->modmask &&
mb->context == MOUSEBIND_CTX_ROOT) {
(*mb->callback)(cc, NULL);
break;
}
}
out:
xev_register(xev);