diff options
| author | Merov Linden <merov@lindenlab.com> | 2011-11-29 07:23:46 -0800 | 
|---|---|---|
| committer | Merov Linden <merov@lindenlab.com> | 2011-11-29 07:23:46 -0800 | 
| commit | cb33ebff4976552ac729e3938f9f4406c1ee8ed8 (patch) | |
| tree | efb7c05f0008a332f4f9c1c811e6aae46d8a4d3d /indra | |
| parent | e3afa4e547d54805ee9a54502c0f6ee1b31586ef (diff) | |
| parent | 9a5a96aadc5fe5e8582663bd616b457def749b5b (diff) | |
Pull from viewer-experience
Diffstat (limited to 'indra')
| -rw-r--r-- | indra/llwindow/llwindowsdl.cpp | 29 | ||||
| -rw-r--r-- | indra/llwindow/llwindowsdl.h | 1 | ||||
| -rw-r--r-- | indra/newview/llviewerwindow.cpp | 1 | 
3 files changed, 25 insertions, 6 deletions
| diff --git a/indra/llwindow/llwindowsdl.cpp b/indra/llwindow/llwindowsdl.cpp index c75b6c2dce..a70791d39f 100644 --- a/indra/llwindow/llwindowsdl.cpp +++ b/indra/llwindow/llwindowsdl.cpp @@ -63,9 +63,6 @@ extern BOOL gDebugWindowProc;  const S32 MAX_NUM_RESOLUTIONS = 200; -const S32 MIN_WINDOW_WIDTH = 1024; -const S32 MIN_WINDOW_HEIGHT = 768; -  // static variable for ATI mouse cursor crash work-around:  static bool ATIbug = false;  @@ -182,6 +179,20 @@ Display* LLWindowSDL::get_SDL_Display(void)  	}  	return NULL;  } + +void LLWindowSDL::setXWindowMinSize() +{ +	// 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 // LL_X11 @@ -741,6 +752,8 @@ BOOL LLWindowSDL::createContext(int x, int y, int width, int height, int bits, B  			mSDL_XWindowID = info.info.x11.wmwindow;  			Lock_Display = info.info.x11.lock_func;  			Unlock_Display = info.info.x11.unlock_func; + +			setXWindowMinSize();  		}  		else  		{ @@ -1850,8 +1863,8 @@ void LLWindowSDL::gatherInput()  		llinfos << "Handling a resize event: " << event.resize.w <<  			"x" << event.resize.h << llendl; -		S32 width = llmax(event.resize.w, MIN_WINDOW_WIDTH); -		S32 height = llmax(event.resize.h, MIN_WINDOW_HEIGHT); +		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(width, height, 32, mSDLFlags); @@ -1868,6 +1881,12 @@ void LLWindowSDL::gatherInput()                  break;  		} +#if LL_X11 +		// The minimum size limits should be reset after +		// each successful SDL_SetVideoMode() call. +		setXWindowMinSize(); +#endif +  		mCallbacks->handleResize(this, width, height);                  break;              } diff --git a/indra/llwindow/llwindowsdl.h b/indra/llwindow/llwindowsdl.h index 03dbfc22e0..a98b1b74bd 100644 --- a/indra/llwindow/llwindowsdl.h +++ b/indra/llwindow/llwindowsdl.h @@ -140,6 +140,7 @@ public:  #if LL_X11  	static Window get_SDL_XWindowID(void);  	static Display* get_SDL_Display(void); +	void setXWindowMinSize();  #endif // LL_X11	  protected: diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp index 7bc4248053..2479006eeb 100644 --- a/indra/newview/llviewerwindow.cpp +++ b/indra/newview/llviewerwindow.cpp @@ -4107,7 +4107,6 @@ void LLViewerWindow::movieSize(S32 new_width, S32 new_height)  	if ( size.mX != new_width  		|| size.mY != new_height)  	{ -		S32 x = 0;  		LLCoordWindow new_size(new_width, new_height);  		LLCoordScreen screen_size;  		gViewerWindow->getWindow()->convertCoords(new_size, &screen_size); | 
