Allow right clicking object UI labels to interact with their owners!

This commit is contained in:
Liru Færs
2020-02-29 08:19:19 -05:00
parent 68ceac3678
commit e4eca079e6
5 changed files with 326 additions and 36 deletions

View File

@@ -9279,6 +9279,22 @@ class ListBanFromGroup final : public view_listener_t
void copy_from_ids(const uuid_vec_t & ids, std::function<std::string(const LLUUID&)> func);
uuid_vec_t get_active_owner_ids()
{
uuid_vec_t ret;
for (const auto& id : LFIDBearer::getActiveSelectedIDs())
{
const auto& owner_id = get_obj_owner(id);
if (owner_id.notNull()) ret.push_back(owner_id);
}
return ret;
}
const LLUUID& get_active_owner_id()
{
return get_obj_owner(LFIDBearer::getActiveSelectedID());
}
class ListCopyNames final : public view_listener_t
{
static std::string getGroupName(const LLUUID& id)
@@ -9310,8 +9326,9 @@ class ListCopyNames final : public view_listener_t
{
LLWString str;
const auto& type = LFIDBearer::getActiveType();
copy_from_ids(LFIDBearer::getActiveSelectedIDs(), type == LFIDBearer::GROUP ? getGroupName :
type == LFIDBearer::OBJECT ? getObjectName :
bool owner = !userdata.asBoolean();
copy_from_ids(owner ? get_active_owner_ids() : LFIDBearer::getActiveSelectedIDs(), type == LFIDBearer::GROUP ? getGroupName :
type == LFIDBearer::OBJECT ? owner ? getAvatarName : getObjectName :
type == LFIDBearer::EXPERIENCE ? getExperienceName :
getAvatarName);
if (!str.empty()) LLView::getWindow()->copyTextToClipboard(str);
@@ -9322,16 +9339,24 @@ class ListCopySLURL final : public view_listener_t
{
bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) override
{
copy_profile_uri(LFIDBearer::getActiveSelectedID(), LFIDBearer::getActiveType());
bool owner = !userdata.asBoolean();
copy_profile_uri(owner ? get_active_owner_id() : LFIDBearer::getActiveSelectedID(), owner ? LFIDBearer::AVATAR : LFIDBearer::getActiveType());
return true;
}
};
const LLUUID& active_owner_or_id(const LLSD& userdata)
{
return !userdata.asBoolean() ? get_active_owner_id() : LFIDBearer::getActiveSelectedID();
}
#define active_owners_or_ids(userdata) !userdata.asBoolean() ? get_active_owner_ids() : LFIDBearer::getActiveSelectedIDs()
class ListCopyUUIDs final : public view_listener_t
{
bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) override
{
LLAvatarActions::copyUUIDs(LFIDBearer::getActiveSelectedIDs());
LLAvatarActions::copyUUIDs(active_owners_or_ids(userdata));
return true;
}
};
@@ -9340,7 +9365,7 @@ class ListInviteToGroup final : public view_listener_t
{
bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) override
{
LLAvatarActions::inviteToGroup(LFIDBearer::getActiveSelectedIDs());
LLAvatarActions::inviteToGroup(active_owners_or_ids(userdata));
return true;
}
};
@@ -9349,7 +9374,7 @@ class ListOfferTeleport final : public view_listener_t
{
bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) override
{
LLAvatarActions::offerTeleport(LFIDBearer::getActiveSelectedIDs());
LLAvatarActions::offerTeleport(active_owners_or_ids(userdata));
return true;
}
};
@@ -9358,7 +9383,7 @@ class ListPay final : public view_listener_t
{
bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) override
{
LLAvatarActions::pay(LFIDBearer::getActiveSelectedID());
LLAvatarActions::pay(active_owner_or_id(userdata));
return true;
}
};
@@ -9367,7 +9392,7 @@ class ListRemoveFriend final : public view_listener_t
{
bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) override
{
LLAvatarActions::removeFriendDialog(LFIDBearer::getActiveSelectedID());
LLAvatarActions::removeFriendDialog(active_owner_or_id(userdata));
return true;
}
};
@@ -9376,7 +9401,7 @@ class ListRequestFriendship final : public view_listener_t
{
bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) override
{
LLAvatarActions::requestFriendshipDialog(LFIDBearer::getActiveSelectedID());
LLAvatarActions::requestFriendshipDialog(active_owner_or_id(userdata));
return true;
}
};
@@ -9385,7 +9410,7 @@ class ListRequestTeleport final : public view_listener_t
{
bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) override
{
LLAvatarActions::teleportRequest(LFIDBearer::getActiveSelectedID());
LLAvatarActions::teleportRequest(active_owner_or_id(userdata));
return true;
}
};
@@ -9394,7 +9419,7 @@ class ListShare final : public view_listener_t
{
bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) override
{
LLAvatarActions::share(LFIDBearer::getActiveSelectedID());
LLAvatarActions::share(active_owner_or_id(userdata));
return true;
}
};
@@ -9409,8 +9434,9 @@ class ListShowLog final : public view_listener_t
{
bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) override
{
for (const LLUUID& id : LFIDBearer::getActiveSelectedIDs())
show_log_browser(id, LFIDBearer::getActiveType());
const auto& type = userdata.asBoolean() ? LFIDBearer::getActiveType() : LFIDBearer::AVATAR;
for (const LLUUID& id : active_owners_or_ids(userdata))
show_log_browser(id, type);
return true;
}
};
@@ -9423,7 +9449,12 @@ class ListShowProfile final : public view_listener_t
{
case LFIDBearer::AVATAR: LLAvatarActions::showProfiles(LFIDBearer::getActiveSelectedIDs()); break;
case LFIDBearer::GROUP: LLGroupActions::showProfiles(LFIDBearer::getActiveSelectedIDs()); break;
case LFIDBearer::OBJECT: for (const auto& id : LFIDBearer::getActiveSelectedIDs()) LLUrlAction::openURL(get_slurl_for(id, LFIDBearer::OBJECT)); break;
case LFIDBearer::OBJECT:
if (userdata.asBoolean())
for (const auto& id : LFIDBearer::getActiveSelectedIDs()) LLUrlAction::openURL(get_slurl_for(id, LFIDBearer::OBJECT));
else // Owners
LLAvatarActions::showProfiles(get_active_owner_ids());
break;
case LFIDBearer::EXPERIENCE: for (const auto& id : LFIDBearer::getActiveSelectedIDs()) LLFloaterExperienceProfile::showInstance(id); break;
default: break;
}
@@ -9435,7 +9466,7 @@ class ListShowWebProfile final : public view_listener_t
{
bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) override
{
LLAvatarActions::showProfiles(LFIDBearer::getActiveSelectedIDs(), true);
LLAvatarActions::showProfiles(active_owners_or_ids(userdata), true);
return true;
}
};
@@ -9444,7 +9475,7 @@ class ListStartAdhocCall final : public view_listener_t
{
bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) override
{
LLAvatarActions::startAdhocCall(LFIDBearer::getActiveSelectedIDs());
LLAvatarActions::startAdhocCall(active_owners_or_ids(userdata));
return true;
}
};
@@ -9453,7 +9484,7 @@ class ListStartCall final : public view_listener_t
{
bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) override
{
(LFIDBearer::getActiveType() == LFIDBearer::GROUP ? LLGroupActions::startCall : LLAvatarActions::startCall)(LFIDBearer::getActiveSelectedID());
(LFIDBearer::getActiveType() == LFIDBearer::GROUP ? LLGroupActions::startCall : LLAvatarActions::startCall)(active_owner_or_id(userdata));
return true;
}
};
@@ -9462,7 +9493,7 @@ class ListStartConference final : public view_listener_t
{
bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) override
{
LLAvatarActions::startConference(LFIDBearer::getActiveSelectedIDs());
LLAvatarActions::startConference(active_owners_or_ids(userdata));
return true;
}
};
@@ -9472,7 +9503,7 @@ class ListStartIM final : public view_listener_t
bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) override
{
const auto&& im = LFIDBearer::getActiveType() == LFIDBearer::GROUP ? [](const LLUUID& id) { LLGroupActions::startIM(id); } : LLAvatarActions::startIM;
for (const auto& id : LFIDBearer::getActiveSelectedIDs())
for (const auto& id : active_owners_or_ids(userdata))
im(id);
return true;
}
@@ -9485,10 +9516,10 @@ const LLVector3d get_obj_pos(const LLUUID& id)
return obj->getPositionGlobal();
return LLVector3d::zero;
}
static const LLVector3d get_active_pos()
static const LLVector3d get_active_pos(const LLSD& userdata)
{
const auto& id = LFIDBearer::getActiveSelectedID();
if (LFIDBearer::getActiveType() == LFIDBearer::OBJECT)
const auto& id = active_owner_or_id(userdata);
if (userdata.asBoolean() && LFIDBearer::getActiveType() == LFIDBearer::OBJECT)
return get_obj_pos(id);
return get_av_pos(id);
}
@@ -9497,7 +9528,7 @@ class ListTeleportTo final : public view_listener_t
{
bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) override
{
const auto& pos = get_active_pos();
const auto& pos = get_active_pos(userdata);
if (!pos.isExactlyZero())
gAgent.teleportViaLocation(pos);
return true;
@@ -9508,7 +9539,7 @@ class ListStalk final : public view_listener_t
{
bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) override
{
LLAvatarActions::showOnMap(LFIDBearer::getActiveSelectedID());
LLAvatarActions::showOnMap(active_owner_or_id(userdata));
return true;
}
};
@@ -9518,7 +9549,7 @@ class ListStalkable final : public view_listener_t
bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) override
{
BOOL is_agent_mappable(const LLUUID& agent_id);
const auto& ids = LFIDBearer::getActiveSelectedIDs();
const auto& ids = active_owners_or_ids(userdata["data"]);
gMenuHolder->findControl(userdata["control"].asString())->setValue(ids.size() == 1 && is_agent_mappable(ids[0]));
return true;
}
@@ -9531,7 +9562,7 @@ class ListAbuseReport final : public view_listener_t
if (LFIDBearer::getActiveType() == LFIDBearer::EXPERIENCE)
LLFloaterReporter::showFromExperience(LFIDBearer::getActiveSelectedID());
else
LLFloaterReporter::showFromObject(LFIDBearer::getActiveSelectedID());
LLFloaterReporter::showFromObject(active_owner_or_id(userdata));
return true;
}
};
@@ -9597,8 +9628,9 @@ class ListIsNearby final : public view_listener_t
{
bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) override
{
const auto& id = LFIDBearer::getActiveSelectedID();
gMenuHolder->findControl(userdata["control"].asString())->setValue(LFIDBearer::getActiveType() == LFIDBearer::OBJECT ? !!gObjectList.findObject(id) : is_nearby(id));
const auto& data = userdata["data"];
const auto& id = active_owner_or_id(data);
gMenuHolder->findControl(userdata["control"].asString())->setValue(!data.asBoolean() && LFIDBearer::getActiveType() == LFIDBearer::OBJECT ? !!gObjectList.findObject(id) : is_nearby(id));
return true;
}
};
@@ -9607,7 +9639,7 @@ class ListFollow final : public view_listener_t
{
bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) override
{
gAgent.startFollowPilot(LFIDBearer::getActiveSelectedID(), true, gSavedSettings.getF32("SinguFollowDistance"));
gAgent.startFollowPilot(active_owner_or_id(userdata), true, gSavedSettings.getF32("SinguFollowDistance"));
return true;
}
};
@@ -9616,7 +9648,7 @@ class ListGoTo final : public view_listener_t
{
bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) override
{
const auto& pos = get_active_pos();
const auto& pos = get_active_pos(userdata);
if (!pos.isExactlyZero())
handle_go_to(pos);
return true;
@@ -9628,7 +9660,7 @@ class ListTrack final : public view_listener_t
{
bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) override
{
track_av(LFIDBearer::getActiveSelectedID());
track_av(active_owner_or_id(userdata));
return true;
}
};
@@ -9642,7 +9674,7 @@ class ListEject final : public view_listener_t
{
bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) override
{
confirm_eject(LFIDBearer::getActiveSelectedIDs());
confirm_eject(active_owners_or_ids(userdata));
return true;
}
};
@@ -9656,7 +9688,7 @@ class ListFreeze final : public view_listener_t
{
bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) override
{
confirm_freeze(LFIDBearer::getActiveSelectedIDs());
confirm_freeze(active_owners_or_ids(userdata));
return true;
}
};
@@ -9695,7 +9727,7 @@ class ListEstateBan final : public view_listener_t
{
bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) override
{
confirm_estate_ban(LFIDBearer::getActiveSelectedIDs());
confirm_estate_ban(active_owners_or_ids(userdata));
return true;
}
};
@@ -9708,7 +9740,7 @@ class ListEstateEject final : public view_listener_t
{
bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) override
{
confirm_estate_kick(LFIDBearer::getActiveSelectedIDs());
confirm_estate_kick(active_owners_or_ids(userdata));
return true;
}
};
@@ -9717,7 +9749,7 @@ class ListToggleMute final : public view_listener_t
{
bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) override
{
for (const auto& id : LFIDBearer::getActiveSelectedIDs())
for (const auto& id : active_owners_or_ids(userdata))
LLAvatarActions::toggleBlock(id);
return true;
}

View File

@@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<context_menu label="Objects" name="Objects">
<menu filename="menu_objects_list_owners.xml"/>
<menu_item_call label="Cam To" name="Cam To">
<on_click function="List.Object.CamTo"/>
<on_visible function="List.EnableSingleSelected"/>

View File

@@ -0,0 +1,143 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<menu label="Owner" name="Object Owner Submenu">
<menu_item_call label="Profile" name="Profile">
<on_click function="List.ShowProfile" userdata=""/>
<on_visible function="List.EnableAnySelected"/>
</menu_item_call>
<menu name="Actions" label="Actions">
<menu_item_call label="Web Profile" name="Web Profile">
<on_click function="List.ShowWebProfile" userdata=""/>
<on_visible function="List.VisibleWebProfile" userdata=""/>
</menu_item_call>
<menu_item_call label="Pay" name="Pay">
<on_click function="List.Pay" userdata=""/>
<on_visible function="List.EnableSingleSelected"/>
</menu_item_call>
<menu_item_call label="Instant Message" name="Instant Message">
<on_click function="List.StartIM" userdata=""/>
<on_visible function="List.EnableSingleSelected"/>
</menu_item_call>
<menu_item_call label="Conference Chat" name="Conference Chat">
<on_click function="List.StartConference" userdata=""/>
<on_visible function="List.EnableMultipleSelected"/>
</menu_item_call>
<menu_item_call label="Call" name="Call">
<on_click function="List.StartCall" userdata=""/>
<on_enable function="List.EnableCall" userdata=""/>
<on_visible function="List.EnableSingleSelected"/>
</menu_item_call>
<menu_item_call label="Conference Call" name="Conference Call">
<on_click function="List.StartAdhocCall" userdata=""/>
<on_enable function="List.EnableCall" userdata=""/>
<on_visible function="List.EnableMultipleSelected"/>
</menu_item_call>
<menu_item_call label="Add Friend" name="Add Friend">
<on_click function="List.RequestFriendship" userdata=""/>
<on_enable function="List.EnableSingleSelected"/>
<on_visible function="List.EnableIsNotFriend" userdata=""/>
</menu_item_call>
<menu_item_call label="Remove Friend" name="Remove Friend">
<on_click function="List.RemoveFriend" userdata=""/>
<on_enable function="List.EnableSingleSelected"/>
<on_visible function="List.EnableIsFriend" userdata=""/>
</menu_item_call>
<menu_item_call label="Invite To Group" name="Invite To Group">
<on_click function="List.InviteToGroup" userdata=""/>
<on_visible function="List.EnableAnySelected"/>
</menu_item_call>
<menu_item_call label="Follow" name="Follow">
<on_click function="List.Follow" userdata=""/>
<on_enable function="List.EnableSingleSelected"/>
<on_visible function="List.IsNearby" userdata=""/>
</menu_item_call>
<menu_item_call label="Move To" name="Move To">
<on_click function="List.GoTo" userdata=""/>
<on_enable function="List.EnableSingleSelected"/>
<on_visible function="List.IsNearby" userdata=""/>
</menu_item_call>
<menu_item_call label="Offer Teleport" name="Offer Teleport">
<on_click function="List.OfferTeleport" userdata=""/>
<on_visible function="List.EnableAnySelected"/>
</menu_item_call>
<menu_item_call label="Teleport To" name="Teleport To">
<on_click function="List.TeleportTo" userdata=""/>
<on_enable function="List.EnableSingleSelected"/>
<on_visible function="List.IsNearby" userdata=""/>
</menu_item_call>
<menu_item_call label="Request Teleport" name="Request Teleport">
<on_click function="List.RequestTeleport" userdata=""/>
<on_visible function="List.EnableSingleSelected"/>
</menu_item_call>
<menu_item_call label="Find on Map" name="Find on Map">
<on_click function="List.Stalk" userdata=""/>
<on_visible function="List.Stalkable" userdata=""/>
</menu_item_call>
<menu_item_call label="Share" name="Share">
<on_click function="List.Share" userdata=""/>
<on_visible function="List.EnableSingleSelected"/>
</menu_item_call>
<menu_item_call label="Chat History" name="Chat History">
<on_click function="List.ShowLog" userdata=""/>
<on_visible function="List.EnableAnySelected"/>
</menu_item_call>
<menu_item_call label="Track/Untrack" name="Track/Untrack">
<on_click function="List.Track" userdata=""/>
<on_enable function="List.EnableSingleSelected"/>
<on_visible function="List.IsNearby" userdata=""/>
</menu_item_call>
</menu>
<menu name="Copy" label="Copy">
<menu_item_call label="Key" name="Copy Key">
<on_click function="List.CopyUUIDs" userdata=""/>
<on_visible function="List.EnableAnySelected"/>
</menu_item_call>
<menu_item_call label="Name" name="Copy Name">
<on_click function="List.CopyNames" userdata=""/>
<on_visible function="List.EnableAnySelected"/>
</menu_item_call>
<menu_item_call label="SLURL" name="Copy SLURL">
<on_click function="List.CopySLURL" userdata=""/>
<on_visible function="List.EnableSingleSelected"/>
</menu_item_call>
</menu>
<menu_item_call label="Focus" name="Focus">
<on_click function="Radar.Focus" userdata=""/>
<on_enable function="List.EnableSingleSelected"/>
<on_visible function="List.IsNearby" userdata=""/>
</menu_item_call>
<menu label="Moderation" name="Moderation" create_jump_keys="">
<menu_item_call label="Mute" name="Mute">
<on_click function="List.ToggleMute" userdata=""/>
<on_visible function="List.EnableMute" userdata=""/>
</menu_item_call>
<menu_item_call label="Unmute" name="Unmute">
<on_click function="List.ToggleMute" userdata=""/>
<on_visible function="List.EnableUnmute" userdata=""/>
</menu_item_call>
<menu_item_call label="Ban From Group" name="Ban From Group">
<on_click function="List.BanFromGroup" userdata=""/>
<on_visible function="List.EnableAnySelected"/>
</menu_item_call>
<menu_item_call label="Report Abuse" name="Report Abuse">
<on_click function="List.AbuseReport" userdata=""/>
<on_visible function="List.EnableSingleSelected"/>
</menu_item_call>
<menu_item_separator/>
<menu_item_call label="Freeze" name="Freeze">
<on_click function="List.Freeze" userdata=""/>
<on_visible function="List.IsNearby" userdata=""/>
</menu_item_call>
<menu_item_call label="Eject/Ban from Parcel" name="Eject/Ban from Parcel">
<on_click function="List.ParcelEject" userdata=""/>
<on_visible function="List.IsNearby" userdata=""/>
</menu_item_call>
<menu_item_call label="Eject from estate" name="Eject from estate">
<on_click function="List.EstateEject" userdata=""/>
<on_visible function="List.IsNearby" userdata=""/>
</menu_item_call>
<menu_item_call label="Eject and ban from estate" name="Eject and ban from estate">
<on_click function="List.EstateBan" userdata=""/>
<on_visible function="List.IsNearby" userdata=""/>
</menu_item_call>
</menu>
</menu>

View File

@@ -0,0 +1,113 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<context_menu label="Owner" name="Object Owner Submenu">
<menu_item_call label="Send IM..." name="send_im">
<on_click function="List.StartIM" userdata=""/>
</menu_item_call>
<menu name="Actions" label="Actions">
<menu_item_call label="Profile" name="Profile">
<on_click function="List.ShowProfile" userdata=""/>
</menu_item_call>
<menu_item_call label="Web Profile" name="Web Profile">
<on_click function="List.ShowWebProfile" userdata=""/>
<on_visible function="List.VisibleWebProfile" userdata=""/>
</menu_item_call>
<menu_item_call label="Pay" name="Pay">
<on_click function="List.Pay" userdata=""/>
</menu_item_call>
<menu_item_call label="Call" name="Call">
<on_click function="List.StartCall" userdata=""/>
<on_visible function="List.EnableCall" userdata=""/>
</menu_item_call>
<menu_item_call label="Add Friend" name="Add Friend">
<on_click function="List.RequestFriendship" userdata=""/>
<on_visible function="List.EnableIsNotFriend" userdata=""/>
</menu_item_call>
<menu_item_call label="Remove Friend" name="Remove Friend">
<on_click function="List.RemoveFriend" userdata=""/>
<on_visible function="List.EnableIsFriend" userdata=""/>
</menu_item_call>
<menu_item_call label="Invite To Group" name="Invite To Group">
<on_click function="List.InviteToGroup" userdata=""/>
</menu_item_call>
<menu_item_call label="Follow" name="Follow">
<on_click function="List.Follow" userdata=""/>
<on_visible function="List.IsNearby" userdata=""/>
</menu_item_call>
<menu_item_call label="Move To" name="Move To">
<on_click function="List.GoTo" userdata=""/>
<on_visible function="List.IsNearby" userdata=""/>
</menu_item_call>
<menu_item_call label="Offer Teleport" name="Offer Teleport">
<on_click function="List.OfferTeleport" userdata=""/>
</menu_item_call>
<menu_item_call label="Teleport To" name="Teleport To">
<on_click function="List.TeleportTo" userdata=""/>
<on_visible function="List.IsNearby" userdata=""/>
</menu_item_call>
<menu_item_call label="Request Teleport" name="Request Teleport">
<on_click function="List.RequestTeleport" userdata=""/>
</menu_item_call>
<menu_item_call label="Find on Map" name="Find on Map">
<on_click function="List.Stalk" userdata=""/>
<on_visible function="List.Stalkable" userdata=""/>
</menu_item_call>
<menu_item_call label="Share" name="Share">
<on_click function="List.Share" userdata=""/>
</menu_item_call>
<menu_item_call label="Chat History" name="Chat History">
<on_click function="List.ShowLog" userdata=""/>
</menu_item_call>
<menu_item_call label="Track/Untrack" name="Track/Untrack">
<on_click function="List.Track" userdata=""/>
<on_visible function="List.IsNearby" userdata=""/>
</menu_item_call>
<menu_item_call label="Focus" name="Focus">
<on_click function="Radar.Focus" userdata=""/>
<on_visible function="List.IsNearby" userdata=""/>
</menu_item_call>
</menu>
<menu name="Copy">
<menu_item_call label="Name" name="copy_name">
<on_click function="List.CopyNames" userdata=""/>
</menu_item_call>
<menu_item_call label="SLURL" name="url_copy">
<on_click function="List.CopySLURL" userdata=""/>
</menu_item_call>
<menu_item_call label="Key" name="key_copy">
<menu_item_call.on_click function="List.CopyUUIDs" userdata=""/>
</menu_item_call>
</menu>
<menu label="Moderation" name="Moderation" create_jump_keys="">
<menu_item_call label="Mute" name="Mute">
<on_click function="List.ToggleMute" userdata=""/>
<on_visible function="List.EnableMute" userdata=""/>
</menu_item_call>
<menu_item_call label="Unmute" name="Unmute">
<on_click function="List.ToggleMute" userdata=""/>
<on_visible function="List.EnableUnmute" userdata=""/>
</menu_item_call>
<menu_item_call label="Ban From Group" name="Ban From Group">
<on_click function="List.BanFromGroup" userdata=""/>
</menu_item_call>
<menu_item_call label="Report Abuse" name="Report Abuse">
<on_click function="List.AbuseReport" userdata=""/>
</menu_item_call>
<menu_item_separator/>
<menu_item_call label="Freeze" name="Freeze">
<on_click function="List.Freeze" userdata=""/>
<on_visible function="List.IsNearby" userdata=""/>
</menu_item_call>
<menu_item_call label="Eject/Ban from Parcel" name="Eject/Ban from Parcel">
<on_click function="List.ParcelEject" userdata=""/>
<on_visible function="List.IsNearby" userdata=""/>
</menu_item_call>
<menu_item_call label="Eject from estate" name="Eject from estate">
<on_click function="List.EstateEject" userdata=""/>
<on_visible function="List.IsNearby" userdata=""/>
</menu_item_call>
<menu_item_call label="Eject and ban from estate" name="Eject and ban from estate">
<on_click function="List.EstateBan" userdata=""/>
<on_visible function="List.IsNearby" userdata=""/>
</menu_item_call>
</menu>
</context_menu>

View File

@@ -3,6 +3,7 @@
layout="topleft"
label="Object"
name="Url Popup">
<menu filename="menu_url_object_owner.xml"/>
<menu_item_call
label="Object Profile..."
layout="topleft"