diff options
author | Sergey Magidovich <mgsergio@mapswithme.com> | 2016-07-19 12:36:20 +0300 |
---|---|---|
committer | Sergey Magidovich <mgsergio@mapswithme.com> | 2016-07-19 13:36:43 +0300 |
commit | dac65e509fabfe29d6d51ac25b61b017bf077a46 (patch) | |
tree | 0a95db802fc63467c68804343b7237c4875e4e56 /indexer/osm_editor.cpp | |
parent | e943947615f95bd9da5788ca87dec29a78101359 (diff) |
Fix crash in created feature editing.
Diffstat (limited to 'indexer/osm_editor.cpp')
-rw-r--r-- | indexer/osm_editor.cpp | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/indexer/osm_editor.cpp b/indexer/osm_editor.cpp index b98f934c7c..76e55a5197 100644 --- a/indexer/osm_editor.cpp +++ b/indexer/osm_editor.cpp @@ -448,10 +448,20 @@ Editor::SaveResult Editor::SaveEditedFeature(EditableMapObject const & emo) ASSERT_NOT_EQUAL(featureStatus, FeatureStatus::Obsolete, ("Obsolete feature cannot be modified.")); bool const wasCreatedByUser = IsCreatedFeature(fid); - if (wasCreatedByUser && featureStatus == FeatureStatus::Untouched) + if (wasCreatedByUser) { fti.m_status = FeatureStatus::Created; fti.m_feature.ReplaceBy(emo); + + if (featureStatus == FeatureStatus::Created) + { + auto const & editedFeatureInfo = m_features[fid.m_mwmId][fid.m_index]; + if (AreFeaturesEqualButStreet(fti.m_feature, editedFeatureInfo.m_feature) && + emo.GetStreet().m_defaultName == editedFeatureInfo.m_street) + { + return NothingWasChanged; + } + } } else { @@ -469,7 +479,7 @@ Editor::SaveResult Editor::SaveEditedFeature(EditableMapObject const & emo) ? *originalFeaturePtr : m_features[fid.m_mwmId][fid.m_index].m_feature; fti.m_feature.ReplaceBy(emo); - bool const sameAsInMWM = featureStatus != FeatureStatus::Created && + bool const sameAsInMWM = AreFeaturesEqualButStreet(fti.m_feature, *originalFeaturePtr) && emo.GetStreet().m_defaultName == m_getOriginalFeatureStreetFn(fti.m_feature); @@ -506,9 +516,7 @@ Editor::SaveResult Editor::SaveEditedFeature(EditableMapObject const & emo) return NothingWasChanged; } - fti.m_status = featureStatus == FeatureStatus::Created - ? FeatureStatus::Created - : FeatureStatus::Modified; + fti.m_status = FeatureStatus::Modified; } // TODO: What if local client time is absolutely wrong? |