diff options
Diffstat (limited to 'mousetsr.c')
| -rw-r--r-- | mousetsr.c | 21 |
1 files changed, 12 insertions, 9 deletions
@@ -661,15 +661,15 @@ static void handle_mouse_event(uint16_t buttons, bool absolute, int x, int y, ch #if USE_WHEEL if (data.num_wheels && z) { - if (wheeln == 0 && !data.usewheelapi && (data.wheel_up_key || data.wheel_down_key)) { - // Emulate keystrokes on (vertical) wheel movement - if (z < 0 && data.wheel_up_key) { + if (!data.usewheelapi && (data.wheel_key[wheeln][WHEEL_DIR_UP] || data.wheel_key[wheeln][WHEEL_DIR_DOWN])) { + // Emulate keystrokes on wheel movement + if (z < 0 && data.wheel_key[wheeln][WHEEL_DIR_UP]) { for (; z < 0; z++) { - int16_store_keystroke(data.wheel_up_key); + int16_store_keystroke(data.wheel_key[wheeln][WHEEL_DIR_UP], 0); } - } else if (z > 0 && data.wheel_down_key) { + } else if (z > 0 && data.wheel_key[wheeln][WHEEL_DIR_DOWN]) { for (; z > 0; z--) { - int16_store_keystroke(data.wheel_down_key); + int16_store_keystroke(data.wheel_key[wheeln][WHEEL_DIR_DOWN], 0); } } } else { @@ -766,10 +766,13 @@ static void handle_ps2_packet(void) if (data.ps2_packet[3] & PS2M_IMEX_VERTICAL_SCROLL) { // Vertical scrolling, with 6 bits of precision. z = sign_extend(data.ps2_packet[3], 6); + // Assume 4th/5th buttons are still pressed if they were + buttons |= data.buttons & (INT33_BUTTON_MASK_4TH|INT33_BUTTON_MASK_5TH); } else if (data.ps2_packet[3] & PS2M_IMEX_HORIZONTAL_SCROLL) { // Horizontal scrolling, with 6 bits of precision. - z = -sign_extend(data.ps2_packet[3], 6); + z = sign_extend(data.ps2_packet[3], 6); wheeln = 1; + buttons |= data.buttons & (INT33_BUTTON_MASK_4TH|INT33_BUTTON_MASK_5TH); } else { // Or 2 extra buttons (4, 5) if (data.ps2_packet[3] & PS2M_IMEX_BUTTON_4) { @@ -1126,8 +1129,8 @@ static void reset_mouse_settings() static void reset_mouse_state() { int i; - data.pos.x = data.min.x; - data.pos.y = data.min.y; + data.pos.x = data.min.x + (data.max.x - data.min.x) / 2; + data.pos.y = data.min.y + (data.max.y - data.min.y) / 2; data.pos_frac.x = 0; data.pos_frac.y = 0; data.delta.x = 0; |
