diff options
| author | Andrey Kleshchev <andreykproductengine@lindenlab.com> | 2020-11-11 22:16:04 +0200 | 
|---|---|---|
| committer | Andrey Kleshchev <andreykproductengine@lindenlab.com> | 2020-11-11 22:16:04 +0200 | 
| commit | 74c3b7a0ee70f639dc5dcfd08f7f0762758183ee (patch) | |
| tree | dffe098f8ff7443eaa20a215c980a395252dc190 /indra/llwindow | |
| parent | 3f51c0423942f61d27c33bfdb1622e5ae2b8c9ae (diff) | |
| parent | 04c473ab46041133ea6a87dbe0d43e662472adf5 (diff) | |
Merged master (DRTVWR-507) into DRTVWR-514-keymappings
Diffstat (limited to 'indra/llwindow')
| -rw-r--r-- | indra/llwindow/llwindowwin32.cpp | 47 | 
1 files changed, 31 insertions, 16 deletions
| diff --git a/indra/llwindow/llwindowwin32.cpp b/indra/llwindow/llwindowwin32.cpp index 7783505c27..bef0ae76a8 100644 --- a/indra/llwindow/llwindowwin32.cpp +++ b/indra/llwindow/llwindowwin32.cpp @@ -784,9 +784,6 @@ void LLWindowWin32::close()  		resetDisplayResolution();  	} -	// Don't process events in our mainWindowProc any longer. -	SetWindowLongPtr(mWindowHandle, GWLP_USERDATA, NULL); -  	// Make sure cursor is visible and we haven't mangled the clipping state.  	showCursor();  	setMouseClipping(FALSE); @@ -832,16 +829,24 @@ void LLWindowWin32::close()  	LL_DEBUGS("Window") << "Destroying Window" << LL_ENDL; -	// Make sure we don't leave a blank toolbar button. -	ShowWindow(mWindowHandle, SW_HIDE); +    if (IsWindow(mWindowHandle)) +    { +        // Make sure we don't leave a blank toolbar button. +        ShowWindow(mWindowHandle, SW_HIDE); -	// This causes WM_DESTROY to be sent *immediately* -	if (!destroy_window_handler(mWindowHandle)) -	{ -		OSMessageBox(mCallbacks->translateString("MBDestroyWinFailed"), -			mCallbacks->translateString("MBShutdownErr"), -			OSMB_OK); -	} +        // This causes WM_DESTROY to be sent *immediately* +        if (!destroy_window_handler(mWindowHandle)) +        { +            OSMessageBox(mCallbacks->translateString("MBDestroyWinFailed"), +                mCallbacks->translateString("MBShutdownErr"), +                OSMB_OK); +        } +    } +    else +    { +        // Something killed the window while we were busy destroying gl or handle somehow got broken +        LL_WARNS("Window") << "Failed to destroy Window, invalid handle!" << LL_ENDL; +    }  	mWindowHandle = NULL;  } @@ -1133,7 +1138,10 @@ BOOL LLWindowWin32::switchContext(BOOL fullscreen, const LLCoordScreen &size, BO          << " Height: " << (window_rect.bottom - window_rect.top)          << " Fullscreen: " << mFullscreen          << LL_ENDL; -	DestroyWindow(mWindowHandle); +    if (!destroy_window_handler(mWindowHandle)) +    { +        LL_WARNS("Window") << "Failed to properly close window before recreating it!" << LL_ENDL; +    }	  	mWindowHandle = CreateWindowEx(dw_ex_style,  		mWindowClassName,  		mWindowTitle, @@ -1453,8 +1461,12 @@ BOOL LLWindowWin32::switchContext(BOOL fullscreen, const LLCoordScreen &size, BO  			ReleaseDC (mWindowHandle, mhDC);						// Release The Device Context  			mhDC = 0;											// Zero The Device Context  		} -		DestroyWindow (mWindowHandle);									// Destroy The Window -		 + +        // Destroy The Window +        if (!destroy_window_handler(mWindowHandle)) +        { +            LL_WARNS("Window") << "Failed to properly close window!" << LL_ENDL; +        }		  		mWindowHandle = CreateWindowEx(dw_ex_style,  			mWindowClassName, @@ -3397,7 +3409,10 @@ void LLSplashScreenWin32::hideImpl()  {  	if (mWindow)  	{ -		DestroyWindow(mWindow); +        if (!destroy_window_handler(mWindow)) +        { +            LL_WARNS("Window") << "Failed to properly close splash screen window!" << LL_ENDL; +        }  		mWindow = NULL;   	}  } | 
