SL-19409 FIXED Received items panel in multiple inventory windows does not sync New tag status between windows

meow-7.2.2
Maxim Nikolenko 2023-04-25 17:29:46 +03:00
parent c1a3c7b239
commit 7c3452fe44
2 changed files with 43 additions and 2 deletions

View File

@ -62,10 +62,13 @@ LLInboxInventoryPanel::LLInboxInventoryPanel(const LLInboxInventoryPanel::Params
: LLInventoryPanel(p)
{
LLInboxNewItemsStorage::getInstance()->load();
LLInboxNewItemsStorage::getInstance()->addInboxPanel(this);
}
LLInboxInventoryPanel::~LLInboxInventoryPanel()
{}
{
LLInboxNewItemsStorage::getInstance()->removeInboxPanel(this);
}
void LLInboxInventoryPanel::initFromParams(const LLInventoryPanel::Params& params)
{
@ -108,6 +111,21 @@ LLFolderViewItem * LLInboxInventoryPanel::createFolderViewItem(LLInvFVBridge * b
return LLUICtrlFactory::create<LLInboxFolderViewItem>(params);
}
void LLInboxInventoryPanel::onRemoveItemFreshness(const LLUUID& item_id)
{
LLInboxFolderViewFolder* inbox_folder_view = dynamic_cast<LLInboxFolderViewFolder*>(getFolderByID(item_id));
if(inbox_folder_view)
{
inbox_folder_view->setFresh(false);
}
LLInboxFolderViewItem* inbox_item_view = dynamic_cast<LLInboxFolderViewItem*>(getItemByID(item_id));
if(inbox_item_view)
{
inbox_item_view->setFresh(false);
}
}
//
// LLInboxFolderViewFolder Implementation
//
@ -340,4 +358,18 @@ void LLInboxNewItemsStorage::load()
}
}
}
void LLInboxNewItemsStorage::removeItem(const LLUUID& id)
{
mNewItemsIDs.erase(id);
//notify inbox panels
for (auto inbox : mInboxPanels)
{
if(inbox)
{
inbox->onRemoveItemFreshness(id);
}
}
}
// eof

View File

@ -49,6 +49,8 @@ public:
void initFromParams(const LLInventoryPanel::Params&);
LLFolderViewFolder* createFolderViewFolder(LLInvFVBridge * bridge, bool allow_drop);
LLFolderViewItem * createFolderViewItem(LLInvFVBridge * bridge);
void onRemoveItemFreshness(const LLUUID& item_id);
};
@ -77,6 +79,7 @@ public:
void deFreshify();
bool isFresh() const { return mFresh; }
void setFresh(bool is_fresh) { mFresh = is_fresh; }
protected:
bool mFresh;
@ -108,6 +111,7 @@ public:
void deFreshify();
bool isFresh() const { return mFresh; }
void setFresh(bool is_fresh) { mFresh = is_fresh; }
protected:
bool mFresh;
@ -125,11 +129,16 @@ public:
void load();
void addFreshItem(const LLUUID& id) { mNewItemsIDs.insert(id); }
void removeItem(const LLUUID& id) { mNewItemsIDs.erase(id); }
void removeItem(const LLUUID& id);
bool isItemFresh(const LLUUID& id) { return (mNewItemsIDs.find(id) != mNewItemsIDs.end()); }
void addInboxPanel(LLInboxInventoryPanel* inbox) { mInboxPanels.insert(inbox); }
void removeInboxPanel(LLInboxInventoryPanel* inbox) { mInboxPanels.erase(inbox); }
private:
std::set<LLUUID> mNewItemsIDs;
std::set<LLInboxInventoryPanel*> mInboxPanels;
};
#endif //LL_INBOXINVENTORYPANEL_H