Some chicken-and-egg problems solved for wxPython on wxGTK

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@639 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Robin Dunn
1998-08-27 21:59:51 +00:00
parent 052ae0e568
commit 0d6f9504ae
7 changed files with 79 additions and 41 deletions

View File

@@ -16,7 +16,13 @@ srcdir=$(GENCODEDIR)
# value to use the C++ driver to link with instead of the default # value to use the C++ driver to link with instead of the default
# C driver. For example: # C driver. For example:
#MY_LDSHARED=$(CCC) -shared #MY_LDSHARED=$(CCC) -shared
MY_LINKCC=$(CCC) --verbose
# Same as above, but for statically linking Python and wxPython together,
# in other words, if you comment out the *shared* above. If this is the
# case then you should ensure that the main() function is Python's, not
# wxWindows'. You can rebuild $(WXWIN)/src/gtk/app.cpp with NOMAIN defined
# to force this...
MY_LINKCC=$(CCC)
## Pick one of these, or set your own. This is where the ## Pick one of these, or set your own. This is where the
@@ -31,12 +37,8 @@ wxpc wxp.cpp helpers.cpp windows.cpp events.cpp misc.cpp gdi.cpp \
# CFLAGS # CFLAGS
-I. -I$(WXWIN)/include -I/usr/local/lib/glib/include -I$(WXWIN)/src \ -I. -I$(WXWIN)/include -I/usr/local/lib/glib/include -I$(WXWIN)/src \
-I/usr/X/include -DSWIG_GLOBAL -D__WXGTK__ \ -I/usr/X/include -DSWIG_GLOBAL -D__WXGTK__ \
-D__WXDEBUG__ \
# LFLAGS # LFLAGS
-L$(WXWIN)/lib/solaris2.6 -L/usr/X/lib \ -L$(WXWIN)/lib/solaris2.6 -L/usr/X/lib \
-L/usr/local/lib/gcc-lib/sparc-sun-solaris2.6/2.8.1 \ -L/usr/local/lib/gcc-lib/sparc-sun-solaris2.6/2.8.1 \
-lwx_gtk -lgtk -lgdk -lglib -lXext -lX11 -lstdc++ -lgcc -lwx_gtk -lgtk -lgdk -lglib -lXext -lX11 -lstdc++ -lgcc

View File

@@ -33,9 +33,8 @@
* and things like that. * and things like that.
* *
* $Log$ * $Log$
* Revision 1.3 1998/08/27 00:00:54 RD * Revision 1.4 1998/08/27 21:59:29 RD
* - more tweaks * Some chicken-and-egg problems solved for wxPython on wxGTK
* - have discovered some problems but not yet discovered solutions...
* *
************************************************************************/ ************************************************************************/
@@ -1673,6 +1672,7 @@ SWIGEXPORT(void,initwxpc)() {
SWIG_addvarlink(SWIG_globals,"wxPyDefaultSize",_wrap_wxPyDefaultSize_get, _wrap_wxPyDefaultSize_set); SWIG_addvarlink(SWIG_globals,"wxPyDefaultSize",_wrap_wxPyDefaultSize_get, _wrap_wxPyDefaultSize_set);
__wxPreStart(); // initialize the GUI toolkit, if needed.
// wxPyWindows = new wxHashTable(wxKEY_INTEGER, 100); // wxPyWindows = new wxHashTable(wxKEY_INTEGER, 100);

View File

@@ -1372,9 +1372,8 @@ class wxApp(wxPyApp):
#---------------------------------------------------------------------------- #----------------------------------------------------------------------------
# #
# $Log$ # $Log$
# Revision 1.3 1998/08/27 00:00:56 RD # Revision 1.4 1998/08/27 21:59:31 RD
# - more tweaks # Some chicken-and-egg problems solved for wxPython on wxGTK
# - have discovered some problems but not yet discovered solutions...
# #
# Revision 1.2 1998/08/18 19:48:12 RD # Revision 1.2 1998/08/18 19:48:12 RD
# more wxGTK compatibility things. # more wxGTK compatibility things.

View File

@@ -75,6 +75,8 @@ int wxPyApp::MainLoop(void) {
void wxPyApp::AfterMainLoop(void) { void wxPyApp::AfterMainLoop(void) {
// more stuff from wxEntry... // more stuff from wxEntry...
#ifdef __WXMSW__
if (wxPythonApp->GetTopWindow()) { if (wxPythonApp->GetTopWindow()) {
// Forcibly delete the window. // Forcibly delete the window.
if (wxPythonApp->GetTopWindow()->IsKindOf(CLASSINFO(wxFrame)) || if (wxPythonApp->GetTopWindow()->IsKindOf(CLASSINFO(wxFrame)) ||
@@ -88,6 +90,10 @@ void wxPyApp::AfterMainLoop(void) {
wxPythonApp->SetTopWindow(NULL); wxPythonApp->SetTopWindow(NULL);
} }
} }
#endif
#ifdef __WXGTK__
wxPythonApp->DeletePendingObjects();
#endif
wxPythonApp->OnExit(); wxPythonApp->OnExit();
#ifdef __WXMSW__ #ifdef __WXMSW__
@@ -105,26 +111,19 @@ void wxPyApp::AfterMainLoop(void) {
//---------------------------------------------------------------------- //----------------------------------------------------------------------
// This is where we pick up the first part of the wxEntry functionality...
// Start the user application, user App's OnInit method is a parameter here // The rest is in __wxStart and AfterMainLoop. Thi function is called when
PyObject* __wxStart(PyObject* /* self */, PyObject* args) // wxpc is imported. (Before there is a wxApp object.)
void __wxPreStart()
{ {
PyObject* onInitFunc = NULL; // Bail out if there is already windows created. This means that the
PyObject* arglist; // toolkit has already been initialized, as in embedding wxPython in
PyObject* result; // a C++ wxWindows app.
long bResult; if (wxTopLevelWindows.Number() > 0)
return;
if (!PyArg_ParseTuple(args, "O", &onInitFunc))
return NULL;
// This is where we pick up one part of the wxEntry functionality...
// the rest is in AfterMainLoop.
#ifdef __WXMSW__ #ifdef __WXMSW__
wxApp::Initialize((WXHINSTANCE)wxhInstance); wxApp::Initialize((WXHINSTANCE)wxhInstance);
wxPythonApp->argc = 0;
wxPythonApp->argv = NULL;
wxPythonApp->OnInitGui();
#endif #endif
#ifdef __WXGTK__ #ifdef __WXGTK__
wxClassInfo::InitializeClasses(); wxClassInfo::InitializeClasses();
@@ -137,11 +136,8 @@ PyObject* __wxStart(PyObject* /* self */, PyObject* args)
argv[x] = PyString_AsString(PyList_GetItem(sysargv, x)); argv[x] = PyString_AsString(PyList_GetItem(sysargv, x));
argv[argc] = NULL; argv[argc] = NULL;
gtk_init( &argc, &argv );
wxPythonApp->argc = argc; delete [] argv;
wxPythonApp->argv = argv;
gtk_init( &wxPythonApp->argc, &wxPythonApp->argv );
#ifdef USE_GDK_IMLIB #ifdef USE_GDK_IMLIB
gdk_imlib_init(); gdk_imlib_init();
@@ -150,10 +146,37 @@ PyObject* __wxStart(PyObject* /* self */, PyObject* args)
#endif #endif
wxApp::CommonInit(); wxApp::CommonInit();
wxTheApp->OnInitGui();
#endif #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 // Call the Python App's OnInit function
arglist = PyTuple_New(0); arglist = PyTuple_New(0);
@@ -628,6 +651,9 @@ wxAcceleratorEntry* wxAcceleratorEntry_LIST_helper(PyObject* source) {
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
// //
// $Log$ // $Log$
// 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 // Revision 1.7 1998/08/27 00:00:26 RD
// - more tweaks // - more tweaks
// - have discovered some problems but not yet discovered solutions... // - have discovered some problems but not yet discovered solutions...

View File

@@ -30,6 +30,7 @@ extern wxPyApp *wxPythonApp;
//---------------------------------------------------------------------- //----------------------------------------------------------------------
void __wxPreStart();
PyObject* __wxStart(PyObject*, PyObject* args); PyObject* __wxStart(PyObject*, PyObject* args);
extern PyObject* wxPython_dict; extern PyObject* wxPython_dict;
@@ -102,6 +103,9 @@ private:
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
// //
// $Log$ // $Log$
// Revision 1.4 1998/08/27 21:59:09 RD
// Some chicken-and-egg problems solved for wxPython on wxGTK
//
// Revision 1.3 1998/08/16 04:31:09 RD // Revision 1.3 1998/08/16 04:31:09 RD
// More wxGTK work. // More wxGTK work.
// //

View File

@@ -112,6 +112,7 @@ extern "C" SWIGEXPORT(void,initcmndlgsc)();
%init %{ %init %{
__wxPreStart(); // initialize the GUI toolkit, if needed.
// wxPyWindows = new wxHashTable(wxKEY_INTEGER, 100); // wxPyWindows = new wxHashTable(wxKEY_INTEGER, 100);
@@ -139,6 +140,9 @@ extern "C" SWIGEXPORT(void,initcmndlgsc)();
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
// //
// $Log$ // $Log$
// Revision 1.6 1998/08/27 21:59:10 RD
// Some chicken-and-egg problems solved for wxPython on wxGTK
//
// Revision 1.5 1998/08/27 00:00:28 RD // Revision 1.5 1998/08/27 00:00:28 RD
// - more tweaks // - more tweaks
// - have discovered some problems but not yet discovered solutions... // - have discovered some problems but not yet discovered solutions...

View File

@@ -507,11 +507,6 @@ class MyApp(wxApp):
def main(): def main():
app = MyApp(0) app = MyApp(0)
import wxPython.gdi
reload(wxPython.gdi)
print wxPython.gdi.wxBLUE
print wxPython.gdi.wxBLUE.this
app.MainLoop() app.MainLoop()
@@ -521,16 +516,21 @@ def t():
# for focused testing... # for focused testing...
def t2(): def main2():
class T2App(wxApp): class T2App(wxApp):
def OnInit(self): def OnInit(self):
frame = TestLayoutConstraints(NULL) frame = TestLayoutConstraints(NULL)
frame.Show(true) frame.Show(true)
self.SetTopWindow(frame) self.SetTopWindow(frame)
return true
app = T2App(0) app = T2App(0)
app.MainLoop() app.MainLoop()
def t2():
import pdb
pdb.run('main2()')
if __name__ == '__main__': if __name__ == '__main__':
@@ -540,6 +540,9 @@ if __name__ == '__main__':
#---------------------------------------------------------------------------- #----------------------------------------------------------------------------
# #
# $Log$ # $Log$
# Revision 1.4 1998/08/27 21:59:51 RD
# Some chicken-and-egg problems solved for wxPython on wxGTK
#
# Revision 1.3 1998/08/27 00:01:17 RD # Revision 1.3 1998/08/27 00:01:17 RD
# - more tweaks # - more tweaks
# - have discovered some problems but not yet discovered solutions... # - have discovered some problems but not yet discovered solutions...