]> git.saurik.com Git - wxWidgets.git/blobdiff - src/generic/sashwin.cpp
a fix for the last fix
[wxWidgets.git] / src / generic / sashwin.cpp
index a808264d02be01f497dfa1b551d46300d28091d3..1b64276b8650a4bb50ae92ff8cd1b602fd4b24c1 100644 (file)
@@ -36,6 +36,8 @@
 #include "wx/sashwin.h"
 #include "wx/laywin.h"
 
+DEFINE_EVENT_TYPE(wxEVT_SASH_DRAGGED)
+
 IMPLEMENT_DYNAMIC_CLASS(wxSashWindow, wxWindow)
 IMPLEMENT_DYNAMIC_CLASS(wxSashEvent, wxCommandEvent)
 
@@ -73,6 +75,7 @@ void wxSashWindow::Init()
     m_maximumPaneSizeY = 10000;
     m_sashCursorWE = new wxCursor(wxCURSOR_SIZEWE);
     m_sashCursorNS = new wxCursor(wxCURSOR_SIZENS);
+    m_mouseCaptured = FALSE;
 
     // Eventually, we'll respond to colour change messages
     InitColours();
@@ -97,7 +100,8 @@ void wxSashWindow::OnMouseEvent(wxMouseEvent& event)
 
     // reset the cursor
 #if defined(__WXMOTIF__) || defined(__WXGTK__)
-    SetCursor(* wxSTANDARD_CURSOR);
+    // Not necessary and in fact inhibits proper cursor setting (JACS 8/2000)
+    //SetCursor(* wxSTANDARD_CURSOR);
 #endif
 #ifdef __WXMSW__
     SetCursor(wxNullCursor);
@@ -106,6 +110,7 @@ void wxSashWindow::OnMouseEvent(wxMouseEvent& event)
     if (event.LeftDown())
     {
         CaptureMouse();
+        m_mouseCaptured = TRUE;
 
         if ( sashHit != wxSASH_NONE )
         {
@@ -144,7 +149,10 @@ void wxSashWindow::OnMouseEvent(wxMouseEvent& event)
     else if ( event.LeftUp() && m_dragMode == wxSASH_DRAG_LEFT_DOWN )
     {
         // Wasn't a proper drag
-        ReleaseMouse();
+        if (m_mouseCaptured)
+            ReleaseMouse();
+        m_mouseCaptured = FALSE;
+
         wxScreenDC::EndDrawingOnTop();
         m_dragMode = wxSASH_DRAG_NONE;
         m_draggingEdge = wxSASH_NONE;
@@ -153,7 +161,10 @@ void wxSashWindow::OnMouseEvent(wxMouseEvent& event)
     {
         // We can stop dragging now and see what we've got.
         m_dragMode = wxSASH_DRAG_NONE;
-        ReleaseMouse();
+        if (m_mouseCaptured)
+            ReleaseMouse();
+        m_mouseCaptured = FALSE;
+
         // Erase old tracker
         DrawSashTracker(m_draggingEdge, m_oldX, m_oldY);
 
@@ -273,7 +284,9 @@ void wxSashWindow::OnMouseEvent(wxMouseEvent& event)
     }
     else if ( event.LeftUp() )
     {
-        ReleaseMouse();
+        if (m_mouseCaptured)
+           ReleaseMouse();
+        m_mouseCaptured = FALSE;
     }
     else if (event.Moving() && !event.Dragging())
     {
@@ -645,7 +658,7 @@ void wxSashWindow::SizeWindows()
 void wxSashWindow::InitColours()
 {
     // Shadow colours
-#if defined(__WIN95__)
+#ifndef __WIN16__
     m_faceColour = wxSystemSettings::GetSystemColour(wxSYS_COLOUR_3DFACE);
     m_mediumShadowColour = wxSystemSettings::GetSystemColour(wxSYS_COLOUR_3DSHADOW);
     m_darkShadowColour = wxSystemSettings::GetSystemColour(wxSYS_COLOUR_3DDKSHADOW);