fix(ui): select retained items on mouse down
Port UIElement_ListBox's press-time selection ordering through the shared retained item-list contract. Inventory, loot, paperdoll, and physical shortcuts now update canonical selection before release or drag promotion, while target-mode consumption suppresses drag and release-time activation. Co-authored-by: Codex <codex@openai.com>
This commit is contained in:
parent
2dd5cb80d2
commit
043ab10b3c
18 changed files with 292 additions and 62 deletions
|
|
@ -83,6 +83,9 @@ public sealed class ExternalContainerController : IItemListDragHandler, IRetaine
|
|||
ConfigureList(_topContainer, ContainerCellSize, horizontalScroll: false, containerEmptySprite);
|
||||
ConfigureList(_containerList, ContainerCellSize, horizontalScroll: true, containerEmptySprite);
|
||||
ConfigureList(_contentsList, ItemCellSize, horizontalScroll: true, contentsEmptySprite);
|
||||
_topContainer.PrimaryItemPressed = PressItem;
|
||||
_containerList.PrimaryItemPressed = PressItem;
|
||||
_contentsList.PrimaryItemPressed = PressItem;
|
||||
_topContainer.ExamineItemRequested = ExamineItem;
|
||||
_containerList.ExamineItemRequested = ExamineItem;
|
||||
_contentsList.ExamineItemRequested = ExamineItem;
|
||||
|
|
@ -325,7 +328,6 @@ public sealed class ExternalContainerController : IItemListDragHandler, IRetaine
|
|||
private void AddRootCell(uint guid)
|
||||
{
|
||||
UiItemSlot cell = CreateCell(_topContainer, guid, ItemDragSource.Ground);
|
||||
cell.Clicked = () => HandlePrimaryClick(guid, () => Select(guid));
|
||||
cell.DoubleClicked = RequestClose;
|
||||
cell.IsOpenContainer = _openContainer == guid;
|
||||
SetCapacity(cell, guid);
|
||||
|
|
@ -335,7 +337,7 @@ public sealed class ExternalContainerController : IItemListDragHandler, IRetaine
|
|||
private void AddContainerCell(uint guid)
|
||||
{
|
||||
UiItemSlot cell = CreateCell(_containerList, guid, ItemDragSource.Ground);
|
||||
cell.Clicked = () => HandlePrimaryClick(guid, () => OpenNestedContainer(guid));
|
||||
cell.Clicked = () => OpenNestedContainer(guid);
|
||||
SetCapacity(cell, guid);
|
||||
_containerList.AddItem(cell);
|
||||
}
|
||||
|
|
@ -343,7 +345,6 @@ public sealed class ExternalContainerController : IItemListDragHandler, IRetaine
|
|||
private void AddContentsCell(uint guid)
|
||||
{
|
||||
UiItemSlot cell = CreateCell(_contentsList, guid, ItemDragSource.Ground);
|
||||
cell.Clicked = () => HandlePrimaryClick(guid, () => Select(guid));
|
||||
cell.DoubleClicked = () => _itemInteraction.ActivateItem(guid);
|
||||
cell.DragAcceptSprite = 0x060011F9u;
|
||||
cell.DragRejectSprite = 0x060011F8u;
|
||||
|
|
@ -384,11 +385,12 @@ public sealed class ExternalContainerController : IItemListDragHandler, IRetaine
|
|||
_itemInteraction.ExamineSelectedOrEnterMode(guid);
|
||||
}
|
||||
|
||||
private void HandlePrimaryClick(uint guid, Action fallback)
|
||||
private bool PressItem(uint guid)
|
||||
{
|
||||
if (_itemInteraction.OfferPrimaryClick(guid) != ItemPrimaryClickResult.NotActive)
|
||||
return;
|
||||
fallback();
|
||||
return true;
|
||||
Select(guid);
|
||||
return false;
|
||||
}
|
||||
|
||||
private void ApplyIndicators()
|
||||
|
|
@ -573,6 +575,9 @@ public sealed class ExternalContainerController : IItemListDragHandler, IRetaine
|
|||
_objects.Cleared -= OnObjectsCleared;
|
||||
_selection.Changed -= OnSelectionChanged;
|
||||
_itemInteraction.StateChanged -= OnInteractionStateChanged;
|
||||
_topContainer.PrimaryItemPressed = null;
|
||||
_containerList.PrimaryItemPressed = null;
|
||||
_contentsList.PrimaryItemPressed = null;
|
||||
_topContainer.ExamineItemRequested = null;
|
||||
_containerList.ExamineItemRequested = null;
|
||||
_contentsList.ExamineItemRequested = null;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue