From 5dc43d1fc5bdac58ac689364b74118ea67285305 Mon Sep 17 00:00:00 2001 From: =?utf8?q?V=C3=A1clav=20Slav=C3=ADk?= Date: Sun, 20 Jun 2004 17:19:26 +0000 Subject: [PATCH] create wxTheClipboard on first use, not startup -- this fixes crash in console-only apps that were linked against wxGTK's 'core' shared library git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@27914 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/clipbrd.h | 19 ++++++++++-------- src/common/clipcmn.cpp | 45 +++++++++++++----------------------------- 2 files changed, 25 insertions(+), 39 deletions(-) diff --git a/include/wx/clipbrd.h b/include/wx/clipbrd.h index 3de8f49cf8..f4c29ba4b7 100644 --- a/include/wx/clipbrd.h +++ b/include/wx/clipbrd.h @@ -26,6 +26,7 @@ class WXDLLEXPORT wxDataFormat; class WXDLLEXPORT wxDataObject; +class WXDLLEXPORT wxClipboard; // ---------------------------------------------------------------------------- // wxClipboard represents the system clipboard. Normally, you should use @@ -38,7 +39,7 @@ class WXDLLEXPORT wxDataObject; class WXDLLEXPORT wxClipboardBase : public wxObject { public: - wxClipboardBase(); + wxClipboardBase() {} // open the clipboard before Add/SetData() and GetData() virtual bool Open() = 0; @@ -76,8 +77,17 @@ public: // X11 has two clipboards which get selected by this call. Empty on MSW. virtual void UsePrimarySelection( bool WXUNUSED(primary) = FALSE ) { } + // Returns global instance (wxTheClipboard) of the object: + static wxClipboard *Get(); }; +// ---------------------------------------------------------------------------- +// globals +// ---------------------------------------------------------------------------- + +// The global clipboard object - backward compatible access macro: +#define wxTheClipboard (wxClipboard::Get()) + // ---------------------------------------------------------------------------- // include platform-specific class declaration // ---------------------------------------------------------------------------- @@ -100,13 +110,6 @@ public: #include "wx/os2/clipbrd.h" #endif -// ---------------------------------------------------------------------------- -// globals -// ---------------------------------------------------------------------------- - -// The global clipboard object -WXDLLEXPORT_DATA(extern wxClipboard *) wxTheClipboard; - // ---------------------------------------------------------------------------- // helpful class for opening the clipboard and automatically closing it // ---------------------------------------------------------------------------- diff --git a/src/common/clipcmn.cpp b/src/common/clipcmn.cpp index bbb7b68c67..f253ccb9c1 100644 --- a/src/common/clipcmn.cpp +++ b/src/common/clipcmn.cpp @@ -33,49 +33,32 @@ #if wxUSE_CLIPBOARD +static wxClipboard *gs_clipboard = NULL; + +/*static*/ wxClipboard *wxClipboardBase::Get() +{ + if ( !gs_clipboard ) + { + gs_clipboard = new wxClipboard; + } + return gs_clipboard; +} + // ---------------------------------------------------------------------------- -// wxClipboardModule: module responsible for initializing the global clipboard +// wxClipboardModule: module responsible for destroying the global clipboard // object // ---------------------------------------------------------------------------- class wxClipboardModule : public wxModule { public: - bool OnInit(); - void OnExit(); + bool OnInit() { return true; } + void OnExit() { wxDELETE(gs_clipboard); } private: DECLARE_DYNAMIC_CLASS(wxClipboardModule) }; -// ---------------------------------------------------------------------------- -// global data defined here -// ---------------------------------------------------------------------------- - IMPLEMENT_DYNAMIC_CLASS(wxClipboardModule, wxModule) -wxClipboard* wxTheClipboard = (wxClipboard *)NULL; - -// ---------------------------------------------------------------------------- -// implementation -// ---------------------------------------------------------------------------- - -wxClipboardBase::wxClipboardBase() -{ -} - -bool wxClipboardModule::OnInit() -{ - wxTheClipboard = new wxClipboard; - - return TRUE; -} - -void wxClipboardModule::OnExit() -{ - delete wxTheClipboard; - - wxTheClipboard = (wxClipboard *)NULL; -} - #endif // wxUSE_CLIPBOARD -- 2.45.2