From a6ca266dab51aa244a670ff5246ca1a19efa4cf0 Mon Sep 17 00:00:00 2001 From: WarmUpTill Date: Fri, 18 Mar 2022 22:12:50 +0100 Subject: [PATCH] Fix potential crash / memory leak when clearing layouts --- src/headers/utility.hpp | 2 +- src/utility.cpp | 8 +++----- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/src/headers/utility.hpp b/src/headers/utility.hpp index fde4ef0c..7aa75597 100644 --- a/src/headers/utility.hpp +++ b/src/headers/utility.hpp @@ -43,7 +43,7 @@ std::string getSceneItemTransform(obs_scene_item *item); void placeWidgets(std::string text, QBoxLayout *layout, std::unordered_map placeholders, bool addStretch = true); -void deleteLayoutItem(QLayoutItem *item); +void deleteLayoutItemWidget(QLayoutItem *item); void clearLayout(QLayout *layout, int afterIdx = 0); void setLayoutVisible(QLayout *layout, bool visible); QMetaObject::Connection PulseWidget(QWidget *widget, QColor startColor, diff --git a/src/utility.cpp b/src/utility.cpp index b0ea3d52..da455874 100644 --- a/src/utility.cpp +++ b/src/utility.cpp @@ -204,12 +204,13 @@ void placeWidgets(std::string text, QBoxLayout *layout, } } -void deleteLayoutItem(QLayoutItem *item) +void deleteLayoutItemWidget(QLayoutItem *item) { if (item) { auto widget = item->widget(); if (widget) { widget->setVisible(false); + widget->deleteLater(); } delete item; } @@ -223,10 +224,7 @@ void clearLayout(QLayout *layout, int afterIdx) clearLayout(item->layout()); delete item->layout(); } - if (item->widget()) { - delete item->widget(); - } - delete item; + deleteLayoutItemWidget(item); } }