From 1705aab290faf2b986da4df58fd3e763e9f96dfd Mon Sep 17 00:00:00 2001 From: Sebastian Sumpf Date: Mon, 18 Mar 2019 14:58:05 +0100 Subject: [PATCH] seoul: PS2 mouse wheel support fixes #3234 --- repos/ports/ports/seoul.hash | 2 +- repos/ports/ports/seoul.port | 4 ++-- repos/ports/src/app/seoul/console.cc | 13 ++++++++++++- repos/ports/src/app/seoul/console.h | 1 + 4 files changed, 16 insertions(+), 4 deletions(-) diff --git a/repos/ports/ports/seoul.hash b/repos/ports/ports/seoul.hash index add617c02..e4967de60 100644 --- a/repos/ports/ports/seoul.hash +++ b/repos/ports/ports/seoul.hash @@ -1 +1 @@ -a0d13a5e10a8d7ac752de722e156695982d8d07d +4f2b4e390088d7ad3ba10767feaaaa4c7a06a407 diff --git a/repos/ports/ports/seoul.port b/repos/ports/ports/seoul.port index 72cd01ea6..91b228433 100644 --- a/repos/ports/ports/seoul.port +++ b/repos/ports/ports/seoul.port @@ -2,9 +2,9 @@ LICENSE := GPLv2 VERSION := git DOWNLOADS := seoul.git -URL(seoul) := https://github.com/ehmry/seoul.git +URL(seoul) := https://github.com/alex-ab/seoul.git # branch PARAM -REV(seoul) := f9b1d0a699971cf55d9e974a3caf77ef86cd6c0b +REV(seoul) := ca77327faaed6f15c8660f24dd9f7b805dae107e DIR(seoul) := src/app/seoul # diff --git a/repos/ports/src/app/seoul/console.cc b/repos/ports/src/app/seoul/console.cc index 56de9f4de..446491d2d 100644 --- a/repos/ports/src/app/seoul/console.cc +++ b/repos/ports/src/app/seoul/console.cc @@ -80,6 +80,7 @@ static bool mouse_event(Input::Event const &ev) result |= mouse_button(key); }); result |= ev.absolute_motion() || ev.relative_motion(); + result |= ev.wheel(); return result; } @@ -113,6 +114,7 @@ unsigned Seoul::Console::_input_to_ps2mouse(Input::Event const &ev) ev.handle_relative_motion([&] (int x, int y) { rx = x; ry = y; }); + /* clamp relative motion vector to bounds */ int const boundary = 200; rx = Genode::min(boundary, Genode::max(-boundary, rx)); @@ -133,6 +135,15 @@ unsigned Seoul::Console::_input_to_ps2mouse(Input::Event const &ev) } +unsigned Seoul::Console::_input_to_ps2wheel(Input::Event const &ev) +{ + int rz = 0; + ev.handle_wheel([&](int x, int y) { rz = y; }); + + return (unsigned)rz; +} + + /* bus callbacks */ bool Seoul::Console::receive(MessageConsole &msg) @@ -316,7 +327,7 @@ void Seoul::Console::_handle_input() /* update mouse model (PS2) */ if (mouse_event(ev)) { - MessageInput msg(0x10001, _input_to_ps2mouse(ev)); + MessageInput msg(0x10001, _input_to_ps2mouse(ev), _input_to_ps2wheel(ev)); _motherboard()->bus_input.send(msg); } diff --git a/repos/ports/src/app/seoul/console.h b/repos/ports/src/app/seoul/console.h index 85e13446e..fa854f632 100644 --- a/repos/ports/src/app/seoul/console.h +++ b/repos/ports/src/app/seoul/console.h @@ -66,6 +66,7 @@ class Seoul::Console : public StaticReceiver unsigned _timer { 0 }; unsigned _input_to_ps2mouse(Input::Event const &); + unsigned _input_to_ps2wheel(Input::Event const &); Genode::Signal_handler _signal_input = { _env.ep(), *this, &Console::_handle_input };