From a803baa900caa16e45578205d4f68ee2bfde5cc1 Mon Sep 17 00:00:00 2001 From: Krzysztof Starecki Date: Thu, 14 Feb 2019 15:20:23 +0100 Subject: Fix mod context menu memleak (issue #379) --- src/mainwindow.cpp | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) (limited to 'src/mainwindow.cpp') diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index f7cca785..b136a3a7 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -4404,7 +4404,7 @@ void MainWindow::addModSendToContextMenu(QMenu *menu) if (m_ModListSortProxy->sortColumn() != ModList::COL_PRIORITY) return; - QMenu *sub_menu = new QMenu(this); + QMenu *sub_menu = new QMenu(menu); sub_menu->setTitle(tr("Send to")); sub_menu->addAction(tr("Top"), this, SLOT(sendSelectedModsToTop_clicked())); sub_menu->addAction(tr("Bottom"), this, SLOT(sendSelectedModsToBottom_clicked())); @@ -4445,6 +4445,7 @@ void MainWindow::on_modList_customContextMenuRequested(const QPoint &pos) menu = allMods; } else { menu = new QMenu(this); + allMods->setParent(menu); allMods->setTitle(tr("All Mods")); menu->addMenu(allMods); menu->addSeparator(); @@ -4463,11 +4464,11 @@ void MainWindow::on_modList_customContextMenuRequested(const QPoint &pos) menu->addAction(tr("Remove Backup..."), this, SLOT(removeMod_clicked())); } else if (std::find(flags.begin(), flags.end(), ModInfo::FLAG_SEPARATOR) != flags.end()){ menu->addSeparator(); - QMenu *addRemoveCategoriesMenu = new QMenu(tr("Change Categories")); + QMenu *addRemoveCategoriesMenu = new QMenu(tr("Change Categories"), menu); populateMenuCategories(addRemoveCategoriesMenu, 0); connect(addRemoveCategoriesMenu, SIGNAL(aboutToHide()), this, SLOT(addRemoveCategories_MenuHandler())); addMenuAsPushButton(menu, addRemoveCategoriesMenu); - QMenu *primaryCategoryMenu = new QMenu(tr("Primary Category")); + QMenu *primaryCategoryMenu = new QMenu(tr("Primary Category"), menu); connect(primaryCategoryMenu, SIGNAL(aboutToShow()), this, SLOT(addPrimaryCategoryCandidates())); addMenuAsPushButton(menu, primaryCategoryMenu); menu->addSeparator(); @@ -4482,12 +4483,12 @@ void MainWindow::on_modList_customContextMenuRequested(const QPoint &pos) } else if (std::find(flags.begin(), flags.end(), ModInfo::FLAG_FOREIGN) != flags.end()) { addModSendToContextMenu(menu); } else { - QMenu *addRemoveCategoriesMenu = new QMenu(tr("Change Categories")); + QMenu *addRemoveCategoriesMenu = new QMenu(tr("Change Categories"), menu); populateMenuCategories(addRemoveCategoriesMenu, 0); connect(addRemoveCategoriesMenu, SIGNAL(aboutToHide()), this, SLOT(addRemoveCategories_MenuHandler())); addMenuAsPushButton(menu, addRemoveCategoriesMenu); - QMenu *primaryCategoryMenu = new QMenu(tr("Primary Category")); + QMenu *primaryCategoryMenu = new QMenu(tr("Primary Category"), menu); connect(primaryCategoryMenu, SIGNAL(aboutToShow()), this, SLOT(addPrimaryCategoryCandidates())); addMenuAsPushButton(menu, primaryCategoryMenu); @@ -4568,6 +4569,7 @@ void MainWindow::on_modList_customContextMenuRequested(const QPoint &pos) } menu->exec(modList->mapToGlobal(pos)); + delete menu; } catch (const std::exception &e) { reportError(tr("Exception: ").arg(e.what())); } catch (...) { -- cgit v1.3.1