diff --git a/src/gui/touchscreengui.cpp b/src/gui/touchscreengui.cpp index c9fe5569e694..d8ac39c31b00 100644 --- a/src/gui/touchscreengui.cpp +++ b/src/gui/touchscreengui.cpp @@ -1091,6 +1091,15 @@ void TouchScreenGUI::applyContextControls(const TouchInteractionMode &mode) u64 now = porting::getTimeMs(); + // If the meanings of short and long taps have been swapped, abort any ongoing + // short taps because they would do something else than the player expected. + // Long taps don't need this, they're adjusted to the swapped meanings instead. + if (mode != m_last_mode) { + m_dig_pressed_until = 0; + m_place_pressed_until = 0; + } + m_last_mode = mode; + switch (m_tap_state) { case TapState::ShortTap: if (mode == SHORT_DIG_LONG_PLACE) { diff --git a/src/gui/touchscreengui.h b/src/gui/touchscreengui.h index 2e48a71cf325..661f70f10ad1 100644 --- a/src/gui/touchscreengui.h +++ b/src/gui/touchscreengui.h @@ -314,6 +314,7 @@ class TouchScreenGUI v2s32 getPointerPos(); void emitMouseEvent(EMOUSE_INPUT_EVENT type); + TouchInteractionMode m_last_mode = TouchInteractionMode_END; TapState m_tap_state = TapState::None; bool m_dig_pressed = false;