public RCode CreateWindowPane(VectorI2d vWindowPos, VectorI2d vWindowSize, bool bFullScreen)
        {
            display    = Xlib.XOpenDisplay(null);
            screen     = Xlib.XDefaultScreen(display);
            root       = Xlib.XRootWindow(display, screen);
            mainWindow = Xlib.XCreateSimpleWindow(
                display, root,
                vWindowPos.x, vWindowPos.y,
                (uint)vWindowSize.x, (uint)vWindowSize.y, 1,
                Xlib.XBlackPixel(display, screen), Xlib.XWhitePixel(display, screen));

            EventMask eventMask =
                // Keyboard
                EventMask.KeyPressMask | EventMask.KeyReleaseMask |
                // Mouse
                EventMask.PointerMotionMask | EventMask.ButtonPressMask | EventMask.ButtonReleaseMask |
                // Window
                EventMask.FocusChangeMask | EventMask.EnterWindowMask | EventMask.LeaveWindowMask;

            Xlib.XSelectInput(display, mainWindow, eventMask);
            Xlib.XMapWindow(display, mainWindow);

            // Disable windows re-sizing
            XSizeHints sizeHints = new XSizeHints()
            {
                flags      = XSizeHintsFlags.PMaxSize | XSizeHintsFlags.PMinSize,
                min_width  = vWindowSize.x,
                max_width  = vWindowSize.x,
                min_height = vWindowSize.y,
                max_height = vWindowSize.y
            };

            XlibExt.XSetWMNormalHints(display, mainWindow, ref sizeHints);

            // Setup delete message when the user closes the window
            deleteWindowMessage = XlibExt.XInternAtom(display, "WM_DELETE_WINDOW", false);
            XlibExt.XSetWMProtocols(display, mainWindow, new Atom[] { deleteWindowMessage }, 1);

            return(RCode.OK);
        }