diff --git a/src/settings.cpp b/src/settings.cpp index 2800093fe7..06e691a0a3 100644 --- a/src/settings.cpp +++ b/src/settings.cpp @@ -343,6 +343,12 @@ static const void *StringToVal(const SettingDescBase *desc, const char *orig_str case SDT_NUMX: { char *end; size_t val = strtoul(str, &end, 0); + if (end == str) { + SetDParamStr(0, str); + SetDParamStr(1, desc->name); + ShowErrorMessage(STR_CONFIG_ERROR, STR_CONFIG_ERROR_INVALID_VALUE, WL_CRITICAL); + return desc->def; + } if (*end != '\0') { SetDParamStr(0, desc->name); ShowErrorMessage(STR_CONFIG_ERROR, STR_CONFIG_ERROR_TRAILING_CHARACTERS, WL_CRITICAL); @@ -359,7 +365,7 @@ static const void *StringToVal(const SettingDescBase *desc, const char *orig_str SetDParamStr(0, str); SetDParamStr(1, desc->name); ShowErrorMessage(STR_CONFIG_ERROR, STR_CONFIG_ERROR_INVALID_VALUE, WL_CRITICAL); - return 0; + return desc->def; } case SDT_MANYOFMANY: { size_t r = LookupManyOfMany(desc->many, str); @@ -367,7 +373,7 @@ static const void *StringToVal(const SettingDescBase *desc, const char *orig_str SetDParamStr(0, str); SetDParamStr(1, desc->name); ShowErrorMessage(STR_CONFIG_ERROR, STR_CONFIG_ERROR_INVALID_VALUE, WL_CRITICAL); - return NULL; + return desc->def; } case SDT_BOOLX: if (strcmp(str, "true") == 0 || strcmp(str, "on") == 0 || strcmp(str, "1") == 0) return (void*)true; @@ -376,7 +382,7 @@ static const void *StringToVal(const SettingDescBase *desc, const char *orig_str SetDParamStr(0, str); SetDParamStr(1, desc->name); ShowErrorMessage(STR_CONFIG_ERROR, STR_CONFIG_ERROR_INVALID_VALUE, WL_CRITICAL); - break; + return desc->def; case SDT_STRING: return orig_str; case SDT_INTLIST: return str; @@ -2137,7 +2143,7 @@ static void Load_PATS() { /* Copy over default setting since some might not get loaded in * a networking environment. This ensures for example that the local - * signal_side stays when joining a network-server */ + * currency setting stays when joining a network-server */ LoadSettings(_settings, &_settings_game); } diff --git a/src/table/settings.ini b/src/table/settings.ini index aec498f820..168aa1e57e 100644 --- a/src/table/settings.ini +++ b/src/table/settings.ini @@ -456,7 +456,6 @@ to = 158 [SDT_BOOL] base = GameSettings var = construction.signal_side -flags = SLF_NO_NETWORK_SYNC guiflags = SGF_NO_NETWORK def = true str = STR_CONFIG_SETTING_SIGNALSIDE diff --git a/src/video/win32_v.cpp b/src/video/win32_v.cpp index 270af12e81..df7510084d 100644 --- a/src/video/win32_v.cpp +++ b/src/video/win32_v.cpp @@ -296,6 +296,9 @@ bool VideoDriver_Win32::MakeWindow(bool full_screen) } else if (_wnd.fullscreen) { /* restore display? */ ChangeDisplaySettings(NULL, 0); + /* restore the resolution */ + _wnd.width = _bck_resolution.width; + _wnd.height = _bck_resolution.height; } #endif @@ -319,15 +322,13 @@ bool VideoDriver_Win32::MakeWindow(bool full_screen) #if !defined(WINCE) AdjustWindowRect(&r, style, FALSE); #endif - w = r.right - r.left; - h = r.bottom - r.top; - x = (GetSystemMetrics(SM_CXSCREEN) - w) / 2; - y = (GetSystemMetrics(SM_CYSCREEN) - h) / 2; - if (_wnd.main_wnd) { - ShowWindow(_wnd.main_wnd, SW_SHOWNORMAL); // remove maximize-flag - SetWindowPos(_wnd.main_wnd, 0, x, y, w, h, SWP_NOACTIVATE | SWP_NOOWNERZORDER | SWP_NOZORDER); - } else { + if (_wnd.main_wnd == NULL) { + w = r.right - r.left; + h = r.bottom - r.top; + x = (GetSystemMetrics(SM_CXSCREEN) - w) / 2; + y = (GetSystemMetrics(SM_CYSCREEN) - h) / 2; + TCHAR Windowtitle[50]; _sntprintf(Windowtitle, lengthof(Windowtitle), _T("OpenTTD %s"), MB_TO_WIDE(_openttd_revision)); @@ -630,7 +631,7 @@ static LRESULT CALLBACK WndProcGdi(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lP /* Set maximized flag when we maximize (obviously), but also when we * switched to fullscreen from a maximized state */ _window_maximize = (wParam == SIZE_MAXIMIZED || (_window_maximize && _fullscreen)); - if (_window_maximize) _bck_resolution = _cur_resolution; + if (_window_maximize || _fullscreen) _bck_resolution = _cur_resolution; ClientSizeChanged(LOWORD(lParam), HIWORD(lParam)); } return 0;