diff --git a/input/drivers/udev_input.c b/input/drivers/udev_input.c index e10681267b..3ce999ff47 100644 --- a/input/drivers/udev_input.c +++ b/input/drivers/udev_input.c @@ -408,6 +408,7 @@ static void udev_input_poll(void *data) udev_input_t *udev = (udev_input_t*)data; udev->mouse_x = udev->mouse_y = 0; + udev->mouse_wu = udev->mouse_wd = 0; while (udev_input_hotplug_available(udev)) udev_input_handle_hotplug(udev); diff --git a/menu/menu_entries_cbs_iterate.c b/menu/menu_entries_cbs_iterate.c index 65f1ad53b4..b3a82b1bc9 100644 --- a/menu/menu_entries_cbs_iterate.c +++ b/menu/menu_entries_cbs_iterate.c @@ -562,9 +562,10 @@ static int action_iterate_message(const char *label, unsigned action) return 0; } -static int mouse_iterate(unsigned action) +static int mouse_iterate(unsigned *action) { const struct retro_keybind *binds[MAX_USERS]; + bool wheel_is_up = false, wheel_is_down = false; menu_handle_t *menu = menu_driver_resolve(); if (!menu) return -1; @@ -572,6 +573,11 @@ static int mouse_iterate(unsigned action) if (!menu->mouse.enable) return 0; + wheel_is_up = driver.input->input_state(driver.input_data, + binds, 0, RETRO_DEVICE_MOUSE, 0, RETRO_DEVICE_ID_MOUSE_WHEELUP); + wheel_is_down = driver.input->input_state(driver.input_data, + binds, 0, RETRO_DEVICE_MOUSE, 0, RETRO_DEVICE_ID_MOUSE_WHEELDOWN); + menu->mouse.dx = driver.input->input_state(driver.input_data, binds, 0, RETRO_DEVICE_MOUSE, 0, RETRO_DEVICE_ID_MOUSE_X); menu->mouse.dy = driver.input->input_state(driver.input_data, @@ -589,14 +595,15 @@ static int mouse_iterate(unsigned action) if (menu->mouse.y > menu->frame_buf.height - 5) menu->mouse.y = menu->frame_buf.height - 5; + menu->mouse.left = driver.input->input_state(driver.input_data, binds, 0, RETRO_DEVICE_MOUSE, 0, RETRO_DEVICE_ID_MOUSE_LEFT); menu->mouse.right = driver.input->input_state(driver.input_data, binds, 0, RETRO_DEVICE_MOUSE, 0, RETRO_DEVICE_ID_MOUSE_RIGHT); - menu->mouse.wheelup = menu->mouse.y == 5; - menu->mouse.wheeldown = menu->mouse.y == menu->frame_buf.height - 5; + menu->mouse.wheelup = wheel_is_up || (menu->mouse.y == 5); + menu->mouse.wheeldown = wheel_is_down || (menu->mouse.y == menu->frame_buf.height - 5); if (menu->mouse.dx != 0 || menu->mouse.dy !=0 || menu->mouse.left) g_runloop.frames.video.current.menu.animation.is_active = true; @@ -622,7 +629,7 @@ static int action_iterate_main(const char *label, unsigned action) menu_list_get_at_offset(menu->menu_list->selection_buf, menu->navigation.selection_ptr, &path_offset, &label_offset, &type_offset); - mouse_iterate(action); + mouse_iterate(&action); if (!strcmp(label, "help")) return action_iterate_help(label, action);