diff options
Diffstat (limited to 'indra/llwindow')
| -rwxr-xr-x | indra/llwindow/llwindowwin32.cpp | 34 | 
1 files changed, 32 insertions, 2 deletions
| diff --git a/indra/llwindow/llwindowwin32.cpp b/indra/llwindow/llwindowwin32.cpp index 0637572f67..7b34fa09e8 100755 --- a/indra/llwindow/llwindowwin32.cpp +++ b/indra/llwindow/llwindowwin32.cpp @@ -86,6 +86,18 @@ void show_window_creation_error(const std::string& title)  	LL_WARNS("Window") << title << LL_ENDL;  } +HGLRC SafeCreateContext(HDC hdc) +{ +	__try  +	{ +		return wglCreateContext(hdc); +	} +	__except(EXCEPTION_EXECUTE_HANDLER) +	{  +		return NULL; +	} +} +  //static  BOOL LLWindowWin32::sIsClassRegistered = FALSE; @@ -1167,14 +1179,15 @@ BOOL LLWindowWin32::switchContext(BOOL fullscreen, const LLCoordScreen &size, BO  		return FALSE;  	} -	if (!(mhRC = wglCreateContext(mhDC))) + +	if (!(mhRC = SafeCreateContext(mhDC)))  	{  		close();  		OSMessageBox(mCallbacks->translateString("MBGLContextErr"),  			mCallbacks->translateString("MBError"), OSMB_OK);  		return FALSE;  	} - +		  	if (!wglMakeCurrent(mhDC, mhRC))  	{  		close(); @@ -1832,6 +1845,10 @@ LRESULT CALLBACK LLWindowWin32::mainWindowProc(HWND h_wnd, UINT u_msg, WPARAM w_  	// This helps prevent avatar walking after maximizing the window by double-clicking the title bar.  	static bool sHandleLeftMouseUp = true; +	// Ignore the double click received right after activating app. +	// This is to avoid triggering double click teleport after returning focus (see MAINT-3786). +	static bool sHandleDoubleClick = true; +  	LLWindowWin32 *window_imp = (LLWindowWin32 *)GetWindowLong(h_wnd, GWL_USERDATA); @@ -1959,6 +1976,11 @@ LRESULT CALLBACK LLWindowWin32::mainWindowProc(HWND h_wnd, UINT u_msg, WPARAM w_  					}  				} +				if (!activating) +				{ +					sHandleDoubleClick = false; +				} +  				window_imp->mCallbacks->handleActivateApp(window_imp, activating);  				break; @@ -2183,6 +2205,7 @@ LRESULT CALLBACK LLWindowWin32::mainWindowProc(HWND h_wnd, UINT u_msg, WPARAM w_  				window_imp->mCallbacks->handlePingWatchdog(window_imp, "Main:WM_NCLBUTTONDOWN");  				// A click in a non-client area, e.g. title bar or window border.  				sHandleLeftMouseUp = false; +				sHandleDoubleClick = true;  			}  			break; @@ -2227,6 +2250,13 @@ LRESULT CALLBACK LLWindowWin32::mainWindowProc(HWND h_wnd, UINT u_msg, WPARAM w_  		//case WM_RBUTTONDBLCLK:  			{  				window_imp->mCallbacks->handlePingWatchdog(window_imp, "Main:WM_LBUTTONDBLCLK"); + +				if (!sHandleDoubleClick) +				{ +					sHandleDoubleClick = true; +					break; +				} +  				// Because we move the cursor position in the app, we need to query  				// to find out where the cursor at the time the event is handled.  				// If we don't do this, many clicks could get buffered up, and if the | 
