]> git.saurik.com Git - wxWidgets.git/commitdiff
Correctly handle the release of ownership of the wx.FSFile returned
authorRobin Dunn <robin@alldunn.com>
Tue, 13 Jun 2006 22:25:33 +0000 (22:25 +0000)
committerRobin Dunn <robin@alldunn.com>
Tue, 13 Jun 2006 22:25:33 +0000 (22:25 +0000)
from wx.FileSystemHandler.OpenFile.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@39703 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

wxPython/include/wx/wxPython/wxPython_int.h
wxPython/src/_filesys.i

index 26aa87d7f83a706ff344509dca5e9fcb8df927b9..d458cd50775937164ea980a591679b2d3e42f093 100644 (file)
@@ -1628,7 +1628,7 @@ extern wxPyApp *wxPythonApp;
     bool CLASS::CBNAME() const {                                                \
         bool rval=false;                                                        \
         bool found;                                                             \
-        wxPyBlock_t blocked = wxPyBeginBlockThreads();                                 \
+        wxPyBlock_t blocked = wxPyBeginBlockThreads();                          \
         if ((found = wxPyCBH_findCallback(m_myInst, #CBNAME)))                  \
             rval = wxPyCBH_callCallback(m_myInst, Py_BuildValue("()"));         \
         wxPyEndBlockThreads(blocked);                                           \
@@ -1647,7 +1647,7 @@ extern wxPyApp *wxPythonApp;
     wxDragResult CLASS::CBNAME(wxCoord a, wxCoord b, wxDragResult c) {          \
         int rval=0;                                                             \
         bool found;                                                             \
-        wxPyBlock_t blocked = wxPyBeginBlockThreads();                                 \
+        wxPyBlock_t blocked = wxPyBeginBlockThreads();                          \
         if ((found = wxPyCBH_findCallback(m_myInst, #CBNAME)))                  \
             rval = wxPyCBH_callCallback(m_myInst, Py_BuildValue("(iii)", a,b,c));\
         wxPyEndBlockThreads(blocked);                                           \
@@ -1663,7 +1663,7 @@ extern wxPyApp *wxPythonApp;
 
 #define IMP_PYCALLBACK_FSF_FSSTRING_pure(CLASS, PCLASS, CBNAME)                 \
     wxFSFile* CLASS::CBNAME(wxFileSystem& a,const wxString& b) {                \
-        wxPyBlock_t blocked = wxPyBeginBlockThreads();                                 \
+        wxPyBlock_t blocked = wxPyBeginBlockThreads();                          \
         wxFSFile* rval=0;                                                       \
         if (wxPyCBH_findCallback(m_myInst, #CBNAME)) {                          \
             PyObject* ro;                                                       \
@@ -1673,6 +1673,8 @@ extern wxPyApp *wxPythonApp;
                                          obj, s));                              \
             if (ro) {                                                           \
                 wxPyConvertSwigPtr(ro, (void **)&rval, wxT("wxFSFile"));        \
+                /* release ownership of the C++ wx.FSFile object. */            \
+                PyObject_SetAttrString(ro, "thisown", Py_False);                \
                 Py_DECREF(ro);                                                  \
             }                                                                   \
             Py_DECREF(obj);                                                     \
@@ -1692,7 +1694,7 @@ extern wxPyApp *wxPythonApp;
     bool CLASS::CBNAME(wxDragResult a) {                                        \
         bool rval=false;                                                        \
         bool found;                                                             \
-        wxPyBlock_t blocked = wxPyBeginBlockThreads();                                 \
+        wxPyBlock_t blocked = wxPyBeginBlockThreads();                          \
         if ((found = wxPyCBH_findCallback(m_myInst, #CBNAME)))                  \
             rval = wxPyCBH_callCallback(m_myInst, Py_BuildValue("(i)", a));     \
         wxPyEndBlockThreads(blocked);                                           \
@@ -1709,7 +1711,7 @@ extern wxPyApp *wxPythonApp;
 
 #define IMP_PYCALLBACK_DR_2WXCDR_pure(CLASS, PCLASS, CBNAME)                    \
     wxDragResult CLASS::CBNAME(wxCoord a, wxCoord b, wxDragResult c) {          \
-        wxPyBlock_t blocked = wxPyBeginBlockThreads();                                 \
+        wxPyBlock_t blocked = wxPyBeginBlockThreads();                          \
         int rval=0;                                                             \
         if (wxPyCBH_findCallback(m_myInst, #CBNAME))                            \
             rval = wxPyCBH_callCallback(m_myInst, Py_BuildValue("(iii)", a,b,c));\
index aaaea5c8bed55f00ae0e3e2883e76cd166a7fe7d..a423b23fe5cdffac91d7e460a9878cf1a1d3deb4 100644 (file)
 class wxFSFile : public wxObject
 {
 public:
-    %pythonAppend wxFSFile
-        "self.thisown = 0   # It will normally be deleted by the user of the wx.FileSystem";
+    %typemap(out) wxFSFile*;    // turn off this typemap
 
     wxFSFile(wxInputStream *stream, const wxString& loc,
              const wxString& mimetype, const wxString& anchor,
              wxDateTime modif);
-    
-    ~wxFSFile();  
+
+    // Turn it back on.
+    %typemap(out) wxFSFile* { $result = wxPyMake_wxObject($1, $owner); }
+
+    ~wxFSFile();
 
     wxInputStream *GetStream();
     const wxString& GetMimeType();
@@ -103,7 +105,7 @@ class wxPyFileSystemHandler : public wxFileSystemHandler
 {
 public:
     %pythonAppend    wxPyFileSystemHandler "self._setCallbackInfo(self, FileSystemHandler)";
-    
+
     wxPyFileSystemHandler();
 
     void _setCallbackInfo(PyObject* self, PyObject* _class);
@@ -142,7 +144,7 @@ public:
     %disownarg(wxFileSystemHandler *handler);
     static void AddHandler(wxFileSystemHandler *handler);
     %cleardisown(wxFileSystemHandler *handler);
-    
+
     static void CleanUpHandlers();
 
     // Returns the file URL for a native path
@@ -155,7 +157,7 @@ public:
             wxFileName fname = wxFileSystem::URLToFileName(url);
             return fname.GetFullPath();
         }
-    }   
+    }
 };
 
 
@@ -250,7 +252,7 @@ public:
 
     // Add a file to the memory FS
     %pythoncode { AddFile = staticmethod(MemoryFSHandler_AddFile) }
-    
+
     bool CanOpen(const wxString& location);
     %newobject OpenFile;
     wxFSFile* OpenFile(wxFileSystem& fs, const wxString& location);