summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--functions.h1
-rw-r--r--intro_gui.c2
-rw-r--r--main_gui.c6
-rw-r--r--openttd.c13
-rw-r--r--saveload.h1
-rw-r--r--video/cocoa_v.m18
-rw-r--r--video/sdl_v.c20
-rw-r--r--video/win32_v.c11
8 files changed, 23 insertions, 49 deletions
diff --git a/functions.h b/functions.h
index 2969fb2e1..352f7b962 100644
--- a/functions.h
+++ b/functions.h
@@ -233,6 +233,7 @@ void LoadFromConfig(void);
void SaveToConfig(void);
void CheckConfig(void);
int ttd_main(int argc, char* argv[]);
+void HandleExitGameRequest(void);
void DeterminePaths(void);
diff --git a/intro_gui.c b/intro_gui.c
index c10a3bc80..9b12a1a5b 100644
--- a/intro_gui.c
+++ b/intro_gui.c
@@ -77,7 +77,7 @@ static void SelectGameWndProc(Window *w, WindowEvent *e)
case 12: ShowGameOptions(); break;
case 13: ShowGameDifficulty(); break;
case 14: ShowPatchesSelection(); break;
- case 15: AskExitGame(); break;
+ case 15: HandleExitGameRequest(); break;
}
break;
diff --git a/main_gui.c b/main_gui.c
index 503c3c68a..8be237ece 100644
--- a/main_gui.c
+++ b/main_gui.c
@@ -170,14 +170,14 @@ static void MenuClickSaveLoad(int 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;
}
}
}
@@ -2226,7 +2226,7 @@ static void MainWindowWndProc(Window *w, WindowEvent *e)
switch (e->keypress.keycode) {
case 'Q' | WKC_CTRL:
case 'Q' | WKC_META:
- AskExitGame();
+ HandleExitGameRequest();
break;
}
diff --git a/openttd.c b/openttd.c
index d4414fdf3..447c5ce89 100644
--- a/openttd.c
+++ b/openttd.c
@@ -537,6 +537,19 @@ int ttd_main(int argc, char *argv[])
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;
diff --git a/saveload.h b/saveload.h
index f1ba3ec2b..bdd2de489 100644
--- a/saveload.h
+++ b/saveload.h
@@ -20,6 +20,7 @@ typedef enum SaveOrLoadMode {
SaveOrLoadResult SaveOrLoad(const char *filename, int mode);
void WaitTillSaved(void);
+void DoExitSave(void);
typedef void ChunkSaveLoadProc(void);
diff --git a/video/cocoa_v.m b/video/cocoa_v.m
index d2b88b5f2..2db610282 100644
--- a/video/cocoa_v.m
+++ b/video/cocoa_v.m
@@ -197,22 +197,6 @@ static void QZ_CheckPaletteAnim(void)
-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;
@@ -921,7 +905,7 @@ static void QZ_SetPortAlphaOpaque(void)
@implementation OTTD_QuartzWindowDelegate
- (BOOL)windowShouldClose:(id)sender
{
- QZ_AskQuit();
+ HandleExitGameRequest();
return NO;
}
diff --git a/video/sdl_v.c b/video/sdl_v.c
index 57c81c556..b8b79b86b 100644
--- a/video/sdl_v.c
+++ b/video/sdl_v.c
@@ -303,8 +303,6 @@ static uint32 ConvertSdlKeyIntoMy(SDL_keysym *sym)
return (key << 16) + sym->unicode;
}
-extern void DoExitSave(void);
-
static int PollEvent(void)
{
SDL_Event ev;
@@ -376,21 +374,9 @@ static int PollEvent(void)
}
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);
@@ -448,8 +434,6 @@ static void SdlVideoMainLoop(void)
InteractiveRandom(); // randomness
while ((i = PollEvent()) == -1) {}
- if (i >= 0) return;
-
if (_exit_game) return;
mod = SDL_CALL SDL_GetModState();
diff --git a/video/win32_v.c b/video/win32_v.c
index 207683db4..05bc4d7a6 100644
--- a/video/win32_v.c
+++ b/video/win32_v.c
@@ -151,8 +151,6 @@ static void ClientSizeChanged(int w, int h)
}
}
-extern void DoExitSave(void);
-
#ifdef _DEBUG
// Keep this function here..
// It allows you to redraw the screen from within the MSVC debugger
@@ -256,14 +254,7 @@ static LRESULT CALLBACK WndProcGdi(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lP
}
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;