Linking: name the objects that prevent the link (no-mod, permanent, other owner, other region) #1418

Open
opened 2026-11-04 01:08:45 +00:00 by sky_line · 0 comments
Owner

Problem

Linking a selection that contains an object you can't modify fails with a generic notice (CannotLinkModify). It doesn't say which object is at fault. With dozens or hundreds of prims selected, the user has to hunt for the one no-mod object by hand.

The check is LLSelectMgr::linkObjects() (indra/newview/llselectmgr.cpp:829). It asks yes/no questions about the whole selection:

  • selectGetRootsModify()
  • selectGetRootsNonPermanentEnforced()
  • selectGetOwner()
  • selectGetSameRegion()

It then shows one notice and stops.

What to do

Make each link failure name the objects that cause it.

  • No modify permission (the main case). List the root objects of the selection that the user can't modify (!permModify()): their names, and their link number or position if the names are ambiguous.
  • Other failures, same treatment:
    • permanent / pathfinding-enforced roots (CannotLinkPermanent);
    • the objects whose owner differs from the majority (CannotLinkDifferentOwners, naming the owner);
    • the objects in the other region (CannotLinkAcrossRegions);
    • animated-object (checkAnimatedObjectLinkable) failures, where possible;
    • "still downloading" (UnableToLinkWhileDownloading), naming the objects whose properties haven't arrived.
  • Presentation:
    • Up to about 10 names in the notice, then "and N more".
    • Buttons: Deselect these, which removes the offending objects from the selection so the rest can be linked, and Select only these, which focuses on them, for example to inspect their permissions.
    • The names should be clickable or highlightable in-world if that's cheap; a selection highlight is enough.
  • Names come from the selection's existing object properties, which are already requested when objects are selected. No extra server requests. If a name hasn't arrived yet, show "(loading)" and the object's position.
  • The Link button's enabled state (enableLinkObjects) stays as is: enabled when at least one root is modifiable, so the user gets the explanatory notice instead of a silently greyed button. A tooltip on the button could summarise the reason ("3 objects can't be modified") when the selection would fail.

Done when

  • Selecting a mixed set and pressing Link names the no-mod objects. Deselect these followed by Link succeeds when the remaining objects are linkable.
  • The other failure kinds name their objects in the same way.
  • It works the same in the Build floater, the menu and the keyboard shortcut. RLVa link restrictions are unchanged.
  • No extra network traffic, and no stall on large selections: one pass over the selection.
## Problem Linking a selection that contains an object you can't modify fails with a generic notice (`CannotLinkModify`). It doesn't say which object is at fault. With dozens or hundreds of prims selected, the user has to hunt for the one no-mod object by hand. The check is `LLSelectMgr::linkObjects()` (`indra/newview/llselectmgr.cpp:829`). It asks yes/no questions about the whole selection: - `selectGetRootsModify()` - `selectGetRootsNonPermanentEnforced()` - `selectGetOwner()` - `selectGetSameRegion()` It then shows one notice and stops. ## What to do Make each link failure name the objects that cause it. - **No modify permission (the main case).** List the root objects of the selection that the user can't modify (`!permModify()`): their names, and their link number or position if the names are ambiguous. - **Other failures, same treatment:** - permanent / pathfinding-enforced roots (`CannotLinkPermanent`); - the objects whose owner differs from the majority (`CannotLinkDifferentOwners`, naming the owner); - the objects in the other region (`CannotLinkAcrossRegions`); - animated-object (`checkAnimatedObjectLinkable`) failures, where possible; - "still downloading" (`UnableToLinkWhileDownloading`), naming the objects whose properties haven't arrived. - **Presentation:** - Up to about 10 names in the notice, then "and N more". - Buttons: **Deselect these**, which removes the offending objects from the selection so the rest can be linked, and **Select only these**, which focuses on them, for example to inspect their permissions. - The names should be clickable or highlightable in-world if that's cheap; a selection highlight is enough. - **Names come from the selection's existing object properties**, which are already requested when objects are selected. No extra server requests. If a name hasn't arrived yet, show "(loading)" and the object's position. - **The Link button's enabled state** (`enableLinkObjects`) stays as is: enabled when at least one root is modifiable, so the user gets the explanatory notice instead of a silently greyed button. A tooltip on the button could summarise the reason ("3 objects can't be modified") when the selection would fail. ## Done when - Selecting a mixed set and pressing Link names the no-mod objects. **Deselect these** followed by Link succeeds when the remaining objects are linkable. - The other failure kinds name their objects in the same way. - It works the same in the Build floater, the menu and the keyboard shortcut. RLVa link restrictions are unchanged. - No extra network traffic, and no stall on large selections: one pass over the selection.
sky_line added this to the Slipstream project 2026-11-04 01:08:45 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
sky_line/Slipstream#1418
No description provided.