]> git.saurik.com Git - wxWidgets.git/blobdiff - src/univ/winuniv.cpp
Remove some items from the Recent additions list
[wxWidgets.git] / src / univ / winuniv.cpp
index 631b7e880047ced3d03ca230a733153518bd44b5..24e2865a77c1de5e989876428d78de9a956469ce 100644 (file)
@@ -124,20 +124,26 @@ bool wxWindow::Create(wxWindow *parent,
 {
     long actualStyle = style;
 
-    // FIXME: may need this on other platforms
-#ifdef __WXMSW__
+    // we add wxCLIP_CHILDREN to get the same ("natural") behaviour under MSW
+    // as under the other platforms
+    actualStyle |= wxCLIP_CHILDREN;
+
     actualStyle &= ~wxVSCROLL;
     actualStyle &= ~wxHSCROLL;
+
+#ifdef __WXMSW__
+    // without this, borders (non-client areas in general) are not repainted
+    // correctly when resizing; apparently, native NC areas are fully repainted
+    // even without this style by MSW, but wxUniv implements client area
+    // itself, so it doesn't work correctly for us
+    //
+    // FIXME: this is very expensive, we need to fix the (commented-out) code
+    //        in OnSize() instead
+    actualStyle |= wxFULL_REPAINT_ON_RESIZE;
 #endif
 
-    // we add wxCLIP_CHILDREN to get the same ("natural") behaviour under MSW
-    // as under the other platforms
-    if ( !wxWindowNative::Create(parent, id, pos, size,
-                                 actualStyle | wxCLIP_CHILDREN,
-                                 name) )
-    {
+    if ( !wxWindowNative::Create(parent, id, pos, size, actualStyle, name) )
         return false;
-    }
 
     // Set full style again, including those we didn't want present
     // when calling the base window Create().
@@ -190,6 +196,14 @@ wxWindow::~wxWindow()
 {
     m_isBeingDeleted = true;
 
+#if wxUSE_SCROLLBAR
+    // clear pointers to scrollbar before deleting the children: they are
+    // children and so will be deleted by DestroyChildren() call below and if
+    // any code using the scrollbars would be called in the process or from
+    // ~wxWindowBase, the app would crash:
+    m_scrollbarVert = m_scrollbarHorz = NULL;
+#endif
+
     // we have to destroy our children before we're destroyed because our
     // children suppose that we're of type wxWindow, not just wxWindowNative,
     // and so bad things may happen if they're deleted from the base class dtor
@@ -720,8 +734,6 @@ void wxWindow::DoGetClientSize(int *width, int *height) const
     if ( m_renderer )
         rectBorder = m_renderer->GetBorderDimensions(GetBorder());
 
-    bool inside = m_renderer->AreScrollbarsInsideBorder();
-
     if ( width )
     {
 #if wxUSE_SCROLLBAR
@@ -730,17 +742,8 @@ void wxWindow::DoGetClientSize(int *width, int *height) const
             w -= m_scrollbarVert->GetSize().x;
 #endif // wxUSE_SCROLLBAR
 
-        // if we don't have scrollbar or if it is outside the border (and not
-        // blended into it), take account of the right border as well
-        if (
-#if wxUSE_SCROLLBAR
-             !m_scrollbarVert ||
-#endif // wxUSE_SCROLLBAR
-             inside )
-            w -= rectBorder.width;
-
-        // and always account for the left border
-        *width = w - rectBorder.x;
+        // account for the left and right borders
+        *width = w - rectBorder.x - rectBorder.width;
 
         // we shouldn't return invalid width
         if ( *width < 0 )
@@ -754,14 +757,7 @@ void wxWindow::DoGetClientSize(int *width, int *height) const
             h -= m_scrollbarHorz->GetSize().y;
 #endif // wxUSE_SCROLLBAR
 
-        if (
-#if wxUSE_SCROLLBAR
-            !m_scrollbarHorz ||
-#endif // wxUSE_SCROLLBAR
-            inside )
-            h -= rectBorder.height;
-
-        *height = h - rectBorder.y;
+        *height = h - rectBorder.y - rectBorder.height;
 
         // we shouldn't return invalid height
         if ( *height < 0 )
@@ -779,29 +775,18 @@ void wxWindow::DoSetClientSize(int width, int height)
     // and the scrollbars (as they may be offset into the border, use the
     // scrollbar position, not size - this supposes that PositionScrollbars()
     // had been called before)
-    bool inside = m_renderer->AreScrollbarsInsideBorder();
     wxSize size = GetSize();
 #if wxUSE_SCROLLBAR
     if ( m_scrollbarVert )
         width += size.x - m_scrollbarVert->GetPosition().x;
 #endif // wxUSE_SCROLLBAR
-    if (
-#if wxUSE_SCROLLBAR
-        !m_scrollbarVert ||
-#endif // wxUSE_SCROLLBAR
-        inside )
-        width += rectBorder.width;
+    width += rectBorder.width;
 
 #if wxUSE_SCROLLBAR
     if ( m_scrollbarHorz )
         height += size.y - m_scrollbarHorz->GetPosition().y;
 #endif // wxUSE_SCROLLBAR
-    if (
-#if wxUSE_SCROLLBAR
-        !m_scrollbarHorz ||
-#endif // wxUSE_SCROLLBAR
-        inside )
-        height += rectBorder.height;
+    height += rectBorder.height;
 
     wxWindowNative::DoSetClientSize(width, height);
 }
@@ -1326,6 +1311,7 @@ void wxWindow::OnKeyDown(wxKeyEvent& event)
             }
 #endif // wxUSE_MENUS
 
+#if wxUSE_BUTTON
             // if it wasn't in a menu, try to find a button
             if ( command != -1 )
             {
@@ -1341,6 +1327,7 @@ void wxWindow::OnKeyDown(wxKeyEvent& event)
                     }
                 }
             }
+#endif // wxUSE_BUTTON
 
             // don't propagate accels from the child frame to the parent one
             break;