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
This commit is contained in:
Václav Slavík
2004-06-20 17:19:26 +00:00
parent fbe47c7b5c
commit 5dc43d1fc5
2 changed files with 25 additions and 39 deletions

View File

@@ -26,6 +26,7 @@
class WXDLLEXPORT wxDataFormat; class WXDLLEXPORT wxDataFormat;
class WXDLLEXPORT wxDataObject; class WXDLLEXPORT wxDataObject;
class WXDLLEXPORT wxClipboard;
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
// wxClipboard represents the system clipboard. Normally, you should use // wxClipboard represents the system clipboard. Normally, you should use
@@ -38,7 +39,7 @@ class WXDLLEXPORT wxDataObject;
class WXDLLEXPORT wxClipboardBase : public wxObject class WXDLLEXPORT wxClipboardBase : public wxObject
{ {
public: public:
wxClipboardBase(); wxClipboardBase() {}
// open the clipboard before Add/SetData() and GetData() // open the clipboard before Add/SetData() and GetData()
virtual bool Open() = 0; virtual bool Open() = 0;
@@ -76,8 +77,17 @@ public:
// X11 has two clipboards which get selected by this call. Empty on MSW. // X11 has two clipboards which get selected by this call. Empty on MSW.
virtual void UsePrimarySelection( bool WXUNUSED(primary) = FALSE ) { } 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 // include platform-specific class declaration
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
@@ -100,13 +110,6 @@ public:
#include "wx/os2/clipbrd.h" #include "wx/os2/clipbrd.h"
#endif #endif
// ----------------------------------------------------------------------------
// globals
// ----------------------------------------------------------------------------
// The global clipboard object
WXDLLEXPORT_DATA(extern wxClipboard *) wxTheClipboard;
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
// helpful class for opening the clipboard and automatically closing it // helpful class for opening the clipboard and automatically closing it
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------

View File

@@ -33,49 +33,32 @@
#if wxUSE_CLIPBOARD #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 // object
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
class wxClipboardModule : public wxModule class wxClipboardModule : public wxModule
{ {
public: public:
bool OnInit(); bool OnInit() { return true; }
void OnExit(); void OnExit() { wxDELETE(gs_clipboard); }
private: private:
DECLARE_DYNAMIC_CLASS(wxClipboardModule) DECLARE_DYNAMIC_CLASS(wxClipboardModule)
}; };
// ----------------------------------------------------------------------------
// global data defined here
// ----------------------------------------------------------------------------
IMPLEMENT_DYNAMIC_CLASS(wxClipboardModule, wxModule) 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 #endif // wxUSE_CLIPBOARD