From 206a21502ef23fb40550c5f84a358dcadc92a702 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Strohh=C3=A4cker?= Date: Thu, 28 Jul 2005 19:53:43 +0000 Subject: [PATCH] prevent crashes when unexpectedly forced to exit fullscreen mode (e.g. using windows keys in fullscreen) Imported-from: https://svn.code.sf.net/p/dosbox/code-0/dosbox/trunk@2251 --- include/vga.h | 1 + src/gui/sdlmain.cpp | 15 ++++++++++++--- src/hardware/vga_draw.cpp | 4 ++++ 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/include/vga.h b/include/vga.h index 07c06bac..f61f6e71 100644 --- a/include/vga.h +++ b/include/vga.h @@ -345,6 +345,7 @@ void VGA_SetBlinking(Bitu enabled); void VGA_SetCGA2Table(Bit8u val0,Bit8u val1); void VGA_SetCGA4Table(Bit8u val0,Bit8u val1,Bit8u val2,Bit8u val3); void VGA_ActivateHardwareCursor(void); +void VGA_KillDrawing(void); extern VGA_Type vga; diff --git a/src/gui/sdlmain.cpp b/src/gui/sdlmain.cpp index 88fdb3d3..ab5990ba 100644 --- a/src/gui/sdlmain.cpp +++ b/src/gui/sdlmain.cpp @@ -16,7 +16,7 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -/* $Id: sdlmain.cpp,v 1.86 2005-07-19 19:45:32 qbix79 Exp $ */ +/* $Id: sdlmain.cpp,v 1.87 2005-07-28 19:53:42 c2woody Exp $ */ #ifndef _GNU_SOURCE #define _GNU_SOURCE @@ -40,6 +40,7 @@ #include "support.h" #include "debug.h" #include "mapper.h" +#include "vga.h" //#define DISABLE_JOYSTICK @@ -979,8 +980,16 @@ void GFX_Events() { CaptureMouse(); SetPriority(sdl.priority.focus); } else { - if (sdl.mouse.locked) - CaptureMouse(); + if (sdl.mouse.locked) { +#ifdef WIN32 + if (sdl.desktop.fullscreen) { + VGA_KillDrawing(); + sdl.desktop.fullscreen=false; + GFX_ResetScreen(); + } +#endif + CaptureMouse(); + } SetPriority(sdl.priority.nofocus); } } diff --git a/src/hardware/vga_draw.cpp b/src/hardware/vga_draw.cpp index 1fb07585..9622bd65 100644 --- a/src/hardware/vga_draw.cpp +++ b/src/hardware/vga_draw.cpp @@ -523,3 +523,7 @@ void VGA_SetupDrawing(Bitu val) { PIC_AddEvent(VGA_VerticalTimer,vga.draw.delay.vtotal); } }; + +void VGA_KillDrawing(void) { + PIC_RemoveEvents(VGA_DrawPart); +}