]> git.saurik.com Git - wxWidgets.git/blobdiff - src/msw/dialog.cpp
fatal bug in wxSplitPath fixed
[wxWidgets.git] / src / msw / dialog.cpp
index a9849ee21802f47542c63dd79edab9e633fb2a9c..480836f8f956fb45f304dc200d55fbe54e58b58b 100644 (file)
@@ -70,8 +70,6 @@ wxWindowList wxModelessWindows;
 // all modal dialogs currently shown
 static wxWindowList wxModalDialogs;
 
-static wxWindow *m_oldFocus;
-
 // ----------------------------------------------------------------------------
 // wxWin macros
 // ----------------------------------------------------------------------------
@@ -100,6 +98,7 @@ END_EVENT_TABLE()
 
 wxDialog::wxDialog()
 {
+    m_oldFocus = (wxWindow *)NULL;
     m_isShown = FALSE;
 
     SetBackgroundColour(wxSystemSettings::GetSystemColour(wxSYS_COLOUR_3DFACE));
@@ -531,13 +530,28 @@ long wxDialog::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam)
         case WM_SETCURSOR:
             // we want to override the busy cursor for modal dialogs:
             // typically, wxBeginBusyCursor() is called and then a modal dialog
-            // is shown, but the modal dialog shouldn't have this cursor
-            if ( wxIsBusy() )
+            // is shown, but the modal dialog shouldn't have hourglass cursor
+            if ( IsModalShowing() && wxIsBusy() )
             {
-                rc = TRUE;
+                // set our cursor for all windows (but see below)
+                wxCursor cursor = m_cursor;
+                if ( !cursor.Ok() )
+                    cursor = wxCURSOR_ARROW;
+
+                ::SetCursor(GetHcursorOf(cursor));
 
+                // in any case, stop here and don't let wxWindow process this
+                // message (it would set the busy cursor)
                 processed = TRUE;
+
+                // but return FALSE to tell the child window (if the event
+                // comes from one of them and not from ourselves) that it can
+                // set its own cursor if it has one: thus, standard controls
+                // (e.g. text ctrl) still have correct cursors in a dialog
+                // invoked while wxIsBusy()
+                rc = FALSE;
             }
+            break;
     }
 
     if ( !processed )