diff --git a/src/newgrf_gui.cpp b/src/newgrf_gui.cpp --- a/src/newgrf_gui.cpp +++ b/src/newgrf_gui.cpp @@ -713,20 +713,20 @@ struct NewGRFWindow : public QueryString case 1: /* Search the list for items that are now found and mark them as such. */ - for (GRFConfig *c = this->actives; c != NULL; c = c->next) { - if (c->status != GCS_NOT_FOUND) continue; + for (GRFConfig **l = &this->actives; *l != NULL; l = &(*l)->next) { + GRFConfig *c = *l; + bool compatible = HasBit(c->flags, GCF_COMPATIBLE); + if (c->status != GCS_NOT_FOUND && !compatible) continue; - const GRFConfig *f = FindGRFConfig(c->ident.grfid, c->ident.md5sum); + const GRFConfig *f = FindGRFConfig(c->ident.grfid, compatible ? c->original_md5sum : c->ident.md5sum); if (f == NULL) continue; - free(c->filename); - free(c->name); - free(c->info); + *l = DuplicateGRFConfig(f); + (*l)->next = c->next; - c->filename = f->filename == NULL ? NULL : strdup(f->filename); - c->name = f->name == NULL ? NULL : strdup(f->name); - c->info = f->info == NULL ? NULL : strdup(f->info); - c->status = GCS_UNKNOWN; + if (active_sel == c) active_sel = *l; + + delete c; } /* Fall through. */ case 4: