int ptr_x, ptr_y;
bool changed = false;
/* dont change focus if any mouse buttons are pressed */
- if ((x11_keybtnstate() & 0x1f00) == 0)
- {
+ if ((x11_keybtnstate() & 0x1f00) == 0) {
x11_mouse_get(&ptr_x, &ptr_y);
if (prev_x != ptr_x || prev_y != ptr_y)
changed = win_setregion(getregion(ptr_x, ptr_y));
}
static void handle_mouse(XEvent* e) {
- int x = 0, y = 0;
+ KeyBtnState = e->xbutton.state;
+ int x = e->xbutton.x;
+ int y = e->xbutton.y;
+
if (e->type == MotionNotify) {
- KeyBtnState = e->xmotion.state;
- x = e->xmotion.x;
- y = e->xmotion.y;
Config->mouse_drag(KeyBtnState, x, y);
} else {
- KeyBtnState = e->xbutton.state;
- x = e->xbutton.x;
- y = e->xbutton.y;
+ if (e->type == ButtonRelease)
+ KeyBtnState &= ~(1 << (e->xbutton.button + 7));
+ else
+ KeyBtnState |= (1 << (e->xbutton.button + 7));
Config->mouse_btn(e->xbutton.button, (e->type == ButtonPress), x, y);
}
}