misc_gui.c
changeset 1397 b04402b901cd
parent 1392 7b08188ca3be
child 1419 6d94ac953371
--- a/misc_gui.c	Tue Feb 22 14:37:52 2005 +0000
+++ b/misc_gui.c	Tue Feb 22 14:52:20 2005 +0000
@@ -804,7 +804,7 @@
 {
 	const byte charwidth = GetCharacterWidth(key);
 	if (tb->length < tb->maxlength && (tb->maxwidth == 0 || tb->width + charwidth <= tb->maxwidth)) {
-		memmove(tb->buf + tb->caretpos + 1, tb->buf + tb->caretpos, tb->length - tb->caretpos);
+		memmove(tb->buf + tb->caretpos + 1, tb->buf + tb->caretpos, (tb->length - tb->caretpos) + 1);
 		tb->buf[tb->caretpos] = key;
 		tb->length++;
 		tb->width += charwidth;
@@ -995,7 +995,6 @@
 
 	case WE_CREATE:
 		closed = false;
-		_editbox_win = w;
 		break;
 
 	case WE_DESTROY:
@@ -1009,7 +1008,7 @@
 			}
 		}
 		_query_string_active = false;
-		_editbox_win = NULL;
+		CLRBIT(_no_scroll, SCROLL_EDIT);
 		break;
 	}
 }
@@ -1046,6 +1045,7 @@
 	DeleteWindowById(WC_SAVELOAD, 0);
 
 	w = AllocateWindowDesc(&_query_string_desc);
+	SETBIT(_no_scroll, SCROLL_EDIT);
 
 	GetString(_edit_str_buf, str);
 	_edit_str_buf[realmaxlen] = '\0';
@@ -1303,8 +1303,10 @@
 			FiosDelete(WP(w,querystr_d).text.buf);
 			SetWindowDirty(w);
 			BuildFileList();
-			if (_saveload_mode == SLD_SAVE_GAME)
+			if (_saveload_mode == SLD_SAVE_GAME) {
 				GenerateFileName(); /* Reset file name to current date */
+				UpdateTextBufferSize(&WP(w, querystr_d).text);
+			}
 		} else if (HASBIT(w->click_state, 11)) { /* Save button clicked */
 			_switch_mode = SM_SAVE;
 			FiosMakeSavegameName(_file_to_saveload.name, WP(w,querystr_d).text.buf);
@@ -1319,6 +1321,7 @@
 			DoCommandP(0, 0, 0, NULL, CMD_PAUSE);
 		_query_string_active = false;
 		FiosFreeSavegameList();
+		CLRBIT(_no_scroll, SCROLL_SAVE);
 		break;
 	case WE_RESIZE: {
 		/* Widget 2 and 3 have to go with halve speed, make it so obiwan */
@@ -1387,6 +1390,16 @@
 	DeleteWindowById(WC_SAVELOAD, 0);
 
 	_saveload_mode = mode;
+	SETBIT(_no_scroll, SCROLL_SAVE);
+
+	switch (mode) {
+	case SLD_SAVE_GAME:
+		GenerateFileName();
+		break;
+	case SLD_SAVE_SCENARIO:
+		strcpy(_edit_str_buf, "UNNAMED");
+		break;
+	}
 
 	w = AllocateWindowDesc(_saveload_dialogs[mode]);
 	w->vscroll.cap = 24;
@@ -1400,11 +1413,6 @@
 	WP(w,querystr_d).text.buf = _edit_str_buf;
 	UpdateTextBufferSize(&WP(w, querystr_d).text);
 
-	if (mode == SLD_SAVE_GAME) {
-		GenerateFileName();
-	} else if (mode == SLD_SAVE_SCENARIO)
-		strcpy(_edit_str_buf, "UNNAMED");
-
 	// pause is only used in single-player, non-editor mode, non-menu mode. It
 	// will be unpaused in the WE_DESTROY event handler.
 	if(_game_mode != GM_MENU && !_networking && _game_mode != GM_EDITOR)