diff options
Diffstat (limited to 'indra/llwindow/llwindowsdl.cpp')
| -rw-r--r-- | indra/llwindow/llwindowsdl.cpp | 68 | 
1 files changed, 57 insertions, 11 deletions
diff --git a/indra/llwindow/llwindowsdl.cpp b/indra/llwindow/llwindowsdl.cpp index b65287715c..3d33af9d9b 100644 --- a/indra/llwindow/llwindowsdl.cpp +++ b/indra/llwindow/llwindowsdl.cpp @@ -963,7 +963,7 @@ BOOL LLWindowSDL::setPosition(const LLCoordScreen position)  	return TRUE;  } -BOOL LLWindowSDL::setSize(const LLCoordScreen size) +BOOL LLWindowSDL::setSizeImpl(const LLCoordScreen size)  {  	if(mWindow)  	{ @@ -981,10 +981,31 @@ BOOL LLWindowSDL::setSize(const LLCoordScreen size)  	return FALSE;  } +BOOL LLWindowSDL::setSizeImpl(const LLCoordWindow size) +{ +	if(mWindow) +	{ +		// Push a resize event onto SDL's queue - we'll handle it +		// when it comes out again. +		SDL_Event event; +		event.type = SDL_VIDEORESIZE; +		event.resize.w = size.mX; +		event.resize.h = size.mY; +		SDL_PushEvent(&event); // copied into queue + +		return TRUE; +	} + +	return FALSE; +} + +  void LLWindowSDL::swapBuffers()  {  	if (mWindow) +	{	  		SDL_GL_SwapBuffers(); +	}  }  U32 LLWindowSDL::getFSAASamples() @@ -1031,6 +1052,25 @@ void LLWindowSDL::setMouseClipping( BOOL b )      //SDL_WM_GrabInput(b ? SDL_GRAB_ON : SDL_GRAB_OFF);  } +// virtual +void LLWindowSDL::setMinSize(U32 min_width, U32 min_height, bool enforce_immediately) +{ +	LLWindow::setMinSize(min_width, min_height, enforce_immediately); + +#if LL_X11 +	// Set the minimum size limits for X11 window +	// so the window manager doesn't allow resizing below those limits. +	XSizeHints* hints = XAllocSizeHints(); +	hints->flags |= PMinSize; +	hints->min_width = mMinWindowWidth; +	hints->min_height = mMinWindowHeight; + +	XSetWMNormalHints(mSDL_Display, mSDL_XWindowID, hints); + +	XFree(hints); +#endif +} +  BOOL LLWindowSDL::setCursorPosition(const LLCoordWindow position)  {  	BOOL result = TRUE; @@ -1840,11 +1880,15 @@ void LLWindowSDL::gatherInput()                  break;              case SDL_VIDEORESIZE:  // *FIX: handle this? +            {  		llinfos << "Handling a resize event: " << event.resize.w <<  			"x" << event.resize.h << llendl; +		S32 width = llmax(event.resize.w, (S32)mMinWindowWidth); +		S32 height = llmax(event.resize.h, (S32)mMinWindowHeight); +  		// *FIX: I'm not sure this is necessary! -		mWindow = SDL_SetVideoMode(event.resize.w, event.resize.h, 32, mSDLFlags); +		mWindow = SDL_SetVideoMode(width, height, 32, mSDLFlags);  		if (!mWindow)  		{  			// *FIX: More informative dialog? @@ -1857,10 +1901,10 @@ void LLWindowSDL::gatherInput()      			}                  break;  		} -		 -		mCallbacks->handleResize(this, event.resize.w, event.resize.h ); -                break; +		mCallbacks->handleResize(this, width, height); +                break; +            }              case SDL_ACTIVEEVENT:                  if (event.active.state & SDL_APPINPUTFOCUS)                  { @@ -1911,6 +1955,8 @@ void LLWindowSDL::gatherInput()  		break;          }      } +	 +	updateCursor();  #if LL_X11      // This is a good time to stop flashing the icon if our mFlashTimer has @@ -1997,7 +2043,7 @@ static SDL_Cursor *makeSDLCursorFromBMP(const char *filename, int hotx, int hoty  	return sdlcursor;  } -void LLWindowSDL::setCursor(ECursorType cursor) +void LLWindowSDL::updateCursor()  {  	if (ATIbug) {  		// cursor-updating is very flaky when this bug is @@ -2005,11 +2051,11 @@ void LLWindowSDL::setCursor(ECursorType cursor)  		return;  	} -	if (mCurrentCursor != cursor) +	if (mCurrentCursor != mNextCursor)  	{ -		if (cursor < UI_CURSOR_COUNT) +		if (mNextCursor < UI_CURSOR_COUNT)  		{ -			SDL_Cursor *sdlcursor = mSDLCursors[cursor]; +			SDL_Cursor *sdlcursor = mSDLCursors[mNextCursor];  			// Try to default to the arrow for any cursors that  			// did not load correctly.  			if (!sdlcursor && mSDLCursors[UI_CURSOR_ARROW]) @@ -2017,9 +2063,9 @@ void LLWindowSDL::setCursor(ECursorType cursor)  			if (sdlcursor)  				SDL_SetCursor(sdlcursor);  		} else { -			llwarns << "Tried to set invalid cursor number " << cursor << llendl; +			llwarns << "Tried to set invalid cursor number " << mNextCursor << llendl;  		} -		mCurrentCursor = cursor; +		mCurrentCursor = mNextCursor;  	}  }  | 
