Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mapsme/omim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorygorshenin <mipt.vi002@gmail.com>2016-07-19 15:27:35 +0300
committerGitHub <noreply@github.com>2016-07-19 15:27:35 +0300
commit0770bcf865ea91c1df562e836a6fa9f6069fccbc (patch)
tree571640437c725111012b3eefc0d9e2fcac35bce4 /indexer
parentc3dc1f06009250cd9cdd257283f058b5f9e5aeaa (diff)
parentdac65e509fabfe29d6d51ac25b61b017bf077a46 (diff)
Merge pull request #3826 from mgsergio/fix-crash-in-editor
[editor] Fix crash in created feature editing.
Diffstat (limited to 'indexer')
-rw-r--r--indexer/osm_editor.cpp18
-rw-r--r--indexer/osm_editor.hpp12
2 files changed, 20 insertions, 10 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?
diff --git a/indexer/osm_editor.hpp b/indexer/osm_editor.hpp
index 109b089600..a17da2477f 100644
--- a/indexer/osm_editor.hpp
+++ b/indexer/osm_editor.hpp
@@ -47,11 +47,13 @@ public:
enum class FeatureStatus
{
- Untouched,
- Deleted,
- Obsolete, // The feature is obsolete when is marked for deletion via note.
- Modified,
- Created
+ Untouched, // The feature hasn't been saved in the editor.
+ Deleted, // The feature has been marked as deleted.
+ Obsolete, // The feature has been marked for deletion via note.
+ Modified, // The feature has been saved in the editor and differs from the original one.
+ Created // The feature was created by a user and has been saved in the editor.
+ // Note: If a feature was created by a user but hasn't been saved in the editor yet
+ // its status is Untouched.
};
static Editor & Instance();