(svn r14345) -Fix: delete the RenameSignWindow when 'its' sign is deleted

Also, it makes sure the RenameSignWindow isn't open when there are no signs (and crashes associted with that)
This commit is contained in:
smatz 2008-09-16 19:05:38 +00:00
parent 4a97033e7e
commit 5a1203963f
3 changed files with 15 additions and 2 deletions

View File

@ -36,6 +36,10 @@ Sign::Sign(PlayerID owner)
Sign::~Sign()
{
free(this->name);
if (CleaningPool()) return;
DeleteRenameSignWindow(this->index);
this->owner = INVALID_PLAYER;
}

View File

@ -15,6 +15,7 @@ void PlaceProc_Sign(TileIndex tile);
/* signs_gui.cpp */
void ShowRenameSignWindow(const Sign *si);
void HandleClickOnSign(const Sign *si);
void DeleteRenameSignWindow(SignID sign);
void ShowSignList();

View File

@ -286,8 +286,9 @@ struct SignWindow : QueryStringBaseWindow, SignList {
case QUERY_EDIT_SIGN_WIDGET_DELETE:
/* Only need to set the buffer to null, the rest is handled as the OK button */
DeleteTextBufferAll(&this->text);
/* FALL THROUGH */
RenameSign(this->cur_sign, "");
/* don't delete this, we are deleted in Sign::~Sign() -> DeleteRenameSignWindow() */
break;
case QUERY_EDIT_SIGN_WIDGET_OK:
RenameSign(this->cur_sign, this->text.buf);
@ -358,3 +359,10 @@ void ShowRenameSignWindow(const Sign *si)
new SignWindow(&_query_sign_edit_desc, si);
}
void DeleteRenameSignWindow(SignID sign)
{
SignWindow *w = dynamic_cast<SignWindow *>(FindWindowById(WC_QUERY_STRING, 0));
if (w != NULL && w->cur_sign == sign) delete w;
}