フォロー

ちなみに「どのビットがどのボタンか」の定義が OSデバイスとDIXとで違うので変換する必要があるが、 xf86-input-mouse の実装は bsd_mouse.c で
case WSCONS_EVENT_MOUSE_UP:
BUTBIT (1 << (event->value <= 2 ? 2 - event->value : event->value))
buttons &= ~BUTBIT;
break;
で入れ替えたあと mouse.c で
/* Remap mouse buttons */
b &= (1<<MSE_MAXBUTTONS)-1;
for (i = 0; b; i++) {
if (b & 1)
buttons |= pMse->buttonMap[i];
b >>= 1;
}
で入れ換えるという、そびえ立つクソの山実装である