]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/appcmn.cpp
implemented fallback for AlphaBlend() for the systems not supporting it
[wxWidgets.git] / src / common / appcmn.cpp
index 6177cbcc67e87f16d9172deff4724c3c4898e7fd..25bda2572b28e387b86e76ed21dd6975ba0d7071 100644 (file)
@@ -121,9 +121,6 @@ bool wxAppBase::OnInitGui()
 #ifdef __WXUNIVERSAL__
     if ( !wxTheme::Get() && !wxTheme::CreateDefault() )
         return FALSE;
-    wxArtProvider *art = wxTheme::Get()->GetArtProvider();
-    if ( art )
-        wxArtProvider::PushProvider(art);
 #endif // __WXUNIVERSAL__
 
     return TRUE;
@@ -215,10 +212,10 @@ void wxAppBase::ProcessPendingEvents()
     }
 
     // iterate until the list becomes empty
-    wxNode *node = wxPendingEvents->First();
+    wxNode *node = wxPendingEvents->GetFirst();
     while (node)
     {
-        wxEvtHandler *handler = (wxEvtHandler *)node->Data();
+        wxEvtHandler *handler = (wxEvtHandler *)node->GetData();
         delete node;
 
         // In ProcessPendingEvents(), new handlers might be add
@@ -227,7 +224,7 @@ void wxAppBase::ProcessPendingEvents()
         handler->ProcessPendingEvents();
         wxENTER_CRIT_SECT( *wxPendingEventsLocker );
 
-        node = wxPendingEvents->First();
+        node = wxPendingEvents->GetFirst();
     }
 
     wxLEAVE_CRIT_SECT( *wxPendingEventsLocker );
@@ -381,10 +378,11 @@ bool wxAppBase::OnCmdLineParsed(wxCmdLineParser& parser)
         if ( !theme )
         {
             wxLogError(_("Unsupported theme '%s'."), themeName.c_str());
-
             return FALSE;
         }
 
+        // Delete the defaultly created theme and set the new theme.
+        delete wxTheme::Get();
         wxTheme::Set(theme);
     }
 #endif // __WXUNIVERSAL__
@@ -397,7 +395,6 @@ bool wxAppBase::OnCmdLineParsed(wxCmdLineParser& parser)
         if ( wxSscanf(modeDesc.c_str(), _T("%ux%u-%u"), &w, &h, &bpp) != 3 )
         {
             wxLogError(_("Invalid display mode specification '%s'."), modeDesc.c_str());
-
             return FALSE;
         }
 
@@ -446,8 +443,23 @@ bool wxAppBase::CheckBuildOptions(const wxBuildOptions& opts)
 
     if ( !(wxCMP(isDebug) && wxCMP(verMaj) && wxCMP(verMin)) )
     {
-        wxLogFatalError(_T("Mismatch between the program and library build ")
-                        _T("versions detected."));
+        wxString msg;
+        wxString libDebug, progDebug;
+
+        if (isDebug)
+            libDebug = wxT("debug");
+        else
+            libDebug = wxT("no debug");
+
+        if (opts.m_isDebug)
+            progDebug = wxT("debug");
+        else
+            progDebug = wxT("no debug");
+        
+        msg.Printf(_T("Mismatch between the program and library build versions detected.\nThe library used %d.%d (%s), and your program used %d.%d (%s)."),
+                   verMaj, verMin, libDebug.c_str(), opts.m_verMaj, opts.m_verMin, progDebug.c_str());
+        
+        wxLogFatalError(msg);
 
         // normally wxLogFatalError doesn't return
         return FALSE;
@@ -461,6 +473,7 @@ bool wxAppBase::CheckBuildOptions(const wxBuildOptions& opts)
 
 static void LINKAGEMODE SetTraceMasks()
 {
+#if wxUSE_LOG
     wxString mask;
     if ( wxGetEnv(wxT("WXTRACE"), &mask) )
     {
@@ -468,6 +481,7 @@ static void LINKAGEMODE SetTraceMasks()
         while ( tkn.HasMoreTokens() )
             wxLog::AddTraceMask(tkn.GetNextToken());
     }
+#endif // wxUSE_LOG
 }
 
 // wxASSERT() helper
@@ -494,6 +508,17 @@ void wxTrap()
 #endif // Win/Unix
 }
 
+
+void wxAssert(int cond,
+                  const wxChar *szFile,
+                  int nLine,
+                  const wxChar *szCond,
+                  const wxChar *szMsg) 
+{
+   if ( !cond )
+          wxOnAssert(szFile, nLine, szCond, szMsg);
+}
+  
 // show the assert modal dialog
 static
 void ShowAssertDialog(const wxChar *szFile,
@@ -523,6 +548,24 @@ void ShowAssertDialog(const wxChar *szFile,
         wxStrcat(szBuf, wxT("."));
     }
 
+#if wxUSE_THREADS
+    // if we are not in the main thread,
+    // output the assert directly and trap since dialogs cannot be displayed
+    if (!wxThread::IsMain()) {
+        wxStrcat(szBuf, wxT(" [in child thread]"));
+#if defined(__WXMSW__) && !defined(__WXMICROWIN__)
+        wxStrcat(szBuf, wxT("\r\n"));
+        OutputDebugString(szBuf);
+#else
+        // send to stderr
+        wxFprintf(stderr, wxT("%s\n"), szBuf);
+        fflush(stderr);
+#endif
+        // He-e-e-e-elp!! we're asserting in a child thread
+        wxTrap();
+    }
+#endif // wxUSE_THREADS
+
     if ( !s_bNoAsserts )
     {
         // send it to the normal log destination