]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/wincmn.cpp
better learn the operators...
[wxWidgets.git] / src / common / wincmn.cpp
index 0e16d408ce83ecac3189934dc15c74b255614fab..9a7b7a3bc66c0d9dbebb95116320341b0134ebd2 100644 (file)
@@ -268,6 +268,12 @@ wxWindowBase::~wxWindowBase()
     if ( m_tooltip )
         delete m_tooltip;
 #endif // wxUSE_TOOLTIPS
+
+    // reset the dangling pointer our parent window may keep to us
+    if ( m_parent && m_parent->GetDefaultItem() == this )
+    {
+        m_parent->SetDefaultItem(NULL);
+    }
 }
 
 bool wxWindowBase::Destroy()
@@ -305,6 +311,7 @@ bool wxWindowBase::DestroyChildren()
 
         wxASSERT_MSG( child, wxT("children list contains empty nodes") );
 
+        child->Show(FALSE);
         delete child;
 
         wxASSERT_MSG( !GetChildren().Find(child),
@@ -1270,7 +1277,7 @@ void wxWindowBase::SetConstraintSizes(bool recurse)
         while (node)
         {
             wxWindow *win = node->GetData();
-            if ( !win->IsTopLevel() )
+            if ( !win->IsTopLevel() && win->GetConstraints() )
                 win->SetConstraintSizes();
             node = node->GetNext();
         }
@@ -1348,6 +1355,23 @@ void wxWindowBase::GetClientSizeConstraint(int *w, int *h) const
         GetClientSize(w, h);
 }
 
+void wxWindowBase::AdjustForParentClientOrigin(int& x, int& y, int sizeFlags)
+{
+    // don't do it for the dialogs/frames - they float independently of their
+    // parent
+    if ( !IsTopLevel() )
+    {
+        wxWindow *parent = GetParent();
+        if ( !(sizeFlags & wxSIZE_NO_ADJUSTMENTS) && parent )
+        {
+            wxPoint pt(parent->GetClientAreaOrigin());
+            x += pt.x;
+            y += pt.y;
+        }
+    }
+}
+
+
 void wxWindowBase::GetPositionConstraint(int *x, int *y) const
 {
     wxLayoutConstraints *constr = GetConstraints();
@@ -1383,7 +1407,7 @@ void wxWindowBase::UpdateWindowUI()
 
         if ( event.GetSetText() )
         {
-            wxControl *control = wxDynamicThisCast(this, wxControl);
+            wxControl *control = wxDynamicCastThis(wxControl);
             if ( control )
             {
 #if wxUSE_TEXTCTRL
@@ -1397,7 +1421,7 @@ void wxWindowBase::UpdateWindowUI()
         }
 
 #if wxUSE_CHECKBOX
-        wxCheckBox *checkbox = wxDynamicThisCast(this, wxCheckBox);
+        wxCheckBox *checkbox = wxDynamicCastThis(wxCheckBox);
         if ( checkbox )
         {
             if ( event.GetSetChecked() )
@@ -1406,7 +1430,7 @@ void wxWindowBase::UpdateWindowUI()
 #endif // wxUSE_CHECKBOX
 
 #if wxUSE_RADIOBTN
-        wxRadioButton *radiobtn = wxDynamicThisCast(this, wxRadioButton);
+        wxRadioButton *radiobtn = wxDynamicCastThis(wxRadioButton);
         if ( radiobtn )
         {
             if ( event.GetSetChecked() )