Index: Inventory.cs =================================================================== --- Inventory.cs (revision 2021) +++ Inventory.cs (working copy) @@ -140,8 +140,15 @@ _Manager.OnFolderUpdate += new InventoryManager.FolderUpdate(manager_OnFolderUpdate); _Manager.OnItemUpdate += new InventoryManager.ItemUpdate(manager_OnItemUpdate); _Manager.OnAssetUpdate += new InventoryManager.AssetUpdate(manager_OnAssetUpdate); + _Manager.OnItemCreated += new InventoryManager.ItemCreatedCallback(_Manager_OnItemCreated); } + void _Manager_OnItemCreated(bool success, ItemData itemData) + { + if (Items.ContainsKey(itemData.ParentUUID)) + Manage(itemData); + } + /// /// Updates the AssetUUID of a managed InventoryItem's ItemData. /// If the InventoryItem is not managed, the update is ignored. Index: InventoryManager.cs =================================================================== --- InventoryManager.cs (revision 2021) +++ InventoryManager.cs (working copy) @@ -785,6 +785,8 @@ #region Events public event AssetUpdate OnAssetUpdate; + public event ItemCreatedCallback OnItemCreated; + /// /// Fired when a BulkUpdateInventory packet is received containing item data. /// @@ -2832,6 +2834,21 @@ { try { callback(true, String.Empty, contents["new_inventory_item"].AsUUID(), contents["new_asset"].AsUUID()); } catch (Exception e) { Logger.Log(e.Message, Helpers.LogLevel.Error, _Client, e); } + + // Notify everyone of the creation. + // TODO: Is there a way to avoid fetching the whole thing? + FetchItemsCallback fetchCallback = + delegate(List items) + { + if (items.Count > 0) + { + ItemData item = items[0]; + item.AssetUUID = contents["new_asset"].AsUUID(); + try { OnItemCreated(true, item); } + catch (Exception e) { Logger.Log(e.Message, Helpers.LogLevel.Error, _Client, e); } + } + }; + RequestFetchItems(new UUID[] { contents["new_inventory_item"].AsUUID() }, _Agents.AgentID, fetchCallback); } else { @@ -3016,6 +3033,7 @@ item.SaleType = (SaleType)dataBlock.SaleType; // Look for an "item created" callback + // Let the requester know that its item was created. ItemCreatedCallback createdCallback; if (_ItemCreatedCallbacks.TryGetValue(dataBlock.CallbackID, out createdCallback)) { @@ -3025,6 +3043,13 @@ catch (Exception e) { Logger.Log(e.Message, Helpers.LogLevel.Error, _Client, e); } } + // Let everyone know that the item was created + if (OnItemCreated != null) + { + try { OnItemCreated(true, item); } + catch (Exception e) { Logger.Log(e.Message, Helpers.LogLevel.Error, _Client, e); } + } + //This is triggered when an item is received from a task if (OnTaskItemReceived != null) {