]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/wincmn.cpp
ensure that the compatibility defines are not set for wxBase which doesn't need them
[wxWidgets.git] / src / common / wincmn.cpp
index 0f7a0231e31f02e74279726d82b094e1d4ee4422..27bb0f0bc40d497589a3f81c269a3abaff3d27fb 100644 (file)
@@ -152,6 +152,7 @@ void wxWindowBase::InitBase()
     m_constraints = (wxLayoutConstraints *) NULL;
     m_constraintsInvolvedIn = (wxWindowList *) NULL;
     m_windowSizer = (wxSizer *) NULL;
+    m_containingSizer = (wxSizer *) NULL;
     m_autoLayout = FALSE;
 #endif // wxUSE_CONSTRAINTS
 
@@ -257,6 +258,9 @@ wxWindowBase::~wxWindowBase()
         m_constraints = NULL;
     }
 
+    if ( m_containingSizer )
+        m_containingSizer->Remove((wxWindow*)this);
+
     if ( m_windowSizer )
         delete m_windowSizer;
 
@@ -401,18 +405,18 @@ void wxWindowBase::Centre(int direction)
     wxRect rect = wxGetClientDisplayRect();
     wxSize size (rect.width,rect.height);
 
-#ifndef __WXMGL__ // FIXME - temporary dirty hack!!
-    if (posParent.x >= 0)  // if parent is on the main display
-#endif
+    // NB: in wxMSW, negative position may not neccessary mean "out of screen",
+    //     but it may mean that the window is placed on other than the main
+    //     display. Therefore we only make sure centered window is on the main display
+    //     if the parent is at least partially present here.
+    if (posParent.x + widthParent >= 0)  // if parent is (partially) on the main display
     {
         if (xNew < 0)
             xNew = 0;
         else if (xNew+width > size.x)
             xNew = size.x-width-1;
     }
-#ifndef __WXMGL__ // FIXME - temporary dirty hack!!
-    if (posParent.y >= 0)  // if parent is on the main display
-#endif
+    if (posParent.y + heightParent >= 0)  // if parent is (partially) on the main display
     {
         if (yNew+height > size.y)
             yNew = size.y-height-1;
@@ -1704,7 +1708,8 @@ void wxWindowBase::CaptureMouse()
     wxWindow *winOld = GetCapture();
     if ( winOld )
     {
-       winOld->DoReleaseMouse();
+        ((wxWindowBase*) winOld)->DoReleaseMouse();
+       
         // save it on stack
         wxWindowNext *item = new wxWindowNext;
         item->win = winOld;
@@ -1726,8 +1731,8 @@ void wxWindowBase::ReleaseMouse()
 
     if ( ms_winCaptureNext )
     {
-        ms_winCaptureNext->win->DoCaptureMouse();
-
+        ((wxWindowBase*)ms_winCaptureNext->win)->DoCaptureMouse();
+       
         wxWindowNext *item = ms_winCaptureNext;
         ms_winCaptureNext = item->next;
         delete item;