From: Václav Slavík Date: Sun, 25 Jul 1999 12:21:23 +0000 (+0000) Subject: fixed static members X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/a76015e6ebf22e267c80f3740f3f7adc523b47e3 fixed static members git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@3131 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/include/wx/filesys.h b/include/wx/filesys.h index 15182beef3..d381956e29 100644 --- a/include/wx/filesys.h +++ b/include/wx/filesys.h @@ -116,10 +116,16 @@ class WXDLLEXPORT wxFileSystemHandler : public wxObject // Returns MIME type of the file - w/o need to open it // (default behaviour is that it returns type based on extension) + public: + static void CleanUpStatics(); + // deletes static members (m_MimeMng). It can be called + // as many times as you wish because m_MimeMng is created + // on demand + private: - static wxMimeTypesManager m_MimeMng; + static wxMimeTypesManager *m_MimeMng; // MIME manager - // (it's static and thus shared by all instances and derived classes) + // (it's static and thus shared by all instances and derived classes) }; diff --git a/include/wx/html/htmlwin.h b/include/wx/html/htmlwin.h index 351e000d0c..553f49112e 100644 --- a/include/wx/html/htmlwin.h +++ b/include/wx/html/htmlwin.h @@ -109,7 +109,7 @@ class WXDLLEXPORT wxHtmlWindow : public wxScrolledWindow static wxList m_Filters; // list of HTML filters - static wxHtmlFilterPlainText m_DefaultFilter; + static wxHtmlFilter *m_DefaultFilter; // this filter is used when no filter is able to read some file HtmlHistoryArray m_History; @@ -189,6 +189,9 @@ class WXDLLEXPORT wxHtmlWindow : public wxScrolledWindow virtual void OnLinkClicked(const wxString& link); // called when users clicked on hypertext link. Default behavior is to // call LoadPage(loc) + + static void CleanUpStatics(); + // cleans static variables protected: bool ScrollToAnchor(const wxString& anchor); @@ -206,6 +209,9 @@ class WXDLLEXPORT wxHtmlWindow : public wxScrolledWindow void OnMouseEvent(wxMouseEvent& event); void OnIdle(wxIdleEvent& event); void OnKeyDown(wxKeyEvent& event); + + virtual wxHtmlFilter *GetDefaultFilter() {return new wxHtmlFilterPlainText;} + // returns new filter (will be stored into m_DefaultFilter variable) DECLARE_EVENT_TABLE() }; diff --git a/src/common/filesys.cpp b/src/common/filesys.cpp index 38b29efa3c..068024fa6a 100644 --- a/src/common/filesys.cpp +++ b/src/common/filesys.cpp @@ -35,7 +35,13 @@ IMPLEMENT_ABSTRACT_CLASS(wxFileSystemHandler, wxObject) -wxMimeTypesManager wxFileSystemHandler::m_MimeMng; +wxMimeTypesManager *wxFileSystemHandler::m_MimeMng = NULL; + +void wxFileSystemHandler::CleanUpStatics() +{ + if (m_MimeMng) delete m_MimeMng; + m_MimeMng = NULL; +} wxString wxFileSystemHandler::GetMimeTypeFromExt(const wxString& location) @@ -53,7 +59,8 @@ wxString wxFileSystemHandler::GetMimeTypeFromExt(const wxString& location) if (c == _T('.')) {ext = loc.Right(l2-i-1); break;} if ((c == _T('/')) || (c == _T('\\')) || (c == _T(':'))) {return wxEmptyString;} } - ft = m_MimeMng.GetFileTypeFromExtension(ext); + if (m_MimeMng == NULL) m_MimeMng = new wxMimeTypesManager; + ft = m_MimeMng -> GetFileTypeFromExtension(ext); if (ft && (ft -> GetMimeType(&mime))) return mime; else return wxEmptyString; } @@ -279,7 +286,10 @@ class wxFileSystemModule : public wxModule wxFileSystem::AddHandler(new wxLocalFSHandler); return TRUE; } - virtual void OnExit() {} + virtual void OnExit() + { + wxFileSystemHandler::CleanUpStatics(); + } }; IMPLEMENT_DYNAMIC_CLASS(wxFileSystemModule, wxModule) @@ -287,3 +297,5 @@ IMPLEMENT_DYNAMIC_CLASS(wxFileSystemModule, wxModule) #endif // (wxUSE_FS_INET || wxUSE_FS_ZIP) && wxUSE_STREAMS + + diff --git a/src/html/htmlwin.cpp b/src/html/htmlwin.cpp index 493d0c35d6..b98f5fed9a 100644 --- a/src/html/htmlwin.cpp +++ b/src/html/htmlwin.cpp @@ -195,7 +195,10 @@ bool wxHtmlWindow::LoadPage(const wxString& location) } node = node -> GetNext(); } - if (src == wxEmptyString) src = m_DefaultFilter.ReadFile(*f); + if (src == wxEmptyString) { + if (m_DefaultFilter == NULL) m_DefaultFilter = GetDefaultFilter(); + src = m_DefaultFilter -> ReadFile(*f); + } m_FS -> ChangePathTo(f -> GetLocation()); rt_val = SetPage(src); @@ -377,7 +380,15 @@ void wxHtmlWindow::HistoryClear() wxList wxHtmlWindow::m_Filters; -wxHtmlFilterPlainText wxHtmlWindow::m_DefaultFilter; +wxHtmlFilter *wxHtmlWindow::m_DefaultFilter = NULL; + +void wxHtmlWindow::CleanUpStatics() +{ + if (m_DefaultFilter) delete m_DefaultFilter; + m_DefaultFilter = NULL; +} + + void wxHtmlWindow::AddFilter(wxHtmlFilter *filter) { @@ -525,6 +536,21 @@ END_EVENT_TABLE() +// A module to allow initialization/cleanup +// without calling these functions from app.cpp or from +// the user's application. + +class wxHtmlWinModule: public wxModule +{ +DECLARE_DYNAMIC_CLASS(wxHtmlWinModule) +public: + wxHtmlWinModule() : wxModule() {} + bool OnInit() { return TRUE; } + void OnExit() { wxHtmlWindow::CleanUpStatics(); } +}; + +IMPLEMENT_DYNAMIC_CLASS(wxHtmlWinModule, wxModule) +