#include "helpers.h"
#ifdef __WXGTK__
-#ifdef USE_GDK_IMLIB
+#ifdef wxUSE_GDK_IMLIB
#include "gdk_imlib/gdk_imlib.h"
#endif
#endif
//----------------------------------------------------------------------
// This gets run when the DLL is loaded. We just need to save a handle.
//----------------------------------------------------------------------
+
BOOL WINAPI DllMain(
HINSTANCE hinstDLL, // handle to DLL module
DWORD fdwReason, // reason for calling function
void wxPyApp::AfterMainLoop(void) {
// more stuff from wxEntry...
+
+#ifdef __WXMSW__
if (wxPythonApp->GetTopWindow()) {
// Forcibly delete the window.
if (wxPythonApp->GetTopWindow()->IsKindOf(CLASSINFO(wxFrame)) ||
wxPythonApp->SetTopWindow(NULL);
}
}
+#endif
+#ifdef __WXGTK__
+ wxPythonApp->DeletePendingObjects();
+#endif
wxPythonApp->OnExit();
#ifdef __WXMSW__
//----------------------------------------------------------------------
-
-// Start the user application, user App's OnInit method is a parameter here
-PyObject* __wxStart(PyObject* /* self */, PyObject* args)
+// This is where we pick up the first part of the wxEntry functionality...
+// The rest is in __wxStart and AfterMainLoop. Thi function is called when
+// wxpc is imported. (Before there is a wxApp object.)
+void __wxPreStart()
{
- PyObject* onInitFunc = NULL;
- PyObject* arglist;
- PyObject* result;
- long bResult;
-
- if (!PyArg_ParseTuple(args, "O", &onInitFunc))
- return NULL;
+ // Bail out if there is already windows created. This means that the
+ // toolkit has already been initialized, as in embedding wxPython in
+ // a C++ wxWindows app.
+ if (wxTopLevelWindows.Number() > 0)
+ return;
-// This is where we pick up one part of the wxEntry functionality...
-// the rest is in AfterMainLoop.
#ifdef __WXMSW__
- wxApp::Initialize((WXHINSTANCE)wxhInstance);
-
- wxPythonApp->argc = 0;
- wxPythonApp->argv = NULL;
- wxPythonApp->OnInitGui();
+ wxApp::Initialize();
#endif
#ifdef __WXGTK__
wxClassInfo::InitializeClasses();
argv[x] = PyString_AsString(PyList_GetItem(sysargv, x));
argv[argc] = NULL;
+ gtk_init( &argc, &argv );
+ delete [] argv;
- wxPythonApp->argc = argc;
- wxPythonApp->argv = argv;
-
- gtk_init( &wxPythonApp->argc, &wxPythonApp->argv );
-
-#ifdef USE_GDK_IMLIB
+#ifdef wxUSE_GDK_IMLIB
gdk_imlib_init();
gtk_widget_push_visual(gdk_imlib_get_visual());
gtk_widget_push_colormap(gdk_imlib_get_colormap());
#endif
wxApp::CommonInit();
- wxTheApp->OnInitGui();
-
#endif
+}
+
+
+
+static char* __nullArgv[1] = { 0 };
+
+// Start the user application, user App's OnInit method is a parameter here
+PyObject* __wxStart(PyObject* /* self */, PyObject* args)
+{
+ PyObject* onInitFunc = NULL;
+ PyObject* arglist;
+ PyObject* result;
+ long bResult;
+
+
+ if (!PyArg_ParseTuple(args, "O", &onInitFunc))
+ return NULL;
+
+ if (wxTopLevelWindows.Number() > 0) {
+ PyErr_SetString(PyExc_TypeError, "Only 1 wxApp per process!");
+ return NULL;
+ }
+
+
+ // This is the next part of the wxEntry functionality...
+ wxPythonApp->argc = 0;
+ wxPythonApp->argv = __nullArgv;
+ wxPythonApp->OnInitGui();
+
// Call the Python App's OnInit function
arglist = PyTuple_New(0);
static
PyObject* wxPyConstructObject(void* ptr, char* className)
{
- char buff[64]; // should be big enough...
+ char buff[64]; // should always be big enough...
char swigptr[64];
sprintf(buff, "_%s_p", className);
-
//----------------------------------------------------------------------
//----------------------------------------------------------------------
// Some helper functions for typemaps in my_typemaps.i, so they won't be
/////////////////////////////////////////////////////////////////////////////
//
// $Log$
+// Revision 1.10 1998/10/02 06:40:39 RD
+// Version 0.4 of wxPython for MSW.
+//
+// Revision 1.9 1998/09/25 13:28:52 VZ
+//
+// USE_xxx constants renamed to wxUSE_xxx. This is an incompatible change, you
+// must recompile everything after upgrading!
+//
+// Revision 1.8 1998/08/27 21:59:08 RD
+// Some chicken-and-egg problems solved for wxPython on wxGTK
+//
// Revision 1.7 1998/08/27 00:00:26 RD
// - more tweaks
// - have discovered some problems but not yet discovered solutions...