X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/f464a4f2afba29d9ef07a33a9ead0c118dbdca1c..c437fde9f90fc7dfcac79053d214fc9146d7be21:/wxPython/src/_streams.i diff --git a/wxPython/src/_streams.i b/wxPython/src/_streams.i index 225a0b901f..db75ebb98d 100644 --- a/wxPython/src/_streams.i +++ b/wxPython/src/_streams.i @@ -23,8 +23,15 @@ %newgroup -// typemaps for wxInputStream -%typemap(in) wxInputStream* (wxPyInputStream* temp, bool created) { +// Typemaps for wxInputStream +// +// We assume that input params taking a wxInputStream& will *not* take +// ownership of the stream and so we manage it in the typemaps. On the other +// hand, when a paramter expects a wxInputStream* then it does take ownership +// (such as wxFSFile) and so the typemap will make a copy of the stream object +// to give to it. + +%typemap(in) wxInputStream& (wxPyInputStream* temp, bool created) { if (wxPyConvertSwigPtr($input, (void **)&temp, wxT("wxPyInputStream"))) { $1 = temp->m_wxis; created = false; @@ -32,20 +39,28 @@ PyErr_Clear(); // clear the failure of the wxPyConvert above $1 = wxPyCBInputStream_create($input, false); if ($1 == NULL) { - PyErr_SetString(PyExc_TypeError, "Expected wxInputStream or Python file-like object."); + PyErr_SetString(PyExc_TypeError, "Expected wx.InputStream or Python file-like object."); SWIG_fail; } created = true; } } -%typemap(freearg) wxInputStream* { - if (created$argnum) - delete $1; -} +%typemap(freearg) wxInputStream& { if (created$argnum) delete $1; } + +%typemap(in) wxInputStream* (wxPyInputStream* temp) { + if (wxPyConvertSwigPtr($input, (void **)&temp, wxT("wxPyInputStream"))) { + $1 = wxPyCBInputStream_copy((wxPyCBInputStream*)temp->m_wxis); + } else { + PyErr_Clear(); // clear the failure of the wxPyConvert above + $1 = wxPyCBInputStream_create($input, true); + if ($1 == NULL) { + PyErr_SetString(PyExc_TypeError, "Expected wx.InputStream or Python file-like object."); + SWIG_fail; + } + } +} -%typemap(in) wxInputStream& = wxInputStream*; -%typemap(freearg) wxInputStream& = wxInputStream*; %typemap(out) wxInputStream* { @@ -54,7 +69,7 @@ if ($1) { _ptr = new wxPyInputStream($1); } - $result = wxPyConstructObject(_ptr, wxT("wxPyInputStream"), true); + $result = wxPyConstructObject(_ptr, wxT("wxPyInputStream"), $owner); } @@ -68,7 +83,9 @@ enum wxSeekMode }; -%name(InputStream) class wxPyInputStream { +%rename(InputStream) wxPyInputStream; +class wxPyInputStream +{ public: %extend { wxPyInputStream(PyObject* p) {