aboutsummaryrefslogtreecommitdiff
path: root/mousetsr.c
diff options
context:
space:
mode:
Diffstat (limited to 'mousetsr.c')
-rw-r--r--mousetsr.c13
1 files changed, 8 insertions, 5 deletions
diff --git a/mousetsr.c b/mousetsr.c
index f9451b3..2913efd 100644
--- a/mousetsr.c
+++ b/mousetsr.c
@@ -665,11 +665,11 @@ static void handle_mouse_event(uint16_t buttons, bool absolute, int x, int y, ch
// Emulate keystrokes on (vertical) wheel movement
if (z < 0 && data.wheel_up_key) {
for (; z < 0; z++) {
- int16_store_keystroke(data.wheel_up_key);
+ int16_store_keystroke(data.wheel_up_key, 0);
}
} else if (z > 0 && data.wheel_down_key) {
for (; z > 0; z--) {
- int16_store_keystroke(data.wheel_down_key);
+ int16_store_keystroke(data.wheel_down_key, 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;