diff --git a/drape_frontend/gui/layer_render.cpp b/drape_frontend/gui/layer_render.cpp index 36992f923f..3f2ce8202e 100644 --- a/drape_frontend/gui/layer_render.cpp +++ b/drape_frontend/gui/layer_render.cpp @@ -44,9 +44,18 @@ void LayerRenderer::Merge(ref_ptr other) { TRenderers::iterator it = m_renderers.find(r.first); if (it != m_renderers.end()) + { it->second = move(r.second); + if (m_activeOverlay != nullptr && m_activeOverlayWidget == r.first) + { + m_activeOverlay->OnTapEnd(); + m_activeOverlay = nullptr; + } + } else + { m_renderers.insert(make_pair(r.first, move(r.second))); + } } other->m_renderers.clear(); @@ -82,6 +91,7 @@ bool LayerRenderer::OnTouchDown(m2::RectD const & touchArea) m_activeOverlay = r.second->ProcessTapEvent(touchArea); if (m_activeOverlay != nullptr) { + m_activeOverlayWidget = r.first; m_activeOverlay->OnTapBegin(); return true; } diff --git a/drape_frontend/gui/layer_render.hpp b/drape_frontend/gui/layer_render.hpp index 9a48aa1aa8..7d27dbb600 100644 --- a/drape_frontend/gui/layer_render.hpp +++ b/drape_frontend/gui/layer_render.hpp @@ -46,6 +46,7 @@ private: TRenderers m_renderers; ref_ptr m_activeOverlay; + EWidget m_activeOverlayWidget = EWidget::WIDGET_RULER; }; class LayerCacher diff --git a/drape_frontend/user_event_stream.cpp b/drape_frontend/user_event_stream.cpp index f2e1c9397e..56e8b3bf27 100644 --- a/drape_frontend/user_event_stream.cpp +++ b/drape_frontend/user_event_stream.cpp @@ -495,7 +495,6 @@ bool UserEventStream::TouchMove(array const & touches, double timestam break; case STATE_TAP_DETECTION: case STATE_WAIT_DOUBLE_TAP: - ASSERT_EQUAL(touchCount, 1, ()); if (m_startDragOrg.SquareLength(touches[0].m_location) > dragThreshold) CancelTapDetector(); else