diff --git a/include/wx/artprov.h b/include/wx/artprov.h index 3bba43e060..4a862d3f58 100644 --- a/include/wx/artprov.h +++ b/include/wx/artprov.h @@ -22,6 +22,7 @@ class WXDLLEXPORT wxArtProvidersList; class WXDLLEXPORT wxArtProviderCache; +class wxArtProviderModule; // ---------------------------------------------------------------------------- // Types @@ -113,10 +114,13 @@ public: const wxArtClient& client = wxART_OTHER, const wxSize& size = wxDefaultSize); +protected: + friend class wxArtProviderModule; + // Initializes default provider + static void InitStdProvider(); // Destroy caches & all providers static void CleanUpProviders(); -protected: // Derived classes must override this method to create requested // art resource. This method is called only once per instance's // lifetime for each requested wxArtID. diff --git a/src/common/artprov.cpp b/src/common/artprov.cpp index 64b87d781e..194219d32d 100644 --- a/src/common/artprov.cpp +++ b/src/common/artprov.cpp @@ -207,8 +207,15 @@ wxArtProviderCache *wxArtProvider::sm_cache = NULL; class wxArtProviderModule: public wxModule { public: - bool OnInit() { return TRUE; } - void OnExit() { wxArtProvider::CleanUpProviders(); } + bool OnInit() + { + wxArtProvider::InitStdProvider(); + return TRUE; + } + void OnExit() + { + wxArtProvider::CleanUpProviders(); + } DECLARE_DYNAMIC_CLASS(wxArtProviderModule) }; diff --git a/src/common/artstd.cpp b/src/common/artstd.cpp index 9a8e4f53eb..31b4355928 100644 --- a/src/common/artstd.cpp +++ b/src/common/artstd.cpp @@ -27,7 +27,6 @@ #endif #include "wx/artprov.h" -#include "wx/module.h" // For the purposes of forcing this module to link char g_ArtProviderModule = 0; @@ -93,23 +92,20 @@ protected: } // ---------------------------------------------------------------------------- -// wxDefaultArtProviderModule +// wxArtProvider::InitStdProvider // ---------------------------------------------------------------------------- -class wxDefaultArtProviderModule: public wxModule +/*static*/ void wxArtProvider::InitStdProvider() { -public: - bool OnInit() - { - wxArtProvider::PushProvider(new wxDefaultArtProvider); - return TRUE; - } - void OnExit() {} + // NB: A few notes about this function: + // (1) it is in artstd.cpp and not in artprov.cpp on purpose. I wanted + // to avoid declaring wxDefaultArtProvider in any public header as + // it is only an implementation detail + // (2) other default art providers (e.g. GTK one) should NOT be added + // here. Instead, add them in port-specific initialialization code - DECLARE_DYNAMIC_CLASS(wxDefaultArtProviderModule) -}; - -IMPLEMENT_DYNAMIC_CLASS(wxDefaultArtProviderModule, wxModule) + wxArtProvider::PushProvider(new wxDefaultArtProvider); +} // ----------------------------------------------------------------------------