]> git.saurik.com Git - wxWidgets.git/commitdiff
Some chicken-and-egg problems solved for wxPython on wxGTK
authorRobin Dunn <robin@alldunn.com>
Thu, 27 Aug 1998 21:59:51 +0000 (21:59 +0000)
committerRobin Dunn <robin@alldunn.com>
Thu, 27 Aug 1998 21:59:51 +0000 (21:59 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@639 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

utils/wxPython/src/Setup.in
utils/wxPython/src/gtk/wxp.cpp
utils/wxPython/src/gtk/wxp.py
utils/wxPython/src/helpers.cpp
utils/wxPython/src/helpers.h
utils/wxPython/src/wxp.i
utils/wxPython/tests/test4.py

index 935dea032bf383f44008324a36d6df6c896d404b..d9c764c3d3d66c3a24e64ca3f09e93b100a8c41f 100644 (file)
@@ -16,7 +16,13 @@ srcdir=$(GENCODEDIR)
 # value to use the C++ driver to link with instead of the default
 # C driver.  For example:
 #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
@@ -31,12 +37,8 @@ wxpc wxp.cpp helpers.cpp windows.cpp events.cpp misc.cpp gdi.cpp \
        # CFLAGS
        -I. -I$(WXWIN)/include -I/usr/local/lib/glib/include -I$(WXWIN)/src \
        -I/usr/X/include -DSWIG_GLOBAL -D__WXGTK__ \
+       -D__WXDEBUG__ \
        # LFLAGS
        -L$(WXWIN)/lib/solaris2.6 -L/usr/X/lib \
        -L/usr/local/lib/gcc-lib/sparc-sun-solaris2.6/2.8.1 \
        -lwx_gtk -lgtk -lgdk -lglib -lXext -lX11 -lstdc++ -lgcc
-
-
-
-
-
index b67af6ddfe5e85adf6660068aa3eea7e4812a10a..a3ac64da1ff5c44a8af12a3be5cd8dc29af14f4d 100644 (file)
@@ -33,9 +33,8 @@
  * and things like that.
  *
  * $Log$
- * Revision 1.3  1998/08/27 00:00:54  RD
- * - more tweaks
- * - have discovered some problems but not yet discovered solutions...
+ * Revision 1.4  1998/08/27 21:59:29  RD
+ * Some chicken-and-egg problems solved for wxPython on wxGTK
  *
  ************************************************************************/
 
@@ -1673,6 +1672,7 @@ SWIGEXPORT(void,initwxpc)() {
         SWIG_addvarlink(SWIG_globals,"wxPyDefaultSize",_wrap_wxPyDefaultSize_get, _wrap_wxPyDefaultSize_set);
 
 
+    __wxPreStart();     // initialize the GUI toolkit, if needed.
 
 //    wxPyWindows = new wxHashTable(wxKEY_INTEGER, 100);
 
index d579b4663c00b82be0f400c2f27825b6aab9ec78..b503c6f4b25d9cd41717037bcaf7ad6e66f06704 100644 (file)
@@ -1372,9 +1372,8 @@ class wxApp(wxPyApp):
 #----------------------------------------------------------------------------
 #
 # $Log$
-# Revision 1.3  1998/08/27 00:00:56  RD
-# - more tweaks
-# - have discovered some problems but not yet discovered solutions...
+# Revision 1.4  1998/08/27 21:59:31  RD
+# Some chicken-and-egg problems solved for wxPython on wxGTK
 #
 # Revision 1.2  1998/08/18 19:48:12  RD
 # more wxGTK compatibility things.
index e0840d7b2b6be727c64217ba8be6e719ed176167..6649ed56c88aa00b5524020f72df2eeaedac9a82 100644 (file)
@@ -75,6 +75,8 @@ int  wxPyApp::MainLoop(void) {
 
 void wxPyApp::AfterMainLoop(void) {
     // more stuff from wxEntry...
+
+#ifdef __WXMSW__
     if (wxPythonApp->GetTopWindow()) {
         // Forcibly delete the window.
         if (wxPythonApp->GetTopWindow()->IsKindOf(CLASSINFO(wxFrame)) ||
@@ -88,6 +90,10 @@ void wxPyApp::AfterMainLoop(void) {
             wxPythonApp->SetTopWindow(NULL);
         }
     }
+#endif
+#ifdef __WXGTK__
+      wxPythonApp->DeletePendingObjects();
+#endif
 
     wxPythonApp->OnExit();
 #ifdef __WXMSW__
@@ -105,26 +111,19 @@ void wxPyApp::AfterMainLoop(void) {
 //----------------------------------------------------------------------
 
 
-
-// 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();
 #endif
 #ifdef __WXGTK__
     wxClassInfo::InitializeClasses();
@@ -137,11 +136,8 @@ PyObject* __wxStart(PyObject* /* self */, PyObject* args)
         argv[x] = PyString_AsString(PyList_GetItem(sysargv, x));
     argv[argc] = NULL;
 
-
-    wxPythonApp->argc = argc;
-    wxPythonApp->argv = argv;
-
-    gtk_init( &wxPythonApp->argc, &wxPythonApp->argv );
+    gtk_init( &argc, &argv );
+    delete [] argv;
 
 #ifdef USE_GDK_IMLIB
     gdk_imlib_init();
@@ -150,10 +146,37 @@ PyObject* __wxStart(PyObject* /* self */, PyObject* args)
 #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);
@@ -628,6 +651,9 @@ wxAcceleratorEntry* wxAcceleratorEntry_LIST_helper(PyObject* source) {
 /////////////////////////////////////////////////////////////////////////////
 //
 // $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
 // - more tweaks
 // - have discovered some problems but not yet discovered solutions...
index fedb01c3c35e0f43ccf158911f4430841eb9901a..3114aa562290ccf36ac1677582542637193552e1 100644 (file)
@@ -30,6 +30,7 @@ extern wxPyApp *wxPythonApp;
 
 //----------------------------------------------------------------------
 
+void      __wxPreStart();
 PyObject* __wxStart(PyObject*, PyObject* args);
 
 extern PyObject* wxPython_dict;
@@ -102,6 +103,9 @@ private:
 /////////////////////////////////////////////////////////////////////////////
 //
 // $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
 // More wxGTK work.
 //
index 530211888a5a28129ff139f215c5d4cd2376fc84..b997b0c89b1d421019a7d6918acbed262d5478cc 100644 (file)
@@ -112,6 +112,7 @@ extern "C" SWIGEXPORT(void,initcmndlgsc)();
 
 %init %{
 
+    __wxPreStart();     // initialize the GUI toolkit, if needed.
 
 //    wxPyWindows = new wxHashTable(wxKEY_INTEGER, 100);
 
@@ -139,6 +140,9 @@ extern "C" SWIGEXPORT(void,initcmndlgsc)();
 /////////////////////////////////////////////////////////////////////////////
 //
 // $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
 // - more tweaks
 // - have discovered some problems but not yet discovered solutions...
index 3ab3cf4934a0714dba359a4d3c0cad2c7084d41a..8ea37c3c730b9377d667abef988c9e4762f484d7 100644 (file)
@@ -507,11 +507,6 @@ class MyApp(wxApp):
 
 def main():
     app = MyApp(0)
-    import wxPython.gdi
-    reload(wxPython.gdi)
-    print wxPython.gdi.wxBLUE
-    print wxPython.gdi.wxBLUE.this
-
     app.MainLoop()
 
 
@@ -521,16 +516,21 @@ def t():
 
 
 # for focused testing...
-def t2():
+def main2():
     class T2App(wxApp):
         def OnInit(self):
             frame = TestLayoutConstraints(NULL)
             frame.Show(true)
             self.SetTopWindow(frame)
+            return true
 
     app = T2App(0)
     app.MainLoop()
 
+def t2():
+    import pdb
+    pdb.run('main2()')
+
 
 
 if __name__ == '__main__':
@@ -540,6 +540,9 @@ if __name__ == '__main__':
 #----------------------------------------------------------------------------
 #
 # $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
 # - more tweaks
 # - have discovered some problems but not yet discovered solutions...