]> git.saurik.com Git - wxWidgets.git/blobdiff - src/msw/cursor.cpp
1. added range checks in wxGridStringTable
[wxWidgets.git] / src / msw / cursor.cpp
index 706b97fb922af1e15c08c35d3fcf564f896b742f..1f76183f6eb969c11377db03b3a3075faa256c00 100644 (file)
@@ -32,8 +32,9 @@
     #include "wx/list.h"
     #include "wx/utils.h"
     #include "wx/app.h"
-    #include "wx/cursor.h"
+    #include "wx/bitmap.h"
     #include "wx/icon.h"
+    #include "wx/cursor.h"
 #endif
 
 #include "wx/msw/private.h"
 // 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
@@ -66,8 +98,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;
+    }
 }
 
 // ----------------------------------------------------------------------------
@@ -274,16 +311,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;
     }
 }