diff --git a/Common/UI/ScreenManager.cpp b/Common/UI/ScreenManager.cpp index f16960f32b..2ae10e113a 100644 --- a/Common/UI/ScreenManager.cpp +++ b/Common/UI/ScreenManager.cpp @@ -106,10 +106,13 @@ void ScreenManager::ProcessInputEvent(const QueuedEvent &event) { case QueuedEventType::KEY: { const KeyInput &key = event.key; - // Send key up to every screen layer, to avoid stuck keys. + // Send key up to every screen layer, to avoid stuck keys. A press and release in one (iOS's back swipe, + // the mouse wheel) is a press only for the top one, or every dialog below would act on it too. if (key.flags & KeyInputFlags::UP) { - for (auto &layer : stack_) { - layer.screen->key(key); + KeyInput upOnly = key; + upOnly.flags &= ~KeyInputFlags::DOWN; + for (size_t i = 0; i < stack_.size(); i++) { + stack_[i].screen->key(i == stack_.size() - 1 ? key : upOnly); } } else if (!stack_.empty()) { stack_.back().screen->key(key);