diff options
22 files changed, 257 insertions, 97 deletions
diff --git a/indra/llui/llfloater.cpp b/indra/llui/llfloater.cpp index 1e6c8b4a71..81b14aac17 100644 --- a/indra/llui/llfloater.cpp +++ b/indra/llui/llfloater.cpp @@ -175,6 +175,8 @@ LLFloater::Params::Params()  	save_visibility("save_visibility", false),  	can_dock("can_dock", false),  	open_positioning("open_positioning", LLFloaterEnums::OPEN_POSITIONING_NONE), +	specified_left("specified_left"), +	specified_bottom("specified_bottom"),  	header_height("header_height", 0),  	legacy_header_height("legacy_header_height", 0),  	close_image("close_image"), @@ -242,6 +244,9 @@ LLFloater::LLFloater(const LLSD& key, const LLFloater::Params& p)  	mCanClose(p.can_close),  	mDragOnLeft(p.can_drag_on_left),  	mResizable(p.can_resize), +	mOpenPositioning(p.open_positioning), +	mSpecifiedLeft(p.specified_left), +	mSpecifiedBottom(p.specified_bottom),  	mMinWidth(p.min_width),  	mMinHeight(p.min_height),  	mHeaderHeight(p.header_height), @@ -679,6 +684,7 @@ void LLFloater::openFloater(const LLSD& key)  	}  	else  	{ +		applyControlsAndPosition(LLFloaterReg::getLastFloaterCascading());  		setMinimized(FALSE);  		setVisibleAndFrontmost(mAutoFocus);  	} @@ -841,39 +847,54 @@ LLMultiFloater* LLFloater::getHost()  	return (LLMultiFloater*)mHostHandle.get();   } -void LLFloater::applySavedVariables() +void LLFloater::applyControlsAndPosition(LLFloater* other)  { -	applyRectControl(); -	applyDockState(); +	if (!applyDockState()) +	{ +		if (!applyRectControl()) +		{ +			applyPositioning(other); +		} +	}  } -void LLFloater::applyRectControl() +bool LLFloater::applyRectControl()  { +	bool saved_rect = false; +  	// If we have a saved rect, use it  	if (mRectControl.size() > 1)  	{  		const LLRect& rect = getControlGroup()->getRect(mRectControl); -		if (rect.notEmpty()) +		saved_rect = rect.notEmpty(); +		if (saved_rect)  		{  			setOrigin(rect.mLeft, rect.mBottom); +  			if (mResizable)  			{  				reshape(llmax(mMinWidth, rect.getWidth()), llmax(mMinHeight, rect.getHeight()));  			}  		}  	} + +	return saved_rect;  } -void LLFloater::applyDockState() +bool LLFloater::applyDockState()  { +	bool docked = false; +  	if (mDocStateControl.size() > 1)  	{ -		bool dockState = getControlGroup()->getBOOL(mDocStateControl); -		setDocked(dockState); +		docked = getControlGroup()->getBOOL(mDocStateControl); +		setDocked(docked);  	} + +	return docked;  } -void LLFloater::applyPositioning() +void LLFloater::applyPositioning(LLFloater* other)  {  	// Otherwise position according to the positioning code  	switch (mOpenPositioning) @@ -885,28 +906,33 @@ void LLFloater::applyPositioning()  	case LLFloaterEnums::OPEN_POSITIONING_SPECIFIED:  		{  			// Translate relative to snap rect -			LLRect r = getRect(); -			r.mBottom = getSnapRect().getHeight() - r.getHeight() - r.mBottom; -			setOrigin(r.mLeft, r.mBottom); -			translateIntoRect(getSnapRect(), FALSE); +			setOrigin(mSpecifiedLeft, mSpecifiedBottom); +			const LLRect& snap_rect = gFloaterView->getSnapRect(); +			translate(snap_rect.mLeft, snap_rect.mBottom); +			translateIntoRect(snap_rect, FALSE);  		}  		break;  	case LLFloaterEnums::OPEN_POSITIONING_CASCADING: +		if (other != NULL)  		{ -			static const U32 CASCADING_FLOATER_HOFFSET = 25; -			static const U32 CASCADING_FLOATER_VOFFSET = 25; -			static const S32 CASCADING_FLOATER_LIMIT = 15; -			static S32 cascading_floater_count = 1;  -			const S32 top = CASCADING_FLOATER_VOFFSET * cascading_floater_count; -			const S32 left = CASCADING_FLOATER_HOFFSET * cascading_floater_count; -			setOrigin(left, top); -			translateIntoRect(getSnapRect(), FALSE); +			stackWith(*other); +		} +		else +		{ +			static const U32 CASCADING_FLOATER_HOFFSET = 0; +			static const U32 CASCADING_FLOATER_VOFFSET = 0; +			 +			const LLRect& snap_rect = gFloaterView->getSnapRect(); -			if (++cascading_floater_count > CASCADING_FLOATER_LIMIT) -			{ -				cascading_floater_count = 1; -			} +			const S32 horizontal_offset = CASCADING_FLOATER_HOFFSET; +			const S32 vertical_offset = snap_rect.getHeight() - CASCADING_FLOATER_VOFFSET; + +			S32 rect_height = getRect().getHeight(); +			setOrigin(horizontal_offset, vertical_offset - rect_height); + +			translate(snap_rect.mLeft, snap_rect.mBottom); +			translateIntoRect(snap_rect, FALSE);  		}  		break; @@ -2952,9 +2978,11 @@ void LLFloater::initFromParams(const LLFloater::Params& p)  	mHeaderHeight = p.header_height;  	mLegacyHeaderHeight = p.legacy_header_height;  	mSingleInstance = p.single_instance; +  	mOpenPositioning = p.open_positioning; +	mSpecifiedLeft = p.specified_left; +	mSpecifiedBottom = p.specified_bottom; -	/*  	if (p.save_rect && mRectControl.empty())  	{  		mRectControl = "t"; // flag to build mRectControl name once mInstanceName is set @@ -2962,8 +2990,7 @@ void LLFloater::initFromParams(const LLFloater::Params& p)  	if (p.save_visibility)  	{  		mVisibilityControl = "t"; // flag to build mVisibilityControl name once mInstanceName is set -	}*/ - +	}  	if(p.save_dock_state)  	{  		mDocStateControl = "t"; // flag to build mDocStateControl name once mInstanceName is set @@ -3114,7 +3141,6 @@ bool LLFloater::initFloaterXML(LLXMLNodePtr node, LLView *parent, const std::str  		llerrs << "Failed to construct floater " << getName() << llendl;  	} -	applyPositioning();  	applyRectControl(); // If we have a saved rect control, apply it  	gFloaterView->adjustToFitScreen(this, FALSE); // Floaters loaded from XML should all fit on screen	 diff --git a/indra/llui/llfloater.h b/indra/llui/llfloater.h index 5e3d3aefc9..7cfec09e5f 100644 --- a/indra/llui/llfloater.h +++ b/indra/llui/llfloater.h @@ -131,6 +131,9 @@ public:  								can_dock;  		Optional<LLFloaterEnums::EOpenPositioning>	open_positioning; +		Optional<S32>								specified_left; +		Optional<S32>								specified_bottom; +  		Optional<S32>			header_height,  								legacy_header_height; // HACK see initFromXML() @@ -212,8 +215,8 @@ public:  	void			addDependentFloater(LLFloater* dependent, BOOL reposition = TRUE);  	void			addDependentFloater(LLHandle<LLFloater> dependent_handle, BOOL reposition = TRUE);  	LLFloater*		getDependee() { return (LLFloater*)mDependeeHandle.get(); } -	void			removeDependentFloater(LLFloater* dependent); -	BOOL			isMinimized() const							{ return mMinimized; } +	void		removeDependentFloater(LLFloater* dependent); +	BOOL			isMinimized() const				{ return mMinimized; }  	void			setVisibleWhenMinimized(bool visible);  	bool			getVisibleWhenMinimized() const				{ return mVisibleWhenMinimized;}  	/// isShown() differs from getVisible() in that isShown() also considers @@ -294,8 +297,6 @@ public:  	virtual void    setTornOff(bool torn_off) { mTornOff = torn_off; } -	void			stackWith(LLFloater& other); -  	// Return a closeable floater, if any, given the current focus.  	static LLFloater* getClosableFloaterFromFocus();  @@ -320,12 +321,16 @@ public:  	void			updateTransparency(ETypeTransparency transparency_type);  	void			enableResizeCtrls(bool enable, bool width = true, bool height = true); + +	bool			isPositioning(LLFloaterEnums::EOpenPositioning p) const { return (p == mOpenPositioning); }  protected: -	virtual void    applySavedVariables(); +	void			applyControlsAndPosition(LLFloater* other); + +	void			stackWith(LLFloater& other); -	virtual void	applyRectControl(); -	void			applyDockState(); -	void			applyPositioning(); +	virtual bool	applyRectControl(); +	bool			applyDockState(); +	void			applyPositioning(LLFloater* other);  	void			storeRectControl();  	void			storeVisibilityControl();  	void			storeDockStateControl(); @@ -415,6 +420,8 @@ private:  	BOOL			mResizable;  	LLFloaterEnums::EOpenPositioning	mOpenPositioning; +	S32									mSpecifiedLeft; +	S32									mSpecifiedBottom;  	S32				mMinWidth;  	S32				mMinHeight; diff --git a/indra/llui/llfloaterreg.cpp b/indra/llui/llfloaterreg.cpp index 058223abbd..a148f5a32e 100644 --- a/indra/llui/llfloaterreg.cpp +++ b/indra/llui/llfloaterreg.cpp @@ -59,19 +59,57 @@ void LLFloaterReg::add(const std::string& name, const std::string& filename, con  //static  LLFloater* LLFloaterReg::getLastFloaterInGroup(const std::string& name)  { -	LLRect rect;  	const std::string& groupname = sGroupMap[name];  	if (!groupname.empty())  	{  		instance_list_t& list = sInstanceMap[groupname];  		if (!list.empty())  		{ -			return list.back(); +			for (instance_list_t::reverse_iterator iter = list.rbegin(); iter != list.rend(); ++iter) +			{ +				LLFloater* inst = *iter; + +				if (inst->getVisible() && !inst->isMinimized()) +				{ +					return inst; +				} +			}  		}  	}  	return NULL;  } +LLFloater* LLFloaterReg::getLastFloaterCascading() +{ +	LLRect candidate_rect; +	candidate_rect.mTop = 100000; +	LLFloater* candidate_floater = NULL; + +	std::map<std::string,std::string>::const_iterator it = sGroupMap.begin(), it_end = sGroupMap.end(); +	for( ; it != it_end; ++it) +	{ +		const std::string& group_name = it->second; + +		instance_list_t& instances = sInstanceMap[group_name]; + +		for (instance_list_t::const_iterator iter = instances.begin(); iter != instances.end(); ++iter) +		{ +			LLFloater* inst = *iter; + +			if (inst->getVisible() && inst->isPositioning(LLFloaterEnums::OPEN_POSITIONING_CASCADING)) +			{ +				if (candidate_rect.mTop > inst->getRect().mTop) +				{ +					candidate_floater = inst; +					candidate_rect = inst->getRect(); +				} +			} +		} +	} + +	return candidate_floater; +} +  //static  LLFloater* LLFloaterReg::findInstance(const std::string& name, const LLSD& key)  { @@ -127,9 +165,10 @@ LLFloater* LLFloaterReg::getInstance(const std::string& name, const LLSD& key)  					res->mKey = key;  				}  				res->setInstanceName(name); -				res->applySavedVariables(); // Can't apply rect and dock state until setting instance name -				// apply list.size() and possibly stackWith(getLastFloaterInGroup(groupname)) +				LLFloater *last_floater = (list.empty() ? NULL : list.back()); +				res->applyControlsAndPosition(last_floater); +  				gFloaterView->adjustToFitScreen(res, false);  				list.push_back(res); @@ -533,3 +572,29 @@ bool LLFloaterReg::floaterInstanceMinimized(const LLSD& sdname)  	LLFloater* instance = findInstance(name, key);   	return LLFloater::isShown(instance);  } + +// static +U32 LLFloaterReg::getVisibleFloaterInstanceCount() +{ +	U32 count = 0; + +	std::map<std::string,std::string>::const_iterator it = sGroupMap.begin(), it_end = sGroupMap.end(); +	for( ; it != it_end; ++it) +	{ +		const std::string& group_name = it->second; + +		instance_list_t& instances = sInstanceMap[group_name]; + +		for (instance_list_t::const_iterator iter = instances.begin(); iter != instances.end(); ++iter) +		{ +			LLFloater* inst = *iter; + +			if (inst->getVisible() && !inst->isMinimized()) +			{ +				count++; +			} +		} +	} + +	return count; +} diff --git a/indra/llui/llfloaterreg.h b/indra/llui/llfloaterreg.h index 07ae45cc4c..817fe2e8c6 100644 --- a/indra/llui/llfloaterreg.h +++ b/indra/llui/llfloaterreg.h @@ -87,6 +87,7 @@ public:  	// Helpers  	static LLFloater* getLastFloaterInGroup(const std::string& name); +	static LLFloater* getLastFloaterCascading();  	// Find / get (create) / remove / destroy  	static LLFloater* findInstance(const std::string& name, const LLSD& key = LLSD()); @@ -153,6 +154,7 @@ public:  	static void blockShowFloaters(bool value) { sBlockShowFloaters = value;} +	static U32 getVisibleFloaterInstanceCount();  };  #endif diff --git a/indra/llui/lltoolbar.cpp b/indra/llui/lltoolbar.cpp index fc5ec5ea26..e67e18872c 100644 --- a/indra/llui/lltoolbar.cpp +++ b/indra/llui/lltoolbar.cpp @@ -99,6 +99,7 @@ LLToolBar::LLToolBar(const LLToolBar::Params& p)  	mSideType(p.side),  	mWrap(p.wrap),  	mNeedsLayout(false), +	mModified(false),  	mButtonPanel(NULL),  	mCenteringStack(NULL),  	mPadLeft(p.pad_left), @@ -395,12 +396,14 @@ void LLToolBar::resizeButtonsInRow(std::vector<LLToolBarButton*>& buttons_in_row  // Returns the position of the coordinates as a rank in the button list.   // The rank is the position a tool dropped in (x,y) would assume in the button list. -// The value returned is between 0 and mButtons.size(), 0 being the first element to the left +// The returned value is between 0 and mButtons.size(), 0 being the first element to the left  // (or top) and mButtons.size() the last one to the right (or bottom). -int LLToolBar::getRankFromPosition(S32& x, S32& y) +// Various drag data are stored in the toolbar object though are not exposed outside (and shouldn't). +int LLToolBar::getRankFromPosition(S32 x, S32 y)  {  	int rank = 0; +	// Convert the toolbar coord into button panel coords  	LLLayoutStack::ELayoutOrientation orientation = getOrientation(mSideType);  	S32 button_panel_x = 0;  	S32 button_panel_y = 0; @@ -408,32 +411,72 @@ int LLToolBar::getRankFromPosition(S32& x, S32& y)  	S32 dx = x - button_panel_x;  	S32 dy = y - button_panel_y; -	// Simply compare the passed coord with the buttons outbound box +	// Simply compare the passed coord with the buttons outbound box + padding  	std::list<LLToolBarButton*>::iterator it_button = mButtons.begin();  	std::list<LLToolBarButton*>::iterator end_button = mButtons.end();  	LLRect button_rect;  	while (it_button != end_button)  	{  		button_rect = (*it_button)->getRect(); -		if (((orientation == LLLayoutStack::HORIZONTAL) && (button_rect.mRight  > button_panel_x)) || -			((orientation == LLLayoutStack::VERTICAL)   && (button_rect.mBottom < button_panel_y))    ) +		S32 point_x, point_y; +		if (orientation == LLLayoutStack::HORIZONTAL) +		{ +			// Horizontal +			point_x = (button_rect.mRight + button_rect.mLeft) / 2; +			point_y = button_rect.mBottom - mPadBottom; +		} +		else +		{ +			// Vertical +			point_x = button_rect.mRight + mPadRight; +			point_y = (button_rect.mTop + button_rect.mBottom) / 2; +		} + +		if ((button_panel_x < point_x) && (button_panel_y > point_y))  		{  			break;  		} +		mDragCommand = (*it_button)->mId;  		rank++;  		++it_button;  	} -	if (it_button != end_button) +	 +	// Update the passed coordinates to the hit button relevant corner  +	// (different depending on toolbar orientation) +	if (rank < mButtons.size()) +	{ +		mDragx = button_rect.mLeft - mPadLeft; +		mDragy = button_rect.mTop + mPadTop; +	} +	else +	{ +		// We hit passed the end of the list so put the insertion point at the end +		if (orientation == LLLayoutStack::HORIZONTAL)  	{ -		x = button_rect.mLeft + dx; -		y = button_rect.mTop + dy; +			mDragx = button_rect.mRight + mPadRight; +			mDragy = button_rect.mTop + mPadTop;  	}  	else  	{ -		x = button_rect.mRight + dx; -		y = button_rect.mBottom + dy; +			mDragx = button_rect.mLeft - mPadLeft; +			mDragy = button_rect.mBottom - mPadBottom; +		}  	} +	// Update the "girth" of the caret, i.e. the width or height (depending of orientation) +	if (orientation == LLLayoutStack::HORIZONTAL) +	{ +		mDragGirth = button_rect.getHeight() + mPadBottom + mPadTop; +	} +	else +	{ +		mDragGirth = button_rect.getWidth() + mPadLeft + mPadRight; +	} + +	// The delta account for the coord model change (i.e. convert back to toolbar coord) +	mDragx += dx; +	mDragy += dy; +	  	return rank;  } @@ -628,26 +671,18 @@ void LLToolBar::draw()  	{  		LLRect caret_rect = caret->getRect();  		LLRect toolbar_rect = getRect(); -		if (mSideType == SIDE_BOTTOM) +		if (getOrientation(mSideType) == LLLayoutStack::HORIZONTAL)  		{  			caret->setRect(LLRect(mDragx-caret_rect.getWidth()/2+1, -								  toolbar_rect.getHeight()+3, +								  mDragy,  								  mDragx+caret_rect.getWidth()/2+1, -								  toolbar_rect.getHeight()-caret_rect.getHeight()+3)); -		} -		else if (mSideType == SIDE_LEFT) -		{ -			 -			caret->setRect(LLRect(toolbar_rect.getWidth()-caret_rect.getWidth()+3, -								  mDragy+caret_rect.getHeight()/2, -								  toolbar_rect.getWidth()+3, -								  mDragy-caret_rect.getHeight()/2)); +								  mDragy-mDragGirth));  		}  		else  		{ -			caret->setRect(LLRect(-3, +			caret->setRect(LLRect(mDragx,  								  mDragy+caret_rect.getHeight()/2, -								  caret_rect.getWidth()-3, +								  mDragx+mDragGirth,  								  mDragy-caret_rect.getHeight()/2));  		}  		caret->setVisible(TRUE); @@ -788,16 +823,20 @@ BOOL LLToolBar::handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop,  		LLAssetType::EType type = inv_item->getType();  		if (type == LLAssetType::AT_WIDGET)  		{ -			mDragx = x; -			mDragy = y; -			mDragRank = getRankFromPosition(mDragx, mDragy); -			mDragAndDropTarget = true; +			mDragRank = getRankFromPosition(x, y); +			// Don't DaD if we're dragging a command on itself +			mDragAndDropTarget = (mDragCommand.uuid() != inv_item->getUUID()); +			//llinfos << "Merov debug : DaD, rank = " << mDragRank << ", hit uuid = " << mDragCommand.uuid() << ", dragged uui = " << inv_item->getUUID() << llendl;   			/* Do the following if you want to animate the button itself  			LLCommandId dragged_command(inv_item->getUUID());  			removeCommand(dragged_command);  			addCommand(dragged_command,rank);  			*/  		} +		else +		{ +			handled = FALSE; +		}  	}  	return handled; diff --git a/indra/llui/lltoolbar.h b/indra/llui/lltoolbar.h index 72fc5630bc..8d38bc0234 100644 --- a/indra/llui/lltoolbar.h +++ b/indra/llui/lltoolbar.h @@ -160,7 +160,7 @@ public:  	// virtuals  	void draw();  	void reshape(S32 width, S32 height, BOOL called_from_parent = TRUE); -	int  getRankFromPosition(S32& x, S32& y);	 +	int  getRankFromPosition(S32 x, S32 y);	  	BOOL handleRightMouseDown(S32 x, S32 y, MASK mask);  	virtual BOOL handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop,  								   EDragAndDropType cargo_type, @@ -182,7 +182,8 @@ public:  	LLToolBarButton* createButton(const LLCommandId& id); -	bool hasButtons() { return !mButtons.empty(); } +	bool hasButtons() const { return !mButtons.empty(); } +	bool isModified() const { return mModified; }  protected:  	friend class LLUICtrlFactory; @@ -196,7 +197,9 @@ protected:  	bool							mDragAndDropTarget;  	int								mDragRank;  	S32								mDragx, -									mDragy; +									mDragy, +									mDragGirth; +	LLCommandId						mDragCommand;  public:  	// Methods used in loading and saving toolbar settings @@ -229,6 +232,7 @@ private:  	bool							mWrap;  	bool							mNeedsLayout; +	bool							mModified;  	S32								mPadLeft,  									mPadRight,  									mPadTop, diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 3298d6c627..4b847dfbf7 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -619,7 +619,7 @@        <key>Type</key>        <string>String</string>        <key>Value</key> -      <string>http://common-flash-secondlife-com.s3.amazonaws.com/viewer/v2.6/agni/avatars.html</string> +      <string>http://drofnas.components.pdp48.lindenlab.com/avatars.html</string>      </map>      <key>AvatarBakedTextureUploadTimeout</key>      <map> @@ -2717,7 +2717,7 @@        <key>Type</key>        <string>String</string>        <key>Value</key> -      <string>http://common-flash-secondlife-com.s3.amazonaws.com/viewer/v2.6/agni/guide.html</string> +      <string>http://drofnas.components.pdp48.lindenlab.com/guide.html</string>      </map>    <key>DisableCameraConstraints</key>      <map> diff --git a/indra/newview/llnearbychatbar.cpp b/indra/newview/llnearbychatbar.cpp index cd84275ef0..3e4228cfb6 100644 --- a/indra/newview/llnearbychatbar.cpp +++ b/indra/newview/llnearbychatbar.cpp @@ -109,15 +109,18 @@ BOOL LLNearbyChatBar::postBuild()  	return TRUE;  } -void LLNearbyChatBar::applyRectControl() +bool LLNearbyChatBar::applyRectControl()  { -	LLFloater::applyRectControl(); -	if (getRect().getHeight() >  getMinHeight()) +	bool rect_controlled = LLFloater::applyRectControl(); +	 +	if (getRect().getHeight() > getMinHeight())  	{  		getChildView("nearby_chat")->setVisible(true);  		mExpandedHeight = getRect().getHeight();  		enableResizeCtrls(true);  	} + +	return rect_controlled;  }  void LLNearbyChatBar::onChatFontChange(LLFontGL* fontp) diff --git a/indra/newview/llnearbychatbar.h b/indra/newview/llnearbychatbar.h index 5a7edac1bb..bc00c1b9fc 100644 --- a/indra/newview/llnearbychatbar.h +++ b/indra/newview/llnearbychatbar.h @@ -71,7 +71,7 @@ protected:  	void onChatBoxCommit();  	void onChatFontChange(LLFontGL* fontp); -	/* virtual */ void applyRectControl(); +	/* virtual */ bool applyRectControl();  	void onToggleNearbyChatPanel(); diff --git a/indra/newview/lltoolbarview.cpp b/indra/newview/lltoolbarview.cpp index 133835aafc..b43c4e80fa 100644 --- a/indra/newview/lltoolbarview.cpp +++ b/indra/newview/lltoolbarview.cpp @@ -394,11 +394,13 @@ BOOL LLToolBarView::handleDragTool( S32 x, S32 y, const LLUUID& uuid, LLAssetTyp  BOOL LLToolBarView::handleDropTool( void* cargo_data, S32 x, S32 y, LLToolBar* toolbar)  { +	BOOL handled = FALSE;  	LLInventoryItem* inv_item = (LLInventoryItem*)cargo_data;  	LLAssetType::EType type = inv_item->getType();  	if (type == LLAssetType::AT_WIDGET)  	{ +		handled = TRUE;  		// Get the command from its uuid  		LLCommandManager& mgr = LLCommandManager::instance();  		LLCommandId command_id(inv_item->getUUID()); @@ -443,7 +445,7 @@ BOOL LLToolBarView::handleDropTool( void* cargo_data, S32 x, S32 y, LLToolBar* t  		}  	}  	stopDragTool(); -	return TRUE; +	return handled;  }  void LLToolBarView::stopDragTool() @@ -471,3 +473,14 @@ void LLToolBarView::setToolBarsVisible(bool visible)  	mToolbarLeft->getParent()->setVisible(visible);  	mToolbarRight->getParent()->setVisible(visible);  } + +bool LLToolBarView::isModified() const +{ +	bool modified = false; + +	modified |= mToolbarBottom->isModified(); +	modified |= mToolbarLeft->isModified(); +	modified |= mToolbarRight->isModified(); + +	return modified; +} diff --git a/indra/newview/lltoolbarview.h b/indra/newview/lltoolbarview.h index 01ff137c15..8b3af43875 100644 --- a/indra/newview/lltoolbarview.h +++ b/indra/newview/lltoolbarview.h @@ -81,6 +81,8 @@ public:  	static BOOL handleDropTool(	void* cargo_data, S32 x, S32 y, LLToolBar* toolbar);  	static void stopDragTool();  	void onEndDrag(); + +	bool isModified() const;  protected:  	friend class LLUICtrlFactory; diff --git a/indra/newview/skins/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml index 4f34352516..25f1903131 100644 --- a/indra/newview/skins/default/textures/textures.xml +++ b/indra/newview/skins/default/textures/textures.xml @@ -149,9 +149,9 @@ with the same filename but different name    <texture name="Command_Speak_Icon"        file_name="toolbar_icons/speak.png"        preload="true" />    <texture name="Command_View_Icon"         file_name="toolbar_icons/view.png"         preload="true" />    <texture name="Command_Voice_Icon"        file_name="toolbar_icons/nearbyvoice.png"  preload="true" /> -  <texture name="Caret_Bottom_Icon"         file_name="toolbar_icons/caret_bottom.png" preload="true" /> -  <texture name="Caret_Right_Icon"          file_name="toolbar_icons/caret_right.png"  preload="true" /> -  <texture name="Caret_Left_Icon"           file_name="toolbar_icons/caret_left.png"   preload="true" /> +  <texture name="Caret_Bottom_Icon"         file_name="toolbar_icons/caret_bottom.png" preload="true" scale.left="1" scale.top="23" scale.right="15" scale.bottom="1" /> +  <texture name="Caret_Right_Icon"          file_name="toolbar_icons/caret_right.png"  preload="true" scale.left="5" scale.top="15" scale.right="28" scale.bottom="1" /> +  <texture name="Caret_Left_Icon"           file_name="toolbar_icons/caret_left.png"   preload="true" scale.left="1" scale.top="15" scale.right="23" scale.bottom="1" />    <texture name="ComboButton_Disabled" file_name="widgets/ComboButton_Disabled.png" preload="true" scale.left="2" scale.top="19" scale.right="18" scale.bottom="2" />    <texture name="ComboButton_Selected" file_name="widgets/ComboButton_Selected.png" preload="true" scale.left="2" scale.top="19" scale.right="18" scale.bottom="2" /> diff --git a/indra/newview/skins/default/textures/toolbar_icons/caret_bottom.png b/indra/newview/skins/default/textures/toolbar_icons/caret_bottom.png Binary files differindex d506cda5c9..5f6a01eaa1 100644 --- a/indra/newview/skins/default/textures/toolbar_icons/caret_bottom.png +++ b/indra/newview/skins/default/textures/toolbar_icons/caret_bottom.png diff --git a/indra/newview/skins/default/textures/toolbar_icons/caret_left.png b/indra/newview/skins/default/textures/toolbar_icons/caret_left.png Binary files differindex b1284aaf79..0b8090314c 100644 --- a/indra/newview/skins/default/textures/toolbar_icons/caret_left.png +++ b/indra/newview/skins/default/textures/toolbar_icons/caret_left.png diff --git a/indra/newview/skins/default/textures/toolbar_icons/caret_right.png b/indra/newview/skins/default/textures/toolbar_icons/caret_right.png Binary files differindex bf6a4ed66c..044751560f 100644 --- a/indra/newview/skins/default/textures/toolbar_icons/caret_right.png +++ b/indra/newview/skins/default/textures/toolbar_icons/caret_right.png diff --git a/indra/newview/skins/default/xui/en/floater_avatar.xml b/indra/newview/skins/default/xui/en/floater_avatar.xml index 6e5c4ada48..3c7de6f334 100644 --- a/indra/newview/skins/default/xui/en/floater_avatar.xml +++ b/indra/newview/skins/default/xui/en/floater_avatar.xml @@ -5,7 +5,7 @@   can_close="true"   can_resize="true"   min_height="230" - min_width="445" + min_width="450"   height="230"   layout="topleft"   name="Avatar" diff --git a/indra/newview/skins/default/xui/en/floater_camera.xml b/indra/newview/skins/default/xui/en/floater_camera.xml index 7f3abbb481..20d0fa1c91 100644 --- a/indra/newview/skins/default/xui/en/floater_camera.xml +++ b/indra/newview/skins/default/xui/en/floater_camera.xml @@ -1,14 +1,14 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <floater   open_positioning="specified" + specified_left="683" + specified_bottom="0"   legacy_header_height="18"   can_minimize="true"   can_close="true"   follows="bottom"   height="164"   layout="topleft" - left="683" - bottom="0"   name="camera_floater"   help_topic="camera_floater"   save_visibility="true" diff --git a/indra/newview/skins/default/xui/en/floater_chat_bar.xml b/indra/newview/skins/default/xui/en/floater_chat_bar.xml index 924e4bc11e..9229741801 100644 --- a/indra/newview/skins/default/xui/en/floater_chat_bar.xml +++ b/indra/newview/skins/default/xui/en/floater_chat_bar.xml @@ -1,9 +1,9 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <floater   open_positioning="specified" + specified_left="150" + specified_bottom="0"   height="60" - left="150" - bottom="0"   layout="topleft"   legacy_header_height="25"   single_instance="true" diff --git a/indra/newview/skins/default/xui/en/floater_destinations.xml b/indra/newview/skins/default/xui/en/floater_destinations.xml index 2b48a9f6d6..e63dc02a57 100644 --- a/indra/newview/skins/default/xui/en/floater_destinations.xml +++ b/indra/newview/skins/default/xui/en/floater_destinations.xml @@ -7,7 +7,7 @@   user_resize="true"   can_resize="true"   min_height="230" - min_width="525" + min_width="350"   height="230"   layout="topleft"   name="Destinations" @@ -22,6 +22,5 @@        width="840"        follows="all"        name="destination_guide_contents" -      start_url="http://common-flash-secondlife-com.s3.amazonaws.com/viewer/v2.6/agni/guide.html"        trusted_content="true"/>  </floater> diff --git a/indra/newview/skins/default/xui/en/floater_moveview.xml b/indra/newview/skins/default/xui/en/floater_moveview.xml index 3d23a94ec2..cbbd68beb3 100644 --- a/indra/newview/skins/default/xui/en/floater_moveview.xml +++ b/indra/newview/skins/default/xui/en/floater_moveview.xml @@ -1,14 +1,14 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <floater   open_positioning="specified" + specified_left="535" + specified_bottom="0"   legacy_header_height="18"   can_dock="false"   can_minimize="true"   can_close="true"   follows="bottom"   height="110" - left="535" - bottom="0"   layout="topleft"   name="move_floater"   help_topic="move_floater" diff --git a/indra/newview/skins/default/xui/en/panel_toolbar_view.xml b/indra/newview/skins/default/xui/en/panel_toolbar_view.xml index 9ffd62f7a9..5475fcd245 100644 --- a/indra/newview/skins/default/xui/en/panel_toolbar_view.xml +++ b/indra/newview/skins/default/xui/en/panel_toolbar_view.xml @@ -48,8 +48,8 @@                   side="left"                   button_display_mode="icons_only">  	             <icon layout="topleft" -	                   height="10" -	                   width="10" +	                   height="15" +	                   width="28"  	                   follows="left|top"  	                   top="20"  	                   left="10" @@ -99,8 +99,8 @@            side="right"            button_display_mode="icons_only">  	      <icon layout="topleft" -	            height="10" -	            width="10" +	            height="15" +	            width="28"  	            follows="left|top"  	            top="20"  	            left="10" @@ -130,8 +130,8 @@               button_display_mode="icons_with_text"               visible="true">               <icon layout="topleft" -	            height="10" -	            width="10" +	            height="28" +	            width="15"  	            follows="left|top"  	            top="20"  	            left="10" diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml index f19cfa19f2..04fc5c868c 100644 --- a/indra/newview/skins/default/xui/en/strings.xml +++ b/indra/newview/skins/default/xui/en/strings.xml @@ -3695,7 +3695,7 @@ Try enclosing path to the editor with double quotes.    <string name="Command_MiniMap_Tooltip">Show nearby people</string>    <string name="Command_Move_Tooltip">Moving your avatar</string>    <string name="Command_People_Tooltip">Friends, groups, and nearby people</string> -  <string name="Command_Picks_Tooltip">Favorite places</string> +  <string name="Command_Picks_Tooltip">Places to show as favorites in your profile</string>    <string name="Command_Places_Tooltip">Places you've saved</string>    <string name="Command_Preferences_Tooltip">Preferences</string>    <string name="Command_Profile_Tooltip">Edit or view your profile</string>  | 
