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
47dd0a1ec5
commit
d449ac3208
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;
|
||||
}
|
||||
|
||||
// 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
|
||||
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);
|
||||
|
||||
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_person(const char *person);
|
||||
int count_dives_with_location(const char *location);
|
||||
|
|
|
@ -1099,6 +1099,9 @@ void MainTab::saveTags()
|
|||
Q_FOREACH (const QString& tag, ui.tagWidget->getBlockStringList())
|
||||
taglist_add_tag(&displayed_dive.tag_list, tag.toUtf8().data());
|
||||
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(
|
||||
QString tag;
|
||||
taglist_free(mydive->tag_list);
|
||||
|
|
Loading…
Add table
Reference in a new issue