Changeset - r4548:6a33e364fba5
[Not reviewed]
master
0 8 0
rubidium - 18 years ago 2006-09-04 17:30:30
rubidium@openttd.org
(svn r6380) -Codechange: unify all ways to quit OTTD.
This means that in the intro menu the 'Quit' button immediatelly quits
and the 'Quit' in the menu of the normal game and scenario editor
immediatelly quits when the 'autosave_on_exit' patch is turned on.
This is the same way as the OS/window manager initiated quits, like
alt-F4 and the 'x' in the (OS/window manager drawn) title bar of OTTD.
8 files changed with 23 insertions and 49 deletions:
0 comments (0 inline, 0 general)
functions.h
Show inline comments
 
@@ -230,11 +230,12 @@ const char *GetCurrentLocale(const char 
 
void *ReadFileToMem(const char *filename, size_t *lenp, size_t maxsize);
 

	
 
void LoadFromConfig(void);
 
void SaveToConfig(void);
 
void CheckConfig(void);
 
int ttd_main(int argc, char* argv[]);
 
void HandleExitGameRequest(void);
 

	
 
void DeterminePaths(void);
 

	
 
void CSleep(int milliseconds);
 
#endif /* FUNCTIONS_H */
intro_gui.c
Show inline comments
 
@@ -74,13 +74,13 @@ static void SelectGameWndProc(Window *w,
 
		case 8: case 9: case 10: case 11:
 
			SetNewLandscapeType(e->click.widget - 8);
 
			break;
 
		case 12: ShowGameOptions(); break;
 
		case 13: ShowGameDifficulty(); break;
 
		case 14: ShowPatchesSelection(); break;
 
		case 15: AskExitGame(); break;
 
		case 15: HandleExitGameRequest(); break;
 
		}
 
		break;
 

	
 
		case WE_ON_EDIT_TEXT: HandleOnEditText(e); break;
 
	}
 
}
main_gui.c
Show inline comments
 
@@ -167,20 +167,20 @@ static void MenuClickSaveLoad(int index)
 
{
 
	if (_game_mode == GM_EDITOR) {
 
		switch (index) {
 
			case 0: ShowSaveLoadDialog(SLD_SAVE_SCENARIO); break;
 
			case 1: ShowSaveLoadDialog(SLD_LOAD_SCENARIO); break;
 
			case 2: AskExitToGameMenu();                   break;
 
			case 4: AskExitGame();                         break;
 
			case 4: HandleExitGameRequest();               break;
 
		}
 
	} else {
 
		switch (index) {
 
			case 0: ShowSaveLoadDialog(SLD_SAVE_GAME); break;
 
			case 1: ShowSaveLoadDialog(SLD_LOAD_GAME); break;
 
			case 2: AskExitToGameMenu();               break;
 
			case 3: AskExitGame();                     break;
 
			case 3: HandleExitGameRequest();           break;
 
		}
 
	}
 
}
 

	
 
static void MenuClickMap(int index)
 
{
 
@@ -2223,13 +2223,13 @@ static void MainWindowWndProc(Window *w,
 
		break;
 

	
 
	case WE_KEYPRESS:
 
		switch (e->keypress.keycode) {
 
			case 'Q' | WKC_CTRL:
 
			case 'Q' | WKC_META:
 
				AskExitGame();
 
				HandleExitGameRequest();
 
				break;
 
		}
 

	
 
		/* Disable all key shortcuts, except quit shortcuts when
 
		 * generating the world, otherwise they create threading
 
		 * problem during the generating, resulting in random
openttd.c
Show inline comments
 
@@ -534,12 +534,25 @@ int ttd_main(int argc, char *argv[])
 
	FioCloseAll();
 
	UnInitializeGame();
 

	
 
	return 0;
 
}
 

	
 
void HandleExitGameRequest(void)
 
{
 
	if (_game_mode == GM_MENU) { // do not ask to quit on the main screen
 
		_exit_game = true;
 
	} else if (_patches.autosave_on_exit) {
 
		DoExitSave();
 
		_exit_game = true;
 
	} else {
 
		AskExitGame();
 
	}
 
}
 

	
 

	
 
/** Mutex so that only one thread can communicate with the main program
 
 * at any given time */
 
static ThreadMsg _message = MSG_OTTD_NO_MESSAGE;
 

	
 
static inline void OTTD_ReleaseMutex(void) {_message = MSG_OTTD_NO_MESSAGE;}
 
static inline ThreadMsg OTTD_PollThreadEvent(void) {return _message;}
saveload.h
Show inline comments
 
@@ -17,12 +17,13 @@ typedef enum SaveOrLoadMode {
 
	SL_PNG      =  3,
 
	SL_BMP      =  4,
 
} SaveOrLoadMode;
 

	
 
SaveOrLoadResult SaveOrLoad(const char *filename, int mode);
 
void WaitTillSaved(void);
 
void DoExitSave(void);
 

	
 

	
 
typedef void ChunkSaveLoadProc(void);
 
typedef void AutolengthProc(void *arg);
 

	
 
typedef struct {
video/cocoa_v.m
Show inline comments
 
@@ -194,28 +194,12 @@ static void QZ_CheckPaletteAnim(void)
 
		_pal_last_dirty = -1;
 
	}
 
}
 

	
 

	
 

	
 
extern void DoExitSave(void);
 

	
 
static void QZ_AskQuit(void)
 
{
 
	if (_game_mode == GM_MENU) { // do not ask to quit on the main screen
 
		_exit_game = true;
 
	} else if (_patches.autosave_on_exit) {
 
		DoExitSave();
 
		_exit_game = true;
 
	} else {
 
		AskExitGame();
 
	}
 
}
 

	
 

	
 

	
 
typedef struct VkMapping {
 
	unsigned short vk_from;
 
	byte map_to;
 
} VkMapping;
 

	
 
#define AS(x, z) {x, z}
 
@@ -918,13 +902,13 @@ static void QZ_SetPortAlphaOpaque(void)
 

	
 
@end
 

	
 
@implementation OTTD_QuartzWindowDelegate
 
- (BOOL)windowShouldClose:(id)sender
 
{
 
	QZ_AskQuit();
 
	HandleExitGameRequest();
 

	
 
	return NO;
 
}
 

	
 
- (void)windowDidBecomeKey:(NSNotification*)aNotification
 
{
video/sdl_v.c
Show inline comments
 
@@ -300,14 +300,12 @@ static uint32 ConvertSdlKeyIntoMy(SDL_ke
 
	printf("scancode character pressed %d\n", sym->scancode);
 
	printf("unicode character pressed %d\n", sym->unicode);
 
#endif
 
	return (key << 16) + sym->unicode;
 
}
 

	
 
extern void DoExitSave(void);
 

	
 
static int PollEvent(void)
 
{
 
	SDL_Event ev;
 

	
 
	if (!SDL_CALL SDL_PollEvent(&ev)) return -2;
 

	
 
@@ -373,27 +371,15 @@ static int PollEvent(void)
 
			} else {
 
				UndrawMouseCursor(); // mouse left the window, undraw cursor
 
				_cursor.in_window = false;
 
			}
 
			break;
 

	
 
		case SDL_QUIT:
 
			// do not ask to quit on the main screen
 
			if (_game_mode != GM_MENU) {
 
				if (_patches.autosave_on_exit) {
 
					DoExitSave();
 
					return 0;
 
				} else {
 
					AskExitGame();
 
				}
 
			} else {
 
				return 0;
 
			}
 
			break;
 
		case SDL_QUIT: HandleExitGameRequest(); break;
 

	
 
			case SDL_KEYDOWN: /* Toggle full-screen on ALT + ENTER/F */
 
		case SDL_KEYDOWN: /* Toggle full-screen on ALT + ENTER/F */
 
			if ((ev.key.keysym.mod & (KMOD_ALT | KMOD_META)) &&
 
					(ev.key.keysym.sym == SDLK_RETURN || ev.key.keysym.sym == SDLK_f)) {
 
				ToggleFullScreen(!_fullscreen);
 
			} else {
 
				_pressed_key = ConvertSdlKeyIntoMy(&ev.key.keysym);
 
			}
 
@@ -445,14 +431,12 @@ static void SdlVideoMainLoop(void)
 
	Uint8 *keys;
 

	
 
	for (;;) {
 
		InteractiveRandom(); // randomness
 

	
 
		while ((i = PollEvent()) == -1) {}
 
		if (i >= 0) return;
 

	
 
		if (_exit_game) return;
 

	
 
		mod = SDL_CALL SDL_GetModState();
 
		keys = SDL_CALL SDL_GetKeyState(&numkeys);
 
#if defined(_DEBUG)
 
		if (_shift_pressed)
video/win32_v.c
Show inline comments
 
@@ -148,14 +148,12 @@ static void ClientSizeChanged(int w, int
 
			_screen.dst_ptr = _wnd.buffer_bits;
 
			UpdateWindows();
 
		}
 
	}
 
}
 

	
 
extern void DoExitSave(void);
 

	
 
#ifdef _DEBUG
 
// Keep this function here..
 
// It allows you to redraw the screen from within the MSVC debugger
 
int RedrawScreenDebug(void)
 
{
 
	HDC dc,dc2;
 
@@ -253,20 +251,13 @@ static LRESULT CALLBACK WndProcGdi(HWND 
 
			ReleaseDC(hwnd, hDC);
 
			if (nChanged) InvalidateRect(hwnd, NULL, FALSE);
 
			return 0;
 
		}
 

	
 
		case WM_CLOSE:
 
			if (_game_mode == GM_MENU) { // do not ask to quit on the main screen
 
				_exit_game = true;
 
			} else if (_patches.autosave_on_exit) {
 
				DoExitSave();
 
				_exit_game = true;
 
			} else {
 
				AskExitGame();
 
			}
 
			HandleExitGameRequest();
 
			_window_maximize = IsZoomed(_wnd.main_wnd);
 
			return 0;
 

	
 
		case WM_LBUTTONDOWN:
 
			SetCapture(hwnd);
 
			_left_button_down = true;
0 comments (0 inline, 0 general)