diff options
| author | Vadim Savchuk <vsavchuk@productengine.com> | 2009-12-18 13:52:05 +0200 | 
|---|---|---|
| committer | Vadim Savchuk <vsavchuk@productengine.com> | 2009-12-18 13:52:05 +0200 | 
| commit | 2a49de3befff5e2b48a273f70a21f525b50a189c (patch) | |
| tree | d96f3ceaa848345e1857e71a1a12cd0ba0f6c4bf | |
| parent | 688e66fe299ba4f4afe080d907a4eff9cc77f6dd (diff) | |
| parent | ad65fa11acdf7f655f32e6ca43b2f2bc997ef1e6 (diff) | |
Merge from default branch.
--HG--
branch : product-engine
50 files changed, 645 insertions, 440 deletions
diff --git a/indra/llcommon/llqueuedthread.cpp b/indra/llcommon/llqueuedthread.cpp index eacbbb3ee0..06ceeb2bc3 100644 --- a/indra/llcommon/llqueuedthread.cpp +++ b/indra/llcommon/llqueuedthread.cpp @@ -437,6 +437,7 @@ S32 LLQueuedThread::processNextRequest()  	if (req)  	{  		// process request +		U32 start_priority = req->getPriority();  		bool complete = req->processRequest();  		if (complete) @@ -457,9 +458,8 @@ S32 LLQueuedThread::processNextRequest()  			lockData();  			req->setStatus(STATUS_QUEUED);  			mRequestQueue.insert(req); -			U32 priority = req->getPriority();  			unlockData(); -			if (priority < PRIORITY_NORMAL) +			if (mThreaded && start_priority <= PRIORITY_LOW)  			{  				ms_sleep(1); // sleep the thread a little  			} diff --git a/indra/llplugin/llpluginprocessparent.cpp b/indra/llplugin/llpluginprocessparent.cpp index dab6d645dd..608e444375 100644 --- a/indra/llplugin/llpluginprocessparent.cpp +++ b/indra/llplugin/llpluginprocessparent.cpp @@ -62,6 +62,7 @@ LLPluginProcessParent::LLPluginProcessParent(LLPluginProcessParentOwner *owner)  	// initialize timer - heartbeat test (mHeartbeat.hasExpired())   	// can sometimes return true immediately otherwise and plugins   	// fail immediately because it looks like  +//	mHeartbeat.initClass();  	mHeartbeat.setTimerExpirySec(PLUGIN_LOCKED_UP_SECONDS);  } diff --git a/indra/media_plugins/webkit/media_plugin_webkit.cpp b/indra/media_plugins/webkit/media_plugin_webkit.cpp index 707edaa3d6..7be2385fd5 100644 --- a/indra/media_plugins/webkit/media_plugin_webkit.cpp +++ b/indra/media_plugins/webkit/media_plugin_webkit.cpp @@ -205,18 +205,19 @@ private:  		{  			// create single browser window  			mBrowserWindowId = LLQtWebKit::getInstance()->createBrowserWindow( mWidth, mHeight ); -  #if LL_WINDOWS  			// Enable plugins  			LLQtWebKit::getInstance()->enablePlugins(true);  #elif LL_DARWIN -			// Disable plugins +			// Enable plugins  			LLQtWebKit::getInstance()->enablePlugins(true);  #elif LL_LINUX -			// Disable plugins -			LLQtWebKit::getInstance()->enablePlugins(false); +			// Enable plugins +			LLQtWebKit::getInstance()->enablePlugins(true);  #endif -             +			// Enable cookies +			LLQtWebKit::getInstance()->enableCookies( true ); +  			// tell LLQtWebKit about the size of the browser window  			LLQtWebKit::getInstance()->setSize( mBrowserWindowId, mWidth, mHeight ); diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 578f8fd4f0..6fa839235a 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -5834,17 +5834,6 @@        <key>Value</key>        <integer>35</integer>      </map> -    <key>RenderAvatarInvisible</key> -    <map> -      <key>Comment</key> -      <string>Set your avatar as Invisible</string> -      <key>Persist</key> -      <integer>0</integer> -      <key>Type</key> -      <string>Boolean</string> -      <key>Value</key> -      <integer>0</integer> -    </map>      <key>RenderAvatarVP</key>      <map>        <key>Comment</key> @@ -7792,6 +7781,17 @@        <key>Value</key>        <integer>0</integer>      </map> +    <key>ShowDebugAppearanceEditor</key> +    <map> +      <key>Comment</key> +      <string>Show debugging appearance editor</string> +      <key>Persist</key> +      <integer>1</integer> +      <key>Type</key> +      <string>Boolean</string> +      <key>Value</key> +      <integer>0</integer> +    </map>      <key>ShowEmptyFoldersWhenSearching</key>      <map>        <key>Comment</key> @@ -7890,7 +7890,18 @@        <string>Boolean</string>        <key>Value</key>        <integer>1</integer>    -    </map>     +    </map> +    <key>ShowObjectRenderingCost</key>                 +    <map> +      <key>Comment</key> +      <string>Show the object rendering cost  in  build tools</string> +      <key>Persist</key> +      <integer>1</integer> +      <key>Type</key> +      <string>Boolean</string> +      <key>Value</key> +      <integer>1</integer>    +    </map>              <key>ShowNavbarFavoritesPanel</key>          <map>        <key>Comment</key> diff --git a/indra/newview/llfloatermediasettings.cpp b/indra/newview/llfloatermediasettings.cpp index 16a76723eb..5cfd56193e 100644 --- a/indra/newview/llfloatermediasettings.cpp +++ b/indra/newview/llfloatermediasettings.cpp @@ -145,18 +145,21 @@ LLFloaterMediaSettings* LLFloaterMediaSettings::getInstance()  //static   void LLFloaterMediaSettings::apply()  { -	LLSD settings; -	sInstance->mPanelMediaSettingsGeneral->preApply(); -	sInstance->mPanelMediaSettingsGeneral->getValues( settings ); -	sInstance->mPanelMediaSettingsSecurity->preApply(); -	sInstance->mPanelMediaSettingsSecurity->getValues( settings ); -	sInstance->mPanelMediaSettingsPermissions->preApply(); -	sInstance->mPanelMediaSettingsPermissions->getValues( settings ); -	LLSelectMgr::getInstance()->selectionSetMedia( LLTextureEntry::MF_HAS_MEDIA ); -	LLSelectMgr::getInstance()->selectionSetMediaData(settings); -	sInstance->mPanelMediaSettingsGeneral->postApply(); -	sInstance->mPanelMediaSettingsSecurity->postApply(); -	sInstance->mPanelMediaSettingsPermissions->postApply(); +	if (sInstance->haveValuesChanged()) +	{ +		LLSD settings; +		sInstance->mPanelMediaSettingsGeneral->preApply(); +		sInstance->mPanelMediaSettingsGeneral->getValues( settings ); +		sInstance->mPanelMediaSettingsSecurity->preApply(); +		sInstance->mPanelMediaSettingsSecurity->getValues( settings ); +		sInstance->mPanelMediaSettingsPermissions->preApply(); +		sInstance->mPanelMediaSettingsPermissions->getValues( settings ); +		LLSelectMgr::getInstance()->selectionSetMedia( LLTextureEntry::MF_HAS_MEDIA ); +		LLSelectMgr::getInstance()->selectionSetMediaData(settings); +		sInstance->mPanelMediaSettingsGeneral->postApply(); +		sInstance->mPanelMediaSettingsSecurity->postApply(); +		sInstance->mPanelMediaSettingsPermissions->postApply(); +	}  }  //////////////////////////////////////////////////////////////////////////////// @@ -249,15 +252,6 @@ void LLFloaterMediaSettings::onTabChanged(void* user_data, bool from_click)  	LLTabContainer* self = (LLTabContainer*)user_data;  	gSavedSettings.setS32("LastMediaSettingsTab", self->getCurrentPanelIndex());  } - -//////////////////////////////////////////////////////////////////////////////// -// -void LLFloaterMediaSettings::enableOkApplyBtns( bool enable ) -{ -	childSetEnabled( "OK", enable ); -	childSetEnabled( "Apply", enable ); -} -  ////////////////////////////////////////////////////////////////////////////////  //  const std::string LLFloaterMediaSettings::getHomeUrl() @@ -272,17 +266,25 @@ const std::string LLFloaterMediaSettings::getHomeUrl()  // virtual   void LLFloaterMediaSettings::draw()  { +	// Set the enabled state of the "Apply" button if values changed +	childSetEnabled( "Apply", haveValuesChanged() ); +	 +	LLFloater::draw(); +} + + +//private +bool LLFloaterMediaSettings::haveValuesChanged() const +{ +	bool values_changed = false;  	// *NOTE: The code below is very inefficient.  Better to do this  	// only when data change.  	// Every frame, check to see what the values are.  If they are not -	// the same as the default media data, enable the OK/Apply buttons +	// the same as the initial media data, enable the OK/Apply buttons  	LLSD settings;  	sInstance->mPanelMediaSettingsGeneral->getValues( settings );  	sInstance->mPanelMediaSettingsSecurity->getValues( settings ); -	sInstance->mPanelMediaSettingsPermissions->getValues( settings ); - -	bool values_changed = false; -	 +	sInstance->mPanelMediaSettingsPermissions->getValues( settings );	  	LLSD::map_const_iterator iter = settings.beginMap();  	LLSD::map_const_iterator end = settings.endMap();  	for ( ; iter != end; ++iter ) @@ -295,9 +297,6 @@ void LLFloaterMediaSettings::draw()  			break;  		}  	} -	 -	enableOkApplyBtns(values_changed); -	 -	LLFloater::draw(); +	return values_changed;  } diff --git a/indra/newview/llfloatermediasettings.h b/indra/newview/llfloatermediasettings.h index b72e3d855d..cdfd5aa8ae 100644 --- a/indra/newview/llfloatermediasettings.h +++ b/indra/newview/llfloatermediasettings.h @@ -85,7 +85,7 @@ protected:  private: -	void enableOkApplyBtns( bool enable ); +	bool haveValuesChanged() const;  	LLSD mInitialValues;  	bool mWaitingToClose; diff --git a/indra/newview/llfloateropenobject.cpp b/indra/newview/llfloateropenobject.cpp index bc89f93763..ec50ed596c 100644 --- a/indra/newview/llfloateropenobject.cpp +++ b/indra/newview/llfloateropenobject.cpp @@ -224,7 +224,6 @@ void LLFloaterOpenObject::callbackMoveInventory(S32 result, void* data)  	if (result == 0)  	{ -		LLFloaterInventory::showAgentInventory();  		LLInventoryPanel *active_panel = LLInventoryPanel::getActiveInventoryPanel();  		if (active_panel)  		{ diff --git a/indra/newview/llfloatertools.cpp b/indra/newview/llfloatertools.cpp index 7fb71d4d4f..babef5b63d 100644 --- a/indra/newview/llfloatertools.cpp +++ b/indra/newview/llfloatertools.cpp @@ -93,7 +93,7 @@  // Globals  LLFloaterTools *gFloaterTools = NULL; - +bool LLFloaterTools::sShowObjectCost = true;  const std::string PANEL_NAMES[LLFloaterTools::PANEL_COUNT] =  { @@ -286,6 +286,8 @@ BOOL	LLFloaterTools::postBuild()  	mStatusText["grab"] = getString("status_grab");  	mStatusText["place"] = getString("status_place");  	mStatusText["selectland"] = getString("status_selectland"); + +	sShowObjectCost = gSavedSettings.getBOOL("ShowObjectRenderingCost");  	return TRUE;  } @@ -425,16 +427,19 @@ void LLFloaterTools::refresh()  	childSetTextArg("prim_count", "[COUNT]", prim_count_string);  	// calculate selection rendering cost -	std::string prim_cost_string; -	LLResMgr::getInstance()->getIntegerString(prim_cost_string, calcRenderCost()); -	childSetTextArg("RenderingCost", "[COUNT]", prim_cost_string); +	if (sShowObjectCost) +	{ +		std::string prim_cost_string; +		LLResMgr::getInstance()->getIntegerString(prim_cost_string, calcRenderCost()); +		childSetTextArg("RenderingCost", "[COUNT]", prim_cost_string); +	}  	// disable the object and prim counts if nothing selected  	bool have_selection = ! LLSelectMgr::getInstance()->getSelection()->isEmpty();  	childSetEnabled("obj_count", have_selection);  	childSetEnabled("prim_count", have_selection); -	childSetEnabled("RenderingCost", have_selection); +	childSetEnabled("RenderingCost", have_selection && sShowObjectCost);  	// Refresh child tabs  	mPanelPermissions->refresh(); @@ -566,7 +571,7 @@ void LLFloaterTools::updatePopup(LLCoordGL center, MASK mask)  	mBtnEdit	->setToggleState( edit_visible );  	mRadioGroupEdit->setVisible( edit_visible );  	bool linked_parts = gSavedSettings.getBOOL("EditLinkedParts"); -	childSetVisible("RenderingCost", !linked_parts && (edit_visible || focus_visible || move_visible)); +	childSetVisible("RenderingCost", !linked_parts && (edit_visible || focus_visible || move_visible) && sShowObjectCost);  	if (mCheckSelectIndividual)  	{ diff --git a/indra/newview/llfloatertools.h b/indra/newview/llfloatertools.h index 05a88a31d3..85aeb9f523 100644 --- a/indra/newview/llfloatertools.h +++ b/indra/newview/llfloatertools.h @@ -196,6 +196,9 @@ private:  protected:  	LLSD				mMediaSettings; + +public: +	static bool		sShowObjectCost;  }; diff --git a/indra/newview/llfloaterwhitelistentry.cpp b/indra/newview/llfloaterwhitelistentry.cpp index 04dbd38153..705c8afd00 100644 --- a/indra/newview/llfloaterwhitelistentry.cpp +++ b/indra/newview/llfloaterwhitelistentry.cpp @@ -82,6 +82,7 @@ void LLFloaterWhiteListEntry::onBtnOK( void* userdata )  		std::string white_list_item = self->mWhiteListEdit->getText();  		panel->addWhiteListEntry( white_list_item ); +		panel->updateWhitelistEnableStatus();  	};  	self->closeFloater();	 diff --git a/indra/newview/llfolderview.cpp b/indra/newview/llfolderview.cpp index adf7f08702..98fae1c2a0 100644 --- a/indra/newview/llfolderview.cpp +++ b/indra/newview/llfolderview.cpp @@ -330,6 +330,7 @@ BOOL LLFolderView::addFolder( LLFolderViewFolder* folder)  	else  	{  		mFolders.insert(mFolders.begin(), folder); +		folder->setShowLoadStatus(true);  	}  	folder->setOrigin(0, 0);  	folder->reshape(getRect().getWidth(), 0); @@ -748,6 +749,12 @@ void LLFolderView::sanitizeSelection()  				}  			}  		} + +		// Don't allow invisible items (such as root folders) to be selected. +		if (item->getDontShowInHierarchy()) +		{ +			items_to_remove.push_back(item); +		}  	}  	std::vector<LLFolderViewItem*>::iterator item_it; diff --git a/indra/newview/llfolderviewitem.cpp b/indra/newview/llfolderviewitem.cpp index 135821f662..9ae0c9100a 100644 --- a/indra/newview/llfolderviewitem.cpp +++ b/indra/newview/llfolderviewitem.cpp @@ -136,7 +136,8 @@ LLFolderViewItem::LLFolderViewItem(LLFolderViewItem::Params p)  	mListener(p.listener),  	mArrowImage(p.folder_arrow_image),  	mBoxImage(p.selection_image), -	mDontShowInHierarchy(false) +	mDontShowInHierarchy(false), +	mShowLoadStatus(false)  {  	refresh();  } @@ -198,7 +199,9 @@ LLFolderViewItem* LLFolderViewItem::getPreviousOpenNode(BOOL include_children)  	}  	LLFolderViewItem* itemp = mParentFolder->getPreviousFromChild( this, include_children ); -	while(itemp && !itemp->getVisible()) + +	// Skip over items that are invisible or are hidden from the UI. +	while(itemp && (!itemp->getVisible() || itemp->getDontShowInHierarchy()))  	{  		LLFolderViewItem* next_itemp = itemp->mParentFolder->getPreviousFromChild( itemp, include_children );  		if (itemp == next_itemp)  @@ -966,10 +969,11 @@ void LLFolderViewItem::draw()  		} -		if ( mIsLoading  -			&& mTimeSinceRequestStart.getElapsedTimeF32() >= gSavedSettings.getF32("FolderLoadingMessageWaitTime") ) +		if ( (mIsLoading && mTimeSinceRequestStart.getElapsedTimeF32() >= gSavedSettings.getF32("FolderLoadingMessageWaitTime")) +			|| (LLInventoryModel::backgroundFetchActive() && mShowLoadStatus) )  		{ -			font->renderUTF8(LLTrans::getString("LoadingData"), 0, text_left, y, sSearchStatusColor, +			std::string load_string = LLTrans::getString("LoadingData") + " "; +			font->renderUTF8(load_string, 0, text_left, y, sSearchStatusColor,  					  LLFontGL::LEFT, LLFontGL::BOTTOM, LLFontGL::NORMAL, LLFontGL::NO_SHADOW, S32_MAX, S32_MAX, &right_x, FALSE);  			text_left = right_x;  		} diff --git a/indra/newview/llfolderviewitem.h b/indra/newview/llfolderviewitem.h index 620aa070b9..a43096dcb2 100644 --- a/indra/newview/llfolderviewitem.h +++ b/indra/newview/llfolderviewitem.h @@ -163,6 +163,7 @@ protected:  	BOOL                        mIsLoading;  	LLTimer                     mTimeSinceRequestStart;  	bool						mDontShowInHierarchy; +	bool						mShowLoadStatus;  	// helper function to change the selection from the root.  	void changeSelectionFromRoot(LLFolderViewItem* selection, BOOL selected); @@ -254,6 +255,8 @@ public:  	BOOL getIsCurSelection() { return mIsCurSelection; }  	BOOL hasVisibleChildren() { return mHasVisibleChildren; } +	 +	void setShowLoadStatus(bool status) { mShowLoadStatus = status; }  	// Call through to the viewed object and return true if it can be  	// removed. Returns true if it's removed. diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp index 35ae4dee8e..3fc2cbecbe 100644 --- a/indra/newview/llinventorybridge.cpp +++ b/indra/newview/llinventorybridge.cpp @@ -190,12 +190,7 @@ BOOL LLInvFVBridge::isItemRemovable()  	{  		return TRUE;  	} -	if (gAgentWearables.isWearingItem(mUUID)) -	{ -		return FALSE; -	} -	const LLVOAvatarSelf* avatar = gAgent.getAvatarObject(); -	if (avatar && avatar->isWearingAttachment(mUUID)) +	if (get_is_item_worn(mUUID))  	{  		return FALSE;  	} @@ -506,41 +501,6 @@ void hide_context_entries(LLMenuGL& menu,  	}  } -bool isWornLink(LLUUID link_id) -{ -	LLViewerInventoryItem *link = gInventory.getItem(link_id); -	if (!link) -		return false; -	LLViewerInventoryItem *item = link->getLinkedItem(); -	if (!item) -		return false; -	 -	switch(item->getType()) -	{ -	case LLAssetType::AT_OBJECT: -	{ -		LLVOAvatarSelf* my_avatar = gAgent.getAvatarObject(); -		if(my_avatar && my_avatar->isWearingAttachment(item->getUUID())) -			return true; -	} -	break; - -	case LLAssetType::AT_BODYPART: -	case LLAssetType::AT_CLOTHING: -		if(gAgentWearables.isWearingItem(item->getUUID())) -			return true; -		break; - -	case LLAssetType::AT_GESTURE: -		if (LLGestureManager::instance().isGestureActive(item->getUUID())) -			return true; -		break; -	default: -		break; -	} -	return false; -} -  // Helper for commonly-used entries  void LLInvFVBridge::getClipboardEntries(bool show_asset_id,  										std::vector<std::string> &items, @@ -552,7 +512,7 @@ void LLInvFVBridge::getClipboardEntries(bool show_asset_id,  	if (is_sidepanel)  	{  		// Sidepanel includes restricted menu. -		if (obj && obj->getIsLinkType() && !isWornLink(mUUID)) +		if (obj && obj->getIsLinkType() && !get_is_item_worn(mUUID))  		{  			items.push_back(std::string("Remove Link"));  		} @@ -606,15 +566,18 @@ void LLInvFVBridge::getClipboardEntries(bool show_asset_id,  		disabled_items.push_back(std::string("Paste"));  	} -	items.push_back(std::string("Paste As Link")); -	if (!isClipboardPasteableAsLink() || (flags & FIRST_SELECTED_ITEM) == 0) +	if (gAgent.isGodlike())  	{ -		disabled_items.push_back(std::string("Paste As Link")); +		items.push_back(std::string("Paste As Link")); +		if (!isClipboardPasteableAsLink() || (flags & FIRST_SELECTED_ITEM) == 0) +		{ +			disabled_items.push_back(std::string("Paste As Link")); +		}  	}  	items.push_back(std::string("Paste Separator")); -	if (obj && obj->getIsLinkType() && !isWornLink(mUUID)) +	if (obj && obj->getIsLinkType() && !get_is_item_worn(mUUID))  	{  		items.push_back(std::string("Remove Link"));  	} @@ -1196,7 +1159,7 @@ LLFontGL::StyleFlags LLItemBridge::getLabelStyle() const  {  	U8 font = LLFontGL::NORMAL; -	if( gAgentWearables.isWearingItem( mUUID ) ) +	if (get_is_item_worn(mUUID))  	{  		// llinfos << "BOLD" << llendl;  		font |= LLFontGL::BOLD; @@ -1339,29 +1302,33 @@ BOOL LLItemBridge::isItemCopyable() const  	LLViewerInventoryItem* item = getItem();  	if (item)  	{ -		// can't copy worn objects. DEV-15183 -		LLVOAvatarSelf *avatarp = gAgent.getAvatarObject(); -		if( !avatarp ) +		// Can't copy worn objects. DEV-15183 +		if(get_is_item_worn(mUUID))  		{  			return FALSE;  		} -		if(avatarp->isWearingAttachment(mUUID)) +		// You can never copy a link. +		if (item->getIsLinkType())  		{  			return FALSE;  		} -		// All items can be copied, not all can be pasted. -		// The only time an item can't be copied is if it's a link -		// return (item->getPermissions().allowCopyBy(gAgent.getID())); -		if (item->getIsLinkType()) +		if (gAgent.isGodlike())  		{ -			return FALSE; +			// All items can be copied in god mode since you can +			// at least paste-as-link the item, though you  +			// still may not be able paste the item. +			return TRUE; +		} +		else +		{ +			return (item->getPermissions().allowCopyBy(gAgent.getID()));  		} -		return TRUE;  	}  	return FALSE;  } +  BOOL LLItemBridge::copyToClipboard() const  {  	if(isItemCopyable()) @@ -1472,10 +1439,7 @@ BOOL LLFolderBridge::isItemRemovable()  		return FALSE;  	} -	// Allow protected types to be removed, but issue a warning. -	// Restrict to god mode so users don't inadvertently mess up their inventory. -	if(LLFolderType::lookupIsProtectedType(category->getPreferredType()) && -	   !gAgent.isGodlike()) +	if(LLFolderType::lookupIsProtectedType(category->getPreferredType()))  	{  		return FALSE;  	} @@ -1681,23 +1645,10 @@ BOOL LLFolderBridge::dragCategoryIntoFolder(LLInventoryCategory* inv_cat,  					for( i = 0; i < descendent_items.count(); i++ )  					{  						LLInventoryItem* item = descendent_items[i]; -						if( (item->getType() == LLAssetType::AT_CLOTHING) || -							(item->getType() == LLAssetType::AT_BODYPART) ) -						{ -							if( gAgentWearables.isWearingItem( item->getUUID() ) ) -							{ -								is_movable = FALSE;  // It's generally movable, but not into the trash! -								break; -							} -						} -						else -						if( item->getType() == LLAssetType::AT_OBJECT ) +						if (get_is_item_worn(item->getUUID()))  						{ -							if( avatar->isWearingAttachment( item->getUUID() ) ) -							{ -								is_movable = FALSE;  // It's generally movable, but not into the trash! -								break; -							} +							is_movable = FALSE; +							break; // It's generally movable, but not into the trash!  						}  					}  				} @@ -2187,6 +2138,12 @@ void LLFolderBridge::performAction(LLFolderView* folder, LLInventoryModel* model  		restoreItem();  		return;  	} +#ifndef LL_RELEASE_FOR_DOWNLOAD +	else if ("delete_system_folder" == action) +	{ +		removeSystemFolder(); +	} +#endif  }  void LLFolderBridge::openItem() @@ -2310,13 +2267,27 @@ BOOL LLFolderBridge::removeItem()  	LLNotification::Params params("ConfirmDeleteProtectedCategory");  	params.payload(payload).substitutions(args).functor.function(boost::bind(&LLFolderBridge::removeItemResponse, this, _1, _2)); -	if (LLFolderType::lookupIsProtectedType(cat->getPreferredType())) +	LLNotifications::instance().forceResponse(params, 0); +	return TRUE; +} + + +BOOL LLFolderBridge::removeSystemFolder() +{ +	const LLViewerInventoryCategory *cat = getCategory(); +	if (!LLFolderType::lookupIsProtectedType(cat->getPreferredType()))  	{ -		LLNotifications::instance().add(params); +		return FALSE;  	} -	else + +	LLSD payload; +	LLSD args; +	args["FOLDERNAME"] = cat->getName(); + +	LLNotification::Params params("ConfirmDeleteProtectedCategory"); +	params.payload(payload).substitutions(args).functor.function(boost::bind(&LLFolderBridge::removeItemResponse, this, _1, _2));  	{ -		LLNotifications::instance().forceResponse(params, 0); +		LLNotifications::instance().add(params);  	}  	return TRUE;  } @@ -2485,6 +2456,13 @@ void LLFolderBridge::folderOptionsMenu()  		}  	} +#ifndef LL_RELEASE_FOR_DOWNLOAD +	if (LLFolderType::lookupIsProtectedType(type)) +	{ +		mItems.push_back(std::string("Delete System Folder")); +	} +#endif +  	// wearables related functionality for folders.  	//is_wearable  	LLFindWearables is_wearable; @@ -2512,7 +2490,10 @@ void LLFolderBridge::folderOptionsMenu()  			mItems.push_back(std::string("Wear As Ensemble"));  		}  		mItems.push_back(std::string("Remove From Outfit")); - +		if (!areAnyContentsWorn(model)) +		{ +			disabled_items.push_back(std::string("Remove From Outfit")); +		}  		mItems.push_back(std::string("Outfit Separator"));  	}  	hide_context_entries(*mMenu, mItems, disabled_items); @@ -2534,6 +2515,35 @@ BOOL LLFolderBridge::checkFolderForContentsOfType(LLInventoryModel* model, LLInv  	return ((item_array.count() > 0) ? TRUE : FALSE );  } +class LLFindWorn : public LLInventoryCollectFunctor +{ +public: +	LLFindWorn() {} +	virtual ~LLFindWorn() {} +	virtual bool operator()(LLInventoryCategory* cat, +							LLInventoryItem* item) +	{ +		if (item && get_is_item_worn(item->getUUID())) +		{ +			return TRUE; +		} +		return FALSE; +	} +}; + +BOOL LLFolderBridge::areAnyContentsWorn(LLInventoryModel* model) const +{ +	LLInventoryModel::cat_array_t cat_array; +	LLInventoryModel::item_array_t item_array; +	LLFindWorn is_worn; +	model->collectDescendentsIf(mUUID, +								cat_array, +								item_array, +								LLInventoryModel::EXCLUDE_TRASH, +								is_worn); +	return (item_array.size() > 0); +} +  // Flags unused  void LLFolderBridge::buildContextMenu(LLMenuGL& menu, U32 flags)  { @@ -2656,6 +2666,13 @@ void LLFolderBridge::buildContextMenu(LLMenuGL& menu, U32 flags)  		mItems.push_back(std::string("--no options--"));  		mDisabledItems.push_back(std::string("--no options--"));  	} + +	// Preemptively disable system folder removal if more than one item selected. +	if ((flags & FIRST_SELECTED_ITEM) == 0) +	{ +		mDisabledItems.push_back(std::string("Delete System Folder")); +	} +	  	hide_context_entries(menu, mItems, mDisabledItems);  } @@ -2998,19 +3015,7 @@ BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item,  		if(is_movable && move_is_into_trash)  		{ -			switch(inv_item->getType()) -			{ -			case LLAssetType::AT_CLOTHING: -			case LLAssetType::AT_BODYPART: -				is_movable = !gAgentWearables.isWearingItem(inv_item->getUUID()); -				break; - -			case LLAssetType::AT_OBJECT: -				is_movable = !avatar->isWearingAttachment(inv_item->getUUID()); -				break; -			default: -				break; -			} +			is_movable = inv_item->getIsLinkType() || !get_is_item_worn(inv_item->getUUID());  		}  		if ( is_movable ) @@ -4080,8 +4085,7 @@ LLFontGL::StyleFlags LLObjectBridge::getLabelStyle() const  {  	U8 font = LLFontGL::NORMAL; -	LLVOAvatarSelf* avatar = gAgent.getAvatarObject(); -	if( avatar && avatar->isWearingAttachment( mUUID ) ) +	if(get_is_item_worn( mUUID ) )  	{  		font |= LLFontGL::BOLD;  	} @@ -4097,9 +4101,9 @@ LLFontGL::StyleFlags LLObjectBridge::getLabelStyle() const  std::string LLObjectBridge::getLabelSuffix() const  { -	LLVOAvatarSelf* avatar = gAgent.getAvatarObject(); -	if( avatar && avatar->isWearingAttachment( mUUID ) ) +	if (get_is_item_worn(mUUID))  	{ +		LLVOAvatarSelf* avatar = gAgent.getAvatarObject();  		std::string attachment_point_name = avatar->getAttachedPointName(mUUID);  		// e.g. "(worn on ...)" / "(attached to ...)" @@ -4224,12 +4228,11 @@ void LLObjectBridge::buildContextMenu(LLMenuGL& menu, U32 flags)  				return;  			} -			if( avatarp->isWearingAttachment( mUUID ) ) +			if( get_is_item_worn( mUUID ) )  			{  				items.push_back(std::string("Detach From Yourself"));  			} -			else -			if( !isInTrash() && !isLinkedObjectInTrash() && !isLinkedObjectMissing()) +			else if (!isInTrash() && !isLinkedObjectInTrash() && !isLinkedObjectMissing())  			{  				items.push_back(std::string("Attach Separator"));  				items.push_back(std::string("Object Wear")); @@ -4455,7 +4458,7 @@ void remove_inventory_category_from_avatar_step2( BOOL proceed, LLUUID category_  				if (gAgent.isTeen() && item->isWearableType() &&  					(item->getWearableType() == WT_UNDERPANTS || item->getWearableType() == WT_UNDERSHIRT))  					continue; -				if( gAgentWearables.isWearingItem (item->getLinkedUUID()) ) +				if (get_is_item_worn(item->getUUID()))  				{  					LLWearableList::instance().getAsset(item->getAssetUUID(),  														item->getName(), @@ -4471,18 +4474,21 @@ void remove_inventory_category_from_avatar_step2( BOOL proceed, LLUUID category_  			for(i = 0; i  < obj_count; ++i)  			{  				LLViewerInventoryItem *obj_item = obj_item_array.get(i); -				gMessageSystem->newMessageFast(_PREHASH_DetachAttachmentIntoInv); -				gMessageSystem->nextBlockFast(_PREHASH_ObjectData ); -				gMessageSystem->addUUIDFast(_PREHASH_AgentID, gAgent.getID() ); -				gMessageSystem->addUUIDFast(_PREHASH_ItemID, obj_item->getLinkedUUID() ); - -				gMessageSystem->sendReliable( gAgent.getRegion()->getHost() ); - -				// this object might have been selected, so let the selection manager know it's gone now -				LLViewerObject *found_obj = gObjectList.findObject( obj_item->getLinkedUUID()); -				if (found_obj) +				if (get_is_item_worn(obj_item->getUUID()))  				{ -					LLSelectMgr::getInstance()->remove(found_obj); +					gMessageSystem->newMessageFast(_PREHASH_DetachAttachmentIntoInv); +					gMessageSystem->nextBlockFast(_PREHASH_ObjectData ); +					gMessageSystem->addUUIDFast(_PREHASH_AgentID, gAgent.getID() ); +					gMessageSystem->addUUIDFast(_PREHASH_ItemID, obj_item->getLinkedUUID() ); +					 +					gMessageSystem->sendReliable( gAgent.getRegion()->getHost() ); +					 +					// this object might have been selected, so let the selection manager know it's gone now +					LLViewerObject *found_obj = gObjectList.findObject( obj_item->getLinkedUUID()); +					if (found_obj) +					{ +						LLSelectMgr::getInstance()->remove(found_obj); +					}  				}  			}  		} @@ -4492,7 +4498,7 @@ void remove_inventory_category_from_avatar_step2( BOOL proceed, LLUUID category_  			for(i = 0; i  < gest_count; ++i)  			{  				LLViewerInventoryItem *gest_item = gest_item_array.get(i); -				if ( LLGestureManager::instance().isGestureActive( gest_item->getLinkedUUID()) ) +				if (get_is_item_worn(gest_item->getUUID()))  				{  					LLGestureManager::instance().deactivateGesture( gest_item->getLinkedUUID() );  					gInventory.updateItem( gest_item ); @@ -4506,7 +4512,7 @@ void remove_inventory_category_from_avatar_step2( BOOL proceed, LLUUID category_  BOOL LLWearableBridge::renameItem(const std::string& new_name)  { -	if( gAgentWearables.isWearingItem( mUUID ) ) +	if (get_is_item_worn(mUUID))  	{  		gAgentWearables.setWearableName( mUUID, new_name );  	} @@ -4515,7 +4521,7 @@ BOOL LLWearableBridge::renameItem(const std::string& new_name)  std::string LLWearableBridge::getLabelSuffix() const  { -	if( gAgentWearables.isWearingItem( mUUID ) ) +	if (get_is_item_worn(mUUID))  	{  		// e.g. "(worn)"   		return LLItemBridge::getLabelSuffix() + LLTrans::getString("worn"); @@ -4549,7 +4555,7 @@ void LLWearableBridge::performAction(LLFolderView* folder, LLInventoryModel* mod  	}  	else if (isRemoveAction(action))  	{ -		if(gAgentWearables.isWearingItem(mUUID)) +		if (get_is_item_worn(mUUID))  		{  			LLViewerInventoryItem* item = getItem();  			if (item) @@ -4580,7 +4586,7 @@ void LLWearableBridge::openItem()  	}  	else if(isAgentInventory())  	{ -		if( !gAgentWearables.isWearingItem( mUUID ) ) +		if( !get_is_item_worn( mUUID ) )  		{  			wearOnAvatar();  		} @@ -4680,7 +4686,7 @@ void LLWearableBridge::buildContextMenu(LLMenuGL& menu, U32 flags)  				case LLAssetType::AT_CLOTHING:  					items.push_back(std::string("Take Off"));  				case LLAssetType::AT_BODYPART: -					if (gAgentWearables.isWearingItem(item->getUUID())) +					if (get_is_item_worn(item->getUUID()))  					{  						disabled_items.push_back(std::string("Wearable Wear"));  						disabled_items.push_back(std::string("Wearable Add")); @@ -4711,7 +4717,7 @@ BOOL LLWearableBridge::canWearOnAvatar(void* user_data)  		LLViewerInventoryItem* item = (LLViewerInventoryItem*)self->getItem();  		if(!item || !item->isComplete()) return FALSE;  	} -	return (!gAgentWearables.isWearingItem(self->mUUID)); +	return (!get_is_item_worn(self->mUUID));  }  // Called from menus @@ -4843,7 +4849,7 @@ BOOL LLWearableBridge::canEditOnAvatar(void* user_data)  	LLWearableBridge* self = (LLWearableBridge*)user_data;  	if(!self) return FALSE; -	return (gAgentWearables.isWearingItem(self->mUUID)); +	return (get_is_item_worn(self->mUUID));  }  // static @@ -4880,7 +4886,7 @@ BOOL LLWearableBridge::canRemoveFromAvatar(void* user_data)  	LLWearableBridge* self = (LLWearableBridge*)user_data;  	if( self && (LLAssetType::AT_BODYPART != self->mAssetType) )  	{ -		return gAgentWearables.isWearingItem( self->mUUID ); +		return get_is_item_worn( self->mUUID );  	}  	return FALSE;  } @@ -4890,7 +4896,7 @@ void LLWearableBridge::onRemoveFromAvatar(void* user_data)  {  	LLWearableBridge* self = (LLWearableBridge*)user_data;  	if(!self) return; -	if(gAgentWearables.isWearingItem(self->mUUID)) +	if(get_is_item_worn(self->mUUID))  	{  		LLViewerInventoryItem* item = self->getItem();  		if (item) @@ -4913,7 +4919,7 @@ void LLWearableBridge::onRemoveFromAvatarArrived(LLWearable* wearable,  	const LLUUID &item_id = gInventory.getLinkedItemID(on_remove_struct->mUUID);  	if(wearable)  	{ -		if( gAgentWearables.isWearingItem( item_id ) ) +		if( get_is_item_worn( item_id ) )  		{  			EWearableType type = wearable->getType(); @@ -5123,8 +5129,9 @@ void	LLAnimationBridgeAction::doIt()  //virtual  void	LLObjectBridgeAction::doIt()  { +	/*  	LLFloaterReg::showInstance("properties", mUUID); - +	*/  	LLInvFVBridgeAction::doIt();  } @@ -5196,7 +5203,7 @@ void LLWearableBridgeAction::doIt()  	}  	else if(isAgentInventory())  	{ -		if(!gAgentWearables.isWearingItem(mUUID)) +		if(!get_is_item_worn(mUUID))  		{  			wearOnAvatar();  		} diff --git a/indra/newview/llinventorybridge.h b/indra/newview/llinventorybridge.h index 117e32c6be..4d83e9b684 100644 --- a/indra/newview/llinventorybridge.h +++ b/indra/newview/llinventorybridge.h @@ -292,7 +292,9 @@ public:  	static LLUIImagePtr getIcon(LLFolderType::EType preferred_type);  	virtual BOOL renameItem(const std::string& new_name); +  	virtual BOOL removeItem(); +	BOOL removeSystemFolder();  	bool removeItemResponse(const LLSD& notification, const LLSD& response);  	virtual void pasteFromClipboard(); @@ -339,6 +341,7 @@ protected:  	static void createNewEyes(void* user_data);  	BOOL checkFolderForContentsOfType(LLInventoryModel* model, LLInventoryCollectFunctor& typeToCheck); +	BOOL areAnyContentsWorn(LLInventoryModel* model) const;  	void modifyOutfit(BOOL append);  	void determineFolderType(); diff --git a/indra/newview/llinventoryfunctions.cpp b/indra/newview/llinventoryfunctions.cpp index 75218e98e0..8f4136c01f 100644 --- a/indra/newview/llinventoryfunctions.cpp +++ b/indra/newview/llinventoryfunctions.cpp @@ -338,3 +338,33 @@ LLUIImagePtr get_item_icon(LLAssetType::EType asset_type,  	const std::string& icon_name = get_item_icon_name(asset_type, inventory_type, attachment_point, item_is_multi );  	return LLUI::getUIImage(icon_name);  } + +BOOL get_is_item_worn(const LLUUID& id) +{ +	const LLViewerInventoryItem* item = gInventory.getItem(id); +	if (!item) +		return FALSE; +	 +	switch(item->getType()) +	{ +		case LLAssetType::AT_OBJECT: +		{ +			const LLVOAvatarSelf* my_avatar = gAgent.getAvatarObject(); +			if(my_avatar && my_avatar->isWearingAttachment(item->getLinkedUUID())) +				return TRUE; +			break; +		} +		case LLAssetType::AT_BODYPART: +		case LLAssetType::AT_CLOTHING: +			if(gAgentWearables.isWearingItem(item->getLinkedUUID())) +				return TRUE; +			break; +		case LLAssetType::AT_GESTURE: +			if (LLGestureManager::instance().isGestureActive(item->getLinkedUUID())) +				return TRUE; +			break; +		default: +			break; +	} +	return FALSE; +} diff --git a/indra/newview/llinventoryfunctions.h b/indra/newview/llinventoryfunctions.h index 9916a2351c..968db84819 100644 --- a/indra/newview/llinventoryfunctions.h +++ b/indra/newview/llinventoryfunctions.h @@ -41,7 +41,9 @@  //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  //  // This is a collection of miscellaneous functions and classes -// that don't fit cleanly into any other class header. +// that don't fit cleanly into any other class header.  Eventually, +// we should figure out where to put these functions so that we can +// get rid of this generic file.  //  //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -98,14 +100,17 @@ public:  };  const std::string& get_item_icon_name(LLAssetType::EType asset_type, -							 LLInventoryType::EType inventory_type, -							 U32 attachment_point,  -							 BOOL item_is_multi ); +									  LLInventoryType::EType inventory_type, +									  U32 attachment_point,  +									  BOOL item_is_multi );  LLUIImagePtr get_item_icon(LLAssetType::EType asset_type, -							 LLInventoryType::EType inventory_type, -							 U32 attachment_point,  -							 BOOL item_is_multi ); +						   LLInventoryType::EType inventory_type, +						   U32 attachment_point,  +						   BOOL item_is_multi ); + +// Is this item or its baseitem is worn, attached, etc... +BOOL get_is_item_worn(const LLUUID& id);  #endif // LL_LLINVENTORYFUNCTIONS_H diff --git a/indra/newview/lllogininstance.cpp b/indra/newview/lllogininstance.cpp index 7d3da152c1..2dc9f255d7 100644 --- a/indra/newview/lllogininstance.cpp +++ b/indra/newview/lllogininstance.cpp @@ -189,7 +189,7 @@ void LLLoginInstance::constructAuthParams(const LLSD& credentials)  bool LLLoginInstance::handleLoginEvent(const LLSD& event)  { -	LL_DEBUGS("Login") << "LoginListener called!: \n" << event << LL_ENDL; +	LL_DEBUGS("LLLogin") << "LoginListener called!: \n" << event << LL_ENDL;  	if(!(event.has("state") && event.has("change") && event.has("progress")))  	{ diff --git a/indra/newview/llmediadataclient.cpp b/indra/newview/llmediadataclient.cpp index 91064eea6b..2bb2a3da6f 100755 --- a/indra/newview/llmediadataclient.cpp +++ b/indra/newview/llmediadataclient.cpp @@ -224,7 +224,7 @@ bool LLMediaDataClient::processQueueTimer()  	if(!isEmpty())  	{ -		LL_INFOS("LLMediaDataClient") << "QueueTimer::tick() started, SORTED queue size is:	  " << mSortedQueue.size()  +		LL_DEBUGS("LLMediaDataClient") << "QueueTimer::tick() started, SORTED queue size is:	  " << mSortedQueue.size()   			<< ", RR queue size is:	  " << mRoundRobinQueue.size() << LL_ENDL;  		LL_DEBUGS("LLMediaDataClient") << "QueueTimer::tick() started, SORTED queue is:	  " << mSortedQueue << LL_ENDL;  		LL_DEBUGS("LLMediaDataClient") << "QueueTimer::tick() started, RR queue is:	  " << mRoundRobinQueue << LL_ENDL; @@ -262,7 +262,7 @@ void LLMediaDataClient::sortQueue()  		if (size > mMaxSortedQueueSize)   		{  			U32 num_to_cull = (size - mMaxSortedQueueSize); -			LL_INFOS("LLMediaDataClient") << "sorted queue MAXED OUT!  Culling "  +			LL_INFOS_ONCE("LLMediaDataClient") << "sorted queue MAXED OUT!  Culling "   				<< num_to_cull << " items" << LL_ENDL;  			while (num_to_cull-- > 0)  			{ @@ -309,7 +309,7 @@ void LLMediaDataClient::serviceQueue()  		{  			if (request.isNull())   			{ -				LL_INFOS("LLMediaDataClient") << "Skipping NULL request" << LL_ENDL; +				LL_WARNS("LLMediaDataClient") << "Skipping NULL request" << LL_ENDL;  			}  			else {  				LL_INFOS("LLMediaDataClient") << "Skipping : " << *request << " "  @@ -636,8 +636,8 @@ void LLMediaDataClient::Responder::error(U32 status, const std::string& reason)  			new RetryTimer(F32(retry_timeout/*secs*/), this);  		}  		else { -			LL_INFOS("LLMediaDataClient") << *mRequest << " got SERVICE_UNAVAILABLE...retry count " <<  -			mRequest->getRetryCount() << " exceeds " << mRequest->getMaxNumRetries() << ", not retrying" << LL_ENDL; +			LL_INFOS("LLMediaDataClient") << *mRequest << " got SERVICE_UNAVAILABLE...retry count "  +				<< mRequest->getRetryCount() << " exceeds " << mRequest->getMaxNumRetries() << ", not retrying" << LL_ENDL;  		}  	}  	else { diff --git a/indra/newview/llpanelmaininventory.cpp b/indra/newview/llpanelmaininventory.cpp index c0da8f3daa..961d3dec8b 100644 --- a/indra/newview/llpanelmaininventory.cpp +++ b/indra/newview/llpanelmaininventory.cpp @@ -400,6 +400,7 @@ void LLPanelMainInventory::onClearSearch()  		mActivePanel->getRootFolder()->applyFunctorRecursively(opener);  		mActivePanel->getRootFolder()->scrollToShowSelection();  	} +	mFilterSubString = "";  }  void LLPanelMainInventory::onFilterEdit(const std::string& search_string ) @@ -417,6 +418,7 @@ void LLPanelMainInventory::onFilterEdit(const std::string& search_string )  	std::string uppercase_search_string = search_string;  	LLStringUtil::toUpper(uppercase_search_string); +	mFilterSubString = uppercase_search_string;  	if (mActivePanel->getFilterSubString().empty() && uppercase_search_string.empty())  	{  			// current filter and new filter empty, do nothing @@ -431,7 +433,7 @@ void LLPanelMainInventory::onFilterEdit(const std::string& search_string )  	}  	// set new filter string -	mActivePanel->setFilterSubString(uppercase_search_string); +	mActivePanel->setFilterSubString(mFilterSubString);  } @@ -484,6 +486,7 @@ void LLPanelMainInventory::onFilterSelected()  	{  		return;  	} +	setFilterSubString(mFilterSubString);  	LLInventoryFilter* filter = mActivePanel->getFilter();  	LLFloaterInventoryFinder *finder = getFinder();  	if (finder) @@ -542,7 +545,7 @@ void LLPanelMainInventory::draw()  {  	if (mActivePanel && mFilterEditor)  	{ -		mFilterEditor->setText(mActivePanel->getFilterSubString()); +		mFilterEditor->setText(mFilterSubString);  	}	  	LLPanel::draw();  } @@ -1016,9 +1019,11 @@ void LLPanelMainInventory::onCustomAction(const LLSD& userdata)  		}  		const LLUUID& item_id = current_item->getListener()->getUUID();  		const std::string &item_name = current_item->getListener()->getName(); +		mFilterSubString = item_name;  		LLInventoryFilter *filter = mActivePanel->getFilter();  		filter->setFilterSubString(item_name);  		mFilterEditor->setText(item_name); +  		mFilterEditor->setFocus(TRUE);  		filter->setFilterUUID(item_id);  		filter->setShowFolderState(LLInventoryFilter::SHOW_NON_EMPTY_FOLDERS); diff --git a/indra/newview/llpanelmaininventory.h b/indra/newview/llpanelmaininventory.h index 920de2665c..69f8a14583 100644 --- a/indra/newview/llpanelmaininventory.h +++ b/indra/newview/llpanelmaininventory.h @@ -123,6 +123,7 @@ private:  	LLInventoryPanel*			mActivePanel;  	LLSaveFolderState*			mSavedFolderState;  	std::string					mFilterText; +	std::string					mFilterSubString;  	////////////////////////////////////////////////////////////////////////////////// diff --git a/indra/newview/llpanelmediasettingssecurity.cpp b/indra/newview/llpanelmediasettingssecurity.cpp index aea6b0aa3b..81842e3851 100644 --- a/indra/newview/llpanelmediasettingssecurity.cpp +++ b/indra/newview/llpanelmediasettingssecurity.cpp @@ -323,7 +323,7 @@ void LLPanelMediaSettingsSecurity::addWhiteListEntry( const std::string& entry )  	else  	{  		row[ "columns" ][ ICON_COLUMN ][ "type" ] = "icon"; -		row[ "columns" ][ ICON_COLUMN ][ "value" ] = "parcel_color_EXP"; +		row[ "columns" ][ ICON_COLUMN ][ "value" ] = "Parcel_Exp_Color";  		row[ "columns" ][ ICON_COLUMN ][ "width" ] = 20;  	}; @@ -333,9 +333,6 @@ void LLPanelMediaSettingsSecurity::addWhiteListEntry( const std::string& entry )  	// add to the white list scroll box  	mWhiteListList->addElement( row ); - -	// update whitelist enable checkbox based on whether the home url passes the whitelist -	updateWhitelistEnableStatus();  };  /////////////////////////////////////////////////////////////////////////////// diff --git a/indra/newview/llpanelmediasettingssecurity.h b/indra/newview/llpanelmediasettingssecurity.h index 937bfb1bf9..66ccb23f46 100644 --- a/indra/newview/llpanelmediasettingssecurity.h +++ b/indra/newview/llpanelmediasettingssecurity.h @@ -63,7 +63,9 @@ public:  	void setParent( LLFloaterMediaSettings* parent );  	bool urlPassesWhiteList( const std::string& test_url );  	const std::string makeValidUrl( const std::string& src_url ); -	 + +	void updateWhitelistEnableStatus();	 +  protected:  	LLFloaterMediaSettings* mParent; @@ -78,8 +80,6 @@ private:  	LLScrollListCtrl* mWhiteListList;  	LLTextBox* mHomeUrlFailsWhiteListText; -	void updateWhitelistEnableStatus(); -  	static void onBtnAdd(void*);  	static void onBtnDel(void*);  }; diff --git a/indra/newview/llpaneloutfitsinventory.cpp b/indra/newview/llpaneloutfitsinventory.cpp index 5b36a5406a..f9777147b7 100644 --- a/indra/newview/llpaneloutfitsinventory.cpp +++ b/indra/newview/llpaneloutfitsinventory.cpp @@ -56,7 +56,10 @@  #include "llmenugl.h"  #include "llviewermenu.h" +#include "llviewercontrol.h" +  static LLRegisterPanelClassWrapper<LLPanelOutfitsInventory> t_inventory("panel_outfits_inventory"); +bool LLPanelOutfitsInventory::sShowDebugEditor = false;  LLPanelOutfitsInventory::LLPanelOutfitsInventory() :  	mActivePanel(NULL), @@ -74,7 +77,7 @@ LLPanelOutfitsInventory::~LLPanelOutfitsInventory()  // virtual  BOOL LLPanelOutfitsInventory::postBuild()  { -	 +	sShowDebugEditor = gSavedSettings.getBOOL("ShowDebugAppearanceEditor");  	initTabPanels();  	initListCommandsHandlers();  	return TRUE; @@ -86,6 +89,11 @@ void LLPanelOutfitsInventory::updateVerbs()  	{  		mParent->updateVerbs();  	} + +	if (mListCommands) +	{ +		mListCommands->childSetVisible("look_edit_btn",sShowDebugEditor); +	}  }  void LLPanelOutfitsInventory::setParent(LLSidepanelAppearance* parent) @@ -96,6 +104,7 @@ void LLPanelOutfitsInventory::setParent(LLSidepanelAppearance* parent)  // virtual  void LLPanelOutfitsInventory::onSearchEdit(const std::string& string)  { +	mFilterSubString = string;  	if (string == "")  	{  		mActivePanel->setFilterSubString(LLStringUtil::null); @@ -177,7 +186,6 @@ void LLPanelOutfitsInventory::onSelectionChange(const std::deque<LLFolderViewIte  void LLPanelOutfitsInventory::onSelectorButtonClicked()  { -	/*  	  LLFolderViewItem* cur_item = getRootFolder()->getCurSelectedItem();  	  LLFolderViewEventListener* listenerp = cur_item->getListener(); @@ -189,7 +197,6 @@ void LLPanelOutfitsInventory::onSelectorButtonClicked()  	  LLSideTray::getInstance()->showPanel("sidepanel_appearance", key);  	  }  -	*/  }  LLFolderViewEventListener *LLPanelOutfitsInventory::getCorrectListenerForAction() @@ -233,9 +240,11 @@ void LLPanelOutfitsInventory::initListCommandsHandlers()  	mListCommands->childSetAction("options_gear_btn", boost::bind(&LLPanelOutfitsInventory::onGearButtonClick, this));  	mListCommands->childSetAction("trash_btn", boost::bind(&LLPanelOutfitsInventory::onTrashButtonClick, this)); -	mListCommands->childSetAction("add_btn", boost::bind(&LLPanelOutfitsInventory::onAddButtonClick, this)); +	mListCommands->childSetAction("make_outfit_btn", boost::bind(&LLPanelOutfitsInventory::onAddButtonClick, this));  	mListCommands->childSetAction("wear_btn", boost::bind(&LLPanelOutfitsInventory::onWearButtonClick, this)); -	 + +	mListCommands->childSetAction("look_edit_btn", boost::bind(&LLPanelOutfitsInventory::onSelectorButtonClicked, this)); +  	LLDragAndDropButton* trash_btn = mListCommands->getChild<LLDragAndDropButton>("trash_btn");  	trash_btn->setDragAndDropHandler(boost::bind(&LLPanelOutfitsInventory::handleDragAndDropToTrash, this  				   ,       _4 // BOOL drop @@ -433,6 +442,9 @@ void LLPanelOutfitsInventory::initTabPanels()  		LLInventoryPanel *panel = (*iter);  		panel->setSelectCallback(boost::bind(&LLPanelOutfitsInventory::onTabSelectionChange, this, panel, _1, _2));  	} + +	mAppearanceTabs = getChild<LLTabContainer>("appearance_tabs"); +	mAppearanceTabs->setCommitCallback(boost::bind(&LLPanelOutfitsInventory::onTabChange, this));  }  void LLPanelOutfitsInventory::onTabSelectionChange(LLInventoryPanel* tab_panel, const std::deque<LLFolderViewItem*> &items, BOOL user_action) @@ -457,6 +469,19 @@ void LLPanelOutfitsInventory::onTabSelectionChange(LLInventoryPanel* tab_panel,  	onSelectionChange(items, user_action);  } +void LLPanelOutfitsInventory::onTabChange() +{ +	mActivePanel = (LLInventoryPanel*)childGetVisibleTab("appearance_tabs"); +	if (!mActivePanel) +	{ +		return; +	} +	mActivePanel->setFilterSubString(mFilterSubString); + +	bool is_my_outfits = (mActivePanel->getName() == "outfitslist_accordionpanel"); +	mListCommands->childSetEnabled("make_outfit_btn", is_my_outfits); +} +  LLInventoryPanel* LLPanelOutfitsInventory::getActivePanel()  {  	return mActivePanel; diff --git a/indra/newview/llpaneloutfitsinventory.h b/indra/newview/llpaneloutfitsinventory.h index 9b6b483e3b..1e084750a0 100644 --- a/indra/newview/llpaneloutfitsinventory.h +++ b/indra/newview/llpaneloutfitsinventory.h @@ -44,6 +44,7 @@ class LLSaveFolderState;  class LLButton;  class LLMenuGL;  class LLSidepanelAppearance; +class LLTabContainer;  class LLPanelOutfitsInventory : public LLPanel  { @@ -76,7 +77,8 @@ protected:  private:  	LLSidepanelAppearance*      mParent;  	LLSaveFolderState*			mSavedFolderState; - +	LLTabContainer*				mAppearanceTabs; +	std::string 				mFilterSubString;  public:  	////////////////////////////////////////////////////////////////////////////////// @@ -87,6 +89,7 @@ public:  protected:  	void 				initTabPanels();  	void 				onTabSelectionChange(LLInventoryPanel* tab_panel, const std::deque<LLFolderViewItem*> &items, BOOL user_action); +	void 				onTabChange();  private:  	LLInventoryPanel* 	mActivePanel; @@ -117,6 +120,9 @@ private:  	LLMenuGL*					mMenuAdd;  	// List Commands                                                              //  	//////////////////////////////////////////////////////////////////////////////// +	/// +public: +	static bool sShowDebugEditor;  };  #endif //LL_LLPANELOUTFITSINVENTORY_H diff --git a/indra/newview/llpanelprimmediacontrols.cpp b/indra/newview/llpanelprimmediacontrols.cpp index 7b2ac38568..5cc9c1951b 100644 --- a/indra/newview/llpanelprimmediacontrols.cpp +++ b/indra/newview/llpanelprimmediacontrols.cpp @@ -96,7 +96,7 @@ LLPanelPrimMediaControls::LLPanelPrimMediaControls() :  	mTargetObjectNormal(LLVector3::zero),  	mZoomObjectID(LLUUID::null),  	mZoomObjectFace(0), -	mVolumeSliderVisible(false) +	mVolumeSliderVisible(0)  {  	mCommitCallbackRegistrar.add("MediaCtrl.Close",		boost::bind(&LLPanelPrimMediaControls::onClickClose, this));  	mCommitCallbackRegistrar.add("MediaCtrl.Back",		boost::bind(&LLPanelPrimMediaControls::onClickBack, this)); @@ -116,6 +116,7 @@ LLPanelPrimMediaControls::LLPanelPrimMediaControls() :  	mCommitCallbackRegistrar.add("MediaCtrl.Volume",	boost::bind(&LLPanelPrimMediaControls::onCommitVolumeSlider, this));  	mCommitCallbackRegistrar.add("MediaCtrl.ToggleMute",		boost::bind(&LLPanelPrimMediaControls::onToggleMute, this));  	mCommitCallbackRegistrar.add("MediaCtrl.ShowVolumeSlider",		boost::bind(&LLPanelPrimMediaControls::showVolumeSlider, this)); +	mCommitCallbackRegistrar.add("MediaCtrl.HideVolumeSlider",		boost::bind(&LLPanelPrimMediaControls::hideVolumeSlider, this));  	mCommitCallbackRegistrar.add("MediaCtrl.SkipBack",		boost::bind(&LLPanelPrimMediaControls::onClickSkipBack, this));  	mCommitCallbackRegistrar.add("MediaCtrl.SkipForward",	boost::bind(&LLPanelPrimMediaControls::onClickSkipForward, this)); @@ -372,8 +373,8 @@ void LLPanelPrimMediaControls::updateShape()  			mVolumeUpCtrl->setVisible(has_focus);  			mVolumeDownCtrl->setVisible(has_focus);  			mVolumeCtrl->setEnabled(has_focus); -			mVolumeSliderCtrl->setEnabled(has_focus && mVolumeSliderVisible); -			mVolumeSliderCtrl->setVisible(has_focus && mVolumeSliderVisible); +			mVolumeSliderCtrl->setEnabled(has_focus && mVolumeSliderVisible > 0); +			mVolumeSliderCtrl->setVisible(has_focus && mVolumeSliderVisible > 0);  			mWhitelistIcon->setVisible(false);  			mSecureLockIcon->setVisible(false); @@ -714,7 +715,7 @@ void LLPanelPrimMediaControls::draw()  				setVisible(FALSE);  				mClearFaceOnFade = false; -				mVolumeSliderVisible = false; +				mVolumeSliderVisible = 0;  				mTargetImplID = LLUUID::null;  				mTargetObjectID = LLUUID::null;  				mTargetObjectFace = 0; @@ -1267,5 +1268,11 @@ void LLPanelPrimMediaControls::onToggleMute()  void LLPanelPrimMediaControls::showVolumeSlider()  { -	mVolumeSliderVisible = true; +	mVolumeSliderVisible++; +} + + +void LLPanelPrimMediaControls::hideVolumeSlider() +{ +	mVolumeSliderVisible--;  } diff --git a/indra/newview/llpanelprimmediacontrols.h b/indra/newview/llpanelprimmediacontrols.h index 17e65b8b0c..d899ee4473 100644 --- a/indra/newview/llpanelprimmediacontrols.h +++ b/indra/newview/llpanelprimmediacontrols.h @@ -110,6 +110,7 @@ private:  	void onCommitVolumeSlider();  	void onToggleMute();  	void showVolumeSlider(); +	void hideVolumeSlider();  	static void onScrollUp(void* user_data);  	static void onScrollUpHeld(void* user_data); @@ -204,7 +205,7 @@ private:  	LLUUID mZoomObjectID;  	S32 mZoomObjectFace; -	bool mVolumeSliderVisible; +	S32 mVolumeSliderVisible;  };  #endif // LL_PANELPRIMMEDIACONTROLS_H diff --git a/indra/newview/llselectmgr.cpp b/indra/newview/llselectmgr.cpp index 6e99d5a5f0..60a095506b 100644 --- a/indra/newview/llselectmgr.cpp +++ b/indra/newview/llselectmgr.cpp @@ -2277,6 +2277,26 @@ BOOL LLSelectMgr::selectGetAllValid()  	return TRUE;  } +//----------------------------------------------------------------------------- +// selectGetAllValidAndObjectsFound() - return TRUE if selections are +// valid and objects are found. +// +// For EXT-3114 - same as selectGetModify() without the modify check. +//----------------------------------------------------------------------------- +BOOL LLSelectMgr::selectGetAllValidAndObjectsFound() +{ +	for (LLObjectSelection::iterator iter = getSelection()->begin(); +		 iter != getSelection()->end(); iter++ ) +	{ +		LLSelectNode* node = *iter; +		LLViewerObject* object = node->getObject(); +		if( !object || !node->mValid ) +		{ +			return FALSE; +		} +	} +	return TRUE; +}  //-----------------------------------------------------------------------------  // selectGetModify() - return TRUE if current agent can modify all diff --git a/indra/newview/llselectmgr.h b/indra/newview/llselectmgr.h index 6641be335a..f8ecfd0674 100644 --- a/indra/newview/llselectmgr.h +++ b/indra/newview/llselectmgr.h @@ -535,6 +535,7 @@ public:  	// Returns TRUE if the viewer has information on all selected objects  	BOOL selectGetAllRootsValid();  	BOOL selectGetAllValid(); +	BOOL selectGetAllValidAndObjectsFound();  	// returns TRUE if you can modify all selected objects.   	BOOL selectGetRootsModify(); diff --git a/indra/newview/lltexturefetch.cpp b/indra/newview/lltexturefetch.cpp index 9f69ed3964..83e0b53960 100644 --- a/indra/newview/lltexturefetch.cpp +++ b/indra/newview/lltexturefetch.cpp @@ -448,6 +448,7 @@ LLTextureFetchWorker::~LLTextureFetchWorker()  	mFormattedImage = NULL;  	clearPackets();  	unlockWorkMutex(); +	mFetcher->removeFromHTTPQueue(mID);  }  void LLTextureFetchWorker::clearPackets() @@ -821,6 +822,13 @@ bool LLTextureFetchWorker::doWork(S32 param)  			if (mFormattedImage.notNull())  			{  				cur_size = mFormattedImage->getDataSize(); // amount of data we already have +				if (mFormattedImage->getDiscardLevel() == 0) +				{ +					// We already have all the data, just decode it +					mLoadedDiscard = mFormattedImage->getDiscardLevel(); +					mState = DECODE_IMAGE; +					return false; +				}  			}  			mRequestedSize = mDesiredSize;  			mRequestedDiscard = mDesiredDiscard; @@ -871,26 +879,16 @@ bool LLTextureFetchWorker::doWork(S32 param)   				llinfos << "HTTP GET failed for: " << mUrl  						<< " Status: " << mGetStatus << " Reason: '" << mGetReason << "'"  						<< " Attempt:" << mHTTPFailCount+1 << "/" << max_attempts << llendl; -				if (cur_size == 0) +				++mHTTPFailCount; +				if (mHTTPFailCount >= max_attempts)  				{ -					++mHTTPFailCount; -					if (mHTTPFailCount >= max_attempts) -					{ -						resetFormattedData(); -						return true; // failed -					} -					else -					{ -						mState = SEND_HTTP_REQ; -						return false; // retry -					} +					resetFormattedData(); +					return true; // failed  				}  				else  				{ -					// mFormattedImage gauranteed to not be NULL since cur_size != 0 -					mLoadedDiscard = mFormattedImage->getDiscardLevel(); -					mState = DECODE_IMAGE; -					return false; // use what we have +					mState = SEND_HTTP_REQ; +					return false; // retry  				}  			} diff --git a/indra/newview/lltextureview.cpp b/indra/newview/lltextureview.cpp index b6e20608eb..9573b884eb 100644 --- a/indra/newview/lltextureview.cpp +++ b/indra/newview/lltextureview.cpp @@ -494,7 +494,7 @@ void LLGLTexMemBar::draw()  #endif  	//---------------------------------------------------------------------------- -	text = llformat("Textures: %d Fetch: %d(%d) Pkts:%d(%d) Cache R/W: %d/%d LFS:%d IW:%d RAW:%d HTP:%d", +	text = llformat("Textures: %d Fetch: %d(%d) Pkts:%d(%d) Cache R/W: %d/%d LFS:%d IW:%d RAW:%d HTP:%d CRE:%d",  					gTextureList.getNumImages(),  					LLAppViewer::getTextureFetch()->getNumRequests(), LLAppViewer::getTextureFetch()->getNumDeletes(),  					LLAppViewer::getTextureFetch()->mPacketCount, LLAppViewer::getTextureFetch()->mBadPacketCount,  @@ -502,7 +502,8 @@ void LLGLTexMemBar::draw()  					LLLFSThread::sLocal->getPending(),  					LLAppViewer::getImageDecodeThread()->getPending(),   					LLImageRaw::sRawImageCount, -					LLAppViewer::getTextureFetch()->getNumHTTPRequests()); +					LLAppViewer::getTextureFetch()->getNumHTTPRequests(), +					gTextureList.mCreateTextureList.size());  	LLFontGL::getFontMonospace()->renderUTF8(text, 0, 0, h_offset + line_height*2,  									 text_color, LLFontGL::LEFT, LLFontGL::TOP); diff --git a/indra/newview/llviewercontrol.cpp b/indra/newview/llviewercontrol.cpp index f3db0ab170..57434bd1e4 100644 --- a/indra/newview/llviewercontrol.cpp +++ b/indra/newview/llviewercontrol.cpp @@ -72,6 +72,8 @@  #include "llrender.h"  #include "llbottomtray.h"  #include "llnavigationbar.h" +#include "llfloatertools.h" +#include "llpaneloutfitsinventory.h"  #ifdef TOGGLE_HACKED_GODLIKE_VIEWER  BOOL 				gHackGodmode = FALSE; @@ -119,12 +121,6 @@ static bool handleSetShaderChanged(const LLSD& newvalue)  	return true;  } -static bool handleSetSelfInvisible( const LLSD& newvalue) -{ -	LLVOAvatarSelf::onChangeSelfInvisible( newvalue.asBoolean() ); -	return true; -} -  static bool handleReleaseGLBufferChanged(const LLSD& newvalue)  {  	if (gPipeline.isInit()) @@ -525,6 +521,18 @@ bool toggle_show_favorites_panel(const LLSD& newvalue)  	return true;  } +bool toggle_show_appearance_editor(const LLSD& newvalue) +{ +	LLPanelOutfitsInventory::sShowDebugEditor = newvalue.asBoolean(); +	return true; +} + +bool toggle_show_object_render_cost(const LLSD& newvalue) +{ +	LLFloaterTools::sShowObjectCost = newvalue.asBoolean(); +	return true; +} +  ////////////////////////////////////////////////////////////////////////////  void settings_setup_listeners() @@ -545,7 +553,6 @@ void settings_setup_listeners()  	gSavedSettings.getControl("WindLightUseAtmosShaders")->getSignal()->connect(boost::bind(&handleSetShaderChanged, _2));  	gSavedSettings.getControl("RenderGammaFull")->getSignal()->connect(boost::bind(&handleSetShaderChanged, _2));  	gSavedSettings.getControl("RenderAvatarMaxVisible")->getSignal()->connect(boost::bind(&handleAvatarMaxVisibleChanged, _2)); -	gSavedSettings.getControl("RenderAvatarInvisible")->getSignal()->connect(boost::bind(&handleSetSelfInvisible, _2));  	gSavedSettings.getControl("RenderVolumeLODFactor")->getSignal()->connect(boost::bind(&handleVolumeLODChanged, _2));  	gSavedSettings.getControl("RenderAvatarLODFactor")->getSignal()->connect(boost::bind(&handleAvatarLODChanged, _2));  	gSavedSettings.getControl("RenderTerrainLODFactor")->getSignal()->connect(boost::bind(&handleTerrainLODChanged, _2)); @@ -668,6 +675,8 @@ void settings_setup_listeners()  	gSavedSettings.getControl("ShowSnapshotButton")->getSignal()->connect(boost::bind(&toggle_show_snapshot_button, _2));  	gSavedSettings.getControl("ShowNavbarNavigationPanel")->getSignal()->connect(boost::bind(&toggle_show_navigation_panel, _2));  	gSavedSettings.getControl("ShowNavbarFavoritesPanel")->getSignal()->connect(boost::bind(&toggle_show_favorites_panel, _2)); +	gSavedSettings.getControl("ShowDebugAppearanceEditor")->getSignal()->connect(boost::bind(&toggle_show_appearance_editor, _2)); +	gSavedSettings.getControl("ShowObjectRenderingCost")->getSignal()->connect(boost::bind(&toggle_show_object_render_cost, _2));  }  #if TEST_CACHED_CONTROL diff --git a/indra/newview/llviewermediafocus.cpp b/indra/newview/llviewermediafocus.cpp index e04a54fbd6..a0ac9c2091 100644 --- a/indra/newview/llviewermediafocus.cpp +++ b/indra/newview/llviewermediafocus.cpp @@ -51,6 +51,7 @@  #include "llkeyboard.h"  #include "lltoolmgr.h"  #include "llvovolume.h" +#include "llhelp.h"  //  // LLViewerMediaFocus @@ -302,7 +303,7 @@ BOOL LLViewerMediaFocus::handleKey(KEY key, MASK mask, BOOL called_from_parent)  	{  		media_impl->handleKeyHere(key, mask); -		if (key == KEY_ESCAPE) +		if (KEY_ESCAPE == key)  		{  			// Reset camera zoom in this case.  			if(mFocusedImplID.notNull()) @@ -315,6 +316,15 @@ BOOL LLViewerMediaFocus::handleKey(KEY key, MASK mask, BOOL called_from_parent)  			clearFocus();  		} +		 +		if ( KEY_F1 == key && LLUI::sHelpImpl && mMediaControls.get()) +		{ +			std::string help_topic; +			if (mMediaControls.get()->findHelpTopic(help_topic)) +			{ +				LLUI::sHelpImpl->showTopic(help_topic); +			} +		}  	}  	return true; diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp index 03a6b193dc..93c4c3880e 100644 --- a/indra/newview/llviewermenu.cpp +++ b/indra/newview/llviewermenu.cpp @@ -639,6 +639,20 @@ class LLAdvancedCheckHUDInfo : public view_listener_t  	}  }; + +////////////// +// FLYING   // +////////////// + +class LLAdvancedAgentFlyingInfo : public view_listener_t +{ +	bool handleEvent(const LLSD&) +	{ +		return gAgent.getFlying(); +	} +}; + +  ///////////////////////  // CLEAR GROUP CACHE //  /////////////////////// @@ -2646,7 +2660,7 @@ bool enable_object_edit()  		enable = LLViewerParcelMgr::getInstance()->allowAgentBuild()  			|| LLSelectMgr::getInstance()->getSelection()->isAttachment();  	}  -	else if (LLSelectMgr::getInstance()->selectGetModify()) +	else if (LLSelectMgr::getInstance()->selectGetAllValidAndObjectsFound())  	{  		enable = true;  	} @@ -7709,6 +7723,9 @@ void initialize_menus()  	// Advanced Other Settings	  	view_listener_t::addMenu(new LLAdvancedClearGroupCache(), "Advanced.ClearGroupCache"); +	// Advanced > Shortcuts +	view_listener_t::addMenu(new LLAdvancedAgentFlyingInfo(), "Agent.getFlying"); +	  	// Advanced > Render > Types  	view_listener_t::addMenu(new LLAdvancedToggleRenderType(), "Advanced.ToggleRenderType");  	view_listener_t::addMenu(new LLAdvancedCheckRenderType(), "Advanced.CheckRenderType"); diff --git a/indra/newview/llviewermenufile.cpp b/indra/newview/llviewermenufile.cpp index 48794bbc1a..6bad8843fd 100644 --- a/indra/newview/llviewermenufile.cpp +++ b/indra/newview/llviewermenufile.cpp @@ -40,12 +40,12 @@  #include "llfloaterreg.h"  #include "llfloaterbuycurrency.h"  #include "llfloatersnapshot.h" -#include "llimage.h"
 -#include "llimagebmp.h"
 -#include "llimagepng.h"
 -#include "llimagej2c.h"
 -#include "llimagejpeg.h"
 -#include "llimagetga.h"
 +#include "llimage.h" +#include "llimagebmp.h" +#include "llimagepng.h" +#include "llimagej2c.h" +#include "llimagejpeg.h" +#include "llimagetga.h"  #include "llinventorymodel.h"	// gInventory  #include "llresourcedata.h"  #include "llfloaterperms.h" diff --git a/indra/newview/llviewertexturelist.cpp b/indra/newview/llviewertexturelist.cpp index e066546bd8..8252b7df00 100644 --- a/indra/newview/llviewertexturelist.cpp +++ b/indra/newview/llviewertexturelist.cpp @@ -588,7 +588,7 @@ void LLViewerTextureList::updateImages(F32 max_time)  	F32 total_max_time = max_time;  	max_time -= updateImagesFetchTextures(max_time); -	max_time = llmax(max_time, total_max_time*.25f); // at least 25% of max_time +	max_time = llmax(max_time, total_max_time*.50f); // at least 50% of max_time  	max_time -= updateImagesCreateTextures(max_time);  	if (!mDirtyTextureList.empty()) diff --git a/indra/newview/llvoavatarself.cpp b/indra/newview/llvoavatarself.cpp index b4c45c23d4..ecd6b05ded 100644 --- a/indra/newview/llvoavatarself.cpp +++ b/indra/newview/llvoavatarself.cpp @@ -2021,43 +2021,6 @@ void LLVOAvatarSelf::onCustomizeEnd()  	}  } -// static -void LLVOAvatarSelf::onChangeSelfInvisible(BOOL newvalue) -{ -	LLVOAvatarSelf *avatarp = gAgent.getAvatarObject(); -	if (avatarp) -	{ -		if (newvalue) -		{ -			// we have just requested to set the avatar's baked textures to invisible -			avatarp->setInvisible(TRUE); -		} -		else -		{ -			avatarp->setInvisible(FALSE); -		} -	} -} - -void LLVOAvatarSelf::setInvisible(BOOL newvalue) -{ -	if (newvalue) -	{ -		setCompositeUpdatesEnabled(FALSE); -		for (U32 i = 0; i < mBakedTextureDatas.size(); i++ ) -		{ -			setNewBakedTexture(mBakedTextureDatas[i].mTextureIndex, IMG_INVISIBLE); -		} -		gAgent.sendAgentSetAppearance(); -	} -	else -	{ -		setCompositeUpdatesEnabled(TRUE); -		invalidateAll(); -		gAgent.sendAgentSetAppearance(); -	} -} -  // HACK: this will null out the avatar's local texture IDs before the TE message is sent  //       to ensure local texture IDs are not sent to other clients in the area.  //       this is a short-term solution. The long term solution will be to not set the texture diff --git a/indra/newview/llvoavatarself.h b/indra/newview/llvoavatarself.h index c7bd4eaadc..dc70996f0b 100644 --- a/indra/newview/llvoavatarself.h +++ b/indra/newview/llvoavatarself.h @@ -308,8 +308,6 @@ public:  	// Visibility  	//--------------------------------------------------------------------  public: -	static void		onChangeSelfInvisible(BOOL newvalue); -	void			setInvisible(BOOL newvalue);  	bool			sendAppearanceMessage(LLMessageSystem *mesgsys) const;  /**                    Appearance diff --git a/indra/newview/llwearable.cpp b/indra/newview/llwearable.cpp index 0405b9d28b..b789bd3650 100644 --- a/indra/newview/llwearable.cpp +++ b/indra/newview/llwearable.cpp @@ -356,7 +356,7 @@ BOOL LLWearable::importFile( LLFILE* file )  	if( num_parameters != mVisualParamIndexMap.size() )  	{ -		llwarns << "Wearable parameter mismatch. Reading in " << num_parameters << " from file, but created " << mVisualParamIndexMap.size() << " from avatar parameters. " << llendl; +		llwarns << "Wearable parameter mismatch. Reading in " << num_parameters << " from file, but created " << mVisualParamIndexMap.size() << " from avatar parameters. type: " <<  mType << llendl;  	}  	// parameters diff --git a/indra/newview/skins/default/colors.xml b/indra/newview/skins/default/colors.xml index b6995d2122..91402acc0a 100644 --- a/indra/newview/skins/default/colors.xml +++ b/indra/newview/skins/default/colors.xml @@ -378,7 +378,7 @@       reference="White_25" />      <color       name="InventorySearchStatusColor" -     reference="Black" /> +     reference="EmphasisColor" />      <color       name="LabelDisabledColor"  	 reference="White_25" /> diff --git a/indra/newview/skins/default/xui/en/floater_tools.xml b/indra/newview/skins/default/xui/en/floater_tools.xml index 5e68850e30..f2a5d902e7 100644 --- a/indra/newview/skins/default/xui/en/floater_tools.xml +++ b/indra/newview/skins/default/xui/en/floater_tools.xml @@ -2676,6 +2676,7 @@ even though the user gets a free copy.  			 height="18"  			 layout="topleft"  			 left="10" +       use_ellipsis="true"   			 read_only="true"  			 name="media_info"  			 width="180" /> diff --git a/indra/newview/skins/default/xui/en/inspect_object.xml b/indra/newview/skins/default/xui/en/inspect_object.xml index cedf83f8b1..00e00b9694 100644 --- a/indra/newview/skins/default/xui/en/inspect_object.xml +++ b/indra/newview/skins/default/xui/en/inspect_object.xml @@ -92,8 +92,8 @@ This is a really long description for an object being as how it is at least 80 c     height="13"     left_delta="0"     name="object_media_url" -   top_pad="-1" -   width="291" +   bottom_pad="2" +   width="200"     max_length = "50"     use_ellipses="true">     http://www.superdupertest.com diff --git a/indra/newview/skins/default/xui/en/menu_inventory.xml b/indra/newview/skins/default/xui/en/menu_inventory.xml index 0f400777b8..d29dfa7034 100644 --- a/indra/newview/skins/default/xui/en/menu_inventory.xml +++ b/indra/newview/skins/default/xui/en/menu_inventory.xml @@ -471,6 +471,14 @@           function="Inventory.DoToSelected"           parameter="delete" />      </menu_item_call> +    <menu_item_call +     label="Delete System Folder" +     layout="topleft" +     name="Delete System Folder"> +        <menu_item_call.on_click +         function="Inventory.DoToSelected" +         parameter="delete_system_folder" /> +    </menu_item_call>      <menu_item_separator       layout="topleft" />      <menu_item_separator diff --git a/indra/newview/skins/default/xui/en/panel_outfits_inventory.xml b/indra/newview/skins/default/xui/en/panel_outfits_inventory.xml index ab73f135b9..5c99022f35 100644 --- a/indra/newview/skins/default/xui/en/panel_outfits_inventory.xml +++ b/indra/newview/skins/default/xui/en/panel_outfits_inventory.xml @@ -69,18 +69,7 @@  		  name="options_gear_btn"  		  top="6"  		  width="18" /> -		 <button -		  follows="bottom|left" -		  height="18" -		  image_selected="AddItem_Press" -		  image_unselected="AddItem_Off" -		  image_disabled="AddItem_Disabled" -		  layout="topleft" -		  left_pad="5" -		  name="add_btn" -		  tool_tip="Add new item" -		  width="18" /> -		 <dnd_button +         <dnd_button  		  follows="bottom|left"  		  height="18"  		  image_selected="TrashItem_Press" @@ -92,13 +81,34 @@  		  top="6"  		  width="18" />  	 <button -	  follows="top|left" -		height="23" -		label="Wear" +	  follows="bottom|left" +		height="23"  +		label="Edit Look"   		layout="topleft" -		name="wear_btn" -		right="-5" -		top_pad="0" +        left="10" +		name="look_edit_btn" +        top="26" +        visible="false"   		width="90" /> +     <button +      follows="bottom|left" +      height="23"  +      label="Make Outfit"  +      layout="topleft" +      name="make_outfit_btn" +      tool_tip="Save appearance as an outfit" +       top="26" +      right="-110" +      width="90" /> +     <button +      follows="bottom|right"  +      height="23"  +      label="Wear" +      layout="topleft" +      name="wear_btn" +      right="-10" +       top="26" +      tool_tip="Wear selected outfit" +      width="90" />  	 </panel>  </panel> diff --git a/indra/newview/skins/default/xui/en/panel_prim_media_controls.xml b/indra/newview/skins/default/xui/en/panel_prim_media_controls.xml index bffb28d16e..b14089c3a2 100644 --- a/indra/newview/skins/default/xui/en/panel_prim_media_controls.xml +++ b/indra/newview/skins/default/xui/en/panel_prim_media_controls.xml @@ -5,11 +5,12 @@  	background_visible="false"  	height="200"  	layout="topleft" +	help_topic="prim_media_controls"  	mouse_opaque="false"  	width="800">    <string name="control_background_image_name">Inspector_Background</string>    <string name="skip_step">0.2</string> -  <string name="min_width">300</string> +  <string name="min_width">400</string>    <string name="min_height">120</string>    <string name="zoom_near_padding">1.0</string>    <string name="zoom_medium_padding">1.25</string> @@ -398,6 +399,8 @@  			function="MediaCtrl.ToggleMute" />  		<button.mouseenter_callback  			function="MediaCtrl.ShowVolumeSlider" /> +		<button.mouseleave_callback +			function="MediaCtrl.HideVolumeSlider" />  	  </button>  	  <slider  		  orientation="vertical" @@ -413,6 +416,10 @@  		  volume="true">  		<slider.commit_callback  			function="MediaCtrl.Volume"/> +		<slider.mouseenter_callback +			function="MediaCtrl.ShowVolumeSlider" /> +		<slider.mouseleave_callback +			function="MediaCtrl.HideVolumeSlider" />  	  </slider>  	</layout_panel>  	<panel diff --git a/indra/newview/skins/default/xui/en/sidepanel_appearance.xml b/indra/newview/skins/default/xui/en/sidepanel_appearance.xml index 27f19d44fa..7f4b4aef82 100644 --- a/indra/newview/skins/default/xui/en/sidepanel_appearance.xml +++ b/indra/newview/skins/default/xui/en/sidepanel_appearance.xml @@ -107,6 +107,7 @@ left="0"     layout="topleft"     left="0"     name="panel_look_info" +   top="35"     visible="false" />     <panel     class="panel_edit_wearable" @@ -115,6 +116,7 @@ left="0"     layout="topleft"     left="0"     name="panel_edit_wearable" +   top="35"     visible="false" />  </panel> diff --git a/indra/newview/skins/default/xui/en/sidepanel_item_info.xml b/indra/newview/skins/default/xui/en/sidepanel_item_info.xml index e04af2bad6..7b0b4b0bde 100644 --- a/indra/newview/skins/default/xui/en/sidepanel_item_info.xml +++ b/indra/newview/skins/default/xui/en/sidepanel_item_info.xml @@ -6,7 +6,7 @@  	 name="item properties"  	 help_topic="item_properties"  	 save_rect="true" -	 title="Inventory Item Properties" +	 title="Object Profile"  	 width="333">  	<panel.string  		 name="unknown"> @@ -50,15 +50,15 @@       width="23" />      <text       follows="top|left|right" -     font="SansSerifHugeBold" +     font="SansSerifHuge"       height="26"       layout="topleft"       left_pad="10"       name="title" -     text_color="white" +     text_color="LtGray"       top="0"       use_ellipses="true" -     value="Item Properties" +     value="Object Profile"       width="275" />  	<panel           follows="all" @@ -71,7 +71,7 @@           width="313"     background_visible="true"     bg_alpha_color="DkGray2"> -	    <text	 	 	  +	    <text  		     type="string"  		     length="1"  		     follows="left|top" @@ -79,7 +79,7 @@  		     layout="topleft"  		     left="5"  		     name="LabelItemNameTitle" -		     top="5" +		     top="10"  		     width="78">  	        Name:  	    </text> @@ -87,7 +87,7 @@  		     border_style="line"  		     border_thickness="1"  	    	 follows="left|top|right" -		     height="16" +		     height="20"  		     layout="topleft"  	    	 left_delta="78"  		     max_length="63" @@ -102,7 +102,7 @@  		     layout="topleft"      		 left="5"  		     name="LabelItemDescTitle" -    		 top_delta="20" +    		 top_pad="10"  	    	 width="78">  	        Description:  	    </text> @@ -115,7 +115,7 @@      		 left_delta="78"  		     max_length="127"      		 name="LabelItemDesc" -	    	 top_delta="0" +	    	 top_delta="-5"  	    	 width="225" />  	    <text  		     type="string" @@ -123,32 +123,41 @@  		     follows="left|top"  		     height="23"  		     layout="topleft" -		     left="10" +    		 left="5"  		     name="LabelCreatorTitle" -		     top="65" +top_pad="10"  		     width="78">  	        Creator:      	</text> +	        <avatar_icon +     follows="top|left" +     height="20" +     default_icon_name="Generic_Person" +     layout="topleft" +     left_pad="0" +		     top_delta="-6" +     mouse_opaque="true" +     width="20" />  	    <text  		     type="string" -		     length="1" -		     follows="left|top" -		     height="23" -		     layout="topleft" -		     left_delta="78" +     follows="left|right" +     font="SansSerifSmall" +     height="15" +     layout="topleft" +     left_pad="5"  		     name="LabelCreatorName" -		     top_delta="0" +		     top_delta="6"  		     width="140">  	        Nicole Linden  	     </text>  	     <button  			 follows="top|right"  			 height="23" -			 label="Profile..." +			 label="Profile"  			 layout="topleft" -			 left_delta="144" +			 right="-1"  			 name="BtnCreator" -			 top_delta="0" +			 top_delta="-6"  			 width="78" />  	     <text  			 type="string" @@ -156,32 +165,41 @@  			 follows="left|top"  			 height="23"  			 layout="topleft" -			 left="10" +    		 left="5"  			 name="LabelOwnerTitle" -			 top="85" +top_pad="5"  			 width="78">  			    Owner:  	     </text> +	     <avatar_icon +     follows="top|left" +     height="20" +     default_icon_name="Generic_Person" +     layout="topleft" +     left_pad="0" +		     top_delta="-6" +     mouse_opaque="true" +     width="20" />  	     <text  			 type="string" -			 length="1" -			 follows="left|top" -			 height="23" -			 layout="topleft" -			 left_delta="78" +     follows="left|right" +     font="SansSerifSmall" +     height="15" +     layout="topleft" +     left_pad="5"  			 name="LabelOwnerName" -			 top_delta="0" +			 top_delta="6"  			 width="140">  			    Thrax Linden  	     </text>  	     <button  			 follows="top|right"  			 height="23" -			 label="Profile..." +			 label="Profile"  			 layout="topleft" -			 left_delta="144" +			 right="-1"  			 name="BtnOwner" -			 top_delta="0" +			 top_delta="-3"  			 width="78" />  	     <text  			 type="string" @@ -189,9 +207,9 @@  			 follows="left|top"  			 height="23"  			 layout="topleft" -			 left="10" +    		 left="5"  			 name="LabelAcquiredTitle" -			 top="105" +top_pad="10"  			 width="78">  			Acquired:  	     </text> @@ -207,134 +225,146 @@  			 width="222">  			Wed May 24 12:50:46 2006  	    </text> -	    <text -			 type="string" -			 length="1" -			 follows="left|top" -			 height="23" -			 layout="topleft" -			 left="10" -			 name="OwnerLabel" -			 top="125" -			 width="78"> -			You: -	    </text> +	 <panel +         border="false" +         follows="left|top" +         layout="topleft" +         mouse_opaque="false" +         background_visible="true" +         bg_alpha_color="DkGray" +         name="perms_inv" +         left="0" +         top_pad="25" +         height="155" +         width="313"> +	  <text +             type="string" +             length="1" +             left="10" +             top_pad="13" +             text_color="EmphasisColor" +	     height="15" +             follows="left|top|right" +             layout="topleft" +             name="perm_modify" +             width="200"> +                You can: +            </text>  	    <check_box -			 height="23" -			 label="Edit" +			 height="18" +			 label="Modify"  			 layout="topleft" -			 left_pad="5" +			 left="20"  			 name="CheckOwnerModify" -			 top_delta="0" -			 width="78" /> +			 top_pad="0" +			 width="90" />  	    <check_box -			 height="23" +			 height="18"  			 label="Copy"  			 layout="topleft" -			 left_delta="0" +			 left_pad="0"  			 name="CheckOwnerCopy" -			 top_pad="5" -			 width="88" /> +			 width="90" />  	    <check_box -			 height="23" -			 label="Resell" +			 height="18" +			 label="Transfer"  			 layout="topleft" -			 left_delta="0" +			 left_pad="0"  			 name="CheckOwnerTransfer" -			 top_pad="5"  			 width="106" />  	    <text  			 type="string"  			 length="1"  			 follows="left|top" -			 height="10" +			 height="16"  			 layout="topleft"  			 left="10"  			 name="AnyoneLabel" -			 top_pad="5" -			 width="78"> +			 top_pad="8" +			 width="100">  			Anyone:  	    </text>  	    <check_box -			 height="16" +			 height="18"  			 label="Copy"  			 layout="topleft" -			 left_pad="5" +			 left_pad="0"  			 name="CheckEveryoneCopy" -			 top_delta="0" -			 width="130" /> +			 top_delta="-2" +			 width="150" />      	<text  			 type="string"  			 length="1"  			 follows="left|top" -			 height="10" +			 height="16"  			 layout="topleft"  			 left="10"  			 name="GroupLabel" -			 top_pad="5" -			 width="78"> +			 top_pad="8" +			 width="100">  			Group:      	</text>  	    <check_box -			 height="16" +			 height="18"  			 label="Share"  			 layout="topleft" -			 left_pad="5" +			 left_pad="0" +			 top_delta="-2"  			 name="CheckShareWithGroup" -			 top_delta="5" -			 width="106" /> +			 tool_tip="Allow all members of the set group to share your modify permissions for this object. You must Deed to enable role restrictions." +			 width="150" />  	    <text  			 type="string"  			 length="1"  			 follows="left|top" -			 height="25" +			 height="16"  			 layout="topleft"  			 left="10"  			 name="NextOwnerLabel" -			 top_pad="5" -			 width="78" +			 top_pad="8" +			 width="200"  			 word_wrap="true">  			Next owner:  	    </text>  	    <check_box -			 height="16" -			 label="Edit" +			 height="18" +			 label="Modify"  			 layout="topleft" -			 left_pad="5" +			 left="20" +			 top_pad="0"  			 name="CheckNextOwnerModify" -			 top_delta="0" -			 width="78" /> +			 width="90" />  	    <check_box -			 height="16" +			 height="18"  			 label="Copy"  			 layout="topleft" -			 left_delta="0" +			 left_pad="0"  			 name="CheckNextOwnerCopy" -			 top_pad="5" -			 width="88" /> +			 width="90" />  	    <check_box -			 height="16" -			 label="Resell" +			 height="18" +			 label="Transfer"  			 layout="topleft" -			 left_delta="0" +			 left_pad="0"  			 name="CheckNextOwnerTransfer" -			 top_pad="5" +			 tool_tip="Next owner can give away or resell this object"  			 width="106" /> +	    </panel>  	    <check_box -			 height="16" +			 height="18"  			 label="For Sale"  			 layout="topleft" -			 left="10" +			 left="20"  			 name="CheckPurchase" -			 top_pad="5" -			 width="78" /> +			 top_pad="20" +			 width="100" />  		<combo_box -			 height="19" -			 left_pad="5" +			 height="23" +			 left_pad="0"  			 layout="topleft"  			 follows="left|top"  			 name="combobox sale copy" -			 width="110"> +			 width="170">  			<combo_box.item  			     label="Copy"  			     name="Copy" @@ -350,26 +380,14 @@  			    increment="1"  			    control_name="Edit Cost"  			    name="Edit Cost" -			    label="Price:" -			    label_width="100" -			    left="10" -			    width="192" +			    label="Price: L$" +			    label_width="75" +			    left="120" +			    width="170"  			    min_val="1" -			    height="19" +			    height="23"  			    max_val="999999999" -			    top_pad="5"/> -	    <text -			    type="string" -			    length="1" -			    height="15" -			    follows="left|top" -			    layout="topleft" -			    left_delta="82" -			    name="CurrencySymbol" -			    top_delta="1" -			    width="18"> -			L$ -	    </text> +			    top_pad="10"/>  	    <!--line_editor  			 border_style="line"  			 border_thickness="1" @@ -492,4 +510,22 @@  			Price: L$  	    </text-->  	</panel> +    <panel +		 height="25" +		 layout="bottomright" +		 help_topic="button_tab" +		 name="button_panel" +		 left="5" +		 bottom="5" +		 width="313"> +	    <button +		     follows="bottom|right" +		     height="25" +		     label="Cancel" +		     layout="topleft" +		     name="cancel_btn" +		     right="-1" +		     left_pad="10" +		     width="100" /> +	</panel>  </panel> diff --git a/indra/viewer_components/login/lllogin.cpp b/indra/viewer_components/login/lllogin.cpp index 02c13716ed..018f691672 100644 --- a/indra/viewer_components/login/lllogin.cpp +++ b/indra/viewer_components/login/lllogin.cpp @@ -222,13 +222,15 @@ void LLLogin::Impl::login_(LLCoros::self& self, std::string uri, LLSD credential                  // Still Downloading -- send progress update.                  sendProgressEvent("offline", "downloading");              } +				  +			LL_DEBUGS("LLLogin") << "Auth Response: " << mAuthResponse << LL_ENDL;              status = mAuthResponse["status"].asString();              // Okay, we've received our final status event for this              // request. Unless we got a redirect response, break the retry              // loop for the current rewrittenURIs entry. -            if (! (status == "Complete" && -                   mAuthResponse["responses"]["login"].asString() == "indeterminate")) +            if (!(status == "Complete" && +                  mAuthResponse["responses"]["login"].asString() == "indeterminate"))              {                  break;              } @@ -237,8 +239,8 @@ void LLLogin::Impl::login_(LLCoros::self& self, std::string uri, LLSD credential              // to some other URI ("indeterminate" -- why not "redirect"?).              // The response should contain another uri to try, with its              // own auth method. -            request["uri"] = mAuthResponse["next_url"]; -            request["method"] = mAuthResponse["next_method"]; +            request["uri"] = mAuthResponse["responses"]["next_url"].asString(); +            request["method"] = mAuthResponse["responses"]["next_method"].asString();          } // loop back to try the redirected URI          // Here we're done with redirects for the current rewrittenURIs diff --git a/indra/viewer_components/login/tests/lllogin_test.cpp b/indra/viewer_components/login/tests/lllogin_test.cpp index 69a8424e87..7159959a4f 100644 --- a/indra/viewer_components/login/tests/lllogin_test.cpp +++ b/indra/viewer_components/login/tests/lllogin_test.cpp @@ -311,14 +311,15 @@ namespace tut  		data["error"] = "dummy response";  		data["transfer_rate"] = 0;  		data["responses"]["login"] = "indeterminate"; -		data["next_url"] = "login.indeterminate.com";			 -		data["next_method"] = "test_login_method"; 			 +		data["responses"]["next_url"] = "login.indeterminate.com";			 +		data["responses"]["next_method"] = "test_login_method"; 			  		dummyXMLRPC.setResponse(data);  		dummyXMLRPC.sendReply();  		ensure_equals("Fail back to authenticate 2", listener.lastEvent()["change"].asString(), "authenticating");   		ensure_equals("Attempt 3", listener.lastEvent()["data"]["attempt"].asInteger(), 3);   		ensure_equals("URI 3", listener.lastEvent()["data"]["request"]["uri"].asString(), "login.indeterminate.com");  +		ensure_equals("Method 3", listener.lastEvent()["data"]["request"]["method"].asString(), "test_login_method");   		// Finally let the auth succeed.  		data.clear(); diff --git a/install.xml b/install.xml index fafbe816ba..ff49724160 100644 --- a/install.xml +++ b/install.xml @@ -955,9 +955,9 @@ anguage Infrstructure (CLI) international standard</string>            <key>linux</key>            <map>              <key>md5sum</key> -            <string>ffede2775355676096b1085cbb9d0da7</string> +            <string>09674cbae982e7e7f6ebc7e1d06580e8</string>              <key>url</key> -            <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/llqtwebkit-linux-20091117.tar.bz2</uri> +            <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/llqtwebkit-linux-20091216.tar.bz2</uri>            </map>            <key>windows</key>            <map>  | 
