From e7bc9928eaa6ae8c041956f0f9b356c7e9e1190f Mon Sep 17 00:00:00 2001 From: Yuri Gorshenin Date: Tue, 31 Oct 2017 17:38:54 +0300 Subject: [PATCH] [search] Fixed viewport search. --- map/framework.cpp | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/map/framework.cpp b/map/framework.cpp index 73200457f9..fbb2a6923e 100644 --- a/map/framework.cpp +++ b/map/framework.cpp @@ -284,25 +284,25 @@ void Framework::OnUserPositionChanged(m2::PointD const & position, bool hasPosit void Framework::OnViewportChanged(ScreenBase const & screen) { - double constexpr kEps = 1.0E-4; - if (!screen.GlobalRect().EqualDxDy(m_currentModelView.GlobalRect(), kEps)) - UpdateUserViewportChanged(); - m_currentModelView = screen; + if (!m_isViewportInitialized) { m_isViewportInitialized = true; for (size_t i = 0; i < static_cast(search::Mode::Count); i++) { auto & intent = m_searchIntents[i]; - if (intent.m_isDelayed) - { - intent.m_params.m_viewport = GetCurrentViewport(); - Search(intent); - } + // Viewport search will be triggered below, in UpdateUserViewportChanged(). + if (!intent.m_isDelayed || static_cast(i) == search::Mode::Viewport) + continue; + SetViewportIfPossible(intent.m_params); + SetCurrentPositionIfPossible(intent.m_params); + Search(intent); } } + UpdateUserViewportChanged(); + m_trafficManager.UpdateViewport(m_currentModelView); m_localAdsManager.UpdateViewport(m_currentModelView); @@ -1329,10 +1329,12 @@ void Framework::SetCurrentCountryChangedListener(TCurrentCountryChanged const & void Framework::UpdateUserViewportChanged() { - if (!IsViewportSearchActive()) + if (!m_isViewportInitialized || !IsViewportSearchActive()) return; - auto & params = m_searchIntents[static_cast(search::Mode::Viewport)].m_params; + // Copy is intended here, for correct checking of duplicating requests. + auto params = m_searchIntents[static_cast(search::Mode::Viewport)].m_params; + SetViewportIfPossible(params); SetCurrentPositionIfPossible(params); Search(params); }