diff --git a/sunshine/input.cpp b/sunshine/input.cpp index 7d9b7733..402d4ce3 100644 --- a/sunshine/input.cpp +++ b/sunshine/input.cpp @@ -402,6 +402,13 @@ void passthrough(std::shared_ptr &input, std::vector &&in task_pool.push(passthrough_helper, input, util::cmove(input_data)); } +void reset(){ + for(auto& kp : key_press){ + platf::keyboard(platf_input, kp.first & 0x00FF, true); + key_press[kp.first] = false; + } +} + void init() { platf_input = platf::input(); } diff --git a/sunshine/input.h b/sunshine/input.h index ce5b9161..e1d4c82c 100644 --- a/sunshine/input.h +++ b/sunshine/input.h @@ -11,6 +11,7 @@ namespace input { struct input_t; void print(void *input); +void reset(); void passthrough(std::shared_ptr &input, std::vector &&input_data); void init(); diff --git a/sunshine/stream.cpp b/sunshine/stream.cpp index f6d4ef21..ccc6c697 100644 --- a/sunshine/stream.cpp +++ b/sunshine/stream.cpp @@ -885,6 +885,8 @@ state_e state(session_t &session) { void stop(session_t &session) { while_starting_do_nothing(session.state); + //Reset input on session stop to avoid stuck repeated keys + input::reset(); auto expected = state_e::RUNNING; auto already_stopping = !session.state.compare_exchange_strong(expected, state_e::STOPPING); if(already_stopping) {