mirror of
https://github.com/subsurface/subsurface.git
synced 2025-02-19 22:16:15 +00:00
Only update tags in the selected dives if they were changed
If current_dive and displayed_dive still have the same tags then we shouldn't touch the tags of other selected dives. Fixes #826 Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
This commit is contained in:
parent
d60a620193
commit
585d6a004b
3 changed files with 22 additions and 0 deletions
18
dive.c
18
dive.c
|
@ -2618,6 +2618,24 @@ bool taglist_contains(struct tag_entry *tag_list, const char *tag)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// check if all tags in subtl are included in supertl (so subtl is a subset of supertl)
|
||||||
|
static bool taglist_contains_all(struct tag_entry *subtl, struct tag_entry *supertl)
|
||||||
|
{
|
||||||
|
while (subtl) {
|
||||||
|
if (!taglist_contains(supertl, subtl->tag->name))
|
||||||
|
return false;
|
||||||
|
subtl = subtl->next;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// if tl1 is both a subset and superset of tl2 they must be the same
|
||||||
|
bool taglist_equal(struct tag_entry *tl1, struct tag_entry *tl2)
|
||||||
|
{
|
||||||
|
return taglist_contains_all(tl1, tl2) && taglist_contains_all(tl2, tl1);
|
||||||
|
}
|
||||||
|
|
||||||
// count the dives where the tag list contains the given tag
|
// count the dives where the tag list contains the given tag
|
||||||
int count_dives_with_tag(const char *tag)
|
int count_dives_with_tag(const char *tag)
|
||||||
{
|
{
|
||||||
|
|
1
dive.h
1
dive.h
|
@ -238,6 +238,7 @@ void taglist_init_global();
|
||||||
void taglist_free(struct tag_entry *tag_list);
|
void taglist_free(struct tag_entry *tag_list);
|
||||||
|
|
||||||
bool taglist_contains(struct tag_entry *tag_list, const char *tag);
|
bool taglist_contains(struct tag_entry *tag_list, const char *tag);
|
||||||
|
bool taglist_equal(struct tag_entry *tl1, struct tag_entry *tl2);
|
||||||
int count_dives_with_tag(const char *tag);
|
int count_dives_with_tag(const char *tag);
|
||||||
int count_dives_with_person(const char *person);
|
int count_dives_with_person(const char *person);
|
||||||
int count_dives_with_location(const char *location);
|
int count_dives_with_location(const char *location);
|
||||||
|
|
|
@ -1099,6 +1099,9 @@ void MainTab::saveTags()
|
||||||
Q_FOREACH (const QString& tag, ui.tagWidget->getBlockStringList())
|
Q_FOREACH (const QString& tag, ui.tagWidget->getBlockStringList())
|
||||||
taglist_add_tag(&displayed_dive.tag_list, tag.toUtf8().data());
|
taglist_add_tag(&displayed_dive.tag_list, tag.toUtf8().data());
|
||||||
taglist_cleanup(&displayed_dive.tag_list);
|
taglist_cleanup(&displayed_dive.tag_list);
|
||||||
|
// we need to check if the tags were changed before just overwriting them
|
||||||
|
if (taglist_equal(displayed_dive.tag_list, cd->tag_list))
|
||||||
|
return;
|
||||||
MODIFY_SELECTED_DIVES(
|
MODIFY_SELECTED_DIVES(
|
||||||
QString tag;
|
QString tag;
|
||||||
taglist_free(mydive->tag_list);
|
taglist_free(mydive->tag_list);
|
||||||
|
|
Loading…
Add table
Reference in a new issue