Fix dependency: Crash.cpp should not depend on GraphicsWindow.

This commit is contained in:
Glenn Maynard
2005-12-31 04:09:56 +00:00
parent 0e599ca582
commit 2120a39d2a
3 changed files with 16 additions and 3 deletions
+7 -3
View File
@@ -10,7 +10,6 @@
#include "arch/Threads/Threads_Win32.h"
#include "archutils/Win32/WindowsResources.h"
#include "archutils/Win32/GraphicsWindow.h" /* for GraphicsWindow::GetHwnd */
#include "crash.h"
#include "ProductInfo.h"
@@ -163,6 +162,11 @@ bool VDDebugInfoInitFromMemory(VDDebugInfoContext *pctx, const void *_src);
bool VDDebugInfoInitFromFile( VDDebugInfoContext *pctx );
void VDDebugInfoDeinit( VDDebugInfoContext *pctx );
static HWND g_hForegroundWnd = NULL;
void CrashHandler::SetForegroundWindow( HWND hWnd )
{
g_hForegroundWnd = hWnd;
}
long __stdcall CrashHandler::ExceptionHandler( EXCEPTION_POINTERS *pExc )
{
@@ -255,11 +259,11 @@ long __stdcall CrashHandler::ExceptionHandler( EXCEPTION_POINTERS *pExc )
/* Now things get more risky. If we're fullscreen, the window will obscure the
* crash dialog. Try to hide the window. Things might blow up here; do this
* after DoSave, so we always write a crash dump. */
if( GetWindowThreadProcessId( GraphicsWindow::GetHwnd(), NULL ) == GetCurrentThreadId() )
if( GetWindowThreadProcessId( g_hForegroundWnd, NULL ) == GetCurrentThreadId() )
{
/* The thread that crashed was the thread that created the main window. Hide
* the window. This will also restore the video mode, if necessary. */
ShowWindow( GraphicsWindow::GetHwnd(), SW_HIDE );
ShowWindow( g_hForegroundWnd, SW_HIDE );
} else {
/* A different thread crashed. Simply kill all other windows. We can't safely
* call ShowWindow; the main thread might be deadlocked. */
+5
View File
@@ -11,6 +11,11 @@ namespace CrashHandler
void SymLookup( const void *ptr, char *buf );
void ForceCrash( const char *reason );
void ForceDeadlock( CString reason, uint64_t iID );
/* Inform the crash handler of a foreground window that may be fullscreen. If
* set, the crash handler will attempt to hide the window or reset the video
* mode. */
void SetForegroundWindow( HWND hWnd );
};
#endif
@@ -8,6 +8,7 @@
#include "DisplayResolutions.h"
#include "arch/ArchHooks/ArchHooks.h"
#include "archutils/Win32/AppInstance.h"
#include "archutils/Win32/Crash.h"
#include "archutils/Win32/WindowIcon.h"
#include "archutils/Win32/GetFileInformation.h"
@@ -241,6 +242,7 @@ void GraphicsWindow::CreateGraphicsWindow( const VideoModeParams &p )
if( g_hWndMain == NULL )
RageException::Throw( "%s", werr_ssprintf( GetLastError(), "CreateWindow" ).c_str() );
CrashHandler::SetForegroundWindow( g_hWndMain );
//SetForegroundWindow( g_hWndMain );
g_HDC = GetDC( g_hWndMain );
@@ -266,6 +268,7 @@ void GraphicsWindow::RecreateGraphicsWindow( const VideoModeParams &p )
DestroyGraphicsWindow();
g_hWndMain = hWnd;
CrashHandler::SetForegroundWindow( g_hWndMain );
g_HDC = GetDC( g_hWndMain );
}
@@ -353,6 +356,7 @@ void GraphicsWindow::DestroyGraphicsWindow()
{
DestroyWindow( g_hWndMain );
g_hWndMain = NULL;
CrashHandler::SetForegroundWindow( g_hWndMain );
}
if( g_hIcon != NULL )