]> git.saurik.com Git - wxWidgets.git/commitdiff
Add a helper wxApp::GetValidTraits() method.
authorVadim Zeitlin <vadim@wxwidgets.org>
Wed, 3 Jul 2013 00:31:49 +0000 (00:31 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Wed, 3 Jul 2013 00:31:49 +0000 (00:31 +0000)
This method always returns some valid traits, even if we don't have wxTheApp
(which is possible in the console applications) or if its GetTraits() was
overridden to return NULL (which shouldn't be, but still guard against this).

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@74349 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/app.h
src/common/appbase.cpp
src/common/evtloopcmn.cpp

index a0fe4afee1771d01b62172d75580a0792ea14931..b2d11cce40c11674565e0ede81426b8fba2bbf2f 100644 (file)
@@ -228,6 +228,14 @@ public:
     // for it
     static wxAppTraits *GetTraitsIfExists();
 
+    // Return some valid traits object.
+    //
+    // This method checks if we have wxTheApp and returns its traits if it does
+    // exist and the traits are non-NULL, similarly to GetTraitsIfExists(), but
+    // falls back to wxConsoleAppTraits to ensure that it always returns
+    // something valid.
+    static wxAppTraits& GetValidTraits();
+
     // returns the main event loop instance, i.e. the event loop which is started
     // by OnRun() and which dispatches all events sent from the native toolkit
     // to the application (except when new event loops are temporarily set-up).
index 5014ca25df9476022133b90cf18b1d36a42b9a97..b8cba4ff887f7ab68e7d6f91e32332d84ca4cbb6 100644 (file)
@@ -304,6 +304,15 @@ wxAppTraits *wxAppConsoleBase::GetTraitsIfExists()
     return app ? app->GetTraits() : NULL;
 }
 
+/* static */
+wxAppTraits& wxAppConsoleBase::GetValidTraits()
+{
+    static wxConsoleAppTraits s_traitsConsole;
+    wxAppTraits* const traits = wxTheApp ? wxTheApp->GetTraits() : NULL;
+
+    return traits ? *traits : s_traitsConsole;
+}
+
 // ----------------------------------------------------------------------------
 // wxEventLoop redirection
 // ----------------------------------------------------------------------------
index 8564f525171cc0cd100476676ed11d260c622ac7..2399911f685549f84a18487d85c3ea87f4fefbb4 100644 (file)
@@ -124,15 +124,9 @@ wxEventLoopBase::AddSourceForFD(int fd,
                                 wxEventLoopSourceHandler *handler,
                                 int flags)
 {
-    // Ensure that we have some valid traits.
-    wxConsoleAppTraits traitsConsole;
-    wxAppTraits *traits = wxTheApp ? wxTheApp->GetTraits() : NULL;
-    if ( !traits )
-        traits = &traitsConsole;
-
-    // And delegate to the event loop sources manager defined by it.
+    // Delegate to the event loop sources manager defined by it.
     wxEventLoopSourcesManagerBase* const
-        manager = traits->GetEventLoopSourcesManager();
+        manager = wxApp::GetValidTraits().GetEventLoopSourcesManager();
     wxCHECK_MSG( manager, NULL, wxS("Must have wxEventLoopSourcesManager") );
 
     return manager->AddSourceForFD(fd, handler, flags);