From c7cba892b8d137c2960f0dd85c8bc25948bd0d61 Mon Sep 17 00:00:00 2001 From: codereader Date: Sun, 24 Jul 2022 16:52:23 +0200 Subject: [PATCH] #6021: Remove SkinChooser singleton, instantiate a new instance every time a skin is requested --- radiant/ui/common/SkinChooser.cpp | 54 +++++++------------------------ radiant/ui/common/SkinChooser.h | 8 ----- 2 files changed, 11 insertions(+), 51 deletions(-) diff --git a/radiant/ui/common/SkinChooser.cpp b/radiant/ui/common/SkinChooser.cpp index 68caa82e3c..1d167a17fe 100644 --- a/radiant/ui/common/SkinChooser.cpp +++ b/radiant/ui/common/SkinChooser.cpp @@ -1,8 +1,6 @@ #include "SkinChooser.h" #include "i18n.h" -#include "ui/imainframe.h" -#include "itextstream.h" #include "modelskin.h" #include "wxutil/Bitmap.h" @@ -19,10 +17,10 @@ namespace ui namespace { - const char* FOLDER_ICON = "folder16.png"; - const char* SKIN_ICON = "skin16.png"; + constexpr const char* FOLDER_ICON = "folder16.png"; + constexpr const char* SKIN_ICON = "skin16.png"; - const char* const WINDOW_TITLE = N_("Choose Skin"); + constexpr const char* const WINDOW_TITLE = N_("Choose Skin"); } // Constructor @@ -39,30 +37,6 @@ SkinChooser::SkinChooser() : populateWindow(); } -SkinChooser& SkinChooser::Instance() -{ - SkinChooserPtr& instancePtr = InstancePtr(); - - if (!instancePtr) - { - // Not yet instantiated, do it now - instancePtr.reset(new SkinChooser); - - // Pre-destruction cleanup - GlobalMainFrame().signal_MainFrameShuttingDown().connect( - sigc::mem_fun(*instancePtr, &SkinChooser::onMainFrameShuttingDown) - ); - } - - return *instancePtr; -} - -SkinChooserPtr& SkinChooser::InstancePtr() -{ - static SkinChooserPtr _instancePtr; - return _instancePtr; -} - void SkinChooser::populateWindow() { SetSizer(new wxBoxSizer(wxVERTICAL)); @@ -285,24 +259,18 @@ void SkinChooser::setSelectedSkin(const std::string& skin) std::string SkinChooser::chooseSkin(const std::string& model, const std::string& prev) { - Instance()._model = model; - Instance()._prevSkin = prev; + auto dialog = new SkinChooser(); - Instance().ShowModal(); - Instance().Hide(); - - return Instance()._lastSkin; -} + dialog->_model = model; + dialog->_prevSkin = prev; -void SkinChooser::onMainFrameShuttingDown() -{ - rMessage() << "SkinChooser shutting down." << std::endl; + dialog->ShowModal(); + + auto selectedSkin = dialog->_lastSkin; - _preview.reset(); + dialog->Destroy(); - // Destroy the window - SendDestroyEvent(); - InstancePtr().reset(); + return selectedSkin; } void SkinChooser::handleSelectionChange() diff --git a/radiant/ui/common/SkinChooser.h b/radiant/ui/common/SkinChooser.h index a6532b8804..757f7f528f 100644 --- a/radiant/ui/common/SkinChooser.h +++ b/radiant/ui/common/SkinChooser.h @@ -4,8 +4,6 @@ #include "imodel.h" #include "modelskin.h" -#include "iradiant.h" - #include "wxutil/dialog/DialogBase.h" #include "wxutil/preview/ModelPreview.h" #include "wxutil/DeclFileInfo.h" @@ -83,12 +81,6 @@ class SkinChooser : // callbacks void _onSelChanged(wxDataViewEvent& ev); - // Contains the static instance - static SkinChooser& Instance(); - - // This is where the static shared_ptr of the singleton instance is held. - static SkinChooserPtr& InstancePtr(); - // Retrieve the currently selected skin std::string getSelectedSkin(); void setSelectedSkin(const std::string& skin);