master
Ansariel 2021-02-09 21:08:57 +01:00
commit 768a31906a
21 changed files with 223 additions and 172 deletions

View File

@ -295,7 +295,6 @@ public:
void setAllowTerraform(BOOL b){setParcelFlag(PF_ALLOW_TERRAFORM, b); }
void setAllowDamage(BOOL b) { setParcelFlag(PF_ALLOW_DAMAGE, b); }
void setAllowFly(BOOL b) { setParcelFlag(PF_ALLOW_FLY, b); }
void setAllowLandmark(BOOL b){ setParcelFlag(PF_ALLOW_LANDMARK, b); }
void setAllowGroupScripts(BOOL b) { setParcelFlag(PF_ALLOW_GROUP_SCRIPTS, b); }
void setAllowOtherScripts(BOOL b) { setParcelFlag(PF_ALLOW_OTHER_SCRIPTS, b); }
void setAllowDeedToGroup(BOOL b) { setParcelFlag(PF_ALLOW_DEED_TO_GROUP, b); }
@ -476,11 +475,6 @@ public:
BOOL getAllowFly() const
{ return (mParcelFlags & PF_ALLOW_FLY) ? TRUE : FALSE; }
// Remove permission restrictions for creating landmarks.
// We should eventually remove this flag completely.
BOOL getAllowLandmark() const
{ return TRUE; }
BOOL getAllowGroupScripts() const
{ return (mParcelFlags & PF_ALLOW_GROUP_SCRIPTS) ? TRUE : FALSE; }

View File

@ -33,7 +33,7 @@ const U32 PF_ALLOW_FLY = 1 << 0;// Can start flying
const U32 PF_ALLOW_OTHER_SCRIPTS= 1 << 1;// Scripts by others can run.
const U32 PF_FOR_SALE = 1 << 2;// Can buy this land
const U32 PF_FOR_SALE_OBJECTS = 1 << 7;// Can buy all objects on this land
const U32 PF_ALLOW_LANDMARK = 1 << 3;
const U32 PF_ALLOW_LANDMARK = 1 << 3;// Always true/deprecated
const U32 PF_ALLOW_TERRAFORM = 1 << 4;
const U32 PF_ALLOW_DAMAGE = 1 << 5;
const U32 PF_CREATE_OBJECTS = 1 << 6;

View File

@ -317,8 +317,9 @@ void FSFloaterPlaceDetails::onOpen(const LLSD& key)
mGlobalPos = gAgent.getPositionGlobal();
}
LLUUID dest_folder = key["dest_folder"];
mPanelLandmarkInfo->resetLocation();
mPanelLandmarkInfo->setInfoType(LLPanelPlaceInfo::CREATE_LANDMARK);
mPanelLandmarkInfo->setInfoAndCreateLandmark(dest_folder);
mPanelLandmarkInfo->setHeaderVisible(FALSE);
mPanelLandmarkInfo->displayParcelInfo(LLUUID(), mGlobalPos);

View File

@ -417,6 +417,7 @@ LLAgent::LLAgent() :
mTeleportFinishedSlot(),
mTeleportFailedSlot(),
mIsMaturityRatingChangingDuringTeleport(false),
mTPNeedsNeabyChatSeparator(false),
mMaturityRatingChange(0U),
mIsDoSendMaturityPreferenceToServer(false),
mMaturityPreferenceRequestId(0U),
@ -596,10 +597,6 @@ void LLAgent::cleanup()
{
mTeleportFailedSlot.disconnect();
}
if (mParcelMgrConnection.connected())
{
mParcelMgrConnection.disconnect();
}
}
//-----------------------------------------------------------------------------
@ -4695,10 +4692,7 @@ void LLAgent::clearTeleportRequest()
LLVoiceClient::getInstance()->setHidden(FALSE);
}
mTeleportRequest.reset();
if (mParcelMgrConnection.connected())
{
mParcelMgrConnection.disconnect();
}
mTPNeedsNeabyChatSeparator = false;
}
void LLAgent::setMaturityRatingChangeDuringTeleport(U8 pMaturityRatingChange)
@ -4710,7 +4704,7 @@ void LLAgent::setMaturityRatingChangeDuringTeleport(U8 pMaturityRatingChange)
void LLAgent::sheduleTeleportIM()
{
// is supposed to be called during teleport so we are still waiting for parcel
mParcelMgrConnection = addParcelChangedCallback(onParcelReadyAfterTeleport);
mTPNeedsNeabyChatSeparator = true;
}
bool LLAgent::hasPendingTeleportRequest()
@ -4760,6 +4754,12 @@ void LLAgent::startTeleportRequest()
void LLAgent::handleTeleportFinished()
{
LL_INFOS("Teleport") << "Agent handling teleport finished." << LL_ENDL;
if (mTPNeedsNeabyChatSeparator)
{
// parcel is ready at this point
addTPNearbyChatSeparator();
mTPNeedsNeabyChatSeparator = false;
}
clearTeleportRequest();
mTeleportCanceled.reset();
if (mIsMaturityRatingChangingDuringTeleport)
@ -4823,14 +4823,11 @@ void LLAgent::handleTeleportFailed()
mIsMaturityRatingChangingDuringTeleport = false;
}
if (mParcelMgrConnection.connected())
{
mParcelMgrConnection.disconnect();
}
mTPNeedsNeabyChatSeparator = false;
}
/*static*/
void LLAgent::onParcelReadyAfterTeleport()
void LLAgent::addTPNearbyChatSeparator()
{
LLViewerRegion* agent_region = gAgent.getRegion();
LLParcel* agent_parcel = LLViewerParcelMgr::getInstance()->getAgentParcel();
@ -4866,11 +4863,6 @@ void LLAgent::onParcelReadyAfterTeleport()
args["do_not_log"] = TRUE;
nearby_chat->addMessage(chat, true, args);
}
if (gAgent.mParcelMgrConnection.connected())
{
gAgent.mParcelMgrConnection.disconnect();
}
}
/*static*/

View File

@ -768,9 +768,9 @@ private:
LLTeleportRequestPtr mTeleportCanceled;
boost::signals2::connection mTeleportFinishedSlot;
boost::signals2::connection mTeleportFailedSlot;
boost::signals2::connection mParcelMgrConnection;
bool mIsMaturityRatingChangingDuringTeleport;
bool mTPNeedsNeabyChatSeparator;
U8 mMaturityRatingChange;
bool hasPendingTeleportRequest();
@ -793,7 +793,7 @@ private:
void handleTeleportFinished();
void handleTeleportFailed();
static void onParcelReadyAfterTeleport();
static void addTPNearbyChatSeparator();
static void onCapabilitiesReceivedAfterTeleport();
//--------------------------------------------------------------------

View File

@ -788,6 +788,7 @@ public:
break;
case CHAT_SOURCE_SYSTEM:
icon->setValue(LLSD("SL_Logo"));
break;
case CHAT_SOURCE_TELEPORT:
icon->setValue(LLSD("Command_Destinations_Icon"));
break;

View File

@ -228,23 +228,6 @@ LLViewerInventoryItem* LLLandmarkActions::findLandmarkForAgentPos()
return findLandmarkForGlobalPos(gAgent.getPositionGlobal());
}
bool LLLandmarkActions::canCreateLandmarkHere()
{
LLParcel* agent_parcel = LLViewerParcelMgr::getInstance()->getAgentParcel();
if(!agent_parcel)
{
LL_WARNS() << "No agent region" << LL_ENDL;
return false;
}
if (agent_parcel->getAllowLandmark()
|| LLViewerParcelMgr::isParcelOwnedByAgent(agent_parcel, GP_LAND_ALLOW_LANDMARK))
{
return true;
}
return false;
}
void LLLandmarkActions::createLandmarkHere(
const std::string& name,
const std::string& desc,
@ -261,11 +244,6 @@ void LLLandmarkActions::createLandmarkHere(
LL_WARNS() << "No agent parcel" << LL_ENDL;
return;
}
if (!canCreateLandmarkHere())
{
LLNotificationsUtil::add("CannotCreateLandmarkNotOwner");
return;
}
create_inventory_item(gAgent.getID(), gAgent.getSessionID(),
folder_id, LLTransactionID::tnull,

View File

@ -72,12 +72,6 @@ public:
*/
static LLViewerInventoryItem* findLandmarkForAgentPos();
/**
* @brief Checks whether agent has rights to create landmark for current parcel.
*/
static bool canCreateLandmarkHere();
/**
* @brief Creates landmark for current parcel.
*/

View File

@ -106,6 +106,18 @@ void LLPanelLandmarkInfo::resetLocation()
// virtual
void LLPanelLandmarkInfo::setInfoType(EInfoType type)
{
LLUUID dest_folder;
setInfoType(type, dest_folder);
}
// Sets CREATE_LANDMARK infotype and creates landmark at desired folder
void LLPanelLandmarkInfo::setInfoAndCreateLandmark(const LLUUID& fodler_id)
{
setInfoType(CREATE_LANDMARK, fodler_id);
}
void LLPanelLandmarkInfo::setInfoType(EInfoType type, const LLUUID &folder_id)
{
LLPanel* landmark_info_panel = getChild<LLPanel>("landmark_info_panel");
@ -183,7 +195,7 @@ void LLPanelLandmarkInfo::setInfoType(EInfoType type)
// remote parcel request to complete.
if (!LLLandmarkActions::landmarkAlreadyExists())
{
createLandmark(LLUUID());
createLandmark(folder_id);
}
}
break;

View File

@ -43,8 +43,12 @@ public:
/*virtual*/ void resetLocation();
// If landmark doesn't exists, will create it at default folder
/*virtual*/ void setInfoType(EInfoType type);
// Sets CREATE_LANDMARK infotype and creates landmark at desired folder
void setInfoAndCreateLandmark(const LLUUID& fodler_id);
/*virtual*/ void processParcelInfo(const LLParcelData& parcel_data);
// Displays landmark owner, creator and creation date info.
@ -59,13 +63,17 @@ public:
// Select current landmark folder in combobox.
BOOL setLandmarkFolder(const LLUUID& id);
// Create a landmark for the current location
// in a folder specified by folder_id.
void createLandmark(const LLUUID& folder_id);
static std::string getFullFolderName(const LLViewerInventoryCategory* cat);
private:
// Create a landmark for the current location
// in a folder specified by folder_id.
// Expects title and description to be initialized
void createLandmark(const LLUUID& folder_id);
// If landmark doesn't exists, will create it at specified folder
void setInfoType(EInfoType type, const LLUUID &folder_id);
void populateFoldersList();
LLTextBox* mOwner;

View File

@ -40,6 +40,7 @@
#include "llagent.h"
#include "llagentpicksinfo.h"
#include "llagentui.h"
#include "llavataractions.h"
#include "llcallbacklist.h"
#include "lldndbutton.h"
#include "llfloatersidepanelcontainer.h"
@ -846,9 +847,16 @@ void LLLandmarksPanel::onAddAction(const LLSD& userdata) const
}
else
{
LLSD args;
args["type"] = "create_landmark";
if (view_model->getInventoryType()
== LLInventoryType::IT_CATEGORY)
{
args["dest_folder"] = view_model->getUUID();
}
// <FS:Ansariel> FIRE-817: Separate place details floater
//LLFloaterSidePanelContainer::showPanel("places", LLSD().with("type", "create_landmark"));
FSFloaterPlaceDetails::showPlaceDetails(LLSD().with("type", "create_landmark"));
//LLFloaterSidePanelContainer::showPanel("places", args);
FSFloaterPlaceDetails::showPlaceDetails(args);
// </FS:Ansariel>
}
// [RLVa:KB] - Checked: 2012-02-08 (RLVa-1.4.5) | Added: RLVa-1.4.5
@ -1138,28 +1146,56 @@ bool LLLandmarksPanel::isActionEnabled(const LLSD& userdata) const
}
return false;
}
// [RLVa:KB] - Checked: 2012-02-08 (RLVa-1.4.5) | Added: RLVa-1.4.5
else if("add_landmark" == command_name)
{
std::string current_tabname;
LLView* accordion_view = findChildView("landmarks_accordion");
LLAccordionCtrl* accordion = dynamic_cast<LLAccordionCtrl*>(accordion_view);
if (accordion)
{
current_tabname = accordion->getSelectedTab()->getName();
}
else
{
LLTabContainer* tabcontainer = dynamic_cast<LLTabContainer*>(accordion_view);
if (tabcontainer)
{
current_tabname = tabcontainer->getCurrentPanel()->getName();
}
}
else if ("add_landmark" == command_name)
{
bool is_single_selection = root_folder_view && root_folder_view->getSelectedCount() == 1;
if (!is_single_selection)
{
return false;
}
LLFolderViewModelItemInventory* view_model = getCurSelectedViewModelItem();
if (!view_model || view_model->getInventoryType() != LLInventoryType::IT_CATEGORY)
{
return false;
}
LLViewerInventoryItem* landmark = LLLandmarkActions::findLandmarkForAgentPos();
if (landmark)
{
//already exists
return false;
}
// <FS:Ansariel> RLVa and library check
//return true;
std::string current_tabname;
LLView* accordion_view = findChildView("landmarks_accordion");
LLAccordionCtrl* accordion = dynamic_cast<LLAccordionCtrl*>(accordion_view);
if (accordion)
{
current_tabname = accordion->getSelectedTab()->getName();
}
else
{
LLTabContainer* tabcontainer = dynamic_cast<LLTabContainer*>(accordion_view);
if (tabcontainer)
{
current_tabname = tabcontainer->getCurrentPanel()->getName();
}
}
return !gRlvHandler.hasBehaviour(RLV_BHVR_SHOWLOC) && current_tabname != "tab_library";
}
// [/RLVa:KB]
return !gRlvHandler.hasBehaviour(RLV_BHVR_SHOWLOC) && current_tabname != "tab_library";
}
else if ("share" == command_name)
{
if (!mCurrentSelectedList)
{
return false;
}
if (!LLAvatarActions::canShareSelectedItems(mCurrentSelectedList))
{
return false;
}
return true;
}
else
{
LL_WARNS() << "Unprocessed command has come: " << command_name << LL_ENDL;
@ -1187,6 +1223,10 @@ void LLLandmarksPanel::onCustomAction(const LLSD& userdata)
{
doActionOnCurSelectedLandmark(boost::bind(&LLLandmarksPanel::doCreatePick, this, _1));
}
else if ("share" == command_name && mCurrentSelectedList)
{
LLAvatarActions::shareWithAvatars(mCurrentSelectedList);
}
else if ("restore" == command_name && mCurrentSelectedList)
{
mCurrentSelectedList->doToSelected(userdata);

View File

@ -422,7 +422,7 @@ void LLPanelPlaces::onOpen(const LLSD& key)
updateVerbs();
}
// </FS:Ansariel> Toggle teleport history panel directly
else
else // "create_landmark"
{
mFilterEditor->clear();
onFilterEdit("", false);
@ -443,7 +443,8 @@ void LLPanelPlaces::onOpen(const LLSD& key)
}
else if (mPlaceInfoType == CREATE_LANDMARK_INFO_TYPE)
{
mLandmarkInfo->setInfoType(LLPanelPlaceInfo::CREATE_LANDMARK);
LLUUID dest_folder = key["dest_folder"];
mLandmarkInfo->setInfoAndCreateLandmark(dest_folder);
if (key.has("x") && key.has("y") && key.has("z"))
{

View File

@ -466,9 +466,7 @@ LLContextMenu* LLTeleportHistoryPanel::ContextMenu::createMenu()
// (N.B. callbacks don't take const refs as mID is local scope)
LLUICtrl::CommitCallbackRegistry::ScopedRegistrar registrar;
registrar.add("TeleportHistory.Teleport", boost::bind(&LLTeleportHistoryPanel::ContextMenu::onTeleport, this));
registrar.add("TeleportHistory.MoreInformation",boost::bind(&LLTeleportHistoryPanel::ContextMenu::onInfo, this));
registrar.add("TeleportHistory.CopyToClipboard",boost::bind(&LLTeleportHistoryPanel::ContextMenu::onCopyToClipboard, this));
registrar.add("TeleportHistory.Action", boost::bind(&LLTeleportHistoryPanel::ContextMenu::onUserAction, this, _2));
// create the context menu from the XUI
llassert(LLMenuGL::sMenuContainer != NULL);
@ -476,14 +474,27 @@ LLContextMenu* LLTeleportHistoryPanel::ContextMenu::createMenu()
"menu_teleport_history_item.xml", LLMenuGL::sMenuContainer, LLViewerMenuHolderGL::child_registry_t::instance());
}
void LLTeleportHistoryPanel::ContextMenu::onTeleport()
void LLTeleportHistoryPanel::ContextMenu::onUserAction(const LLSD& userdata)
{
confirmTeleport(mIndex);
}
void LLTeleportHistoryPanel::ContextMenu::onInfo()
{
LLTeleportHistoryFlatItem::showPlaceInfoPanel(mIndex);
std::string command_name = userdata.asString();
if ("teleport" == command_name)
{
confirmTeleport(mIndex);
}
else if ("view" == command_name)
{
LLTeleportHistoryFlatItem::showPlaceInfoPanel(mIndex);
}
else if ("show_on_map" == command_name)
{
LLTeleportHistoryStorage::getInstance()->showItemOnMap(mIndex);
}
else if ("copy_slurl" == command_name)
{
LLVector3d globalPos = LLTeleportHistoryStorage::getInstance()->getItems()[mIndex].mGlobalPos;
LLLandmarkActions::getSLURLfromPosGlobal(globalPos,
boost::bind(&LLTeleportHistoryPanel::ContextMenu::gotSLURLCallback, _1));
}
}
//static
@ -497,13 +508,6 @@ void LLTeleportHistoryPanel::ContextMenu::gotSLURLCallback(const std::string& sl
LLNotificationsUtil::add("CopySLURL", args);
}
void LLTeleportHistoryPanel::ContextMenu::onCopyToClipboard()
{
LLVector3d globalPos = LLTeleportHistoryStorage::getInstance()->getItems()[mIndex].mGlobalPos;
LLLandmarkActions::getSLURLfromPosGlobal(globalPos,
boost::bind(&LLTeleportHistoryPanel::ContextMenu::gotSLURLCallback, _1));
}
// Not yet implemented; need to remove buildPanel() from constructor when we switch
//static LLPanelInjector<LLTeleportHistoryPanel> t_teleport_history("panel_teleport_history");

View File

@ -54,9 +54,7 @@ public:
private:
LLContextMenu* createMenu();
void onTeleport();
void onInfo();
void onCopyToClipboard();
void onUserAction(const LLSD& userdata);
static void gotSLURLCallback(const std::string& slurl);

View File

@ -33,6 +33,8 @@
#include "lldir.h"
#include "llteleporthistory.h"
#include "llagent.h"
#include "llfloaterreg.h"
#include "llfloaterworldmap.h"
// [RLVa:KB] - Checked: 2010-09-03 (RLVa-1.2.1b)
#include "rlvactions.h"
// [/RLVa:KB]
@ -270,3 +272,23 @@ void LLTeleportHistoryStorage::goToItem(S32 idx)
gAgent.teleportViaLocation(mItems[idx].mGlobalPos);
}
void LLTeleportHistoryStorage::showItemOnMap(S32 idx)
{
// Validate specified index.
if (idx < 0 || idx >= (S32)mItems.size())
{
LL_WARNS() << "Invalid teleport history index (" << idx << ") specified" << LL_ENDL;
dump();
return;
}
LLVector3d landmark_global_pos = mItems[idx].mGlobalPos;
LLFloaterWorldMap* worldmap_instance = LLFloaterWorldMap::getInstance();
if (!landmark_global_pos.isExactlyZero() && worldmap_instance)
{
worldmap_instance->trackLocation(landmark_global_pos);
LLFloaterReg::showInstance("world_map", "center");
}
}

View File

@ -107,6 +107,13 @@ public:
*/
void goToItem(S32 idx);
/**
* Show specific item on map.
*
* The item is specified by its index (starting from 0).
*/
void showItemOnMap(S32 idx);
//private:
// [RLVa:KB] - Checked: 2010-09-03 (RLVa-1.2.1b) | Added: RLVa-1.2.1b
protected:

View File

@ -1802,6 +1802,7 @@ void LLViewerParcelMgr::processParcelProperties(LLMessageSystem *msg, void **use
}
parcel->setParcelEnvironmentVersion(parcel_environment_version);
LL_DEBUGS("ENVIRONMENT") << "Parcel environment version is " << parcel->getParcelEnvironmentVersion() << LL_ENDL;
// Notify anything that wants to know when the agent changes parcels
gAgent.changeParcels();
instance->mTeleportInProgress = FALSE;

View File

@ -2,27 +2,6 @@
<context_menu
layout="topleft"
name="Picks">
<menu_item_call
label="Info"
layout="topleft"
name="pick_info">
<menu_item_call.on_click
function="Pick.Info" />
<menu_item_call.on_enable
function="Pick.Enable"
parameter="info" />
</menu_item_call>
<menu_item_call
label="Edit"
layout="topleft"
name="pick_edit"
visible="false">
<menu_item_call.on_click
function="Pick.Edit" />
<menu_item_call.on_enable
function="Pick.Enable"
parameter="edit" />
</menu_item_call>
<menu_item_call
label="Teleport"
layout="topleft"
@ -34,7 +13,28 @@
parameter="teleport" />
</menu_item_call>
<menu_item_call
label="Map"
label="View Pick"
layout="topleft"
name="pick_info">
<menu_item_call.on_click
function="Pick.Info" />
<menu_item_call.on_enable
function="Pick.Enable"
parameter="info" />
</menu_item_call>
<menu_item_call
label="Edit Pick"
layout="topleft"
name="pick_edit"
visible="false">
<menu_item_call.on_click
function="Pick.Edit" />
<menu_item_call.on_enable
function="Pick.Enable"
parameter="edit" />
</menu_item_call>
<menu_item_call
label="Show on map"
layout="topleft"
name="pick_map">
<menu_item_call.on_click

View File

@ -7,7 +7,7 @@
name="menu_folder_gear"
visible="false">
<menu_item_call
label="Add Landmark"
label="Landmark current location"
layout="topleft"
name="add_landmark">
<on_click
@ -18,7 +18,7 @@
parameter="add_landmark" />
</menu_item_call>
<menu_item_call
label="Add Folder"
label="Create subfolder"
layout="topleft"
name="add_folder">
<on_click

View File

@ -18,7 +18,18 @@
parameter="teleport" />
</menu_item_call>
<menu_item_call
label="More Information"
label="Share"
layout="topleft"
name="share">
<on_click
function="Places.LandmarksGear.Custom.Action"
parameter="share" />
<on_enable
function="Places.LandmarksGear.Enable"
parameter="share" />
</menu_item_call>
<menu_item_call
label="View/Edit Landmark"
layout="topleft"
name="more_info">
<on_click
@ -39,29 +50,27 @@
function="Places.LandmarksGear.Enable"
parameter="show_on_map" />
</menu_item_call>
<menu_item_separator
layout="topleft" />
<menu_item_call
label="Add Landmark"
label="Copy SLurl"
layout="topleft"
name="add_landmark">
name="copy_slurl">
<on_click
function="Places.LandmarksGear.Add.Action"
parameter="add_landmark" />
function="Places.LandmarksGear.CopyPaste.Action"
parameter="copy_slurl" />
<on_enable
function="Places.LandmarksGear.Enable"
parameter="add_landmark" />
</menu_item_call>
parameter="copy_slurl" />
</menu_item_call>
<menu_item_call
label="Add Folder"
label="Create Pick"
layout="topleft"
name="add_folder">
name="create_pick">
<on_click
function="Places.LandmarksGear.Add.Action"
parameter="category" />
function="Places.LandmarksGear.Custom.Action"
parameter="create_pick" />
<on_enable
function="Places.LandmarksGear.Enable"
parameter="category" />
parameter="create_pick" />
</menu_item_call>
<menu_item_call
label="Restore Item"
@ -85,24 +94,13 @@
parameter="cut" />
</menu_item_call>
<menu_item_call
label="Copy Landmark"
label="Copy"
layout="topleft"
name="copy_landmark">
<on_click
function="Places.LandmarksGear.CopyPaste.Action"
parameter="copy" />
</menu_item_call>
<menu_item_call
label="Copy SLurl"
layout="topleft"
name="copy_slurl">
<on_click
function="Places.LandmarksGear.CopyPaste.Action"
parameter="copy_slurl" />
<on_enable
function="Places.LandmarksGear.Enable"
parameter="copy_slurl" />
</menu_item_call>
<menu_item_call
label="Paste"
layout="topleft"
@ -174,15 +172,4 @@
function="Places.LandmarksGear.Enable"
parameter="sort_by_date" />
</menu_item_check>
<menu_item_call
label="Create Pick"
layout="topleft"
name="create_pick">
<on_click
function="Places.LandmarksGear.Custom.Action"
parameter="create_pick" />
<on_enable
function="Places.LandmarksGear.Enable"
parameter="create_pick" />
</menu_item_call>
</toggleable_menu>

View File

@ -7,20 +7,31 @@
layout="topleft"
name="Teleport">
<menu_item_call.on_click
function="TeleportHistory.Teleport" />
function="TeleportHistory.Action"
parameter="teleport" />
</menu_item_call>
<menu_item_call
label="More Information"
label="View"
layout="topleft"
name="More Information">
<menu_item_call.on_click
function="TeleportHistory.MoreInformation" />
function="TeleportHistory.Action"
parameter="view" />
</menu_item_call>
<menu_item_call
label="Show on map"
layout="topleft"
name="show_on_map">
<menu_item_call.on_click
function="TeleportHistory.Action"
parameter="show_on_map" />
</menu_item_call>
<menu_item_call
label="Copy SLurl"
layout="topleft"
name="CopyToClipboard">
<menu_item_call.on_click
function="TeleportHistory.CopyToClipboard" />
function="TeleportHistory.Action"
parameter="copy_slurl" />
</menu_item_call>
</context_menu>