(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)
replace/41b28d7194a279bdc17475d4fbe2ea6ec885a466
smatz 16 years ago
parent 4a97033e7e
commit 5a1203963f

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

@ -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();

@ -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;
}

Loading…
Cancel
Save