From d6094cc50fad47eb7071f077e4e630cbec6c5b18 Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Wed, 28 Jun 2017 20:43:32 +0300 Subject: Fix showing cached additional fields in item popups. --- src/gui/popups/itempopup.cpp | 32 +++++++++++++++++++++++++++----- src/gui/popups/itempopup.h | 2 ++ 2 files changed, 29 insertions(+), 5 deletions(-) diff --git a/src/gui/popups/itempopup.cpp b/src/gui/popups/itempopup.cpp index 9800455ca..55f77350d 100644 --- a/src/gui/popups/itempopup.cpp +++ b/src/gui/popups/itempopup.cpp @@ -69,6 +69,8 @@ ItemPopup::ItemPopup() : mItemType(ItemDbType::UNUSABLE), mIcon(new Icon(this, nullptr)), mLastName(), + mCardsStr(), + mItemOptionsStr(), mLastId(0), mLastColor(ItemColor_one) { @@ -181,11 +183,31 @@ void ItemPopup::setItem(const ItemInfo &item, const int *const cards, const ItemOptionsList *const options) { - if (mIcon == nullptr || - (item.getName() == mLastName && color == mLastColor && id == mLastId)) - { + if (mIcon == nullptr) return; + + std::string cardsStr; + std::string optionsStr; + + if (item.getName() == mLastName && + color == mLastColor && + id == mLastId) + { + cardsStr = getCardsString(cards); + optionsStr = getOptionsString(options); + if (mItemOptionsStr == optionsStr && + mCardsStr == cardsStr) + { + return; + } + } + else + { + cardsStr = getCardsString(cards); + optionsStr = getOptionsString(options); } + mItemOptionsStr = optionsStr; + mCardsStr = cardsStr; if (id == -1) id = item.getId(); @@ -244,8 +266,8 @@ void ItemPopup::setItem(const ItemInfo &item, // TRANSLATORS: popup label mItemWeight->setTextWrapped(strprintf(_("Weight: %s"), UnitsDb::formatWeight(item.getWeight()).c_str()), 196); - mItemCards->setTextWrapped(getCardsString(cards), 196); - mItemOptions->setTextWrapped(getOptionsString(options), 196); + mItemCards->setTextWrapped(mCardsStr, 196); + mItemOptions->setTextWrapped(optionsStr, 196); int minWidth = mItemName->getWidth() + space; diff --git a/src/gui/popups/itempopup.h b/src/gui/popups/itempopup.h index de552eca7..fff3b817d 100644 --- a/src/gui/popups/itempopup.h +++ b/src/gui/popups/itempopup.h @@ -89,6 +89,8 @@ class ItemPopup final : public Popup ItemDbTypeT mItemType; Icon *mIcon A_NONNULLPOINTER; std::string mLastName; + std::string mCardsStr; + std::string mItemOptionsStr; int mLastId; ItemColor mLastColor; -- cgit v1.2.3-70-g09d2