From 90e3fe0fac992472a7ef8dd85bd6dc1a93be1e48 Mon Sep 17 00:00:00 2001 From: Leon Styhre <leon@leonstyhre.com> Date: Fri, 19 Mar 2021 18:47:49 +0100 Subject: [PATCH] Fixed a memory leak related to the gamelist placeholders. --- es-app/src/SystemData.cpp | 8 +++++++- es-app/src/SystemData.h | 2 ++ es-app/src/views/gamelist/BasicGameListView.cpp | 15 +++++++-------- es-app/src/views/gamelist/GridGameListView.cpp | 15 +++++++-------- 4 files changed, 23 insertions(+), 17 deletions(-) diff --git a/es-app/src/SystemData.cpp b/es-app/src/SystemData.cpp index 4faa787f9..874318c80 100644 --- a/es-app/src/SystemData.cpp +++ b/es-app/src/SystemData.cpp @@ -47,7 +47,8 @@ SystemData::SystemData( mIsCustomCollectionSystem(CustomCollectionSystem), mIsGroupedCustomCollectionSystem(false), mIsGameSystem(true), - mScrapeFlag(false) + mScrapeFlag(false), + mPlaceholder(nullptr) { mFilterIndex = new FileFilterIndex(); @@ -79,6 +80,10 @@ SystemData::SystemData( mRootFolder = new FileData(FOLDER, "" + name, mEnvData, this); setupSystemSortType(mRootFolder); } + + // This placeholder can be used later in the gamelist view. + mPlaceholder = new FileData(PLACEHOLDER, "<No Entries Found>", getSystemEnvData(), this); + setIsGameSystemStatus(); loadTheme(); } @@ -93,6 +98,7 @@ SystemData::~SystemData() if (!mEnvData->mStartPath.empty()) delete mEnvData; delete mRootFolder; + delete mPlaceholder; delete mFilterIndex; } diff --git a/es-app/src/SystemData.h b/es-app/src/SystemData.h index 9e1e38eac..80d4b7a5c 100644 --- a/es-app/src/SystemData.h +++ b/es-app/src/SystemData.h @@ -96,6 +96,7 @@ public: SystemData* getPrev() const; static SystemData* getRandomSystem(const SystemData* currentSystem); FileData* getRandomGame(const FileData* currentGame = nullptr); + FileData* getPlaceholder() { return mPlaceholder; }; void sortSystem(bool reloadGamelist = true, bool jumpToFirstRow = false); @@ -127,6 +128,7 @@ private: FileFilterIndex* mFilterIndex; FileData* mRootFolder; + FileData* mPlaceholder; }; #endif // ES_APP_SYSTEM_DATA_H diff --git a/es-app/src/views/gamelist/BasicGameListView.cpp b/es-app/src/views/gamelist/BasicGameListView.cpp index 28d3a815b..9e96cf6fb 100644 --- a/es-app/src/views/gamelist/BasicGameListView.cpp +++ b/es-app/src/views/gamelist/BasicGameListView.cpp @@ -162,15 +162,14 @@ FileData* BasicGameListView::getFirstGameEntry() void BasicGameListView::addPlaceholder(FileData* firstEntry) { - // Empty list - add a placeholder. - SystemData* system; - if (firstEntry && firstEntry->getSystem()->isGroupedCustomCollection()) - system = firstEntry->getSystem(); - else - system = this->mRoot->getSystem(); + // Empty list, add a placeholder. + FileData* placeholder; + + if (firstEntry && firstEntry->getSystem()->isGroupedCustomCollection()) + placeholder = firstEntry->getSystem()->getPlaceholder(); + else + placeholder = this->mRoot->getSystem()->getPlaceholder(); - FileData* placeholder = new FileData(PLACEHOLDER, "<No Entries Found>", - this->mRoot->getSystem()->getSystemEnvData(), system); mList.add(placeholder->getName(), placeholder, (placeholder->getType() == PLACEHOLDER)); } diff --git a/es-app/src/views/gamelist/GridGameListView.cpp b/es-app/src/views/gamelist/GridGameListView.cpp index 6eb10fe85..84399251a 100644 --- a/es-app/src/views/gamelist/GridGameListView.cpp +++ b/es-app/src/views/gamelist/GridGameListView.cpp @@ -535,15 +535,14 @@ void GridGameListView::updateInfoPanel() void GridGameListView::addPlaceholder(FileData* firstEntry) { - // Empty list - add a placeholder. - SystemData* system; - if (firstEntry && firstEntry->getSystem()->isGroupedCustomCollection()) - system = firstEntry->getSystem(); - else - system = this->mRoot->getSystem(); + // Empty list, add a placeholder. + FileData* placeholder; + + if (firstEntry && firstEntry->getSystem()->isGroupedCustomCollection()) + placeholder = firstEntry->getSystem()->getPlaceholder(); + else + placeholder = this->mRoot->getSystem()->getPlaceholder(); - FileData* placeholder = new FileData(PLACEHOLDER, "<No Entries Found>", - this->mRoot->getSystem()->getSystemEnvData(), system); mGrid.add(placeholder->getName(), "", placeholder); }