]> git.saurik.com Git - wxWidgets.git/blobdiff - src/univ/winuniv.cpp
don't try to add emission hook if GtkWidget type is not loaded
[wxWidgets.git] / src / univ / winuniv.cpp
index 631b7e880047ced3d03ca230a733153518bd44b5..215d74028e69df8abce1db4f5b752813640b4179 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().
@@ -720,8 +726,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 +734,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 +749,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 +767,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);
 }