From 8d80b897b5863372649de9b5f3c8d7234ae47f58 Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Wed, 25 May 2011 02:51:51 +0300 Subject: Fix some memory leaks in being, debugwindow, shortcutwindow, skilldialog, map classes. --- src/gui/debugwindow.cpp | 10 ++++++++++ src/gui/debugwindow.h | 2 ++ src/gui/shortcutwindow.cpp | 2 ++ src/gui/skilldialog.cpp | 16 +--------------- src/gui/widgets/tabbedarea.cpp | 18 ++++++++++++++++++ src/gui/widgets/tabbedarea.h | 2 ++ 6 files changed, 35 insertions(+), 15 deletions(-) (limited to 'src/gui') diff --git a/src/gui/debugwindow.cpp b/src/gui/debugwindow.cpp index ecc3ada54..d7cec480a 100644 --- a/src/gui/debugwindow.cpp +++ b/src/gui/debugwindow.cpp @@ -80,6 +80,16 @@ DebugWindow::DebugWindow(): loadWindowState(); } +DebugWindow::~DebugWindow() +{ + delete mMapWidget; + mMapWidget = 0; + delete mTargetWidget; + mTargetWidget = 0; + delete mNetWidget; + mNetWidget = 0; +} + void DebugWindow::logic() { if (!isVisible() || !mTabs) diff --git a/src/gui/debugwindow.h b/src/gui/debugwindow.h index ae4b1b597..b955209a5 100644 --- a/src/gui/debugwindow.h +++ b/src/gui/debugwindow.h @@ -118,6 +118,8 @@ class DebugWindow : public Window */ DebugWindow(); + ~DebugWindow(); + /** * Logic (updates components' size and infos) */ diff --git a/src/gui/shortcutwindow.cpp b/src/gui/shortcutwindow.cpp index f9db35ff6..0492afce0 100644 --- a/src/gui/shortcutwindow.cpp +++ b/src/gui/shortcutwindow.cpp @@ -131,6 +131,8 @@ ShortcutWindow::ShortcutWindow(const std::string &title, int width, int height) ShortcutWindow::~ShortcutWindow() { + if (mTabs) + mTabs->removeAll(); delete mTabs; mTabs = 0; delete mItems; diff --git a/src/gui/skilldialog.cpp b/src/gui/skilldialog.cpp index 7163d5285..a164d59d7 100644 --- a/src/gui/skilldialog.cpp +++ b/src/gui/skilldialog.cpp @@ -314,21 +314,7 @@ void SkillDialog::update() void SkillDialog::loadSkills(const std::string &file) { - // Fixes issues with removing tabs - if (mTabs->getSelectedTabIndex() != -1) - { - mTabs->setSelectedTab(static_cast(0)); - - while (mTabs->getNumberOfTabs() > 0) - { - const int idx = mTabs->getNumberOfTabs() - 1; - Tab *tab = mTabs->getTabByIndex(idx); - Widget *widget = mTabs->getWidgetByIndex(idx); - mTabs->removeTab(tab); - delete tab; - delete widget; - } - } + mTabs->removeAll(); delete_all(mSkills); mSkills.clear(); diff --git a/src/gui/widgets/tabbedarea.cpp b/src/gui/widgets/tabbedarea.cpp index 6c2ef5b25..b20237c1b 100644 --- a/src/gui/widgets/tabbedarea.cpp +++ b/src/gui/widgets/tabbedarea.cpp @@ -442,6 +442,24 @@ gcn::Widget *TabbedArea::getWidgetByIndex(int index) const return mTabs[index].second; } +void TabbedArea::removeAll() +{ + if (getSelectedTabIndex() != -1) + { + setSelectedTab(static_cast(0)); + + } + while (getNumberOfTabs() > 0) + { + const int idx = getNumberOfTabs() - 1; + gcn::Tab *tab = mTabs[idx].first; + Widget *widget = mTabs[idx].second; + removeTab(tab); + delete tab; + delete widget; + } +} + /* void TabbedArea::moveLeft(gcn::Tab *tab) { diff --git a/src/gui/widgets/tabbedarea.h b/src/gui/widgets/tabbedarea.h index dccf72357..d6f0783df 100644 --- a/src/gui/widgets/tabbedarea.h +++ b/src/gui/widgets/tabbedarea.h @@ -108,6 +108,8 @@ class TabbedArea : public gcn::TabbedArea, public gcn::WidgetListener */ void removeTab(gcn::Tab *tab); + void removeAll(); + /** * Overload the logic function since it's broken in guichan 0.8. */ -- cgit v1.2.3-60-g2f50