X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/fef15b42f36ea19d7162f4ff2750423cc954e7e3..8fb3bfe20f221dcb868d685d705c5fddb2deef11:/src/msw/cursor.cpp?ds=sidebyside diff --git a/src/msw/cursor.cpp b/src/msw/cursor.cpp index 4cea893b6b..b715483ccb 100644 --- a/src/msw/cursor.cpp +++ b/src/msw/cursor.cpp @@ -37,6 +37,7 @@ #include "wx/cursor.h" #endif +#include "wx/module.h" #include "wx/msw/private.h" #include "wx/msw/dib.h" @@ -49,9 +50,40 @@ // wxWin macros // ---------------------------------------------------------------------------- -#if !USE_SHARED_LIBRARIES - IMPLEMENT_DYNAMIC_CLASS(wxCursor, wxCursorBase) -#endif +IMPLEMENT_DYNAMIC_CLASS(wxCursor, wxCursorBase) + +// ---------------------------------------------------------------------------- +// globals +// ---------------------------------------------------------------------------- + +// Current cursor, in order to hang on to cursor handle when setting the cursor +// globally +static wxCursor *gs_globalCursor = NULL; + +// ---------------------------------------------------------------------------- +// private classes +// ---------------------------------------------------------------------------- + +class wxCursorModule : public wxModule +{ +public: + virtual bool OnInit() + { + gs_globalCursor = new wxCursor; + + return TRUE; + } + + virtual void OnExit() + { + delete gs_globalCursor; + gs_globalCursor = (wxCursor *)NULL; + } +}; + +// ============================================================================ +// implementation +// ============================================================================ // ---------------------------------------------------------------------------- // wxCursorRefData @@ -67,8 +99,13 @@ wxCursorRefData::wxCursorRefData() void wxCursorRefData::Free() { - if ( m_hCursor && m_destroyCursor ) - ::DestroyCursor((HCURSOR)m_hCursor); + if ( m_hCursor ) + { + if ( m_destroyCursor ) + ::DestroyCursor((HCURSOR)m_hCursor); + + m_hCursor = 0; + } } // ---------------------------------------------------------------------------- @@ -275,16 +312,19 @@ wxCursor::~wxCursor() // Global cursor setting // ---------------------------------------------------------------------------- -void wxSetCursor(const wxCursor& cursor) +const wxCursor *wxGetGlobalCursor() { - extern wxCursor *g_globalCursor; + return gs_globalCursor; +} - if ( cursor.Ok() && cursor.GetHCURSOR() ) +void wxSetCursor(const wxCursor& cursor) +{ + if ( cursor.Ok() ) { - ::SetCursor((HCURSOR) cursor.GetHCURSOR()); + ::SetCursor(GetHcursorOf(cursor)); - if ( g_globalCursor ) - (*g_globalCursor) = cursor; + if ( gs_globalCursor ) + *gs_globalCursor = cursor; } }