From fe5e444a73f6d089ba152b7c429128010b961d08 Mon Sep 17 00:00:00 2001 From: Robin Dunn Date: Mon, 21 Jun 2004 22:37:35 +0000 Subject: [PATCH] Changes needed to accomodate wxTheClipboard now being a macro for wxClipboard::Get git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@27928 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- wxPython/src/__misc_rename.i | 1 - wxPython/src/__misc_reverse.txt | 1 + wxPython/src/_clipbrd.i | 35 +++++++++++++++++++++++++++++---- wxPython/src/helpers.cpp | 1 - wxPython/wxPython/_misc.py | 3 ++- 5 files changed, 34 insertions(+), 7 deletions(-) diff --git a/wxPython/src/__misc_rename.i b/wxPython/src/__misc_rename.i index 63047cb483..77165d9502 100644 --- a/wxPython/src/__misc_rename.i +++ b/wxPython/src/__misc_rename.i @@ -334,7 +334,6 @@ %rename(DragCancel) wxDragCancel; %rename(IsDragResultOk) wxIsDragResultOk; %rename(Clipboard) wxClipboard; -%rename(TheClipboard) wxTheClipboard; %rename(ClipboardLocker) wxClipboardLocker; %rename(VideoMode) wxVideoMode; %rename(DefaultVideoMode) wxDefaultVideoMode; diff --git a/wxPython/src/__misc_reverse.txt b/wxPython/src/__misc_reverse.txt index db39fd5d5c..aae30d4bdd 100644 --- a/wxPython/src/__misc_reverse.txt +++ b/wxPython/src/__misc_reverse.txt @@ -7,6 +7,7 @@ PyDropTarget #SystemSettings_GetSystemFont #SystemSettings_GetSystemMetric +TheClipboard # With the * on the end these will cause code to be added that # will scan for other names in the source module tha have the diff --git a/wxPython/src/_clipbrd.i b/wxPython/src/_clipbrd.i index 89c143f3b4..8fb471613e 100644 --- a/wxPython/src/_clipbrd.i +++ b/wxPython/src/_clipbrd.i @@ -117,13 +117,40 @@ exit. Returns False if the operation is unsuccesful for any reason.", ""); "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.", ""); + + + 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: + 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) +} //--------------------------------------------------------------------------- diff --git a/wxPython/src/helpers.cpp b/wxPython/src/helpers.cpp index 1d662540a5..b89e8fec50 100644 --- a/wxPython/src/helpers.cpp +++ b/wxPython/src/helpers.cpp @@ -825,7 +825,6 @@ void wxPy_ReinitStockObjects(int pass) REINITOBJ(wxTheColourDatabase, wxColourDatabase); - REINITOBJ(wxTheClipboard, wxClipboard); REINITOBJ2(wxDefaultValidator, wxValidator); REINITOBJ2(wxNullImage, wxImage); REINITOBJ2(wxNullAcceleratorTable, wxAcceleratorTable); diff --git a/wxPython/wxPython/_misc.py b/wxPython/wxPython/_misc.py index 2dab45e21c..3cb27c1f09 100644 --- a/wxPython/wxPython/_misc.py +++ b/wxPython/wxPython/_misc.py @@ -563,7 +563,7 @@ wxFileDropTarget = wx._misc.FileDropTarget wxFileDropTargetPtr = wx._misc.FileDropTargetPtr wxClipboard = wx._misc.Clipboard wxClipboardPtr = wx._misc.ClipboardPtr -wxTheClipboard = wx._misc.TheClipboard +wxClipboard_Get = wx._misc.Clipboard_Get wxClipboardLocker = wx._misc.ClipboardLocker wxClipboardLockerPtr = wx._misc.ClipboardLockerPtr wxVideoMode = wx._misc.VideoMode @@ -576,5 +576,6 @@ wxDisplay_GetFromPoint = wx._misc.Display_GetFromPoint wxDisplay_GetFromWindow = wx._misc.Display_GetFromWindow wxPyTimer = wx._misc.PyTimer wxPyDropTarget = wx._misc.PyDropTarget +wxTheClipboard = wx._misc.TheClipboard