Applying the Patch

Download the patch below and apply against Singularity 1.6.0.3:

cd singularity-viewer-SingularityViewer-8421661
cat modified_singularity.patch | patch -p1 --dry-run
patching file indra/newview/llagent.h
patching file indra/newview/llfloatercustomize.cpp
patching file indra/newview/lltexturectrl.cpp
patching file indra/newview/llviewercontrol.h
patching file indra/newview/llviewermenu.cpp
patching file indra/newview/llviewermenufile.cpp
patching file indra/newview/llviewerobject.cpp
patching file indra/newview/llviewerobjectbackup.cpp
patching file indra/newview/skins/default/xui/en-us/menu_pie_attachment.xml
patching file indra/newview/skins/default/xui/en-us/menu_pie_avatar.xml
patching file indra/newview/statemachine/aifilepicker.cpp
patching file indra/newview/statemachine/aifilepicker.h
patching file indra/plugins/filepicker/llfilepicker.cpp
cat modified_singularity.patch | patch -p1

Then recompile Singularity.

Patch

modified_singularity.patch
diff --git a/indra.orig/newview/llagent.h b/indra/newview/llagent.h
index 2c87d27..c9f7430 100644
--- a/indra.orig/newview/llagent.h
+++ b/indra/newview/llagent.h
@@ -30,6 +30,7 @@
  * $/LicenseInfo$
  */
 
+#define TOGGLE_HACKED_GODLIKE_VIEWER 1
 #ifndef LL_LLAGENT_H
 #define LL_LLAGENT_H
 
diff --git a/indra.orig/newview/llfloatercustomize.cpp b/indra/newview/llfloatercustomize.cpp
index b43d471..8b45d67 100644
--- a/indra.orig/newview/llfloatercustomize.cpp
+++ b/indra/newview/llfloatercustomize.cpp
@@ -603,18 +603,18 @@ void LLPanelEditWearable::setSubpart( ESubpart subpart )
 			{
 				can_import = true;
 
-				if (is_complete && 
+				/*if (is_complete && 
 					gAgent.getID() == item->getPermissions().getOwner() &&
 					gAgent.getID() == item->getPermissions().getCreator() &&
 					(PERM_ITEM_UNRESTRICTED &
 					perm_mask) == PERM_ITEM_UNRESTRICTED)
-				{
-					can_export = true;
-				}
+				{*/
+					if(is_complete) can_export = true;
+				//}
 			}
 		}
 		setUIPermissions(perm_mask, is_complete);
-		BOOL editable = ((perm_mask & PERM_MODIFY) && is_complete) ? TRUE : FALSE;
+		BOOL editable = TRUE; //((perm_mask & PERM_MODIFY) && is_complete) ? TRUE : FALSE;
 
 		for(LLViewerVisualParam* param = (LLViewerVisualParam *)avatar->getFirstVisualParam(); 
 			param; 
@@ -868,8 +868,8 @@ void LLPanelEditWearable::addTextureDropTarget( ETextureIndex te, const std::str
 		texture_ctrl->setDefaultImageAssetID(default_image_id);
 		texture_ctrl->setAllowNoTexture( allow_no_texture );
 		// Don't allow (no copy) or (no transfer) textures to be selected.
-		texture_ctrl->setImmediateFilterPermMask(PERM_NONE);//PERM_COPY | PERM_TRANSFER);
-		texture_ctrl->setNonImmediateFilterPermMask(PERM_NONE);//PERM_COPY | PERM_TRANSFER);
+		//texture_ctrl->setImmediateFilterPermMask(PERM_NONE);//PERM_COPY | PERM_TRANSFER);
+		//texture_ctrl->setNonImmediateFilterPermMask(PERM_NONE);//PERM_COPY | PERM_TRANSFER);
 	}
 	mTextureList[name] = te;
 	LLVOAvatar* avatar = gAgentAvatarp;
@@ -960,16 +960,16 @@ void LLPanelEditWearable::draw()
 	LLWearable* wearable = gAgentWearables.getWearable( mType );
 	BOOL has_wearable = (wearable != NULL );
 	BOOL is_dirty = isDirty();
-	BOOL is_modifiable = FALSE;
-	BOOL is_copyable = FALSE;
+	BOOL is_modifiable = TRUE; //FALSE;
+	BOOL is_copyable = TRUE; //FALSE;
 	BOOL is_complete = FALSE;
 	LLViewerInventoryItem* item;
 	item = (LLViewerInventoryItem*)gAgentWearables.getWearableInventoryItem(mType);
 	if(item)
 	{
-		const LLPermissions& perm = item->getPermissions();
-		is_modifiable = perm.allowModifyBy(gAgent.getID(), gAgent.getGroupID());
-		is_copyable = perm.allowCopyBy(gAgent.getID(), gAgent.getGroupID());
+		//const LLPermissions& perm = item->getPermissions();
+		//is_modifiable = perm.allowModifyBy(gAgent.getID(), gAgent.getGroupID());
+		//is_copyable = perm.allowCopyBy(gAgent.getID(), gAgent.getGroupID());
 		is_complete = item->isComplete();
 	}
 
@@ -1252,8 +1252,8 @@ void LLPanelEditWearable::onCommitSexChange( LLUICtrl*, void* userdata )
 
 void LLPanelEditWearable::setUIPermissions(U32 perm_mask, BOOL is_complete)
 {
-	BOOL is_copyable = (perm_mask & PERM_COPY) ? TRUE : FALSE;
-	BOOL is_modifiable = (perm_mask & PERM_MODIFY) ? TRUE : FALSE;
+	BOOL is_copyable = TRUE; //(perm_mask & PERM_COPY) ? TRUE : FALSE;
+	BOOL is_modifiable = TRUE; //(perm_mask & PERM_MODIFY) ? TRUE : FALSE;
 
 	childSetEnabled("Save", is_modifiable && is_complete);
 	childSetEnabled("Save As", is_copyable && is_complete);
@@ -1941,8 +1941,8 @@ void LLFloaterCustomize::onBtnExport_continued(AIFilePicker* filepicker)
 			item = (LLViewerInventoryItem*)gAgentWearables.getWearableInventoryItem((LLWearableType::EType)i);
 			if(item)
 			{
-				const LLPermissions& perm = item->getPermissions();
-				is_modifiable = perm.allowModifyBy(gAgent.getID(), gAgent.getGroupID());
+				//const LLPermissions& perm = item->getPermissions();
+				is_modifiable = true; //perm.allowModifyBy(gAgent.getID(), gAgent.getGroupID());
 			}
 		}
 		if (is_modifiable)
@@ -1965,8 +1965,8 @@ void LLFloaterCustomize::onBtnExport_continued(AIFilePicker* filepicker)
 			item = (LLViewerInventoryItem*)gAgentWearables.getWearableInventoryItem((LLWearableType::EType)i);
 			if(item)
 			{
-				const LLPermissions& perm = item->getPermissions();
-				is_modifiable = perm.allowModifyBy(gAgent.getID(), gAgent.getGroupID());
+				//const LLPermissions& perm = item->getPermissions();
+				is_modifiable = true; //perm.allowModifyBy(gAgent.getID(), gAgent.getGroupID());
 			}
 		}
 		if (is_modifiable)
@@ -2837,7 +2837,7 @@ void LLFloaterCustomize::updateInventoryUI()
 			{
 				panel->setUIPermissions(perm_mask, is_complete);
 			}
-			BOOL is_vis = panel && item && is_complete && (perm_mask & PERM_MODIFY);
+			BOOL is_vis = panel && item && is_complete; //&& (perm_mask & PERM_MODIFY);
 			childSetVisible("panel_container", is_vis);
 		}
 	}
@@ -2853,9 +2853,9 @@ void LLFloaterCustomize::updateScrollingPanelUI()
 		LLViewerInventoryItem* item = (LLViewerInventoryItem*)gAgentWearables.getWearableInventoryItem(panel->getType());
 		if(item)
 		{
-			U32 perm_mask = item->getPermissions().getMaskOwner();
+			//U32 perm_mask = item->getPermissions().getMaskOwner();
 			BOOL is_complete = item->isComplete();
-			updateScrollingPanelList((perm_mask & PERM_MODIFY) ? is_complete : FALSE);
+			updateScrollingPanelList(is_complete); //updateScrollingPanelList((perm_mask & PERM_MODIFY) ? is_complete : FALSE);
 		}
 	}
 }
diff --git a/indra.orig/newview/lltexturectrl.cpp b/indra/newview/lltexturectrl.cpp
index 48d9b54..9ea530a 100644
--- a/indra.orig/newview/lltexturectrl.cpp
+++ b/indra/newview/lltexturectrl.cpp
@@ -348,13 +348,13 @@ void LLFloaterTexturePicker::setImageID(const LLUUID& image_id)
 		else
 		{
 
-			LLInventoryItem* itemp = gInventory.getItem(image_id);
+			/*LLInventoryItem* itemp = gInventory.getItem(image_id);
 			if (itemp && !itemp->getPermissions().allowCopyBy(gAgent.getID()))
 			{
 				// no copy texture
 				childSetValue("apply_immediate_check", FALSE);
 				mNoCopyTextureSelected = TRUE;
-			}
+			}*/
 			mInventoryPanel->setSelection(item_id, TAKE_FOCUS_NO);
 		}
 	}
@@ -422,7 +422,7 @@ BOOL LLFloaterTexturePicker::handleDragAndDrop(
 	{
 		LLInventoryItem *item = (LLInventoryItem *)cargo_data;
 
-		BOOL copy = item->getPermissions().allowCopyBy(gAgent.getID());
+		/*BOOL copy = item->getPermissions().allowCopyBy(gAgent.getID());
 		BOOL mod = item->getPermissions().allowModifyBy(gAgent.getID());
 		BOOL xfer = item->getPermissions().allowOperationBy(PERM_TRANSFER,
 															gAgent.getID());
@@ -436,7 +436,7 @@ BOOL LLFloaterTexturePicker::handleDragAndDrop(
 		PermissionMask filter_perm_mask = mImmediateFilterPermMask;
 		if ( (item_perm_mask & filter_perm_mask) == filter_perm_mask )
 
-		{
+		{*/
 			if (drop)
 			{
 				setImageID( item->getAssetUUID() );
@@ -444,11 +444,11 @@ BOOL LLFloaterTexturePicker::handleDragAndDrop(
 			}
 
 			*accept = ACCEPT_YES_SINGLE;
-		}
+		/*}
 		else
 		{
 			*accept = ACCEPT_NO;
-		}
+		}*/
 	}
 	else
 	{
@@ -519,9 +519,9 @@ BOOL LLFloaterTexturePicker::postBuild()
 	/**
 	LLInventoryItem* itemp = gInventory.getItem(mImageAssetID);
 
-	if (itemp && (itemp->getPermissions().getMaskOwner() & PERM_ALL))
+	if (itemp && (itemp->getPermissions().getMaskOwner() & PERM_ALL))*/
 		childSetValue("texture_uuid", mImageAssetID);
-	else
+	/*else
 		childSetValue("texture_uuid", LLUUID::null.asString());
 	**/
 	if (!mLabel.empty())
@@ -925,16 +925,16 @@ void LLFloaterTexturePicker::onSelectionChange(const std::deque<LLFolderViewItem
 		if (itemp)
 		{
 			// <dogmode>
-			if (itemp->getPermissions().getMaskOwner() & PERM_ALL)
+			//if (itemp->getPermissions().getMaskOwner() & PERM_ALL)
 				self->childSetValue("texture_uuid", self->mImageAssetID);
-			else
-				self->childSetValue("texture_uuid", LLUUID::null.asString());
+			/*else
+				self->childSetValue("texture_uuid", LLUUID::null.asString());*/
 			// </dogmode>
 
-			if (!itemp->getPermissions().allowCopyBy(gAgent.getID()))
+			/*if (!itemp->getPermissions().allowCopyBy(gAgent.getID()))
 			{
 				self->mNoCopyTextureSelected = TRUE;
-			}
+			}*/
 			self->mImageAssetID = itemp->getAssetUUID();
 			self->mIsDirty = TRUE;
 			if (user_action)
@@ -1030,15 +1030,15 @@ void LLFloaterTexturePicker::onTextureSelect( const LLTextureEntry& te, void *da
 
 		LLInventoryItem* itemp = gInventory.getItem(inventory_item_id);
 
-		if (itemp && !itemp->getPermissions().allowCopyBy(gAgent.getID()))
+		/*if (itemp && !itemp->getPermissions().allowCopyBy(gAgent.getID()))
 		{
 			// no copy texture
 			self->mNoCopyTextureSelected = TRUE;
 		}
 		else 
-		{
+		{*/
 			self->childSetValue("texture_uuid", inventory_item_id.asString());
-		}
+		//}
 
 		self->commitIfImmediateSet();
 	}
diff --git a/indra.orig/newview/llviewercontrol.h b/indra/newview/llviewercontrol.h
index df4313e..91e543e 100644
--- a/indra.orig/newview/llviewercontrol.h
+++ b/indra/newview/llviewercontrol.h
@@ -41,7 +41,7 @@ class LLUICtrl;
 
 // Enabled this definition to compile a 'hacked' viewer that
 // allows a hacked godmode to be toggled on and off.
-#define TOGGLE_HACKED_GODLIKE_VIEWER 
+#define TOGGLE_HACKED_GODLIKE_VIEWER 1
 #ifdef TOGGLE_HACKED_GODLIKE_VIEWER
 extern BOOL gHackGodmode;
 #endif
diff --git a/indra.orig/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp
index aff0628..ab767b2 100644
--- a/indra.orig/newview/llviewermenu.cpp
+++ b/indra/newview/llviewermenu.cpp
@@ -1028,14 +1028,14 @@ void init_client_menu(LLMenuGL* menu)
 
 // <dogmode> 
 #ifdef TOGGLE_HACKED_GODLIKE_VIEWER
-	if (!LLViewerLogin::getInstance()->isInProductionGrid())
-	{
+	//if (!LLViewerLogin::getInstance()->isInProductionGrid())
+	//{
 		menu->append(new LLMenuItemCheckGL("Hacked Godmode",
 										   &handle_toggle_hacked_godmode,
 										   NULL,
 										   &check_toggle_hacked_godmode,
 										   (void*)"HackedGodmode"));
-	}
+	//}
 #endif
 // </dogmode>
 	menu->append(new LLMenuItemCallGL("Clear Group Cache", 
@@ -2831,6 +2831,8 @@ class LLObjectEnableExport : public view_listener_t
 		bool new_value = (object != NULL);
 		if (new_value)
 		{
+		  gMenuHolder->findControl(userdata["control"].asString())->setValue(new_value);
+		  return true;
 			struct ff : public LLSelectedNodeFunctor
 			{
 				ff(const LLSD& data) : LLSelectedNodeFunctor(), userdata(data)
@@ -4922,8 +4924,8 @@ BOOL enable_take()
 		return TRUE;
 #else
 # ifdef TOGGLE_HACKED_GODLIKE_VIEWER
-		if (!LLViewerLogin::getInstance()->isInProductionGrid() 
-            && gAgent.isGodlike())
+		if (/*!LLViewerLogin::getInstance()->isInProductionGrid()*/ 
+            /*&&*/ gAgent.isGodlike())
 		{
 			return TRUE;
 		}
@@ -5554,8 +5556,8 @@ class LLObjectEnableDelete : public view_listener_t
 			TRUE;
 #else
 # ifdef TOGGLE_HACKED_GODLIKE_VIEWER
-			(!LLViewerLogin::getInstance()->isInProductionGrid()
-             && gAgent.isGodlike()) ||
+			(/*!LLViewerLogin::getInstance()->isInProductionGrid()*/
+             /*&&*/ gAgent.isGodlike()) ||
 # endif
 			LLSelectMgr::getInstance()->canDoDelete();
 #endif
@@ -7834,8 +7836,8 @@ class LLToolsEnableTakeCopy : public view_listener_t
 			all_valid = true;
 #ifndef HACKED_GODLIKE_VIEWER
 # ifdef TOGGLE_HACKED_GODLIKE_VIEWER
-			if (LLViewerLogin::getInstance()->isInProductionGrid()
-                || !gAgent.isGodlike())
+			if (/*LLViewerLogin::getInstance()->isInProductionGrid()*/
+                /*||*/ !gAgent.isGodlike())
 # endif
 			{
 				struct f : public LLSelectedObjectFunctor
@@ -7962,8 +7964,8 @@ BOOL enable_save_into_inventory(void*)
 	return TRUE;
 #else
 # ifdef TOGGLE_HACKED_GODLIKE_VIEWER
-	if (!LLViewerLogin::getInstance()->isInProductionGrid()
-        && gAgent.isGodlike())
+	if (/*!LLViewerLogin::getInstance()->isInProductionGrid()*/
+        /*&&*/ gAgent.isGodlike())
 	{
 		return TRUE;
 	}
@@ -9567,6 +9569,7 @@ void initialize_menus()
 	addMenu(new LLAvatarEnableFreezeEject(), "Avatar.EnableFreezeEject");
 	addMenu(new LLAvatarCopyUUID(), "Avatar.CopyUUID");
 	addMenu(new LLAvatarClientUUID(), "Avatar.ClientID");
+	addMenu(new LLObjectExport(), "Avatar.Export");
 
 	// Object pie menu
 	addMenu(new LLObjectOpen(), "Object.Open");
@@ -9622,6 +9625,7 @@ void initialize_menus()
 
 	addMenu(new LLAttachmentEnableDrop(), "Attachment.EnableDrop");
 	addMenu(new LLAttachmentEnableDetach(), "Attachment.EnableDetach");
+	addMenu(new LLObjectEnableExport(), "Attachment.EnableExport");
 
 	// Land pie menu
 	addMenu(new LLLandBuild(), "Land.Build");
diff --git a/indra.orig/newview/llviewermenufile.cpp b/indra/newview/llviewermenufile.cpp
index 7c449c2..b980116 100644
--- a/indra.orig/newview/llviewermenufile.cpp
+++ b/indra/newview/llviewermenufile.cpp
@@ -889,7 +889,7 @@ void upload_new_resource(const std::string& src_filename, std::string name,
 	{
 		// Unknown extension
 		// *TODO: Translate?
-		error_message = llformat("Unknown file extension .%s\nExpected .wav, .tga, .bmp, .jpg, .jpeg, or .bvh", exten.c_str());
+		error_message = llformat("Unknown file extension .%s\nExpected .wav, .tga, .bmp, .jpg, .jpeg, .bvh or .animatn", exten.c_str());
 		error = TRUE;;
 	}
 
diff --git a/indra.orig/newview/llviewerobject.cpp b/indra/newview/llviewerobject.cpp
index 9bd7e57..a85d32a 100644
--- a/indra.orig/newview/llviewerobject.cpp
+++ b/indra/newview/llviewerobject.cpp
@@ -5118,8 +5118,8 @@ BOOL LLViewerObject::permYouOwner() const
 		return TRUE;
 #else
 # ifdef TOGGLE_HACKED_GODLIKE_VIEWER
-		if (!LLViewerLogin::getInstance()->isInProductionGrid()
-            && (gAgent.getGodLevel() >= GOD_MAINTENANCE))
+		if (/*!LLViewerLogin::getInstance()->isInProductionGrid()*/
+            /*&&*/ (gAgent.getGodLevel() >= GOD_MAINTENANCE))
 		{
 			return TRUE;
 		}
@@ -5155,8 +5155,8 @@ BOOL LLViewerObject::permOwnerModify() const
 		return TRUE;
 #else
 # ifdef TOGGLE_HACKED_GODLIKE_VIEWER
-		if (!LLViewerLogin::getInstance()->isInProductionGrid()
-            && (gAgent.getGodLevel() >= GOD_MAINTENANCE))
+		if (/*!LLViewerLogin::getInstance()->isInProductionGrid()*/
+            /*&&*/ (gAgent.getGodLevel() >= GOD_MAINTENANCE))
 	{
 			return TRUE;
 	}
@@ -5179,8 +5179,8 @@ BOOL LLViewerObject::permModify() const
 		return TRUE;
 #else
 # ifdef TOGGLE_HACKED_GODLIKE_VIEWER
-		if (!LLViewerLogin::getInstance()->isInProductionGrid()
-            && (gAgent.getGodLevel() >= GOD_MAINTENANCE))
+		if (/*!LLViewerLogin::getInstance()->isInProductionGrid()*/
+            /*&&*/ (gAgent.getGodLevel() >= GOD_MAINTENANCE))
 	{
 			return TRUE;
 	}
@@ -5203,8 +5203,8 @@ BOOL LLViewerObject::permCopy() const
 		return TRUE;
 #else
 # ifdef TOGGLE_HACKED_GODLIKE_VIEWER
-		if (!LLViewerLogin::getInstance()->isInProductionGrid()
-            && (gAgent.getGodLevel() >= GOD_MAINTENANCE))
+		if (/*!LLViewerLogin::getInstance()->isInProductionGrid()*/
+            /*&&*/ (gAgent.getGodLevel() >= GOD_MAINTENANCE))
 		{
 			return TRUE;
 		}
@@ -5227,8 +5227,8 @@ BOOL LLViewerObject::permMove() const
 		return TRUE;
 #else
 # ifdef TOGGLE_HACKED_GODLIKE_VIEWER
-		if (!LLViewerLogin::getInstance()->isInProductionGrid()
-            && (gAgent.getGodLevel() >= GOD_MAINTENANCE))
+		if (/*!LLViewerLogin::getInstance()->isInProductionGrid()*/
+            /*&&*/ (gAgent.getGodLevel() >= GOD_MAINTENANCE))
 		{
 			return TRUE;
 		}
@@ -5251,8 +5251,8 @@ BOOL LLViewerObject::permTransfer() const
 		return TRUE;
 #else
 # ifdef TOGGLE_HACKED_GODLIKE_VIEWER
-		if (!LLViewerLogin::getInstance()->isInProductionGrid()
-            && (gAgent.getGodLevel() >= GOD_MAINTENANCE))
+		if (/*!LLViewerLogin::getInstance()->isInProductionGrid()*/
+            /*&&*/ (gAgent.getGodLevel() >= GOD_MAINTENANCE))
 		{
 			return TRUE;
 		}
diff --git a/indra.orig/newview/llviewerobjectbackup.cpp b/indra/newview/llviewerobjectbackup.cpp
index aa0d8fe..c06beb8 100644
--- a/indra.orig/newview/llviewerobjectbackup.cpp
+++ b/indra/newview/llviewerobjectbackup.cpp
@@ -95,8 +95,8 @@ static LLUUID LL_TEXTURE_MEDIA			= LLUUID("8b5fec65-8d8d-9dc5-cda8-8fdf2716e361"
 
 void setDefaultTextures()
 {
-	if (!gHippoGridManager->getConnectedGrid()->isSecondLife())
-	{
+	//if (!gHippoGridManager->getConnectedGrid()->isSecondLife())
+	//{
 		// When not in SL (no texture perm check needed), we can get these
 		// defaults from the user settings...
 		LL_TEXTURE_PLYWOOD = LLUUID(gSavedSettings.getString("DefaultObjectTexture"));
@@ -107,7 +107,7 @@ void setDefaultTextures()
 			// AllowInvisibleTextureInPicker patch)
 			LL_TEXTURE_INVISIBLE = LLUUID(gSavedSettings.getString("UIImgInvisibleUUID"));
 		}
-	}
+	//}
 }
 
 class importResponder: public LLNewAgentInventoryResponder
@@ -396,6 +396,7 @@ void LLObjectBackup::exportObject_continued(AIFilePicker* filepicker)
 
 bool LLObjectBackup::validatePerms(const LLPermissions *item_permissions)
 {
+  return true;
 	if (gHippoGridManager->getConnectedGrid()->isSecondLife())
 	{
 		// In Second Life, you must be the creator to be permitted to export the asset.
@@ -421,11 +422,11 @@ bool LLObjectBackup::validatePerms(const LLPermissions *item_permissions)
 // the textures in the Library), whoever is the actual creator... Go figure !
 LLUUID LLObjectBackup::validateTextureID(LLUUID asset_id)
 {
-	if (!gHippoGridManager->getConnectedGrid()->isSecondLife())
-	{
+	//if (!gHippoGridManager->getConnectedGrid()->isSecondLife())
+	//{
 		// If we are not in Second Life, don't bother.
 		return asset_id;
-	}
+	//}
 	LLUUID texture = LL_TEXTURE_PLYWOOD;
 	if (asset_id == texture ||
 		asset_id == LL_TEXTURE_BLANK ||
diff --git a/indra.orig/newview/skins/default/xui/en-us/menu_pie_attachment.xml b/indra/newview/skins/default/xui/en-us/menu_pie_attachment.xml
index ae508e7..7e2356d 100644
--- a/indra.orig/newview/skins/default/xui/en-us/menu_pie_attachment.xml
+++ b/indra/newview/skins/default/xui/en-us/menu_pie_attachment.xml
@@ -35,6 +35,10 @@
 			<on_click function="Object.DERENDER" />
 			<on_enable function="Object.EnableDerender" />
 		</menu_item_call>
+    <menu_item_call enabled="true" label="Export" mouse_opaque="true" name="Object Export">
+      <on_click function="Object.Export" />
+      <on_enable function="Object.EnableExport" />
+    </menu_item_call>
 	</pie_menu>
 	<menu_item_call enabled="true" label="Appearance..." name="Appearance...">
 		<on_click function="ShowFloater" userdata="appearance" />
diff --git a/indra.orig/newview/skins/default/xui/en-us/menu_pie_avatar.xml b/indra/newview/skins/default/xui/en-us/menu_pie_avatar.xml
index 6258c7d..4a6bde8 100644
--- a/indra.orig/newview/skins/default/xui/en-us/menu_pie_avatar.xml
+++ b/indra/newview/skins/default/xui/en-us/menu_pie_avatar.xml
@@ -46,6 +46,10 @@
 			<menu_item_call enabled="true" label="Derender" mouse_opaque="true" name="Derender">
 				<on_click function="Object.DERENDER" />
 			</menu_item_call>
+      <menu_item_call enabled="true" label="Export" mouse_opaque="true" name="Object Export">
+        <on_click function="Object.Export" />
+        <on_enable function="Object.EnableExport" />
+      </menu_item_call>
 		</pie_menu>
 		<menu_item_call enabled="false" label="Eject..." mouse_opaque="true" name="Eject...">
 			<on_click function="Avatar.Eject" />
diff --git a/indra.orig/newview/statemachine/aifilepicker.cpp b/indra/newview/statemachine/aifilepicker.cpp
index 38cbf69..773b99f 100644
--- a/indra.orig/newview/statemachine/aifilepicker.cpp
+++ b/indra/newview/statemachine/aifilepicker.cpp
@@ -147,6 +147,9 @@ void AIFilePicker::open(ELoadFilter filter, std::string const& default_path, std
 	  case FFLOAD_ANIM:
 		  mFilter = "anim";
 		  break;
+		case FFLOAD_ANIMATN:
+		  mFilter = "animatn";
+		  break;
 #ifdef _CORY_TESTING
 	  case FFLOAD_GEOMETRY:
 		  mFilter = "geometry";
diff --git a/indra.orig/newview/statemachine/aifilepicker.h b/indra/newview/statemachine/aifilepicker.h
index c862231..16708cc 100644
--- a/indra.orig/newview/statemachine/aifilepicker.h
+++ b/indra/newview/statemachine/aifilepicker.h
@@ -43,6 +43,7 @@ enum ELoadFilter
 	FFLOAD_WAV,
 	FFLOAD_IMAGE,
 	FFLOAD_ANIM,
+	FFLOAD_ANIMATN,
 	FFLOAD_XML,
 	FFLOAD_SLOBJECT,
 	FFLOAD_RAW,
--- a/indra.orig/plugins/filepicker/llfilepicker.cpp
+++ b/indra/plugins/filepicker/llfilepicker.cpp
@@ -49,7 +49,7 @@ LLFilePicker LLFilePicker::sInstance;
 #define AO_FILTER L"Animation Override (*.ao)\0*.ao\0"
 #define BLACKLIST_FILTER L"Asset Blacklist (*.blacklist)\0*.blacklist\0"
 // </edit>
-#define ANIM_FILTER L"Animations (*.bvh)\0*.bvh\0"
+#define ANIM_FILTER L"Animations (*.bvh; *.anim; *.animatn)\0*.bvh\0;*.anim\0;*.animatn\0"
 #ifdef _CORY_TESTING
 #define GEOMETRY_FILTER L"SL Geometry (*.slg)\0*.slg\0"
 #endif
@@ -752,8 +752,10 @@ Boolean LLFilePickerBase::navOpenFilterProc(AEDesc *theItem, void *info, void *c
 						}
 						else if (filter == FFLOAD_ANIM)
 						{
-							if (fileInfo.filetype != 'BVH ' && 
-								(fileInfo.extension && (CFStringCompare(fileInfo.extension, CFSTR("bvh"), kCFCompareCaseInsensitive) != kCFCompareEqualTo))
+							if (fileInfo.filetype != 'BVH ' && fileInfo.filetype != 'ANIM ' && fileInfo.filetype != 'ANIMATN ' &&
+								(fileInfo.extension && (CFStringCompare(fileInfo.extension, CFSTR("bvh"), kCFCompareCaseInsensitive) != kCFCompareEqualTo &&
+								CFStringCompare(fileInfo.extension, CFSTR("anim"), kCFCompareCaseInsensitive) != kCFCompareEqualTo &&
+								CFStringCompare(fileInfo.extension, CFSTR("animatn"), kCFCompareCaseInsensitive) != kCFCompareEqualTo))
 							)
 							{
 								result = false;

secondlife/modified_viewers/singularity/1.6.txt ยท Last modified: 2022/11/24 07:46 by 127.0.0.1

Access website using Tor Access website using i2p Wizardry and Steamworks PGP Key


For the contact, copyright, license, warranty and privacy terms for the usage of this website please see the contact, license, privacy, copyright.