changeset 13243:ee090d3956ab draft

(svn r17752) -Fix [FS#3231]: OSK could reset town name to an already used town name for the 'Generate Town' window
author rubidium <rubidium@openttd.org>
date Sat, 10 Oct 2009 12:47:04 +0000
parents 34d1c05e72ff
children ef86ddf0e0a9
files src/osk_gui.cpp src/querystring_gui.h src/town_gui.cpp
diffstat 3 files changed, 20 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/src/osk_gui.cpp
+++ b/src/osk_gui.cpp
@@ -547,3 +547,21 @@
 	GetKeyboardLayout();
 	new OskWindow(&_osk_desc, parent, button, cancel, ok);
 }
+
+/**
+ * Updates the original text of the OSK so when the 'parent' changes the
+ * original and you press on cancel you won't get the 'old' original text
+ * but the updated one.
+ * @param parent window that just updated it's orignal text
+ * @param button widget number of parent's textbox to update
+ */
+void UpdateOSKOriginalText(const QueryStringBaseWindow *parent, int button)
+{
+	OskWindow *osk = dynamic_cast<OskWindow *>(FindWindowById(WC_OSK, 0));
+	if (osk == NULL || osk->qs != parent || osk->text_btn != button) return;
+
+	free(osk->orig_str_buf);
+	osk->orig_str_buf = strdup(osk->qs->text.buf);
+
+	osk->SetDirty();
+}
--- a/src/querystring_gui.h
+++ b/src/querystring_gui.h
@@ -86,5 +86,6 @@
 };
 
 void ShowOnScreenKeyboard(QueryStringBaseWindow *parent, int button, int cancel, int ok);
+void UpdateOSKOriginalText(const QueryStringBaseWindow *parent, int button);
 
 #endif /* QUERYSTRING_GUI_H */
--- a/src/town_gui.cpp
+++ b/src/town_gui.cpp
@@ -978,6 +978,7 @@
 			GetTownName(this->edit_str_buf, &this->params, this->townnameparts, &this->edit_str_buf[this->edit_str_size - 1]);
 		}
 		UpdateTextBufferSize(&this->text);
+		UpdateOSKOriginalText(this, TSEW_TOWNNAME_EDITBOX);
 
 		this->SetFocusedWidget(TSEW_TOWNNAME_EDITBOX);
 		this->SetWidgetDirty(TSEW_TOWNNAME_EDITBOX);