Fixed the double traceback when an exception happens in OnInit
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@24714 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -512,6 +512,7 @@ public:
|
|||||||
bool findCallback(const char* name) const;
|
bool findCallback(const char* name) const;
|
||||||
int callCallback(PyObject* argTuple) const;
|
int callCallback(PyObject* argTuple) const;
|
||||||
PyObject* callCallbackObj(PyObject* argTuple) const;
|
PyObject* callCallbackObj(PyObject* argTuple) const;
|
||||||
|
PyObject* GetLastFound() const { return m_lastFound; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
PyObject* m_self;
|
PyObject* m_self;
|
||||||
|
@@ -366,7 +366,15 @@ void wxPyApp::_BootstrapApp()
|
|||||||
|
|
||||||
// Call the Python wxApp's OnInit function
|
// Call the Python wxApp's OnInit function
|
||||||
if (wxPyCBH_findCallback(m_myInst, "OnInit")) {
|
if (wxPyCBH_findCallback(m_myInst, "OnInit")) {
|
||||||
retval = wxPyCBH_callCallbackObj(m_myInst, Py_BuildValue("()"));
|
|
||||||
|
PyObject* method = m_myInst.GetLastFound();
|
||||||
|
PyObject* argTuple = PyTuple_New(0);
|
||||||
|
retval = PyEval_CallObject(method, argTuple);
|
||||||
|
Py_DECREF(argTuple);
|
||||||
|
Py_DECREF(method);
|
||||||
|
if (retval == NULL)
|
||||||
|
goto error;
|
||||||
|
|
||||||
pyint = PyNumber_Int(retval);
|
pyint = PyNumber_Int(retval);
|
||||||
if (! pyint) {
|
if (! pyint) {
|
||||||
PyErr_SetString(PyExc_TypeError, "OnInit should return a boolean value");
|
PyErr_SetString(PyExc_TypeError, "OnInit should return a boolean value");
|
||||||
@@ -1447,7 +1455,7 @@ int wxPyCallbackHelper::callCallback(PyObject* argTuple) const {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Invoke the Python callable object, returning the raw PyObject return
|
// Invoke the Python callable object, returning the raw PyObject return
|
||||||
// value. Caller should DECREF the return value and also call PyEval_SaveThread.
|
// value. Caller should DECREF the return value and also manage the GIL.
|
||||||
PyObject* wxPyCallbackHelper::callCallbackObj(PyObject* argTuple) const {
|
PyObject* wxPyCallbackHelper::callCallbackObj(PyObject* argTuple) const {
|
||||||
PyObject* result;
|
PyObject* result;
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user