X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/bdb9dffbf6f7e0aa1473f78552a3f177da31ebdb..a58d5df4ef7fbbbb1c385ac63038608d49f8dfa5:/src/common/wincmn.cpp diff --git a/src/common/wincmn.cpp b/src/common/wincmn.cpp index a877e35486..71028dc3ac 100644 --- a/src/common/wincmn.cpp +++ b/src/common/wincmn.cpp @@ -191,6 +191,16 @@ wxWindowBase::~wxWindowBase() wxASSERT_MSG( GetChildren().GetCount() == 0, _T("children not destroyed") ); + // make sure that there are no dangling pointers left pointing to us + wxPanel *panel = wxDynamicCast(GetParent(), wxPanel); + if ( panel ) + { + if ( panel->GetLastFocus() == this ) + { + panel->SetLastFocus((wxWindow *)NULL); + } + } + #if wxUSE_CARET if ( m_caret ) delete m_caret; @@ -316,14 +326,43 @@ void wxWindowBase::Centre(int direction) Move(new_x, new_y); } +// Center TopLevel windows over thier parent instead of the whole screen +void wxWindowBase::CentreOnParent(int direction) +{ + wxPoint ppos; + wxSize psze; + wxSize wsze; + wxWindow* parent = GetParent(); + int x, y; + + if (!parent || !IsTopLevel()) { + Centre(direction); + return; + } + + psze = parent->GetSize(); + ppos = parent->ClientToScreen(wxPoint(0,0)); + wsze = GetSize(); + + x = y = -1; + + if (direction == wxBOTH || direction == wxHORIZONTAL) + x = ppos.x + (psze.x - wsze.x)/2; + if (direction == wxBOTH || direction == wxVERTICAL) + y = ppos.y + (psze.y - wsze.y)/2; + + Move(x, y); +} + // fits the window around the children void wxWindowBase::Fit() { int maxX = 0, maxY = 0; - wxWindowList::Node *node = GetChildren().GetFirst(); - while ( node ) + for ( wxWindowList::Node *node = GetChildren().GetFirst(); + node; + node = node->GetNext() ) { wxWindow *win = node->GetData(); if ( win->IsTopLevel() ) @@ -340,8 +379,6 @@ void wxWindowBase::Fit() maxX = wx + ww; if ( wy + wh > maxY ) maxY = wy + wh; - - node = node->GetNext(); } // leave a margin @@ -1213,9 +1250,11 @@ wxPoint wxWindowBase::ConvertPixelsToDialog(const wxPoint& pt) { int charWidth = GetCharWidth(); int charHeight = GetCharHeight(); - wxPoint pt2; - pt2.x = (int) ((pt.x * 4) / charWidth) ; - pt2.y = (int) ((pt.y * 8) / charHeight) ; + wxPoint pt2(-1, -1); + if (pt.x != -1) + pt2.x = (int) ((pt.x * 4) / charWidth) ; + if (pt.y != -1) + pt2.y = (int) ((pt.y * 8) / charHeight) ; return pt2; } @@ -1224,9 +1263,11 @@ wxPoint wxWindowBase::ConvertDialogToPixels(const wxPoint& pt) { int charWidth = GetCharWidth(); int charHeight = GetCharHeight(); - wxPoint pt2; - pt2.x = (int) ((pt.x * charWidth) / 4) ; - pt2.y = (int) ((pt.y * charHeight) / 8) ; + wxPoint pt2(-1, -1); + if (pt.x != -1) + pt2.x = (int) ((pt.x * charWidth) / 4) ; + if (pt.y != -1) + pt2.y = (int) ((pt.y * charHeight) / 8) ; return pt2; }