# HG changeset patch # User Tero Marttila # Date 1216407593 -10800 # Node ID 874f8008e6e517cd7dfc313f25047a724d1de7b6 # Parent 020c61e39c94fd75ca857062ed1fe10b73f11a4d have ShowNewGRFDownload make a copy of the GRFConfig list containg only the relevant GRFConfigs diff -r 020c61e39c94 -r 874f8008e6e5 src/network/newgrf_download.cpp --- a/src/network/newgrf_download.cpp Fri Jul 18 21:28:42 2008 +0300 +++ b/src/network/newgrf_download.cpp Fri Jul 18 21:59:53 2008 +0300 @@ -115,13 +115,13 @@ GRFConfig *list; ///< temporary grf list to which changes are made const GRFConfig *sel; - NewGRFDownloadWindow(const WindowDesc *desc, GRFConfig **list) : Window(desc, 0) + NewGRFDownloadWindow(const WindowDesc *desc, GRFConfig *list) : Window(desc, 0) { // resize magic this->resize.step_height = 14; // the list of GRFs - CopyGRFConfigList(&this->list, *list, false); + this->list = list; // display window? this->FindWindowPlacementAndResize(desc); @@ -320,7 +320,31 @@ * @param config pointer to a linked-list of grfconfig's needed */ void ShowNewGRFDownload(GRFConfig **config) { + // filter out those that we don't need to download + GRFConfig *head = NULL, **item = &head; + const GRFConfig *src; + + for (src = *config; src != NULL; src = src->next) { + if (src->status == GCS_NOT_FOUND || HasBit(src->flags, GCF_COMPATIBLE)) { + // copy-past from newgrf_config.cpp CopyGRFConfigList + GRFConfig *c = CallocT(1); + *c = *src; + if (src->filename != NULL) c->filename = strdup(src->filename); + if (src->name != NULL) c->name = strdup(src->name); + if (src->info != NULL) c->info = strdup(src->info); + if (src->error != NULL) { + c->error = CallocT(1); + memcpy(c->error, src->error, sizeof(GRFError)); + if (src->error->data != NULL) c->error->data = strdup(src->error->data); + if (src->error->custom_message != NULL) c->error->custom_message = strdup(src->error->custom_message); + } + + *item = c; + item = &c->next; + } + } + DeleteWindowByClass(WC_GAME_OPTIONS); - new NewGRFDownloadWindow(&_newgrf_download_desc, config); + new NewGRFDownloadWindow(&_newgrf_download_desc, head); }