summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/gfx.cpp5
-rw-r--r--src/gfx_func.h2
-rw-r--r--src/lang/english.txt1
-rw-r--r--src/settings_gui.cpp7
-rw-r--r--src/video/cocoa/cocoa_v.h2
-rw-r--r--src/video/cocoa/cocoa_v.mm3
-rw-r--r--src/video/dedicated_v.cpp2
-rw-r--r--src/video/dedicated_v.h2
-rw-r--r--src/video/null_v.cpp2
-rw-r--r--src/video/null_v.h2
-rw-r--r--src/video/sdl_v.cpp4
-rw-r--r--src/video/sdl_v.h2
-rw-r--r--src/video/video_driver.hpp2
-rw-r--r--src/video/win32_v.cpp15
-rw-r--r--src/video/win32_v.h2
15 files changed, 30 insertions, 23 deletions
diff --git a/src/gfx.cpp b/src/gfx.cpp
index b198c2e11..8a18d95c8 100644
--- a/src/gfx.cpp
+++ b/src/gfx.cpp
@@ -1275,12 +1275,13 @@ bool ChangeResInGame(int width, int height)
return (_screen.width == width && _screen.height == height) || _video_driver->ChangeResolution(width, height);
}
-void ToggleFullScreen(bool fs)
+bool ToggleFullScreen(bool fs)
{
- _video_driver->ToggleFullscreen(fs);
+ bool result = _video_driver->ToggleFullscreen(fs);
if (_fullscreen != fs && _num_resolutions == 0) {
DEBUG(driver, 0, "Could not find a suitable fullscreen resolution");
}
+ return result;
}
static int CDECL compare_res(const void *pa, const void *pb)
diff --git a/src/gfx_func.h b/src/gfx_func.h
index 837be1e0c..0103e7044 100644
--- a/src/gfx_func.h
+++ b/src/gfx_func.h
@@ -151,7 +151,7 @@ void ScreenSizeChanged();
void UndrawMouseCursor();
bool ChangeResInGame(int w, int h);
void SortResolutions(int count);
-void ToggleFullScreen(bool fs);
+bool ToggleFullScreen(bool fs);
/* gfx.cpp */
#define ASCII_LETTERSTART 32
diff --git a/src/lang/english.txt b/src/lang/english.txt
index 981487faa..4dd7840ad 100644
--- a/src/lang/english.txt
+++ b/src/lang/english.txt
@@ -941,6 +941,7 @@ STR_OPTIONS_LANG_TIP :{BLACK}Select t
STR_OPTIONS_FULLSCREEN :{BLACK}Fullscreen
STR_OPTIONS_FULLSCREEN_TIP :{BLACK}Check this box to play OpenTTD fullscreen mode
+STR_FULLSCREEN_FAILED :{WHITE}Fullscreen mode failed
STR_OPTIONS_RES :{BLACK}Screen resolution
STR_OPTIONS_RES_CBO :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
diff --git a/src/settings_gui.cpp b/src/settings_gui.cpp
index 3dc5a4226..ea686f9ef 100644
--- a/src/settings_gui.cpp
+++ b/src/settings_gui.cpp
@@ -201,8 +201,11 @@ static void GameOptionsWndProc(Window *w, WindowEvent *e)
ShowDropDownMenu(w, BuildDynamicDropdown(SPECSTR_RESOLUTION_START, _num_resolutions), GetCurRes(), 27, 0, 0);
return;
case 28: /* Click fullscreen on/off */
- w->SetWidgetLoweredState(28, !_fullscreen);
- ToggleFullScreen(!_fullscreen); // toggle full-screen on/off
+ /* try to toggle full-screen on/off */
+ if (!ToggleFullScreen(!_fullscreen)) {
+ ShowErrorMessage(INVALID_STRING_ID, STR_FULLSCREEN_FAILED, 0, 0);
+ }
+ w->SetWidgetLoweredState(28, _fullscreen);
SetWindowDirty(w);
return;
case 30: case 31: /* Setup screenshot format dropdown */
diff --git a/src/video/cocoa/cocoa_v.h b/src/video/cocoa/cocoa_v.h
index 3a7276bb2..10c408f0a 100644
--- a/src/video/cocoa/cocoa_v.h
+++ b/src/video/cocoa/cocoa_v.h
@@ -19,7 +19,7 @@ public:
/* virtual */ bool ChangeResolution(int w, int h);
- /* virtual */ void ToggleFullscreen(bool fullscreen);
+ /* virtual */ bool ToggleFullscreen(bool fullscreen);
};
class FVideoDriver_Cocoa: public VideoDriverFactory<FVideoDriver_Cocoa> {
diff --git a/src/video/cocoa/cocoa_v.mm b/src/video/cocoa/cocoa_v.mm
index 3ca9f8113..2a5eea7be 100644
--- a/src/video/cocoa/cocoa_v.mm
+++ b/src/video/cocoa/cocoa_v.mm
@@ -361,7 +361,7 @@ bool VideoDriver_Cocoa::ChangeResolution(int w, int h)
return ret;
}
-void VideoDriver_Cocoa::ToggleFullscreen(bool full_screen)
+bool VideoDriver_Cocoa::ToggleFullscreen(bool full_screen)
{
bool oldfs;
@@ -386,6 +386,7 @@ void VideoDriver_Cocoa::ToggleFullscreen(bool full_screen)
QZ_GameSizeChanged();
QZ_UpdateVideoModes();
+ return _cocoa_subdriver->IsFullscreen() == full_screen;
}
diff --git a/src/video/dedicated_v.cpp b/src/video/dedicated_v.cpp
index 7ca1db6ea..97b53e87f 100644
--- a/src/video/dedicated_v.cpp
+++ b/src/video/dedicated_v.cpp
@@ -168,7 +168,7 @@ void VideoDriver_Dedicated::Stop()
void VideoDriver_Dedicated::MakeDirty(int left, int top, int width, int height) {}
bool VideoDriver_Dedicated::ChangeResolution(int w, int h) { return false; }
-void VideoDriver_Dedicated::ToggleFullscreen(bool fs) {}
+bool VideoDriver_Dedicated::ToggleFullscreen(bool fs) { return false; }
#if defined(UNIX) || defined(__OS2__) || defined(PSP)
static bool InputWaiting()
diff --git a/src/video/dedicated_v.h b/src/video/dedicated_v.h
index a2de1c275..0ade00f92 100644
--- a/src/video/dedicated_v.h
+++ b/src/video/dedicated_v.h
@@ -17,7 +17,7 @@ public:
/* virtual */ bool ChangeResolution(int w, int h);
- /* virtual */ void ToggleFullscreen(bool fullscreen);
+ /* virtual */ bool ToggleFullscreen(bool fullscreen);
};
class FVideoDriver_Dedicated: public VideoDriverFactory<FVideoDriver_Dedicated> {
diff --git a/src/video/null_v.cpp b/src/video/null_v.cpp
index 7d2fa512d..f1942a8ae 100644
--- a/src/video/null_v.cpp
+++ b/src/video/null_v.cpp
@@ -38,4 +38,4 @@ void VideoDriver_Null::MainLoop()
bool VideoDriver_Null::ChangeResolution(int w, int h) { return false; }
-void VideoDriver_Null::ToggleFullscreen(bool fs) {}
+bool VideoDriver_Null::ToggleFullscreen(bool fs) { return false; }
diff --git a/src/video/null_v.h b/src/video/null_v.h
index d2e8b4b18..e32a88536 100644
--- a/src/video/null_v.h
+++ b/src/video/null_v.h
@@ -20,7 +20,7 @@ public:
/* virtual */ bool ChangeResolution(int w, int h);
- /* virtual */ void ToggleFullscreen(bool fullscreen);
+ /* virtual */ bool ToggleFullscreen(bool fullscreen);
};
class FVideoDriver_Null: public VideoDriverFactory<FVideoDriver_Null> {
diff --git a/src/video/sdl_v.cpp b/src/video/sdl_v.cpp
index 4461fbf32..cf0e9971d 100644
--- a/src/video/sdl_v.cpp
+++ b/src/video/sdl_v.cpp
@@ -521,14 +521,16 @@ bool VideoDriver_SDL::ChangeResolution(int w, int h)
return CreateMainSurface(w, h);
}
-void VideoDriver_SDL::ToggleFullscreen(bool fullscreen)
+bool VideoDriver_SDL::ToggleFullscreen(bool fullscreen)
{
_fullscreen = fullscreen;
GetVideoModes(); // get the list of available video modes
if (_num_resolutions == 0 || !this->ChangeResolution(_cur_resolution[0], _cur_resolution[1])) {
// switching resolution failed, put back full_screen to original status
_fullscreen ^= true;
+ return false;
}
+ return true;
}
#endif /* WITH_SDL */
diff --git a/src/video/sdl_v.h b/src/video/sdl_v.h
index fdfded49c..ab56f99c3 100644
--- a/src/video/sdl_v.h
+++ b/src/video/sdl_v.h
@@ -17,7 +17,7 @@ public:
/* virtual */ bool ChangeResolution(int w, int h);
- /* virtual */ void ToggleFullscreen(bool fullscreen);
+ /* virtual */ bool ToggleFullscreen(bool fullscreen);
};
class FVideoDriver_SDL: public VideoDriverFactory<FVideoDriver_SDL> {
diff --git a/src/video/video_driver.hpp b/src/video/video_driver.hpp
index 048c233b9..423ab92e1 100644
--- a/src/video/video_driver.hpp
+++ b/src/video/video_driver.hpp
@@ -13,7 +13,7 @@ public:
virtual bool ChangeResolution(int w, int h) = 0;
- virtual void ToggleFullscreen(bool fullscreen) = 0;
+ virtual bool ToggleFullscreen(bool fullscreen) = 0;
};
class VideoDriverFactoryBase: public DriverFactoryBase {
diff --git a/src/video/win32_v.cpp b/src/video/win32_v.cpp
index 5fb4a4c60..ceac2b3b6 100644
--- a/src/video/win32_v.cpp
+++ b/src/video/win32_v.cpp
@@ -210,7 +210,7 @@ static void CALLBACK TrackMouseTimerProc(HWND hwnd, UINT msg, UINT event, DWORD
}
}
-static void MakeWindow(bool full_screen)
+static bool MakeWindow(bool full_screen)
{
_fullscreen = full_screen;
@@ -242,8 +242,8 @@ static void MakeWindow(bool full_screen)
settings.dmDisplayFrequency = _display_hz;
if (ChangeDisplaySettings(&settings, CDS_FULLSCREEN) != DISP_CHANGE_SUCCESSFUL) {
- MakeWindow(false);
- return;
+ MakeWindow(false); // don't care about the result
+ return false; // the request failed
}
} else if (_wnd.fullscreen) {
// restore display?
@@ -291,6 +291,7 @@ static void MakeWindow(bool full_screen)
}
}
GameSizeChanged(); // invalidate all windows, force redraw
+ return true; // the request succedded
}
static LRESULT CALLBACK WndProcGdi(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
@@ -895,12 +896,10 @@ bool VideoDriver_Win32::ChangeResolution(int w, int h)
_wnd.width = _wnd.width_org = w;
_wnd.height = _wnd.height_org = h;
- MakeWindow(_fullscreen); // _wnd.fullscreen screws up ingame resolution switching
-
- return true;
+ return MakeWindow(_fullscreen); // _wnd.fullscreen screws up ingame resolution switching
}
-void VideoDriver_Win32::ToggleFullscreen(bool full_screen)
+bool VideoDriver_Win32::ToggleFullscreen(bool full_screen)
{
- MakeWindow(full_screen);
+ return MakeWindow(full_screen);
}
diff --git a/src/video/win32_v.h b/src/video/win32_v.h
index 11ee523ef..223772d75 100644
--- a/src/video/win32_v.h
+++ b/src/video/win32_v.h
@@ -17,7 +17,7 @@ public:
/* virtual */ bool ChangeResolution(int w, int h);
- /* virtual */ void ToggleFullscreen(bool fullscreen);
+ /* virtual */ bool ToggleFullscreen(bool fullscreen);
};
class FVideoDriver_Win32: public VideoDriverFactory<FVideoDriver_Win32> {