From 49da33a12981b1af7a91c5d1bd5e91fdc97537b6 Mon Sep 17 00:00:00 2001
From: kuyondo <rdja.kyd@gmail.com>
Date: Mon, 4 Oct 2021 08:12:15 +0800
Subject: [PATCH] comiit

---
 apps/openmw/mwgui/tradewindow.cpp | 23 +++++++++++++++++++++--
 apps/openmw/mwgui/tradewindow.hpp |  1 +
 2 files changed, 22 insertions(+), 2 deletions(-)

diff --git a/apps/openmw/mwgui/tradewindow.cpp b/apps/openmw/mwgui/tradewindow.cpp
index 19ea383483..d236305f37 100644
--- a/apps/openmw/mwgui/tradewindow.cpp
+++ b/apps/openmw/mwgui/tradewindow.cpp
@@ -52,6 +52,7 @@ namespace MWGui
         , mItemToSell(-1)
         , mCurrentBalance(0)
         , mCurrentMerchantOffer(0)
+        , mReceiveMoney(false)
     {
         getWidget(mFilterAll, "AllButton");
         getWidget(mFilterWeapon, "WeaponButton");
@@ -405,10 +406,15 @@ namespace MWGui
 
     void TradeWindow::onBalanceValueChanged(int value)
     {
+        int previousBalance = mCurrentBalance;
+
         // Entering a "-" sign inverts the buying/selling state
         mCurrentBalance = (mCurrentBalance >= 0 ? 1 : -1) * value;
         updateLabels();
 
+        if (mReceiveMoney && mCurrentBalance == 0)
+            mCurrentBalance = previousBalance;
+
         if (value != std::abs(value))
             mTotalBalance->setValue(std::abs(value));
     }
@@ -434,10 +440,23 @@ namespace MWGui
     {
         MWWorld::Ptr player = MWMechanics::getPlayer();
         int playerGold = player.getClass().getContainerStore(player).count(MWWorld::ContainerStore::sGoldId);
-
         mPlayerGold->setCaptionWithReplacing("#{sYourGold} " + MyGUI::utility::toString(playerGold));
 
-        if (mCurrentBalance < 0)
+        TradeItemModel* playerTradeModel = MWBase::Environment::get().getWindowManager()->getInventoryWindow()->getTradeModel();
+        const std::vector<ItemStack>& playerBorrowed = playerTradeModel->getItemsBorrowedToUs();
+        const std::vector<ItemStack>& merchantBorrowed = mTradeModel->getItemsBorrowedToUs();
+
+        if (playerBorrowed.empty() && merchantBorrowed.empty()) {
+            mCurrentBalance = 0;
+        }
+        else if (playerBorrowed.empty()) {
+            mReceiveMoney = false;
+        }
+        else if (merchantBorrowed.empty()) {
+            mReceiveMoney = true;
+        }
+
+        if (mCurrentBalance < 0 || mReceiveMoney)
         {
             mTotalBalanceLabel->setCaptionWithReplacing("#{sTotalCost}");
         }
diff --git a/apps/openmw/mwgui/tradewindow.hpp b/apps/openmw/mwgui/tradewindow.hpp
index f82d7b0f72..523cb84098 100644
--- a/apps/openmw/mwgui/tradewindow.hpp
+++ b/apps/openmw/mwgui/tradewindow.hpp
@@ -79,6 +79,7 @@ namespace MWGui
 
             int mCurrentBalance;
             int mCurrentMerchantOffer;
+            bool mReceiveMoney;
 
             void sellToNpc(const MWWorld::Ptr& item, int count, bool boughtItem); ///< only used for adjusting the gold balance
             void buyFromNpc(const MWWorld::Ptr& item, int count, bool soldItem); ///< only used for adjusting the gold balance