From e03170fb77048eb75f9e22119033357843e64cf5 Mon Sep 17 00:00:00 2001 From: Vitaliy Date: Thu, 17 Feb 2022 23:59:57 +0300 Subject: [PATCH] Mobile: fix spurious double-taps (#38) --- src/gui/modalMenu.cpp | 23 ++++++++++++----------- src/gui/modalMenu.h | 2 +- 2 files changed, 13 insertions(+), 12 deletions(-) diff --git a/src/gui/modalMenu.cpp b/src/gui/modalMenu.cpp index ff5fadb6d..169716180 100644 --- a/src/gui/modalMenu.cpp +++ b/src/gui/modalMenu.cpp @@ -186,10 +186,10 @@ static bool isChild(gui::IGUIElement *tocheck, gui::IGUIElement *parent) #ifdef HAVE_TOUCHSCREENGUI -bool GUIModalMenu::simulateMouseEvent( - gui::IGUIElement *target, ETOUCH_INPUT_EVENT touch_event) +bool GUIModalMenu::convertToMouseEvent( + SEvent &mouse_event, ETOUCH_INPUT_EVENT touch_event) const noexcept { - SEvent mouse_event{}; // value-initialized, not unitialized + mouse_event = {}; mouse_event.EventType = EET_MOUSE_INPUT_EVENT; mouse_event.MouseInput.X = m_pointer.X; mouse_event.MouseInput.Y = m_pointer.Y; @@ -209,11 +209,7 @@ bool GUIModalMenu::simulateMouseEvent( default: return false; } - if (preprocessEvent(mouse_event)) - return true; - if (!target) - return false; - return target->OnEvent(mouse_event); + return true; } void GUIModalMenu::enter(gui::IGUIElement *hovered) @@ -311,9 +307,14 @@ bool GUIModalMenu::preprocessEvent(const SEvent &event) enter(hovered); } gui::IGUIElement *focused = Environment->getFocus(); - bool ret = simulateMouseEvent(focused, event.TouchInput.Event); - if (!ret && m_hovered != focused) - ret = simulateMouseEvent(m_hovered.get(), event.TouchInput.Event); + SEvent mouse_event; + if (!convertToMouseEvent(mouse_event, event.TouchInput.Event)) + return false; + bool ret = preprocessEvent(mouse_event); + if (!ret && focused) + ret = focused->OnEvent(mouse_event); + if (!ret && m_hovered && m_hovered != focused) + ret = m_hovered->OnEvent(mouse_event); if (event.TouchInput.Event == ETIE_LEFT_UP) leave(); return ret; diff --git a/src/gui/modalMenu.h b/src/gui/modalMenu.h index 8762b1d81..c012c58ba 100644 --- a/src/gui/modalMenu.h +++ b/src/gui/modalMenu.h @@ -105,7 +105,7 @@ private: #ifdef HAVE_TOUCHSCREENGUI irr_ptr m_hovered; - bool simulateMouseEvent(gui::IGUIElement *target, ETOUCH_INPUT_EVENT touch_event); + bool convertToMouseEvent(SEvent &mouse_event, ETOUCH_INPUT_EVENT touch_event) const noexcept; void enter(gui::IGUIElement *element); void leave(); #endif