From bc8db8b8f5efe06ffccbc8b7f9fb05fee0642de8 Mon Sep 17 00:00:00 2001
From: Jacob Turnbull <jacob@turnbulltech.com>
Date: Tue, 6 Apr 2021 20:12:51 -0500
Subject: [PATCH] Fix for enchanted items being removed on item equip cycling
 when they are re-equipped

---
 apps/openmw/mwworld/actionequip.cpp | 23 ++++++++++++++++++++---
 1 file changed, 20 insertions(+), 3 deletions(-)

diff --git a/apps/openmw/mwworld/actionequip.cpp b/apps/openmw/mwworld/actionequip.cpp
index 4cb0dbe511..23599b528e 100644
--- a/apps/openmw/mwworld/actionequip.cpp
+++ b/apps/openmw/mwworld/actionequip.cpp
@@ -91,13 +91,30 @@ namespace MWWorld
         // move all slots one towards begin(), then equip the item in the slot that is now free
         if (slot == slots_.first.end())
         {
-            for (slot=slots_.first.begin();slot!=slots_.first.end(); ++slot)
+            ContainerStoreIterator enchItem = invStore.getSelectedEnchantItem();
+            bool bReEquipEnchItem = false;
+            for (slot = slots_.first.begin(); slot != slots_.first.end(); ++slot)
             {
                 invStore.unequipSlot(*slot, actor, false);
-                if (slot+1 != slots_.first.end())
-                    invStore.equip(*slot, invStore.getSlot(*(slot+1)), actor);
+                if (slot + 1 != slots_.first.end())
+                {
+                    invStore.equip(*slot, invStore.getSlot(*(slot + 1)), actor);
+                }
                 else
+                {
                     invStore.equip(*slot, it, actor);
+                }
+
+                //if an enchanted item was re-equipped, set reEquipEnchItem = true
+                if (invStore.getSlot(*slot) == enchItem)
+                {
+                    bReEquipEnchItem = true;
+                }
+            }
+            //if re-equip flag is true, select the enchanted item again
+            if (bReEquipEnchItem)
+            {
+                invStore.setSelectedEnchantItem(enchItem);
             }
         }
     }