Merge remote-tracking branch 'upstream/master'

This commit is contained in:
Drake Arconis
2011-11-08 05:22:47 -05:00
25 changed files with 209 additions and 96 deletions

View File

@@ -153,10 +153,10 @@ const char LAND_LAYER_CODE = 'L';
const char WATER_LAYER_CODE = 'W';
const char WIND_LAYER_CODE = '7';
const char CLOUD_LAYER_CODE = '8';
// Extended land layer for Aurora Sim
// Extended land layer for Aurora Sim
const char AURORA_LAND_LAYER_CODE = 'M';
const char AURORA_WATER_LAYER_CODE = 'X';
const char AURORA_WIND_LAYER_CODE = '9';
const char AURORA_WATER_LAYER_CODE = 'X';
const char AURORA_WIND_LAYER_CODE = '9';
const char AURORA_CLOUD_LAYER_CODE = ':';
// keys

View File

@@ -36,7 +36,7 @@
const S32 LL_VERSION_MAJOR = 1;
const S32 LL_VERSION_MINOR = 6;
const S32 LL_VERSION_PATCH = 0;
const S32 LL_VERSION_BUILD = 2;
const S32 LL_VERSION_BUILD = 3;
const char * const LL_CHANNEL = "Singularity";

View File

@@ -36,6 +36,8 @@
#include "llfile.h"
#include "llrender.h"
#include "llcontrol.h" //for LLCachedControl
#include "lldir.h" //for gDirUtilp
#if LL_DARWIN
#include "OpenGL/OpenGL.h"
@@ -606,7 +608,8 @@ GLhandleARB LLShaderMgr::loadShaderFile(const std::string& filename, S32 & shade
text[count++] = strdup(decl.c_str());
}
text[count++] = strdup("varying float vary_texture_index;\n");
if(texture_index_channels != 1)
text[count++] = strdup("varying float vary_texture_index;\n");
text[count++] = strdup("vec4 diffuseLookup(vec2 texcoord)\n");
text[count++] = strdup("{\n");
@@ -701,6 +704,8 @@ GLhandleARB LLShaderMgr::loadShaderFile(const std::string& filename, S32 & shade
}
}
std::string error_str;
if (error == GL_NO_ERROR)
{
//check for errors
@@ -714,6 +719,7 @@ GLhandleARB LLShaderMgr::loadShaderFile(const std::string& filename, S32 & shade
//an error occured, print log
LL_WARNS("ShaderLoading") << "GLSL Compilation Error: (" << error << ") in " << filename << LL_ENDL;
dumpObjectLog(ret);
error_str = get_object_log(ret);
std::stringstream ostr;
//dump shader source for debugging
@@ -732,6 +738,32 @@ GLhandleARB LLShaderMgr::loadShaderFile(const std::string& filename, S32 & shade
{
ret = 0;
}
static const LLCachedControl<bool> dump_raw_shaders("ShyotlDumpRawShaders",false);
if(dump_raw_shaders || ret)
{
std::stringstream ostr;
for (GLuint i = 0; i < count; i++)
{
ostr << text[i];
}
std::string delim = gDirUtilp->getDirDelimiter();
std::string shader_name = filename.substr(filename.find_last_of("/")+1); //shader_name.glsl
shader_name = shader_name.substr(0,shader_name.find_last_of(".")); //shader_name
std::string maindir = gDirUtilp->getExpandedFilename(LL_PATH_LOGS,"shader_dump"+delim);
//mkdir is NOT recursive. Step through the folders one by one.
LLFile::mkdir(maindir); //..Roaming/SecondLife/logs/shader_dump/
LLFile::mkdir(maindir+="class" + llformat("%i",gpu_class) + delim); //..shader_dump/class1/
LLFile::mkdir(maindir+=filename.substr(0,filename.find_last_of("/")+1)); //..shader_dump/class1/windlight/
LLAPRFile file(maindir + shader_name + (ret ? "" : llformat("_FAILED(%i)",error)) + ".glsl", LL_APR_W);
file.write(ostr.str().c_str(),ostr.str().length());
if(!error_str.empty())
{
LLAPRFile file2(maindir + shader_name + "_ERROR" + ".txt", LL_APR_W);
file.write(error_str.c_str(),error_str.length());
}
}
stop_glerror();
//free memory

View File

@@ -9,6 +9,18 @@
<string>settings_rlv.xml</string>
</array>
<key>SGTextFadeDistance</key>
<map>
<key>Comment</key>
<string>Distance after which HUD text starts to fade</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>F32</string>
<key>Value</key>
<integer>8.0</integer>
</map>
<key>CCSAllowNameplateOverride</key>
<map>
<key>Comment</key>
@@ -519,42 +531,7 @@
<string>Boolean</string>
<key>Value</key>
<integer>0</integer>
</map>
<key>ShyotlRenderVBOStrideMode</key>
<map>
<key>Comment</key>
<string>0 = Standard behavior
1 = Force strided VBOs
2 = Force unstrided(dense) VBOs</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>U32</string>
<key>Value</key>
<integer>0</integer>
</map>
<key>ShyotlUseLegacyRenderPath</key>
<map>
<key>Comment</key>
<string>Use deprecated pre-3.x OpenGL api calls.</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
<integer>0</integer>
</map>
<key>ShyotlUseLegacyTextureBatching</key>
<map>
<key>Comment</key>
<string>Disable usage of extra samplers in shaders. Decreases batch sizes, however also reduces branching in shaders drastcially.</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
<integer>0</integer>
</map>
</map>
<key>ResetFocusOnSelfClick</key>
<map>
<key>Comment</key>

View File

@@ -168,5 +168,84 @@
<key>Value</key>
<real>10.0</real>
</map>
<key>ShyotlRenderVBOStrideMode</key>
<map>
<key>Comment</key>
<string>0 = Standard behavior
1 = Force strided VBOs
2 = Force unstrided(dense) VBOs</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>U32</string>
<key>Value</key>
<integer>0</integer>
</map>
<key>ShyotlUseLegacyRenderPath</key>
<map>
<key>Comment</key>
<string>Use deprecated pre-3.x OpenGL api calls.</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
<integer>0</integer>
</map>
<key>ShyotlUseLegacyTextureBatching</key>
<map>
<key>Comment</key>
<string>Disable usage of extra samplers in shaders. Decreases batch sizes, however also reduces branching in shaders drastically.</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
<integer>0</integer>
</map>
<key>ShyotlUseLegacyDynamicTexture</key>
<map>
<key>Comment</key>
<string>Disable shader path when rendering dynamic textures.</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
<integer>0</integer>
</map>
<key>ShyotlUseLegacyTextureBaking</key>
<map>
<key>Comment</key>
<string>Disable shader path when generating baked textures.</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
<integer>1</integer>
</map>
<key>ShyotlDumpRawShaders</key>
<map>
<key>Comment</key>
<string>Dump shader data being passed to glShaderSourceARB.</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
<integer>0</integer>
</map>
<key>ShyotlDrawOrphanAttachments</key>
<map>
<key>Comment</key>
<string>Render attachments lacking an 'alive' owner.</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
<integer>0</integer>
</map>
</map>
</llsd>

View File

@@ -265,6 +265,9 @@ void LLAgent::init()
// LLDebugVarMessageBox::show("Camera Lag", &CAMERA_FOCUS_HALF_LIFE, 0.5f, 0.01f);
*mEffectColor = gSavedSettings.getColor4("EffectColor");
gSavedSettings.getControl("PreferredMaturity")->getValidateSignal()->connect(boost::bind(&LLAgent::validateMaturity, this, _2));
gSavedSettings.getControl("PreferredMaturity")->getSignal()->connect(boost::bind(&LLAgent::handleMaturity, this, _2));
mInitialized = TRUE;
}
@@ -2377,6 +2380,15 @@ const LLAgentAccess& LLAgent::getAgentAccess()
return *mAgentAccess;
}
bool LLAgent::validateMaturity(const LLSD& newvalue)
{
return mAgentAccess->canSetMaturity(newvalue.asInteger());
}
void LLAgent::handleMaturity(const LLSD& newvalue)
{
sendMaturityPreferenceToServer(newvalue.asInteger());
}
void LLAgent::buildFullname(std::string& name) const
{

View File

@@ -661,6 +661,10 @@ public:
static int convertTextToMaturity(char text);
bool sendMaturityPreferenceToServer(int preferredMaturity); // ! "U8" instead of "int"?
// Maturity callbacks for PreferredMaturity control variable
void handleMaturity(const LLSD& newvalue);
bool validateMaturity(const LLSD& newvalue);
/** Access

View File

@@ -172,6 +172,7 @@ int LLAgentAccess::convertTextToMaturity(char text)
void LLAgentAccess::setMaturity(char text)
{
mAccess = LLAgentAccess::convertTextToMaturity(text);
llinfos << "Setting agent maturity to " << text << " " << (int)mAccess << llendl;
U32 preferred_access = mSavedSettings.getU32("PreferredMaturity");
while (!canSetMaturity(preferred_access))
{

View File

@@ -1130,6 +1130,9 @@ void LLAgentWearables::makeNewOutfit(
if( old_wearable )
{
LLViewerInventoryItem* item = gInventory.getItem(getWearableItemID((LLWearableType::EType)index));
llassert(item);
if (!item)
continue;
if (fUseOutfits)
{
std::string strOrdering = llformat("@%d", item->getWearableType() * 100);

View File

@@ -3127,7 +3127,7 @@ void dumpVFSCaches()
U32 LLAppViewer::getTextureCacheVersion()
{
//viewer texture cache version, change if the texture cache format changes.
static const U32 TEXTURE_CACHE_VERSION = 7;
static const U32 TEXTURE_CACHE_VERSION = 8;
return TEXTURE_CACHE_VERSION ;
}

View File

@@ -108,8 +108,8 @@ LLHUDText::LLHUDText(const U8 type) :
{
mColor = LLColor4(1.f, 1.f, 1.f, 1.f);
mDoFade = TRUE;
mFadeDistance = 8.f;
mFadeRange = 4.f;
mFadeDistance = gSavedSettings.getF32("SGTextFadeDistance");
mFadeRange = mFadeDistance/2.f;
mZCompare = TRUE;
mDropShadow = TRUE;
mOffscreen = FALSE;

View File

@@ -797,7 +797,7 @@ void LLInvFVBridge::addDeleteContextMenuOptions(menuentry_vec_t &items,
}
// "Remove link" and "Delete" are the same operation.
if (obj && obj->getIsLinkType() && !get_is_item_worn(mUUID))
if (obj && obj->getIsLinkType() /* && !get_is_item_worn(mUUID)*/)
{
items.push_back(std::string("Remove Link"));
}
@@ -4289,7 +4289,7 @@ void LLObjectBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
if (!avatarp->canAttachMoreObjects())
{
disabled_items.push_back(std::string("Object Wea"));
disabled_items.push_back(std::string("Object Wear"));
disabled_items.push_back(std::string("Object Add"));
disabled_items.push_back(std::string("Attach To"));
disabled_items.push_back(std::string("Attach To HUD"));

View File

@@ -154,22 +154,6 @@ void LLPanelGeneral::apply()
LLComboBox* crash_behavior_combobox = getChild<LLComboBox>("crash_behavior_combobox");
gCrashSettings.setS32(CRASH_BEHAVIOR_SETTING, crash_behavior_combobox->getCurrentIndex());
// if we have no agent, we can't let them choose anything
// if we have an agent, then we only let them choose if they have a choice
bool can_choose = gAgent.getID().notNull() &&
(gAgent.isMature() || gAgent.isGodlike());
if (can_choose)
{
int preferred_maturity = childGetValue("maturity_desired_combobox").asInteger();
if (preferred_maturity != gSavedSettings.getU32("PreferredMaturity"))
{
gSavedSettings.setU32("PreferredMaturity", preferred_maturity);
gAgent.sendMaturityPreferenceToServer(preferred_maturity);
}
}
}
void LLPanelGeneral::cancel()

View File

@@ -78,6 +78,8 @@ void LLToolComposite::setCurrentTool( LLTool* new_tool )
{
if( mCur != new_tool )
{
if(new_tool)
lldebugs << "Current Tool: " << new_tool->getName() << llendl;
if( mSelected )
{
mCur->handleDeselect();

View File

@@ -738,6 +738,7 @@ void LLToolGrab::handleHoverActive(S32 x, S32 y, MASK mask)
}
// HACK to avoid assert: error checking system makes sure that the cursor is set during every handleHover. This is actually a no-op since the cursor is hidden.
gViewerWindow->hideCursor();
gViewerWindow->setCursor(UI_CURSOR_ARROW);
lldebugst(LLERR_USER_INPUT) << "hover handled by LLToolGrab (active) [cursor hidden]" << llendl;

View File

@@ -80,11 +80,11 @@ LLToolMgr::LLToolMgr()
gToolNull = new LLTool(LLStringUtil::null); // Does nothing
setCurrentTool(gToolNull);
gBasicToolset = new LLToolset();
gCameraToolset = new LLToolset();
// gLandToolset = new LLToolset();
gMouselookToolset = new LLToolset();
gFaceEditToolset = new LLToolset();
gBasicToolset = new LLToolset("Basic");
gCameraToolset = new LLToolset("Camera");
// gLandToolset = new LLToolset("Land");
gMouselookToolset = new LLToolset("MouseLook");
gFaceEditToolset = new LLToolset("FaceEdit");
}
void LLToolMgr::initTools()
@@ -149,6 +149,7 @@ void LLToolMgr::setCurrentToolset(LLToolset* current)
{
mSelectedTool->handleDeselect();
}
lldebugs << "Current tool set: " << current->getName() << llendl;
mCurrentToolset = current;
// select first tool of new toolset only if toolset changed
mCurrentToolset->selectFirstTool();
@@ -164,6 +165,8 @@ LLToolset* LLToolMgr::getCurrentToolset()
void LLToolMgr::setCurrentTool( LLTool* tool )
{
if(tool && mBaseTool!=tool)
lldebugs << "Current Tool: " << tool->getName() << llendl;
if (mTransientTool)
{
mTransientTool = NULL;

View File

@@ -93,7 +93,7 @@ protected:
class LLToolset
{
public:
LLToolset() : mSelectedTool(NULL) {}
LLToolset(const char *name) : mSelectedTool(NULL), mName(name) {}
LLTool* getSelectedTool() { return mSelectedTool; }
@@ -109,7 +109,9 @@ public:
BOOL isToolSelected( S32 index );
const char* getName() const {return mName;}
protected:
const char* mName;
LLTool* mSelectedTool;
typedef std::vector<LLTool*> tool_list_t;
tool_list_t mToolList;

View File

@@ -32,6 +32,7 @@
#include "llviewerprecompiledheaders.h"
#include <boost/filesystem.hpp> //First, because glh_linear #defines equivalent.. which boost uses internally
#include "llfeaturemanager.h"
#include "llviewershadermgr.h"
@@ -351,6 +352,11 @@ void LLViewerShaderMgr::setShaders()
return;
}
{
const std::string dumpdir = gDirUtilp->getExpandedFilename(LL_PATH_LOGS,"shader_dump")+gDirUtilp->getDirDelimiter();
boost::filesystem::remove_all(dumpdir);
}
LLGLSLShader::sIndexedTextureChannels = llmax(llmin(gGLManager.mNumTextureImageUnits, (S32) gSavedSettings.getU32("RenderMaxTextureIndex")), 1);
static const LLCachedControl<bool> no_texture_indexing("ShyotlUseLegacyTextureBatching",false);
static const LLCachedControl<bool> use_legacy_path("ShyotlUseLegacyRenderPath", false); //Legacy does not jive with new batching.

View File

@@ -159,7 +159,7 @@ void LLViewerTextureList::doPreloadImages()
image->setAddressMode(LLTexUnit::TAM_WRAP);
mImagePreloads.insert(image);
}
image = LLViewerTextureManager::getFetchedTextureFromFile("8dcd4a48-2d37-4909-9f78-f7a9eb4ef903.j2c"/*"transparent.j2c"*/, MIPMAP_YES, LLViewerFetchedTexture::BOOST_UI, LLViewerTexture::FETCHED_TEXTURE,
image = LLViewerTextureManager::getFetchedTextureFromFile("transparent.j2c", MIPMAP_YES, LLViewerFetchedTexture::BOOST_UI, LLViewerTexture::FETCHED_TEXTURE,
0,0,LLUUID("8dcd4a48-2d37-4909-9f78-f7a9eb4ef903"));
if (image)
{

View File

@@ -4500,7 +4500,7 @@ BOOL LLViewerWindow::rawSnapshot(LLImageRaw *raw, S32 image_width, S32 image_hei
gPipeline.resetDrawOrders();
}
if (high_res && (show_ui || !hide_hud))
if (high_res)
{
send_agent_resume();
}

View File

@@ -1,12 +1,12 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<floater border="true" bottom="167" can_close="false" can_drag_on_left="false"
can_minimize="false" can_resize="false" can_tear_off="true" enabled="true"
height="510" left="278" min_height="100" min_width="100"
height="530" left="278" min_height="100" min_width="100"
mouse_opaque="true" name="modal container" title="" width="515">
<button bottom="-500" enabled="true" font="SansSerif" halign="center" height="20"
<button bottom="5" enabled="true" font="SansSerif" halign="center" height="20"
label="Save" label_selected="Save" left="171" mouse_opaque="true"
name="Save" scale_image="true" width="82" />
<button bottom="-500" enabled="true" font="SansSerif" halign="center" height="20"
<button bottom="5" enabled="true" font="SansSerif" halign="center" height="20"
label="Cancel" label_selected="Cancel" left="261" mouse_opaque="true"
name="Cancel" scale_image="true" width="82" />
<check_box bottom="-216" enabled="true" follows="left|top" font="SansSerifSmall"
@@ -21,7 +21,13 @@
<check_box bottom="-276" enabled="true" follows="left|top" font="SansSerifSmall"
height="16" initial_value="false" label="Eyes" left="13"
mouse_opaque="true" name="checkbox_Eyes" radio_style="false" width="100" />
<check_box bottom="-436" enabled="true" follows="left|top" font="SansSerifSmall"
<text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
bottom="90" drop_shadow_visible="true" enabled="true" follows="left|top"
font="SansSerifSmall" h_pad="0" halign="left" height="14" left="13"
mouse_opaque="true" name="Options:" v_pad="0" width="100">
Options:
</text>
<check_box bottom_delta="-20" enabled="true" follows="left|top" font="SansSerifSmall"
height="16" initial_value="false" label="Rename Clothing To Folder Name"
left="13" mouse_opaque="true" name="rename" radio_style="false" width="210" />
<check_box name="checkbox_use_links" control_name="UseInventoryLinks" initial_value="false"
@@ -34,39 +40,42 @@
mouse_opaque="true" radio_style="false" />
<check_box bottom="-216" enabled="true" follows="left|top" font="SansSerifSmall"
height="16" initial_value="false" label="Shirt" left="113"
mouse_opaque="true" name="checkbox_Shirt" radio_style="false" width="100" />
mouse_opaque="true" name="checkbox_shirt" radio_style="false" width="100" />
<check_box bottom="-236" enabled="true" follows="left|top" font="SansSerifSmall"
height="16" initial_value="false" label="Pants" left="113"
mouse_opaque="true" name="checkbox_Pants" radio_style="false" width="100" />
mouse_opaque="true" name="checkbox_pants" radio_style="false" width="100" />
<check_box bottom="-256" enabled="true" follows="left|top" font="SansSerifSmall"
height="16" initial_value="false" label="Shoes" left="113"
mouse_opaque="true" name="checkbox_Shoes" radio_style="false" width="100" />
mouse_opaque="true" name="checkbox_shoes" radio_style="false" width="100" />
<check_box bottom="-276" enabled="true" follows="left|top" font="SansSerifSmall"
height="16" initial_value="false" label="Socks" left="113"
mouse_opaque="true" name="checkbox_Socks" radio_style="false" width="100" />
mouse_opaque="true" name="checkbox_socks" radio_style="false" width="100" />
<check_box bottom="-296" enabled="true" follows="left|top" font="SansSerifSmall"
height="16" initial_value="false" label="Jacket" left="113"
mouse_opaque="true" name="checkbox_Jacket" radio_style="false" width="100" />
mouse_opaque="true" name="checkbox_jacket" radio_style="false" width="100" />
<check_box bottom="-316" enabled="true" follows="left|top" font="SansSerifSmall"
height="16" initial_value="false" label="Gloves" left="113"
mouse_opaque="true" name="checkbox_Gloves" radio_style="false" width="100" />
mouse_opaque="true" name="checkbox_gloves" radio_style="false" width="100" />
<check_box bottom="-336" enabled="true" follows="left|top" font="SansSerifSmall"
height="16" initial_value="false" label="Undershirt" left="113"
mouse_opaque="true" name="checkbox_Undershirt" radio_style="false"
mouse_opaque="true" name="checkbox_undershirt" radio_style="false"
width="100" />
<check_box bottom="-356" enabled="true" follows="left|top" font="SansSerifSmall"
height="16" initial_value="false" label="Underpants" left="113"
mouse_opaque="true" name="checkbox_Underpants" radio_style="false"
mouse_opaque="true" name="checkbox_underpants" radio_style="false"
width="100" />
<check_box bottom="-376" enabled="true" follows="left|top" font="SansSerifSmall"
height="16" initial_value="false" label="Skirt" left="113"
mouse_opaque="true" name="checkbox_Skirt" radio_style="false" width="100" />
mouse_opaque="true" name="checkbox_skirt" radio_style="false" width="100" />
<check_box bottom="-396" enabled="true" follows="left|top" font="SansSerifSmall"
height="16" initial_value="false" label="Tattoo" left="113"
mouse_opaque="true" name="checkbox_Tattoo" radio_style="false" width="100" />
mouse_opaque="true" name="checkbox_tattoo" radio_style="false" width="100" />
<check_box bottom="-416" enabled="true" follows="left|top" font="SansSerifSmall"
height="16" initial_value="false" label="Alpha" left="113"
mouse_opaque="true" name="checkbox_Alpha" radio_style="false" width="100" />
mouse_opaque="true" name="checkbox_alpha" radio_style="false" width="100" />
<check_box bottom="-436" enabled="true" follows="left|top" font="SansSerifSmall"
height="16" initial_value="false" label="Physics" left="113"
mouse_opaque="true" name="checkbox_physics" radio_style="false" width="100" />
<check_box bottom="-216" enabled="false" follows="left|top" font="SansSerifSmall"
height="16" initial_value="false" label="Chest" left="213"
mouse_opaque="true" name="checkbox_Chest" radio_style="false" width="100" />
@@ -263,12 +272,6 @@ now wearing into it.
mouse_opaque="true" name="Attachments:" v_pad="0" width="100">
Attachments:
</text>
<text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
bottom="-416" drop_shadow_visible="true" enabled="true" follows="left|top"
font="SansSerifSmall" h_pad="0" halign="left" height="14" left="13"
mouse_opaque="true" name="Options:" v_pad="0" width="100">
Options:
</text>
<line_editor bevel_style="in" border_style="line" border_thickness="1" bottom="-150"
enabled="true" follows="left|top" font="SansSerif"
handle_edit_keys_directly="true" height="20" left="13" max_length="63"

View File

@@ -198,7 +198,15 @@
name="Paste As Link" width="128">
<on_click filter="" function="Inventory.DoToSelected" userdata="paste_link" />
</menu_item_call>
<menu_item_call bottom_delta="-18" height="18" label="Restore in World" left="0" mouse_opaque="true"
name="Restore to Last Position" width="128">
<on_click filter="" function="Inventory.DoToSelected" userdata="restoreToWorld" />
</menu_item_call>
<menu_item_separator name="Paste Separator" />
<menu_item_call bottom_delta="-18" height="18" label="Remove Link" left="0" mouse_opaque="true"
name="Remove Link" width="128">
<on_click filter="" function="Inventory.DoToSelected" userdata="delete" />
</menu_item_call>
<menu_item_call bottom_delta="-18" height="18" label="Delete" left="0" mouse_opaque="true"
name="Delete" width="128">
<on_click filter="" function="Inventory.DoToSelected" userdata="delete" />
@@ -267,10 +275,6 @@
<on_click filter="" function="Inventory.DoToSelected" userdata="deactivate" />
</menu_item_call>
<menu_item_separator name="Attach Separator" />
<menu_item_call bottom_delta="-18" height="18" label="Restore in World" left="0" mouse_opaque="true"
name="Restore to Last Position" width="128">
<on_click filter="" function="Inventory.DoToSelected" userdata="restoreToWorld" />
</menu_item_call>
<menu_item_call bottom_delta="-18" height="18" label="Wear" left="0" mouse_opaque="true"
name="Object Wear" width="128">
<on_click filter="" function="Inventory.DoToSelected" userdata="attach" />
@@ -302,5 +306,5 @@
</menu_item_call>
<menu_item_call bottom_delta="-18" height="18" label="--no options--" left="0"
mouse_opaque="true" name="--no options--" width="128" />
<menu_item_separator name="Wearable Separator" />
<--menu_item_separator name="Wearable Separator" /-->
</menu>