diff options
author | rubidium <rubidium@openttd.org> | 2008-09-23 20:12:13 +0000 |
---|---|---|
committer | rubidium <rubidium@openttd.org> | 2008-09-23 20:12:13 +0000 |
commit | a143100f46790085a318361336401319e9587a0c (patch) | |
tree | 6a7491511d87a7a50c869f074dfc0ebfc48ba675 | |
parent | 57d592828bf7795badf61df18195895df35e9c20 (diff) | |
download | openttd-a143100f46790085a318361336401319e9587a0c.tar.xz |
(svn r14393) -Fix [FS#2318]: deleting the same window (pointer) twice.
-rw-r--r-- | src/signs_gui.cpp | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/src/signs_gui.cpp b/src/signs_gui.cpp index f687e54c9..496444a87 100644 --- a/src/signs_gui.cpp +++ b/src/signs_gui.cpp @@ -171,10 +171,18 @@ void ShowSignList() AllocateWindowDescFront<SignListWindow>(&_sign_list_desc, 0); } -static void RenameSign(SignID index, const char *text) +/** + * Actually rename the sign. + * @param index the sign to rename. + * @param text the new name. + * @return true if the window will already be removed after returning. + */ +static bool RenameSign(SignID index, const char *text) { + bool remove = StrEmpty(text); _cmd_text = text; DoCommandP(0, index, 0, NULL, CMD_RENAME_SIGN | (StrEmpty(text) ? CMD_MSG(STR_CAN_T_DELETE_SIGN) : CMD_MSG(STR_280C_CAN_T_CHANGE_SIGN_NAME))); + return remove; } enum QueryEditSignWidgets { @@ -288,7 +296,7 @@ struct SignWindow : QueryStringBaseWindow, SignList { break; case QUERY_EDIT_SIGN_WIDGET_OK: - RenameSign(this->cur_sign, this->text.buf); + if (RenameSign(this->cur_sign, this->text.buf)) break; /* FALL THROUGH */ case QUERY_EDIT_SIGN_WIDGET_CANCEL: @@ -302,7 +310,7 @@ struct SignWindow : QueryStringBaseWindow, SignList { EventState state = ES_NOT_HANDLED; switch (this->HandleEditBoxKey(QUERY_EDIT_SIGN_WIDGET_TEXT, key, keycode, state)) { case 1: // Enter pressed, confirms change - RenameSign(this->cur_sign, this->text.buf); + if (RenameSign(this->cur_sign, this->text.buf)) break; /* FALL THROUGH */ case 2: // ESC pressed, closes window, abandons changes |