]> git.saurik.com Git - wxWidgets.git/commitdiff
crash when deleting window in OnUnsplit() corrected
authorVadim Zeitlin <vadim@wxwidgets.org>
Tue, 16 Nov 1999 15:31:40 +0000 (15:31 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Tue, 16 Nov 1999 15:31:40 +0000 (15:31 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@4590 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

src/generic/splitter.cpp

index 4360b6c9b9e1a07467a01ffe850044a3f0061d66..b2627b53e484fe3e59900f3c07a6e115ef53ed02 100644 (file)
@@ -185,9 +185,9 @@ void wxSplitterWindow::OnMouseEvent(wxMouseEvent& event)
             m_dragMode = wxSPLIT_DRAG_DRAGGING;
 
             if ((GetWindowStyleFlag() & wxSP_LIVE_UPDATE) == 0)
             m_dragMode = wxSPLIT_DRAG_DRAGGING;
 
             if ((GetWindowStyleFlag() & wxSP_LIVE_UPDATE) == 0)
-           {
-               DrawSashTracker(x, y);
-           }
+            {
+                DrawSashTracker(x, y);
+            }
 
             m_oldX = x;
             m_oldY = y;
 
             m_oldX = x;
             m_oldY = y;
@@ -202,9 +202,9 @@ void wxSplitterWindow::OnMouseEvent(wxMouseEvent& event)
 
         // Erase old tracker
         if ((GetWindowStyleFlag() & wxSP_LIVE_UPDATE) == 0)
 
         // Erase old tracker
         if ((GetWindowStyleFlag() & wxSP_LIVE_UPDATE) == 0)
-       {
+        {
             DrawSashTracker(m_oldX, m_oldY);
             DrawSashTracker(m_oldX, m_oldY);
-       }
+        }
 
         // Obtain window size. We are only interested in the dimension the sash
         // splits up
 
         // Obtain window size. We are only interested in the dimension the sash
         // splits up
@@ -304,9 +304,9 @@ void wxSplitterWindow::OnMouseEvent(wxMouseEvent& event)
 
         // Erase old tracker
         if ((GetWindowStyleFlag() & wxSP_LIVE_UPDATE) == 0)
 
         // Erase old tracker
         if ((GetWindowStyleFlag() & wxSP_LIVE_UPDATE) == 0)
-       {
+        {
             DrawSashTracker(m_oldX, m_oldY);
             DrawSashTracker(m_oldX, m_oldY);
-       }
+        }
 
         if (m_splitMode == wxSPLIT_VERTICAL)
             x = new_sash_position;
 
         if (m_splitMode == wxSPLIT_VERTICAL)
             x = new_sash_position;
@@ -335,14 +335,14 @@ void wxSplitterWindow::OnMouseEvent(wxMouseEvent& event)
 
         // Draw new one
         if ((GetWindowStyleFlag() & wxSP_LIVE_UPDATE) == 0)
 
         // Draw new one
         if ((GetWindowStyleFlag() & wxSP_LIVE_UPDATE) == 0)
-       {
+        {
             DrawSashTracker(m_oldX, m_oldY);
             DrawSashTracker(m_oldX, m_oldY);
-       }
-       else
-       {
+        }
+        else
+        {
             m_sashPosition = new_sash_position;
             m_sashPosition = new_sash_position;
-           m_needUpdating = TRUE;
-       }
+            m_needUpdating = TRUE;
+        }
     }
     else if ( event.LeftDClick() )
     {
     }
     else if ( event.LeftDClick() )
     {
@@ -492,14 +492,14 @@ void wxSplitterWindow::DrawSash(wxDC& dc)
             dc.SetBrush(*wxTRANSPARENT_BRUSH);
 
             dc.SetPen(*m_lightShadowPen);
             dc.SetBrush(*wxTRANSPARENT_BRUSH);
 
             dc.SetPen(*m_lightShadowPen);
-                       int xShadow = m_borderSize ? m_borderSize - 1 : 0 ;
+                        int xShadow = m_borderSize ? m_borderSize - 1 : 0 ;
             dc.DrawLine(m_sashPosition, xShadow , m_sashPosition, h-m_borderSize);
 
             dc.SetPen(*m_hilightPen);
             dc.DrawLine(m_sashPosition+1, m_borderSize - 2, m_sashPosition+1, h - m_borderSize+2);
 
             dc.SetPen(*m_mediumShadowPen);
             dc.DrawLine(m_sashPosition, xShadow , m_sashPosition, h-m_borderSize);
 
             dc.SetPen(*m_hilightPen);
             dc.DrawLine(m_sashPosition+1, m_borderSize - 2, m_sashPosition+1, h - m_borderSize+2);
 
             dc.SetPen(*m_mediumShadowPen);
-                       int yMedium = m_borderSize ? h-m_borderSize+1 : h ;
+                        int yMedium = m_borderSize ? h-m_borderSize+1 : h ;
             dc.DrawLine(m_sashPosition+m_sashSize-2, xShadow, m_sashPosition+m_sashSize-2, yMedium);
 
             dc.SetPen(*m_darkShadowPen);
             dc.DrawLine(m_sashPosition+m_sashSize-2, xShadow, m_sashPosition+m_sashSize-2, yMedium);
 
             dc.SetPen(*m_darkShadowPen);
@@ -651,8 +651,8 @@ void wxSplitterWindow::SizeWindows()
         }
     }
     wxClientDC dc(this);
         }
     }
     wxClientDC dc(this);
-       if ( m_borderSize > 0 )
-               DrawBorders(dc);
+    if ( m_borderSize > 0 )
+        DrawBorders(dc);
     DrawSash(dc);
 }
 
     DrawSash(dc);
 }
 
@@ -893,8 +893,7 @@ void wxSplitterWindow::OnDoubleClick(wxSplitterEvent& event)
     // for compatibility, call the virtual function
     OnDoubleClickSash(event.GetX(), event.GetY());
 
     // for compatibility, call the virtual function
     OnDoubleClickSash(event.GetX(), event.GetY());
 
-    if ( GetMinimumPaneSize() == 0
-        || m_permitUnsplitAlways)
+    if ( GetMinimumPaneSize() == 0 || m_permitUnsplitAlways )
     {
         Unsplit();
     }
     {
         Unsplit();
     }
@@ -904,8 +903,9 @@ void wxSplitterWindow::OnUnsplitEvent(wxSplitterEvent& event)
 {
     wxWindow *win = event.GetWindowBeingRemoved();
 
 {
     wxWindow *win = event.GetWindowBeingRemoved();
 
+    // do it before calling OnUnsplit() which may delete the window
+    win->Show(FALSE);
+
     // for compatibility, call the virtual function
     OnUnsplit(win);
     // for compatibility, call the virtual function
     OnUnsplit(win);
-
-    win->Show(FALSE);
 }
 }