sbtn
input->sbtn.sync = 0;
if (input->sbtn.sync)
wsmouse_btn_sync(&input->sbtn, &evq);
struct btn_state sbtn; /* softbuttons */
input->sbtn.buttons |= tp->tap.button;
input->sbtn.sync |= tp->tap.button;
input->sbtn.buttons &= ~tp->tap.button;
input->sbtn.sync |= tp->tap.button;
if (input->sbtn.buttons) {
input->sbtn.sync = input->sbtn.buttons;
input->sbtn.buttons = 0;
btn = top ? top_sbtn(tp, t->x, t->y) : sbtn(tp, t->x, t->y);
btn |= sbtn(tp, t->x, t->y);
input->sbtn.buttons &= ~tp->tap.button;
input->sbtn.sync |= tp->tap.button;
input->sbtn.buttons |= tp->tap.button;
input->sbtn.buttons &= ~tp->tap.button;
input->sbtn.sync |= tp->tap.button;
input->sbtn.buttons |= tp->softbutton;
input->sbtn.sync |= tp->softbutton;
input->sbtn.buttons &= ~tp->softbutton;
input->sbtn.sync |= tp->softbutton;