+    m_foregroundColour.CalcPixel( (WXColormap) cm );
+
+    Window xparent = (Window) parent->GetClientAreaWindow();
+
+    // Add window's own scrollbars to main window, not to client window
+    if (parent->GetInsertIntoMain())
+    {
+        // wxLogDebug( "Inserted into main: %s", GetName().c_str() );
+        xparent = (Window) parent->GetMainWindow();
+    }
+
+    // Size (not including the border) must be nonzero (or a Value error results)!
+    // Note: The Xlib manual doesn't mention this restriction of XCreateWindow.
+    wxSize size2(size);
+    if (size2.x <= 0)
+        size2.x = 20;
+    if (size2.y <= 0)
+        size2.y = 20;
+
+    wxPoint pos2(pos);
+    if (pos2.x == wxDefaultCoord)
+        pos2.x = 0;
+    if (pos2.y == wxDefaultCoord)
+        pos2.y = 0;
+
+    AdjustForParentClientOrigin(pos2.x, pos2.y);
+
+#if wxUSE_TWO_WINDOWS
+    bool need_two_windows =
+        ((( wxSUNKEN_BORDER | wxBORDER_THEME | wxRAISED_BORDER | wxSIMPLE_BORDER | wxHSCROLL | wxVSCROLL ) & m_windowStyle) != 0);
+#else
+    bool need_two_windows = false;
+#endif
+
+#if wxUSE_NANOX
+    long xattributes = 0;
+#else
+    XSetWindowAttributes xattributes;
+    long xattributes_mask = 0;
+
+    xattributes_mask |= CWBackPixel;
+    xattributes.background_pixel = m_backgroundColour.GetPixel();
+
+    xattributes_mask |= CWBorderPixel;
+    xattributes.border_pixel = BlackPixel( xdisplay, xscreen );
+
+    xattributes_mask |= CWEventMask;
+#endif
+
+    if (need_two_windows)
+    {
+#if wxUSE_NANOX
+        long backColor, foreColor;
+        backColor = GR_RGB(m_backgroundColour.Red(), m_backgroundColour.Green(), m_backgroundColour.Blue());
+        foreColor = GR_RGB(m_foregroundColour.Red(), m_foregroundColour.Green(), m_foregroundColour.Blue());
+
+        Window xwindow = XCreateWindowWithColor( xdisplay, xparent, pos2.x, pos2.y, size2.x, size2.y,
+                                    0, 0, InputOutput, xvisual, backColor, foreColor);
+        XSelectInput( xdisplay, xwindow,
+          GR_EVENT_MASK_CLOSE_REQ | ExposureMask | KeyPressMask | KeyReleaseMask | ButtonPressMask | ButtonReleaseMask |
+          ButtonMotionMask | EnterWindowMask | LeaveWindowMask | PointerMotionMask |
+          KeymapStateMask | FocusChangeMask | ColormapChangeMask | StructureNotifyMask |
+                      PropertyChangeMask );
+
+#else
+        // Normal X11
+        xattributes.event_mask =
+            ExposureMask | StructureNotifyMask | ColormapChangeMask;
+
+        Window xwindow = XCreateWindow( xdisplay, xparent, pos2.x, pos2.y, size2.x, size2.y,
+            0, DefaultDepth(xdisplay,xscreen), InputOutput, xvisual, xattributes_mask, &xattributes );
+
+#endif
+
+        XSetWindowBackgroundPixmap( xdisplay, xwindow, None );
+
+        m_mainWindow = (WXWindow) xwindow;
+        wxAddWindowToTable( xwindow, (wxWindow*) this );
+
+        XMapWindow( xdisplay, xwindow );
+
+#if !wxUSE_NANOX
+        xattributes.event_mask =
+            ExposureMask | KeyPressMask | KeyReleaseMask | ButtonPressMask | ButtonReleaseMask |
+            ButtonMotionMask | EnterWindowMask | LeaveWindowMask | PointerMotionMask |
+            KeymapStateMask | FocusChangeMask | ColormapChangeMask | StructureNotifyMask |
+            PropertyChangeMask | VisibilityChangeMask ;
+
+        if (!HasFlag( wxFULL_REPAINT_ON_RESIZE ))
+        {
+            xattributes_mask |= CWBitGravity;
+            xattributes.bit_gravity = StaticGravity;
+        }
+#endif
+
+        if (HasFlag(wxSUNKEN_BORDER) || HasFlag(wxRAISED_BORDER) || HasFlag(wxBORDER_THEME))
+        {
+            pos2.x = 2;
+            pos2.y = 2;
+            size2.x -= 4;
+            size2.y -= 4;
+        }
+        else if (HasFlag( wxSIMPLE_BORDER ))
+        {
+            pos2.x = 1;
+            pos2.y = 1;
+            size2.x -= 2;
+            size2.y -= 2;
+        }
+        else
+        {
+            pos2.x = 0;
+            pos2.y = 0;
+        }
+
+        // Make again sure the size is nonzero.
+        if (size2.x <= 0)
+            size2.x = 1;
+        if (size2.y <= 0)
+            size2.y = 1;