]> git.saurik.com Git - wxWidgets.git/blobdiff - wxPython/src/_clipbrd.i
fixed wxString iterators linked list corruption
[wxWidgets.git] / wxPython / src / _clipbrd.i
index 89c143f3b424396da8a64e1a93c10ccee82fa032..546fe5087f04a75efc261b7c47573bd3aecc0bd1 100644 (file)
@@ -65,7 +65,7 @@ True on success.", "");
     
 
 
-    %apply SWIGTYPE *DISOWN { wxDataObject *data };
+    %disownarg( wxDataObject *data );
     
     DocDeclStr(
         virtual bool , AddData( wxDataObject *data ),
@@ -84,8 +84,8 @@ do not delete the data explicitly.
 
 :see: `wx.DataObject`", "");
     
-
-    %clear wxDataObject *data;
+    %cleardisown( wxDataObject *data );
+    
     
     DocDeclStr(
         virtual bool , IsSupported( const wxDataFormat& format ),
@@ -113,17 +113,53 @@ exit.  Returns False if the operation is unsuccesful for any reason.", "");
     
 
     DocDeclStr(
-        virtual void , UsePrimarySelection( bool primary = True ),
-        "On platforms supporting it (the X11 based platforms), selects the
-so called PRIMARY SELECTION as the clipboard as opposed to the
-normal clipboard, if primary is True.", "");
-};
+        virtual void , UsePrimarySelection( bool primary = true ),
+        "On platforms supporting it (the X11 based platforms), selects the so
+called PRIMARY SELECTION as the clipboard as opposed to the normal
+clipboard, if primary is True.  On other platforms all clipboard
+operations fail when using the primary selection.  This allows code
+supporting the primary selection to be written without ill effects on
+the other platforms.", "");
+
+    
+    DocDeclStr(
+        bool , IsUsingPrimarySelection() const,
+        "Return true if we're using primary selection", "");
+    
 
+    DocDeclStr(
+        static wxClipboard *, Get(),
+        "Returns global instance (wxTheClipboard) of the object.", "");
+
+};
 
-%immutable;
-wxClipboard* const wxTheClipboard;
-%mutable;
 
+// Previously we just declared wxTheClipboard as a global, but in C++
+// is has been changed to be a macro for wxClipboard::Get, but the
+// swig generated code will try to evaluate it when it assigns to the
+// swig wrapper var so this causes Get to be called too early on
+// wxGTK.  So instead we'll create a Python class that can delay the
+// Get until it is really needed, which is similar in effect to what
+// is really happening on the C++ side too.
+%pythoncode {
+    class _wxPyDelayedInitWrapper(object):
+        def __init__(self, initfunc, *args, **kwargs):
+            self._initfunc = initfunc
+            self._args = args
+            self._kwargs = kwargs
+            self._instance = None
+        def _checkInstance(self):
+            if self._instance is None:
+                if wx.GetApp():
+                    self._instance = self._initfunc(*self._args, **self._kwargs)        
+        def __getattr__(self, name):
+            self._checkInstance()
+            return getattr(self._instance, name)
+        def __repr__(self):
+            self._checkInstance()
+            return repr(self._instance)
+    TheClipboard = _wxPyDelayedInitWrapper(Clipboard.Get)
+}
 
 
 //---------------------------------------------------------------------------