void WXDLLEXPORT wxEntryCleanup();
wxPyApp* wxPythonApp = NULL; // Global instance of application object
+bool wxPyDoCleanup = FALSE;
#ifdef WXP_WITH_THREAD
LPVOID lpvReserved // reserved
)
{
- wxSetInstance(hinstDLL);
- return 1;
+ // If wxPython is embedded in another wxWindows app then
+ // the inatance has already been set.
+ if (! wxGetInstance())
+ wxSetInstance(hinstDLL);
+ return TRUE;
}
#endif
wxPyTMutex = new wxMutex;
#endif
- // Bail out if there is already windows created. This means that the
+ wxApp::CheckBuildOptions(wxBuildOptions());
+
+ // Bail out if there is already a wxApp created. This means that the
// toolkit has already been initialized, as in embedding wxPython in
- // a C++ wxWindows app.
- if (wxTopLevelWindows.Number() > 0)
+ // a C++ wxWindows app, so we don't need to call wxEntryStart.
+ if (wxTheApp != NULL) {
return;
-
+ }
+ wxPyDoCleanup = TRUE;
int argc = 0;
char** argv = NULL;
void __wxCleanup() {
- wxEntryCleanup();
+ if (wxPyDoCleanup)
+ wxEntryCleanup();
#ifdef WXP_WITH_THREAD
delete wxPyTMutex;
wxPyTMutex = NULL;
PyObject* wxPyConstructObject(void* ptr,
const wxString& className,
int setThisOwn) {
- PyObject* obj;
-
if (!ptr) {
Py_INCREF(Py_None);
return Py_None;
PyObject* classobj = PyDict_GetItemString(wxPython_dict, buff);
if (! classobj) {
- char temp[128];
- sprintf(temp,
- "*** Unknown class name %s, tell Robin about it please ***",
- buff);
- obj = PyString_FromString(temp);
- return obj;
+ wxString msg(wxT("wxPython class not found for "));
+ msg += className;
+ PyErr_SetString(PyExc_NameError, msg.mbc_str());
+ return NULL;
}
return wxPyConstructObject(ptr, className, classobj, setThisOwn);
void wxPyEndBlockThreads() {
#ifdef WXP_WITH_THREAD
- PyThreadState* tstate = PyEval_SaveThread();
// Is there any need to save it again?
+ // PyThreadState* tstate =
+ PyEval_SaveThread();
#endif
}