Merge pull request #943 from ermshiperete/bug-novell-325669
[mono.git] / mcs / class / Managed.Windows.Forms / System.Windows.Forms / XplatUIX11.cs
index eff6e82bb1afe8efa174f789840a405b832969af..c25124033921bcc71ee367c0f780916bdca36f83 100644 (file)
@@ -247,7 +247,8 @@ namespace System.Windows.Forms {
 
                #endregion      // Local Variables
                #region Constructors
-               XplatUIX11() {
+               XplatUIX11()
+               {
                        // Handle singleton stuff first
                        RefCount = 0;
                        in_doevents = false;
@@ -498,6 +499,12 @@ namespace System.Windows.Forms {
 
                                wake = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP);
                                wake.Connect(listen.LocalEndPoint);
+
+                               // Make this non-blocking, so it doesn't
+                               // deadlock if too many wakes are sent
+                               // before the wake_receive end is polled
+                               wake.Blocking = false;
+
                                wake_receive = listen.Accept();
 
                                #if __MonoCS__
@@ -1229,7 +1236,13 @@ namespace System.Windows.Forms {
                }
 
                void WakeupMain () {
-                       wake.Send (new byte [] { 0xFF });
+                       try {
+                               wake.Send (new byte [] { 0xFF });
+                       } catch (SocketException ex) {
+                               if (ex.SocketErrorCode != SocketError.WouldBlock) {
+                                       throw;
+                               }
+                       }
                }
 
                XEventQueue ThreadQueue(Thread thread) {
@@ -1257,9 +1270,20 @@ namespace System.Windows.Forms {
 
                        if ((long)nitems > 0) {
                                if (property == (IntPtr)Atom.XA_STRING) {
+                                       // Xamarin-5116: PtrToStringAnsi expects to get UTF-8, but we might have
+                                       // Latin-1 instead.
+                                       var s = Marshal.PtrToStringAnsi (prop);
+                                       if (string.IsNullOrEmpty (s)) {
+                                               var sb = new StringBuilder ();
+                                               for (int i = 0; i < (int)nitems; i++) {
+                                                       var b = Marshal.ReadByte (prop, i);
+                                                       sb.Append ((char)b);
+                                               }
+                                               s = sb.ToString ();
+                                       }
                                        // Some X managers/apps pass unicode chars as escaped strings, so
                                        // we may need to unescape them.
-                                       Clipboard.Item = UnescapeUnicodeFromAnsi (Marshal.PtrToStringAnsi(prop));
+                                       Clipboard.Item = UnescapeUnicodeFromAnsi (s);
                                } else if (property == (IntPtr)Atom.XA_BITMAP) {
                                        // FIXME - convert bitmap to image
                                } else if (property == (IntPtr)Atom.XA_PIXMAP) {
@@ -1312,7 +1336,7 @@ namespace System.Windows.Forms {
 
                                int length = 0;
                                while (pos < value.Length) {
-                                       if (!Char.IsLetterOrDigit (value [pos]))
+                                       if (!ValidHexDigit (value [pos]))
                                                break;
                                        length++;
                                        pos++;
@@ -1334,6 +1358,11 @@ namespace System.Windows.Forms {
                        return sb.ToString ();
                }
 
+               private static bool ValidHexDigit (char e)
+               {
+                       return Char.IsDigit (e) || (e >= 'A' && e <= 'F') || (e >= 'a' && e <= 'f');
+               }
+
                void AddExpose (Hwnd hwnd, bool client, int x, int y, int width, int height) {
                        // Don't waste time
                        if ((hwnd == null) || (x > hwnd.Width) || (y > hwnd.Height) || ((x + width) < 0) || ((y + height) < 0)) {
@@ -1590,11 +1619,23 @@ namespace System.Windows.Forms {
                                if (hwnd.zombie)
                                        return;
 
-                               if ((windows & WindowType.Whole) != 0) {
-                                       XMapWindow(DisplayHandle, hwnd.whole_window);
-                               }
-                               if ((windows & WindowType.Client) != 0) {
-                                       XMapWindow(DisplayHandle, hwnd.client_window);
+                               if (hwnd.topmost) {
+                                       // Most window managers will respect the _NET_WM_STATE property.
+                                       // If not, use XMapRaised to map the window at the top level as
+                                       // a last ditch effort.
+                                       if ((windows & WindowType.Whole) != 0) {
+                                               XMapRaised(DisplayHandle, hwnd.whole_window);
+                                       }
+                                       if ((windows & WindowType.Client) != 0) {
+                                               XMapRaised(DisplayHandle, hwnd.client_window);
+                                       }
+                               } else {
+                                       if ((windows & WindowType.Whole) != 0) {
+                                               XMapWindow(DisplayHandle, hwnd.whole_window);
+                                       }
+                                       if ((windows & WindowType.Client) != 0) {
+                                               XMapWindow(DisplayHandle, hwnd.client_window);
+                                       }
                                }
 
                                hwnd.mapped = true;
@@ -2553,6 +2594,28 @@ namespace System.Windows.Forms {
                        }
                }
 
+               internal override Screen[] AllScreens {
+                       get {
+                               if (!XineramaIsActive (DisplayHandle))
+                                       return null;
+                               int nScreens;
+                               IntPtr xineramaScreens = XineramaQueryScreens (DisplayHandle, out nScreens);
+                               var screens = new Screen [nScreens];
+                               IntPtr current = xineramaScreens;
+                               for (int i = 0; i < nScreens; i++) {
+                                       var screen = (XineramaScreenInfo)Marshal.PtrToStructure (current,
+                                               typeof (XineramaScreenInfo));
+                                       var screenRect = new Rectangle (screen.x_org, screen.y_org, screen.width,
+                                               screen.height);
+                                       var name = string.Format ("Display {0}", screen.screen_number);
+                                       screens [i] = new Screen (i == 0, name, screenRect, screenRect);
+                                       current = (IntPtr)( (ulong)current + (ulong)Marshal.SizeOf(typeof (XineramaScreenInfo)));
+                               }
+                               XFree (xineramaScreens);
+                               return screens;
+                       }
+               }
+
                internal override bool ThemesEnabled {
                        get {
                                return XplatUIX11.themes_enabled;
@@ -2569,7 +2632,8 @@ namespace System.Windows.Forms {
                                Idle (this, e);
                }
                
-               internal override IntPtr InitializeDriver() {
+               internal override IntPtr InitializeDriver()
+               {
                        lock (this) {
                                if (DisplayHandle==IntPtr.Zero) {
                                        SetDisplay(XOpenDisplay(IntPtr.Zero));
@@ -2578,7 +2642,8 @@ namespace System.Windows.Forms {
                        return IntPtr.Zero;
                }
 
-               internal override void ShutdownDriver(IntPtr token) {
+               internal override void ShutdownDriver(IntPtr token)
+               {
                        lock (this) {
                                if (DisplayHandle!=IntPtr.Zero) {
                                        XCloseDisplay(DisplayHandle);
@@ -2587,12 +2652,14 @@ namespace System.Windows.Forms {
                        }
                }
 
-               internal override void EnableThemes() {
+               internal override void EnableThemes()
+               {
                        themes_enabled = true;
                }
 
 
-               internal override void Activate(IntPtr handle) {
+               internal override void Activate(IntPtr handle)
+               {
                        Hwnd hwnd;
 
                        hwnd = Hwnd.ObjectFromHandle(handle);
@@ -2619,13 +2686,15 @@ namespace System.Windows.Forms {
                        }
                }
 
-               internal override void AudibleAlert(AlertType alert) {
+               internal override void AudibleAlert(AlertType alert)
+               {
                        XBell(DisplayHandle, 0);
                        return;
                }
 
 
-               internal override void CaretVisible(IntPtr handle, bool visible) {
+               internal override void CaretVisible(IntPtr handle, bool visible)
+               {
                        if (Caret.Hwnd == handle) {
                                if (visible) {
                                        if (!Caret.Visible) {
@@ -2641,12 +2710,14 @@ namespace System.Windows.Forms {
                        }
                }
 
-               internal override bool CalculateWindowRect(ref Rectangle ClientRect, CreateParams cp, Menu menu, out Rectangle WindowRect) {
+               internal override bool CalculateWindowRect(ref Rectangle ClientRect, CreateParams cp, Menu menu, out Rectangle WindowRect)
+               {
                        WindowRect = Hwnd.GetWindowRectangle (cp, menu, ClientRect);
                        return true;
                }
 
-               internal override void ClientToScreen(IntPtr handle, ref int x, ref int y) {
+               internal override void ClientToScreen(IntPtr handle, ref int x, ref int y)
+               {
                        int     dest_x_return;
                        int     dest_y_return;
                        IntPtr  child;
@@ -2662,7 +2733,8 @@ namespace System.Windows.Forms {
                        y = dest_y_return;
                }
 
-               internal override int[] ClipboardAvailableFormats(IntPtr handle) {
+               internal override int[] ClipboardAvailableFormats(IntPtr handle)
+               {
                        DataFormats.Format      f;
                        int[]                   result;
 
@@ -2677,9 +2749,14 @@ namespace System.Windows.Forms {
                        while (f != null) {
                                XConvertSelection(DisplayHandle, CLIPBOARD, (IntPtr)f.Id, (IntPtr)f.Id, FosterParent, IntPtr.Zero);
 
+                               var timeToWaitForSelectionFormats = TimeSpan.FromSeconds(4);
+                               var startTime = DateTime.Now;
                                Clipboard.Enumerating = true;
                                while (Clipboard.Enumerating) {
                                        UpdateMessageQueue(null, false);
+
+                                       if (DateTime.Now - startTime > timeToWaitForSelectionFormats)
+                                               break;
                                }
                                f = f.Next;
                        }
@@ -2694,14 +2771,16 @@ namespace System.Windows.Forms {
                        return result;
                }
 
-               internal override void ClipboardClose(IntPtr handle) {
+               internal override void ClipboardClose(IntPtr handle)
+               {
                        if (handle != ClipMagic) {
                                throw new ArgumentException("handle is not a valid clipboard handle");
                        }
                        return;
                }
 
-               internal override int ClipboardGetID(IntPtr handle, string format) {
+               internal override int ClipboardGetID(IntPtr handle, string format)
+               {
                        if (handle != ClipMagic) {
                                throw new ArgumentException("handle is not a valid clipboard handle");
                        }
@@ -2727,7 +2806,8 @@ namespace System.Windows.Forms {
                        return XInternAtom(DisplayHandle, format, false).ToInt32();
                }
 
-               internal override IntPtr ClipboardOpen(bool primary_selection) {
+               internal override IntPtr ClipboardOpen(bool primary_selection)
+               {
                        if (!primary_selection)
                                ClipMagic = CLIPBOARD;
                        else
@@ -2735,7 +2815,8 @@ namespace System.Windows.Forms {
                        return ClipMagic;
                }
 
-               internal override object ClipboardRetrieve(IntPtr handle, int type, XplatUI.ClipboardToObject converter) {
+               internal override object ClipboardRetrieve(IntPtr handle, int type, XplatUI.ClipboardToObject converter)
+               {
                        XConvertSelection(DisplayHandle, handle, (IntPtr)type, (IntPtr)type, FosterParent, IntPtr.Zero);
 
                        Clipboard.Retrieving = true;
@@ -2746,16 +2827,36 @@ namespace System.Windows.Forms {
                        return Clipboard.Item;
                }
 
-               internal override void ClipboardStore(IntPtr handle, object obj, int type, XplatUI.ObjectToClipboard converter) {
+               internal override void ClipboardStore (IntPtr handle, object obj, int type, XplatUI.ObjectToClipboard converter, bool copy)
+               {
                        Clipboard.Converter = converter;
 
                        if (obj != null) {
                                Clipboard.AddSource (type, obj);
-                               XSetSelectionOwner(DisplayHandle, CLIPBOARD, FosterParent, IntPtr.Zero);
+                               XSetSelectionOwner (DisplayHandle, CLIPBOARD, FosterParent, IntPtr.Zero);
+
+                               if (copy) {
+                                       try {
+                                               var clipboardAtom = gdk_atom_intern ("CLIPBOARD", true);
+                                               var clipboard = gtk_clipboard_get (clipboardAtom);
+                                               if (clipboard != null) {
+                                                       // for now we only store text
+                                                       var text = Clipboard.GetRtfText ();
+                                                       if (string.IsNullOrEmpty (text))
+                                                               text = Clipboard.GetPlainText ();
+                                                       if (!string.IsNullOrEmpty (text)) {
+                                                               gtk_clipboard_set_text (clipboard, text, text.Length);
+                                                               gtk_clipboard_store (clipboard);
+                                                       }
+                                               }
+                                       } catch {
+                                               // ignore any errors - most likely because gtk isn't installed?
+                                       }
+                               }
                        } else {
                                // Clearing the selection
                                Clipboard.ClearSources ();
-                               XSetSelectionOwner(DisplayHandle, CLIPBOARD, IntPtr.Zero, IntPtr.Zero);
+                               XSetSelectionOwner (DisplayHandle, CLIPBOARD, IntPtr.Zero, IntPtr.Zero);
                        }
                }
 
@@ -2910,13 +3011,8 @@ namespace System.Windows.Forms {
                                        XSelectInput(DisplayHandle, hwnd.client_window, new IntPtr ((int)(SelectInputMask | EventMask.StructureNotifyMask | Keyboard.KeyEventMask)));
                        }
 
-                       if (ExStyleSet (cp.ExStyle, WindowExStyles.WS_EX_TOPMOST)) {
-                               atoms = new int[2];
-                               atoms[0] = _NET_WM_WINDOW_TYPE_NORMAL.ToInt32();
-                               XChangeProperty(DisplayHandle, hwnd.whole_window, _NET_WM_WINDOW_TYPE, (IntPtr)Atom.XA_ATOM, 32, PropertyMode.Replace, atoms, 1);
-
-                               XSetTransientForHint (DisplayHandle, hwnd.whole_window, RootWindow);
-                       }
+                       if (ExStyleSet (cp.ExStyle, WindowExStyles.WS_EX_TOPMOST))
+                               SetTopmost(hwnd.whole_window, true);
 
                        SetWMStyles(hwnd, cp);
                        
@@ -2962,7 +3058,8 @@ namespace System.Windows.Forms {
                        return hwnd.Handle;
                }
 
-               internal override IntPtr CreateWindow(IntPtr Parent, int X, int Y, int Width, int Height) {
+               internal override IntPtr CreateWindow(IntPtr Parent, int X, int Y, int Width, int Height)
+               {
                        CreateParams create_params = new CreateParams();
 
                        create_params.Caption = "";
@@ -2980,7 +3077,8 @@ namespace System.Windows.Forms {
                        return CreateWindow(create_params);
                }
 
-               internal override IntPtr DefineCursor(Bitmap bitmap, Bitmap mask, Color cursor_pixel, Color mask_pixel, int xHotSpot, int yHotSpot) {
+               internal override IntPtr DefineCursor(Bitmap bitmap, Bitmap mask, Color cursor_pixel, Color mask_pixel, int xHotSpot, int yHotSpot)
+               {
                        IntPtr  cursor;
                        Bitmap  cursor_bitmap;
                        Bitmap  cursor_mask;
@@ -3067,7 +3165,8 @@ namespace System.Windows.Forms {
                        return cursor;
                }
 
-               internal override Bitmap DefineStdCursorBitmap (StdCursor id) {
+               internal override Bitmap DefineStdCursorBitmap (StdCursor id)
+               {
                        CursorFontShape shape;
                        string name;
                        IntPtr theme;
@@ -3118,7 +3217,8 @@ namespace System.Windows.Forms {
                }
 
                
-               internal override IntPtr DefineStdCursor(StdCursor id) {
+               internal override IntPtr DefineStdCursor(StdCursor id)
+               {
                        CursorFontShape shape;
                        IntPtr          cursor;
 
@@ -3130,7 +3230,8 @@ namespace System.Windows.Forms {
                        return cursor;
                }
 
-               internal static CursorFontShape StdCursorToFontShape (StdCursor id) {
+               internal static CursorFontShape StdCursorToFontShape (StdCursor id)
+               {
                        CursorFontShape shape;
                        // FIXME - define missing shapes
 
@@ -3284,7 +3385,8 @@ namespace System.Windows.Forms {
                        return shape;
                }
 
-               internal override IntPtr DefWndProc(ref Message msg) {
+               internal override IntPtr DefWndProc(ref Message msg)
+               {
                        switch ((Msg)msg.Msg) {
                                
                                case Msg.WM_IME_COMPOSITION:
@@ -3435,7 +3537,8 @@ namespace System.Windows.Forms {
                        return IntPtr.Zero;
                }
 
-               internal override void DestroyCaret(IntPtr handle) {
+               internal override void DestroyCaret(IntPtr handle)
+               {
                        if (Caret.Hwnd == handle) {
                                if (Caret.Visible) {
                                        HideCaret ();
@@ -3451,13 +3554,15 @@ namespace System.Windows.Forms {
                        }
                }
 
-               internal override void DestroyCursor(IntPtr cursor) {
+               internal override void DestroyCursor(IntPtr cursor)
+               {
                        lock (XlibLock) {
                                XFreeCursor(DisplayHandle, cursor);
                        }
                }
 
-               internal override void DestroyWindow(IntPtr handle) {
+               internal override void DestroyWindow(IntPtr handle)
+               {
                        Hwnd    hwnd;
                        hwnd = Hwnd.ObjectFromHandle(handle);
                        
@@ -3500,7 +3605,8 @@ namespace System.Windows.Forms {
                        }
                }
 
-               internal override IntPtr DispatchMessage(ref MSG msg) {
+               internal override IntPtr DispatchMessage(ref MSG msg)
+               {
                        return NativeWindow.WndProc(msg.hwnd, msg.message, msg.wParam, msg.lParam);
                }
 
@@ -3665,7 +3771,8 @@ namespace System.Windows.Forms {
                        XFreeGC(DisplayHandle, gc);
                }
 
-               internal override void DoEvents() {
+               internal override void DoEvents()
+               {
                        DebugHelper.Enter ();
 
                        MSG     msg = new MSG ();
@@ -3702,7 +3809,8 @@ namespace System.Windows.Forms {
                        DebugHelper.Leave ();
                }
 
-               internal override void EnableWindow(IntPtr handle, bool Enable) {
+               internal override void EnableWindow(IntPtr handle, bool Enable)
+               {
                        Hwnd    hwnd;
 
                        hwnd = Hwnd.ObjectFromHandle(handle);
@@ -3711,11 +3819,13 @@ namespace System.Windows.Forms {
                        }
                }
 
-               internal override void EndLoop(Thread thread) {
+               internal override void EndLoop(Thread thread)
+               {
                        // This is where we one day will shut down the loop for the thread
                }
 
-               internal override IntPtr GetActive() {
+               internal override IntPtr GetActive()
+               {
                        IntPtr  actual_atom;
                        int     actual_format;
                        IntPtr  nitems;
@@ -3727,6 +3837,10 @@ namespace System.Windows.Forms {
                        if (((long)nitems > 0) && (prop != IntPtr.Zero)) {
                                active = (IntPtr)Marshal.ReadInt32(prop);
                                XFree(prop);
+                       } else {
+                               // The window manager does not support _NET_ACTIVE_WINDOW.  Fall back to XGetInputFocus.
+                               IntPtr  revert_to = IntPtr.Zero;
+                               XGetInputFocus(DisplayHandle, out active, out revert_to);
                        }
 
                        if (active != IntPtr.Zero) {
@@ -3742,7 +3856,8 @@ namespace System.Windows.Forms {
                        return active;
                }
 
-               internal override Region GetClipRegion(IntPtr handle) {
+               internal override Region GetClipRegion(IntPtr handle)
+               {
                        Hwnd    hwnd;
 
                        hwnd = Hwnd.ObjectFromHandle(handle);
@@ -3753,14 +3868,16 @@ namespace System.Windows.Forms {
                        return null;
                }
 
-               internal override void GetCursorInfo(IntPtr cursor, out int width, out int height, out int hotspot_x, out int hotspot_y) {
+               internal override void GetCursorInfo(IntPtr cursor, out int width, out int height, out int hotspot_x, out int hotspot_y)
+               {
                        width = 20;
                        height = 20;
                        hotspot_x = 0;
                        hotspot_y = 0;
                }
 
-               internal override void GetDisplaySize(out Size size) {
+               internal override void GetDisplaySize(out Size size)
+               {
                        XWindowAttributes       attributes=new XWindowAttributes();
 
                        lock (XlibLock) {
@@ -3771,7 +3888,8 @@ namespace System.Windows.Forms {
                        size = new Size(attributes.width, attributes.height);
                }
 
-               internal override SizeF GetAutoScaleSize(Font font) {
+               internal override SizeF GetAutoScaleSize(Font font)
+               {
                        Graphics        g;
                        float           width;
                        string          magic_string = "The quick brown fox jumped over the lazy dog.";
@@ -3783,7 +3901,8 @@ namespace System.Windows.Forms {
                        return new SizeF(width, font.Height);
                }
 
-               internal override IntPtr GetParent(IntPtr handle) {
+               internal override IntPtr GetParent(IntPtr handle)
+               {
                        Hwnd    hwnd;
 
                        hwnd = Hwnd.ObjectFromHandle(handle);
@@ -3794,11 +3913,13 @@ namespace System.Windows.Forms {
                }
                
                // This is a nop on win32 and x11
-               internal override IntPtr GetPreviousWindow(IntPtr handle) {
+               internal override IntPtr GetPreviousWindow(IntPtr handle)
+               {
                        return handle;
                }
 
-               internal override void GetCursorPos(IntPtr handle, out int x, out int y) {
+               internal override void GetCursorPos(IntPtr handle, out int x, out int y)
+               {
                        IntPtr  use_handle;
                        IntPtr  root;
                        IntPtr  child;
@@ -3827,19 +3948,22 @@ namespace System.Windows.Forms {
                        }
                }
 
-               internal override IntPtr GetFocus() {
+               internal override IntPtr GetFocus()
+               {
                        return FocusWindow;
                }
 
 
-               internal override bool GetFontMetrics(Graphics g, Font font, out int ascent, out int descent) {
+               internal override bool GetFontMetrics(Graphics g, Font font, out int ascent, out int descent)
+               {
                        FontFamily ff = font.FontFamily;
                        ascent = ff.GetCellAscent (font.Style);
                        descent = ff.GetCellDescent (font.Style);
                        return true;
                }
 
-               internal override Point GetMenuOrigin(IntPtr handle) {
+               internal override Point GetMenuOrigin(IntPtr handle)
+               {
                        Hwnd    hwnd;
 
                        hwnd = Hwnd.ObjectFromHandle(handle);
@@ -3851,7 +3975,8 @@ namespace System.Windows.Forms {
                }
 
                [MonoTODO("Implement filtering")]
-               internal override bool GetMessage(Object queue_id, ref MSG msg, IntPtr handle, int wFilterMin, int wFilterMax) {
+               internal override bool GetMessage(Object queue_id, ref MSG msg, IntPtr handle, int wFilterMin, int wFilterMax)
+               {
                        XEvent  xevent;
                        bool    client;
                        Hwnd    hwnd;
@@ -4658,7 +4783,8 @@ namespace System.Windows.Forms {
                                        (IntPtr) 1); // left button
                }
 
-               internal override bool GetText(IntPtr handle, out string text) {
+               internal override bool GetText(IntPtr handle, out string text)
+               {
 
                        lock (XlibLock) {
                                IntPtr actual_atom;
@@ -4695,7 +4821,8 @@ namespace System.Windows.Forms {
                        }
                }
 
-               internal override void GetWindowPos(IntPtr handle, bool is_toplevel, out int x, out int y, out int width, out int height, out int client_width, out int client_height) {
+               internal override void GetWindowPos(IntPtr handle, bool is_toplevel, out int x, out int y, out int width, out int height, out int client_width, out int client_height)
+               {
                        Hwnd            hwnd;
 
                        hwnd = Hwnd.ObjectFromHandle(handle);
@@ -4725,7 +4852,8 @@ namespace System.Windows.Forms {
                        client_height = 0;
                }
 
-               internal override FormWindowState GetWindowState(IntPtr handle) {
+               internal override FormWindowState GetWindowState(IntPtr handle)
+               {
                        Hwnd                    hwnd;
 
                        hwnd = Hwnd.ObjectFromHandle(handle);
@@ -4781,13 +4909,15 @@ namespace System.Windows.Forms {
                        return FormWindowState.Normal;
                }
 
-               internal override void GrabInfo(out IntPtr handle, out bool GrabConfined, out Rectangle GrabArea) {
+               internal override void GrabInfo(out IntPtr handle, out bool GrabConfined, out Rectangle GrabArea)
+               {
                        handle = Grab.Hwnd;
                        GrabConfined = Grab.Confined;
                        GrabArea = Grab.Area;
                }
 
-               internal override void GrabWindow(IntPtr handle, IntPtr confine_to_handle) {
+               internal override void GrabWindow(IntPtr handle, IntPtr confine_to_handle)
+               {
                        Hwnd    hwnd;
                        IntPtr  confine_to_window;
 
@@ -4822,7 +4952,8 @@ namespace System.Windows.Forms {
                        }
                }
 
-               internal override void UngrabWindow(IntPtr hwnd) {
+               internal override void UngrabWindow(IntPtr hwnd)
+               {
                        lock (XlibLock) {
                                XUngrabPointer(DisplayHandle, IntPtr.Zero);
                                XFlush(DisplayHandle);
@@ -4847,13 +4978,15 @@ namespace System.Windows.Forms {
                        }
                }
 
-               internal override void HandleException(Exception e) {
+               internal override void HandleException(Exception e)
+               {
                        StackTrace st = new StackTrace(e, true);
                        Console.WriteLine("Exception '{0}'", e.Message+st.ToString());
                        Console.WriteLine("{0}{1}", e.Message, st.ToString());
                }
 
-               internal override void Invalidate(IntPtr handle, Rectangle rc, bool clear) {
+               internal override void Invalidate(IntPtr handle, Rectangle rc, bool clear)
+               {
                        Hwnd    hwnd;
 
                        hwnd = Hwnd.ObjectFromHandle(handle);
@@ -4865,7 +4998,8 @@ namespace System.Windows.Forms {
                        }
                }
 
-               internal override void InvalidateNC (IntPtr handle) {
+               internal override void InvalidateNC (IntPtr handle)
+               {
                        Hwnd    hwnd;
 
                        hwnd = Hwnd.ObjectFromHandle(handle);
@@ -4873,17 +5007,20 @@ namespace System.Windows.Forms {
                        AddExpose (hwnd, hwnd.WholeWindow == hwnd.ClientWindow, 0, 0, hwnd.Width, hwnd.Height);
                }
 
-               internal override bool IsEnabled(IntPtr handle) {
+               internal override bool IsEnabled(IntPtr handle)
+               {
                        Hwnd hwnd = Hwnd.ObjectFromHandle (handle);
                        return (hwnd != null && hwnd.Enabled);
                }
                
-               internal override bool IsVisible(IntPtr handle) {
+               internal override bool IsVisible(IntPtr handle)
+               {
                        Hwnd hwnd = Hwnd.ObjectFromHandle (handle);
                        return (hwnd != null && hwnd.visible);
                }
 
-               internal override void KillTimer(Timer timer) {
+               internal override void KillTimer(Timer timer)
+               {
                        XEventQueue queue = (XEventQueue) MessageQueues [timer.thread];
 
                        if (queue == null) {
@@ -4899,7 +5036,8 @@ namespace System.Windows.Forms {
                        queue.timer_list.Remove (timer);
                }
 
-               internal override void MenuToScreen(IntPtr handle, ref int x, ref int y) {
+               internal override void MenuToScreen(IntPtr handle, ref int x, ref int y)
+               {
                        int     dest_x_return;
                        int     dest_y_return;
                        IntPtr  child;
@@ -4931,7 +5069,8 @@ namespace System.Windows.Forms {
                        OverrideCursorHandle = cursor;
                }
 
-               internal override PaintEventArgs PaintEventStart(ref Message msg, IntPtr handle, bool client) {
+               internal override PaintEventArgs PaintEventStart(ref Message msg, IntPtr handle, bool client)
+               {
                        PaintEventArgs  paint_event;
                        Hwnd            hwnd;
                        Hwnd            paint_hwnd;
@@ -5003,7 +5142,8 @@ namespace System.Windows.Forms {
                        }
                }
 
-               internal override void PaintEventEnd(ref Message msg, IntPtr handle, bool client) {
+               internal override void PaintEventEnd(ref Message msg, IntPtr handle, bool client)
+               {
                        Hwnd    hwnd;
 
                        hwnd = Hwnd.ObjectFromHandle (msg.HWnd);
@@ -5023,7 +5163,8 @@ namespace System.Windows.Forms {
                }
 
                [MonoTODO("Implement filtering and PM_NOREMOVE")]
-               internal override bool PeekMessage(Object queue_id, ref MSG msg, IntPtr hWnd, int wFilterMin, int wFilterMax, uint flags) {
+               internal override bool PeekMessage(Object queue_id, ref MSG msg, IntPtr hWnd, int wFilterMin, int wFilterMax, uint flags)
+               {
                        XEventQueue queue = (XEventQueue) queue_id;
                        bool    pending;
 
@@ -5053,7 +5194,8 @@ namespace System.Windows.Forms {
                        return GetMessage(queue_id, ref msg, hWnd, wFilterMin, wFilterMax);
                }
 
-               internal override bool PostMessage (IntPtr handle, Msg message, IntPtr wparam, IntPtr lparam) {
+               internal override bool PostMessage (IntPtr handle, Msg message, IntPtr wparam, IntPtr lparam)
+               {
                        XEvent xevent = new XEvent ();
                        Hwnd hwnd = Hwnd.ObjectFromHandle(handle);
 
@@ -5081,7 +5223,8 @@ namespace System.Windows.Forms {
                        return true;
                }
 
-               internal override void PostQuitMessage(int exitCode) {
+               internal override void PostQuitMessage(int exitCode)
+               {
                        ApplicationContext ctx = Application.MWFThread.Current.Context;
                        Form f = ctx != null ? ctx.MainForm : null;
                        if (f != null)
@@ -5096,7 +5239,8 @@ namespace System.Windows.Forms {
                        // TODO
                }
 
-               internal override void RequestNCRecalc(IntPtr handle) {
+               internal override void RequestNCRecalc(IntPtr handle)
+               {
                        Hwnd                            hwnd;
 
                        hwnd = Hwnd.ObjectFromHandle(handle);
@@ -5110,7 +5254,8 @@ namespace System.Windows.Forms {
                        InvalidateNC(handle);
                }
 
-               internal override void ResetMouseHover(IntPtr handle) {
+               internal override void ResetMouseHover(IntPtr handle)
+               {
                        Hwnd    hwnd;
 
                        hwnd = Hwnd.ObjectFromHandle(handle);
@@ -5125,7 +5270,8 @@ namespace System.Windows.Forms {
                }
 
 
-               internal override void ScreenToClient(IntPtr handle, ref int x, ref int y) {
+               internal override void ScreenToClient(IntPtr handle, ref int x, ref int y)
+               {
                        int     dest_x_return;
                        int     dest_y_return;
                        IntPtr  child;
@@ -5141,7 +5287,8 @@ namespace System.Windows.Forms {
                        y = dest_y_return;
                }
 
-               internal override void ScreenToMenu(IntPtr handle, ref int x, ref int y) {
+               internal override void ScreenToMenu(IntPtr handle, ref int x, ref int y)
+               {
                        int     dest_x_return;
                        int     dest_y_return;
                        IntPtr  child;
@@ -5189,7 +5336,8 @@ namespace System.Windows.Forms {
                        }
                }
 
-               internal override void ScrollWindow(IntPtr handle, Rectangle area, int XAmount, int YAmount, bool with_children) {
+               internal override void ScrollWindow(IntPtr handle, Rectangle area, int XAmount, int YAmount, bool with_children)
+               {
                        Hwnd            hwnd;
                        IntPtr          gc;
                        XGCValues       gc_values;
@@ -5247,7 +5395,8 @@ namespace System.Windows.Forms {
                        XFreeGC(DisplayHandle, gc);
                }
 
-               internal override void ScrollWindow(IntPtr handle, int XAmount, int YAmount, bool with_children) {
+               internal override void ScrollWindow(IntPtr handle, int XAmount, int YAmount, bool with_children)
+               {
                        Hwnd            hwnd;
                        Rectangle       rect;
 
@@ -5301,7 +5450,8 @@ namespace System.Windows.Forms {
                        return visible_area;
                }
 
-               internal override void SendAsyncMethod (AsyncMethodData method) {
+               internal override void SendAsyncMethod (AsyncMethodData method)
+               {
                        Hwnd    hwnd;
                        XEvent  xevent = new XEvent ();
 
@@ -5349,7 +5499,8 @@ namespace System.Windows.Forms {
                        return NativeWindow.WndProc(hwnd, message, wParam, lParam);
                }
 
-               internal override int SendInput(IntPtr handle, Queue keys) { 
+               internal override int SendInput(IntPtr handle, Queue keys)
+               { 
                        if (handle == IntPtr.Zero)
                                return 0;
 
@@ -5394,7 +5545,8 @@ namespace System.Windows.Forms {
                        return Dnd.StartDrag (hwnd.client_window, data, allowed_effects);
                }
 
-               internal override void SetBorderStyle(IntPtr handle, FormBorderStyle border_style) {
+               internal override void SetBorderStyle(IntPtr handle, FormBorderStyle border_style)
+               {
                        Form form = Control.FromHandle (handle) as Form;
                        if (form != null && form.window_manager == null) {
                                CreateParams cp = form.GetCreateParams ();
@@ -5408,7 +5560,8 @@ namespace System.Windows.Forms {
                        RequestNCRecalc(handle);
                }
 
-               internal override void SetCaretPos(IntPtr handle, int x, int y) {
+               internal override void SetCaretPos(IntPtr handle, int x, int y)
+               {
                        if (Caret.Hwnd == handle) {
                                Caret.Timer.Stop();
                                HideCaret();
@@ -5425,7 +5578,8 @@ namespace System.Windows.Forms {
                        }
                }
 
-               internal override void SetClipRegion(IntPtr handle, Region region) {
+               internal override void SetClipRegion(IntPtr handle, Region region)
+               {
                        Hwnd    hwnd;
 
                        hwnd = Hwnd.ObjectFromHandle(handle);
@@ -5436,7 +5590,8 @@ namespace System.Windows.Forms {
                        hwnd.UserClip = region;
                }
 
-               internal override void SetCursor(IntPtr handle, IntPtr cursor) {
+               internal override void SetCursor(IntPtr handle, IntPtr cursor)
+               {
                        Hwnd    hwnd;
 
                        if (OverrideCursorHandle == IntPtr.Zero) {
@@ -5500,7 +5655,8 @@ namespace System.Windows.Forms {
                        child = child_last;
                }
 
-               internal override void SetCursorPos(IntPtr handle, int x, int y) {
+               internal override void SetCursorPos(IntPtr handle, int x, int y)
+               {
                        if (handle == IntPtr.Zero) {
                                lock (XlibLock) {
                                        IntPtr root, child;
@@ -5566,7 +5722,8 @@ namespace System.Windows.Forms {
                        }
                }
 
-               internal override void SetFocus(IntPtr handle) {
+               internal override void SetFocus(IntPtr handle)
+               {
                        Hwnd    hwnd;
                        IntPtr  prev_focus_window;
 
@@ -5592,7 +5749,8 @@ namespace System.Windows.Forms {
                        //XSetInputFocus(DisplayHandle, Hwnd.ObjectFromHandle(handle).client_window, RevertTo.None, IntPtr.Zero);
                }
 
-               internal override void SetIcon(IntPtr handle, Icon icon) {
+               internal override void SetIcon(IntPtr handle, Icon icon)
+               {
                        Hwnd    hwnd;
 
                        hwnd = Hwnd.ObjectFromHandle(handle);
@@ -5601,7 +5759,8 @@ namespace System.Windows.Forms {
                        }
                }
 
-               internal override void SetMenu(IntPtr handle, Menu menu) {
+               internal override void SetMenu(IntPtr handle, Menu menu)
+               {
                        Hwnd    hwnd;
 
                        hwnd = Hwnd.ObjectFromHandle(handle);
@@ -5610,7 +5769,8 @@ namespace System.Windows.Forms {
                        RequestNCRecalc(handle);
                }
 
-               internal override void SetModal(IntPtr handle, bool Modal) {
+               internal override void SetModal(IntPtr handle, bool Modal)
+               {
                        if (Modal) {
                                ModalWindows.Push(handle);
                        } else {
@@ -5627,7 +5787,8 @@ namespace System.Windows.Forms {
                        SetWMStyles (hwnd, ctrl.GetCreateParams ());
                }
 
-               internal override IntPtr SetParent(IntPtr handle, IntPtr parent) {
+               internal override IntPtr SetParent(IntPtr handle, IntPtr parent)
+               {
                        Hwnd    hwnd;
 
                        hwnd = Hwnd.ObjectFromHandle(handle);
@@ -5641,7 +5802,8 @@ namespace System.Windows.Forms {
                        return IntPtr.Zero;
                }
 
-               internal override void SetTimer (Timer timer) {
+               internal override void SetTimer (Timer timer)
+               {
                        XEventQueue queue = (XEventQueue) MessageQueues [timer.thread];
 
                        if (queue == null) {
@@ -5655,9 +5817,11 @@ namespace System.Windows.Forms {
                        WakeupMain ();
                }
 
-               internal override bool SetTopmost(IntPtr handle, bool enabled) {
+               internal override bool SetTopmost(IntPtr handle, bool enabled)
+               {
 
                        Hwnd hwnd = Hwnd.ObjectFromHandle(handle);
+                       hwnd.topmost = enabled;
 
                        if (enabled) {
                                lock (XlibLock) {
@@ -5680,7 +5844,8 @@ namespace System.Windows.Forms {
                        return true;
                }
 
-               internal override bool SetOwner(IntPtr handle, IntPtr handle_owner) {
+               internal override bool SetOwner(IntPtr handle, IntPtr handle_owner)
+               {
                        Hwnd hwnd;
                        Hwnd hwnd_owner;
 
@@ -5741,7 +5906,8 @@ namespace System.Windows.Forms {
                        return true;
                }
 
-               internal override void SetWindowMinMax(IntPtr handle, Rectangle maximized, Size min, Size max) {
+               internal override void SetWindowMinMax(IntPtr handle, Rectangle maximized, Size min, Size max)
+               {
                        Control ctrl = Control.FromHandle (handle);
                        SetWindowMinMax (handle, maximized, min, max, ctrl != null ? ctrl.GetCreateParams () : null);
                }
@@ -5801,7 +5967,8 @@ namespace System.Windows.Forms {
                }
 
 
-               internal override void SetWindowPos(IntPtr handle, int x, int y, int width, int height) {
+               internal override void SetWindowPos(IntPtr handle, int x, int y, int width, int height)
+               {
                        Hwnd            hwnd;
 
                        hwnd = Hwnd.ObjectFromHandle(handle);
@@ -5866,7 +6033,8 @@ namespace System.Windows.Forms {
                        hwnd.ClientRect = Rectangle.Empty;
                }
 
-               internal override void SetWindowState(IntPtr handle, FormWindowState state) {
+               internal override void SetWindowState(IntPtr handle, FormWindowState state)
+               {
                        FormWindowState current_state;
                        Hwnd            hwnd;
 
@@ -5915,7 +6083,8 @@ namespace System.Windows.Forms {
                        }
                }
 
-               internal override void SetWindowStyle(IntPtr handle, CreateParams cp) {
+               internal override void SetWindowStyle(IntPtr handle, CreateParams cp)
+               {
                        Hwnd    hwnd;
 
                        hwnd = Hwnd.ObjectFromHandle(handle);
@@ -5928,7 +6097,8 @@ namespace System.Windows.Forms {
                        return 1.0;
                }
 
-               internal override void SetWindowTransparency(IntPtr handle, double transparency, Color key) {
+               internal override void SetWindowTransparency(IntPtr handle, double transparency, Color key)
+               {
                        Hwnd    hwnd;
                        IntPtr  opacity;
 
@@ -5947,7 +6117,8 @@ namespace System.Windows.Forms {
                        XChangeProperty(DisplayHandle, w, _NET_WM_WINDOW_OPACITY, (IntPtr)Atom.XA_CARDINAL, 32, PropertyMode.Replace, ref opacity, 1);
                }
 
-               internal override bool SetZOrder(IntPtr handle, IntPtr after_handle, bool top, bool bottom) {
+               internal override bool SetZOrder(IntPtr handle, IntPtr after_handle, bool top, bool bottom)
+               {
                        Hwnd    hwnd = Hwnd.ObjectFromHandle(handle);
 
                        if (!hwnd.mapped) {
@@ -5998,21 +6169,25 @@ namespace System.Windows.Forms {
                        return false;
                }
 
-               internal override void ShowCursor(bool show) {
+               internal override void ShowCursor(bool show)
+               {
                        ;       // FIXME - X11 doesn't 'hide' the cursor. we could create an empty cursor
                }
 
-               internal override object StartLoop(Thread thread) {
+               internal override object StartLoop(Thread thread)
+               {
                        XEventQueue q = ThreadQueue(thread);
                        return q;
                }
 
-               internal override TransparencySupport SupportsTransparency() {
+               internal override TransparencySupport SupportsTransparency()
+               {
                        // We need to check if the x compositing manager is running
                        return TransparencySupport.Set;
                }
 
-               internal override bool SystrayAdd(IntPtr handle, string tip, Icon icon, out ToolTip tt) {
+               internal override bool SystrayAdd(IntPtr handle, string tip, Icon icon, out ToolTip tt)
+               {
                        GetSystrayManagerWindow();
 
                        if (SystrayMgrWindow != IntPtr.Zero) {
@@ -6085,7 +6260,8 @@ namespace System.Windows.Forms {
                        return false;
                }
 
-               internal override bool SystrayChange(IntPtr handle, string tip, Icon icon, ref ToolTip tt) {
+               internal override bool SystrayChange(IntPtr handle, string tip, Icon icon, ref ToolTip tt)
+               {
                        Control control;
 
                        control = Control.FromHandle(handle);
@@ -6099,7 +6275,8 @@ namespace System.Windows.Forms {
                        }
                }
 
-               internal override void SystrayRemove(IntPtr handle, ref ToolTip tt) {
+               internal override void SystrayRemove(IntPtr handle, ref ToolTip tt)
+               {
 
                        SetVisible (handle, false, false);
 
@@ -6108,21 +6285,18 @@ namespace System.Windows.Forms {
                                tt.Dispose();
                                tt = null;
                        }
-#if NET_2_0
                        // Close any balloon window *we* fired.
                        ThemeEngine.Current.HideBalloonWindow (handle);
-#endif
                }
 
-#if NET_2_0
                internal override void SystrayBalloon(IntPtr handle, int timeout, string title, string text, ToolTipIcon icon)
                {
                        ThemeEngine.Current.ShowBalloonWindow (handle, timeout, title, text, icon);
                        SendMessage(handle, Msg.WM_USER, IntPtr.Zero, (IntPtr) Msg.NIN_BALLOONSHOW);    
                }
-#endif
 
-               internal override bool Text(IntPtr handle, string text) {
+               internal override bool Text(IntPtr handle, string text)
+{
                        Hwnd    hwnd;
 
                        hwnd = Hwnd.ObjectFromHandle(handle);
@@ -6141,11 +6315,13 @@ namespace System.Windows.Forms {
                        return true;
                }
 
-               internal override bool TranslateMessage(ref MSG msg) {
+               internal override bool TranslateMessage(ref MSG msg)
+               {
                        return Keyboard.TranslateMessage (ref msg);
                }
 
-               internal override void UpdateWindow(IntPtr handle) {
+               internal override void UpdateWindow(IntPtr handle)
+               {
                        Hwnd    hwnd;
 
                        hwnd = Hwnd.ObjectFromHandle(handle);
@@ -6244,83 +6420,103 @@ namespace System.Windows.Forms {
 
                [DllImport ("libX11", EntryPoint="XCreateWindow")]
                internal extern static IntPtr _XCreateWindow(IntPtr display, IntPtr parent, int x, int y, int width, int height, int border_width, int depth, int xclass, IntPtr visual, UIntPtr valuemask, ref XSetWindowAttributes attributes);
-               internal static IntPtr XCreateWindow(IntPtr display, IntPtr parent, int x, int y, int width, int height, int border_width, int depth, int xclass, IntPtr visual, UIntPtr valuemask, ref XSetWindowAttributes attributes) {
+               internal static IntPtr XCreateWindow(IntPtr display, IntPtr parent, int x, int y, int width, int height, int border_width, int depth, int xclass, IntPtr visual, UIntPtr valuemask, ref XSetWindowAttributes attributes)
+               {
                        DebugHelper.TraceWriteLine ("XCreateWindow");
                        return _XCreateWindow(display, parent, x, y, width, height, 
                                       border_width, depth, xclass, visual, valuemask, ref attributes);
                }
                [DllImport ("libX11", EntryPoint="XCreateSimpleWindow")]
                internal extern static IntPtr _XCreateSimpleWindow(IntPtr display, IntPtr parent, int x, int y, int width, int height, int border_width, UIntPtr border, UIntPtr background);
-               internal static IntPtr XCreateSimpleWindow(IntPtr display, IntPtr parent, int x, int y, int width, int height, int border_width, UIntPtr border, UIntPtr background) {
+               internal static IntPtr XCreateSimpleWindow(IntPtr display, IntPtr parent, int x, int y, int width, int height, int border_width, UIntPtr border, UIntPtr background)
+               {
                        DebugHelper.TraceWriteLine ("XCreateSimpleWindow");
                        return _XCreateSimpleWindow(display, parent, x, y, width, height, border_width, border, background);
                }
                [DllImport ("libX11", EntryPoint="XMapWindow")]
                internal extern static int _XMapWindow(IntPtr display, IntPtr window);
-               internal static int XMapWindow(IntPtr display, IntPtr window) {
+               internal static int XMapWindow(IntPtr display, IntPtr window)
+               {
                        DebugHelper.TraceWriteLine ("XMapWindow");
                        return _XMapWindow(display, window);
                }
+               [DllImport ("libX11", EntryPoint="XMapRaised")]
+               internal extern static int _XMapRaised(IntPtr display, IntPtr window);
+               internal static int XMapRaised(IntPtr display, IntPtr window)
+               {
+                       DebugHelper.TraceWriteLine ("XMapRaised");
+                       return _XMapRaised(display, window);
+               }
                [DllImport ("libX11", EntryPoint="XUnmapWindow")]
                internal extern static int _XUnmapWindow(IntPtr display, IntPtr window);
-               internal static int XUnmapWindow(IntPtr display, IntPtr window) {
+               internal static int XUnmapWindow(IntPtr display, IntPtr window)
+               {
                        DebugHelper.TraceWriteLine ("XUnmapWindow");
                        return _XUnmapWindow(display, window);
                }
                [DllImport ("libX11", EntryPoint="XMapSubwindows")]
                internal extern static int _XMapSubindows(IntPtr display, IntPtr window);
-               internal static int XMapSubindows(IntPtr display, IntPtr window) {
+               internal static int XMapSubindows(IntPtr display, IntPtr window)
+               {
                        DebugHelper.TraceWriteLine ("XMapSubindows");
                        return _XMapSubindows(display, window);
                }
                [DllImport ("libX11", EntryPoint="XUnmapSubwindows")]
                internal extern static int _XUnmapSubwindows(IntPtr display, IntPtr window);
-               internal static int XUnmapSubwindows(IntPtr display, IntPtr window) {
+               internal static int XUnmapSubwindows(IntPtr display, IntPtr window)
+               {
                        DebugHelper.TraceWriteLine ("XUnmapSubwindows");
                        return _XUnmapSubwindows(display, window);
                }
                [DllImport ("libX11", EntryPoint="XRootWindow")]
                internal extern static IntPtr _XRootWindow(IntPtr display, int screen_number);
-               internal static IntPtr XRootWindow(IntPtr display, int screen_number) {
+               internal static IntPtr XRootWindow(IntPtr display, int screen_number)
+               {
                        DebugHelper.TraceWriteLine ("XRootWindow");
                        return _XRootWindow(display, screen_number);
                }
                [DllImport ("libX11", EntryPoint="XNextEvent")]
                internal extern static IntPtr _XNextEvent(IntPtr display, ref XEvent xevent);
-               internal static IntPtr XNextEvent(IntPtr display, ref XEvent xevent) {
+               internal static IntPtr XNextEvent(IntPtr display, ref XEvent xevent)
+               {
                        DebugHelper.TraceWriteLine ("XNextEvent");
                        return _XNextEvent(display, ref xevent);
                }
                [DllImport ("libX11", EntryPoint="XConnectionNumber")]
                internal extern static int _XConnectionNumber (IntPtr display);
-               internal static int XConnectionNumber (IntPtr display) {
+               internal static int XConnectionNumber (IntPtr display)
+               {
                        DebugHelper.TraceWriteLine ("XConnectionNumber");
                        return _XConnectionNumber (display);
                }
                [DllImport ("libX11", EntryPoint="XPending")]
                internal extern static int _XPending (IntPtr display);
-               internal static int XPending (IntPtr display) {
+               internal static int XPending (IntPtr display)
+               {
                        DebugHelper.TraceWriteLine ("XPending");
                        DebugHelper.DumpCallers (3);
                        return _XPending (display);
                }
                [DllImport ("libX11", EntryPoint="XSelectInput")]
                internal extern static IntPtr _XSelectInput(IntPtr display, IntPtr window, IntPtr mask);
-               internal static IntPtr XSelectInput(IntPtr display, IntPtr window, IntPtr mask) {
+               internal static IntPtr XSelectInput(IntPtr display, IntPtr window, IntPtr mask)
+               {
                        DebugHelper.TraceWriteLine ("XSelectInput");
                        return _XSelectInput(display, window, mask);
                }
 
                [DllImport ("libX11", EntryPoint="XDestroyWindow")]
                internal extern static int _XDestroyWindow(IntPtr display, IntPtr window);
-               internal static int XDestroyWindow(IntPtr display, IntPtr window) {
+               internal static int XDestroyWindow(IntPtr display, IntPtr window)
+               {
                        DebugHelper.TraceWriteLine ("XDestroyWindow 0x{0:x}", window.ToInt32());
                        return _XDestroyWindow(display, window);
                }
 
                [DllImport ("libX11", EntryPoint="XReparentWindow")]
                internal extern static int _XReparentWindow(IntPtr display, IntPtr window, IntPtr parent, int x, int y);
-               internal static int XReparentWindow(IntPtr display, IntPtr window, IntPtr parent, int x, int y) {
+               internal static int XReparentWindow(IntPtr display, IntPtr window, IntPtr parent, int x, int y)
+               {
                        DebugHelper.TraceWriteLine ("XReparentWindow");
                        return _XReparentWindow(display, window, parent, x, y);
                }
@@ -6341,182 +6537,208 @@ namespace System.Windows.Forms {
 
                [DllImport ("libX11", EntryPoint="XResizeWindow")]
                internal extern static int _XResizeWindow(IntPtr display, IntPtr window, int width, int height);
-               internal static int XResizeWindow(IntPtr display, IntPtr window, int width, int height) {
+               internal static int XResizeWindow(IntPtr display, IntPtr window, int width, int height)
+               {
                        DebugHelper.TraceWriteLine ("XResizeWindow");
                        return _XResizeWindow(display, window, width, height);
                }
 
                [DllImport ("libX11", EntryPoint="XGetWindowAttributes")]
                internal extern static int _XGetWindowAttributes(IntPtr display, IntPtr window, ref XWindowAttributes attributes);
-               internal static int XGetWindowAttributes(IntPtr display, IntPtr window, ref XWindowAttributes attributes) {
+               internal static int XGetWindowAttributes(IntPtr display, IntPtr window, ref XWindowAttributes attributes)
+               {
                        DebugHelper.TraceWriteLine ("XGetWindowAttributes");
                        return _XGetWindowAttributes(display, window, ref attributes);
                }
 
                [DllImport ("libX11", EntryPoint="XFlush")]
                internal extern static int _XFlush(IntPtr display);
-               internal static int XFlush(IntPtr display) {
+               internal static int XFlush(IntPtr display)
+               {
                        DebugHelper.TraceWriteLine ("XFlush");
                        return _XFlush(display);
                }
 
                [DllImport ("libX11", EntryPoint="XSetWMName")]
                internal extern static int _XSetWMName(IntPtr display, IntPtr window, ref XTextProperty text_prop);
-               internal static int XSetWMName(IntPtr display, IntPtr window, ref XTextProperty text_prop) {
+               internal static int XSetWMName(IntPtr display, IntPtr window, ref XTextProperty text_prop)
+               {
                        DebugHelper.TraceWriteLine ("XSetWMName");
                        return _XSetWMName(display, window, ref text_prop);
                }
 
                [DllImport ("libX11", EntryPoint="XStoreName")]
                internal extern static int _XStoreName(IntPtr display, IntPtr window, string window_name);
-               internal static int XStoreName(IntPtr display, IntPtr window, string window_name) {
+               internal static int XStoreName(IntPtr display, IntPtr window, string window_name)
+               {
                        DebugHelper.TraceWriteLine ("XStoreName");
                        return _XStoreName(display, window, window_name);
                }
 
                [DllImport ("libX11", EntryPoint="XFetchName")]
                internal extern static int _XFetchName(IntPtr display, IntPtr window, ref IntPtr window_name);
-               internal static int XFetchName(IntPtr display, IntPtr window, ref IntPtr window_name) {
+               internal static int XFetchName(IntPtr display, IntPtr window, ref IntPtr window_name)
+               {
                        DebugHelper.TraceWriteLine ("XFetchName");
                        return _XFetchName(display, window, ref window_name);
                }
 
                [DllImport ("libX11", EntryPoint="XSendEvent")]
                internal extern static int _XSendEvent(IntPtr display, IntPtr window, bool propagate, IntPtr event_mask, ref XEvent send_event);
-               internal static int XSendEvent(IntPtr display, IntPtr window, bool propagate, IntPtr event_mask, ref XEvent send_event) {
+               internal static int XSendEvent(IntPtr display, IntPtr window, bool propagate, IntPtr event_mask, ref XEvent send_event)
+               {
                        DebugHelper.TraceWriteLine ("XSendEvent");
                        return _XSendEvent(display, window, propagate, event_mask, ref send_event);
                }
 
                [DllImport ("libX11", EntryPoint="XQueryTree")]
                internal extern static int _XQueryTree(IntPtr display, IntPtr window, out IntPtr root_return, out IntPtr parent_return, out IntPtr children_return, out int nchildren_return);
-               internal static int XQueryTree(IntPtr display, IntPtr window, out IntPtr root_return, out IntPtr parent_return, out IntPtr children_return, out int nchildren_return) {
+               internal static int XQueryTree(IntPtr display, IntPtr window, out IntPtr root_return, out IntPtr parent_return, out IntPtr children_return, out int nchildren_return)
+               {
                        DebugHelper.TraceWriteLine ("XQueryTree");
                        return _XQueryTree(display, window, out root_return, out parent_return, out children_return, out nchildren_return);
                }
 
                [DllImport ("libX11", EntryPoint="XFree")]
                internal extern static int _XFree(IntPtr data);
-               internal static int XFree(IntPtr data) {
+               internal static int XFree(IntPtr data)
+               {
                        DebugHelper.TraceWriteLine ("XFree");
                        return _XFree(data);
                }
 
                [DllImport ("libX11", EntryPoint="XRaiseWindow")]
                internal extern static int _XRaiseWindow(IntPtr display, IntPtr window);
-               internal static int XRaiseWindow(IntPtr display, IntPtr window) {
+               internal static int XRaiseWindow(IntPtr display, IntPtr window)
+               {
                        DebugHelper.TraceWriteLine ("XRaiseWindow");
                        return _XRaiseWindow(display, window);
                }
 
                [DllImport ("libX11", EntryPoint="XLowerWindow")]
                internal extern static uint _XLowerWindow(IntPtr display, IntPtr window);
-               internal static uint XLowerWindow(IntPtr display, IntPtr window) {
+               internal static uint XLowerWindow(IntPtr display, IntPtr window)
+               {
                        DebugHelper.TraceWriteLine ("XLowerWindow");
                        return _XLowerWindow(display, window);
                }
 
                [DllImport ("libX11", EntryPoint="XConfigureWindow")]
                internal extern static uint _XConfigureWindow(IntPtr display, IntPtr window, ChangeWindowFlags value_mask, ref XWindowChanges values);
-               internal static uint XConfigureWindow(IntPtr display, IntPtr window, ChangeWindowFlags value_mask, ref XWindowChanges values) {
+               internal static uint XConfigureWindow(IntPtr display, IntPtr window, ChangeWindowFlags value_mask, ref XWindowChanges values)
+               {
                        DebugHelper.TraceWriteLine ("XConfigureWindow");
                        return _XConfigureWindow(display, window, value_mask, ref values);
                }
 
                [DllImport ("libX11", EntryPoint="XInternAtom")]
                internal extern static IntPtr _XInternAtom(IntPtr display, string atom_name, bool only_if_exists);
-               internal static IntPtr XInternAtom(IntPtr display, string atom_name, bool only_if_exists) {
+               internal static IntPtr XInternAtom(IntPtr display, string atom_name, bool only_if_exists)
+               {
                        DebugHelper.TraceWriteLine ("XInternAtom");
                        return _XInternAtom(display, atom_name, only_if_exists);
                }
 
                [DllImport ("libX11", EntryPoint="XInternAtoms")]
                internal extern static int _XInternAtoms(IntPtr display, string[] atom_names, int atom_count, bool only_if_exists, IntPtr[] atoms);
-               internal static int XInternAtoms(IntPtr display, string[] atom_names, int atom_count, bool only_if_exists, IntPtr[] atoms) {
+               internal static int XInternAtoms(IntPtr display, string[] atom_names, int atom_count, bool only_if_exists, IntPtr[] atoms)
+               {
                        DebugHelper.TraceWriteLine ("XInternAtoms");
                        return _XInternAtoms(display, atom_names, atom_count, only_if_exists, atoms);
                }
 
                [DllImport ("libX11", EntryPoint="XSetWMProtocols")]
                internal extern static int _XSetWMProtocols(IntPtr display, IntPtr window, IntPtr[] protocols, int count);
-               internal static int XSetWMProtocols(IntPtr display, IntPtr window, IntPtr[] protocols, int count) {
+               internal static int XSetWMProtocols(IntPtr display, IntPtr window, IntPtr[] protocols, int count)
+               {
                        DebugHelper.TraceWriteLine ("XSetWMProtocols");
                        return _XSetWMProtocols(display, window, protocols, count);
                }
 
                [DllImport ("libX11", EntryPoint="XGrabPointer")]
                internal extern static int _XGrabPointer(IntPtr display, IntPtr window, bool owner_events, EventMask event_mask, GrabMode pointer_mode, GrabMode keyboard_mode, IntPtr confine_to, IntPtr cursor, IntPtr timestamp);
-               internal static int XGrabPointer(IntPtr display, IntPtr window, bool owner_events, EventMask event_mask, GrabMode pointer_mode, GrabMode keyboard_mode, IntPtr confine_to, IntPtr cursor, IntPtr timestamp) {
+               internal static int XGrabPointer(IntPtr display, IntPtr window, bool owner_events, EventMask event_mask, GrabMode pointer_mode, GrabMode keyboard_mode, IntPtr confine_to, IntPtr cursor, IntPtr timestamp)
+               {
                        DebugHelper.TraceWriteLine ("XGrabPointer");
                        return _XGrabPointer(display, window, owner_events, event_mask, pointer_mode, keyboard_mode, confine_to, cursor, timestamp);
                }
 
                [DllImport ("libX11", EntryPoint="XUngrabPointer")]
                internal extern static int _XUngrabPointer(IntPtr display, IntPtr timestamp);
-               internal static int XUngrabPointer(IntPtr display, IntPtr timestamp) {
+               internal static int XUngrabPointer(IntPtr display, IntPtr timestamp)
+               {
                        DebugHelper.TraceWriteLine ("XUngrabPointer");
                        return _XUngrabPointer(display, timestamp);
                }
 
                [DllImport ("libX11", EntryPoint="XQueryPointer")]
                internal extern static bool _XQueryPointer(IntPtr display, IntPtr window, out IntPtr root, out IntPtr child, out int root_x, out int root_y, out int win_x, out int win_y, out int keys_buttons);
-               internal static bool XQueryPointer(IntPtr display, IntPtr window, out IntPtr root, out IntPtr child, out int root_x, out int root_y, out int win_x, out int win_y, out int keys_buttons) {
+               internal static bool XQueryPointer(IntPtr display, IntPtr window, out IntPtr root, out IntPtr child, out int root_x, out int root_y, out int win_x, out int win_y, out int keys_buttons)
+               {
                        DebugHelper.TraceWriteLine ("XQueryPointer");
                        return _XQueryPointer(display, window, out root, out child, out root_x, out root_y, out win_x, out win_y, out keys_buttons);
                }
 
                [DllImport ("libX11", EntryPoint="XTranslateCoordinates")]
                internal extern static bool _XTranslateCoordinates (IntPtr display, IntPtr src_w, IntPtr dest_w, int src_x, int src_y, out int intdest_x_return, out int dest_y_return, out IntPtr child_return);
-               internal static bool XTranslateCoordinates (IntPtr display, IntPtr src_w, IntPtr dest_w, int src_x, int src_y, out int intdest_x_return,         out int dest_y_return, out IntPtr child_return) {
+               internal static bool XTranslateCoordinates (IntPtr display, IntPtr src_w, IntPtr dest_w, int src_x, int src_y, out int intdest_x_return,         out int dest_y_return, out IntPtr child_return)
+               {
                        DebugHelper.TraceWriteLine ("XTranslateCoordinates");
                        return _XTranslateCoordinates (display, src_w, dest_w, src_x, src_y, out intdest_x_return, out dest_y_return, out child_return);
                }
 
                [DllImport ("libX11", EntryPoint="XGetGeometry")]
                internal extern static bool _XGetGeometry(IntPtr display, IntPtr window, out IntPtr root, out int x, out int y, out int width, out int height, out int border_width, out int depth);
-               internal static bool XGetGeometry(IntPtr display, IntPtr window, out IntPtr root, out int x, out int y, out int width, out int height, out int border_width, out int depth) {
+               internal static bool XGetGeometry(IntPtr display, IntPtr window, out IntPtr root, out int x, out int y, out int width, out int height, out int border_width, out int depth)
+               {
                        DebugHelper.TraceWriteLine ("XGetGeometry");
                        return _XGetGeometry(display, window, out root, out x, out y, out width, out height, out border_width, out depth);
                }
 
                [DllImport ("libX11", EntryPoint="XGetGeometry")]
                internal extern static bool _XGetGeometry(IntPtr display, IntPtr window, IntPtr root, out int x, out int y, out int width, out int height, IntPtr border_width, IntPtr depth);
-               internal static bool XGetGeometry(IntPtr display, IntPtr window, IntPtr root, out int x, out int y, out int width, out int height, IntPtr border_width, IntPtr depth) {
+               internal static bool XGetGeometry(IntPtr display, IntPtr window, IntPtr root, out int x, out int y, out int width, out int height, IntPtr border_width, IntPtr depth)
+               {
                        DebugHelper.TraceWriteLine ("XGetGeometry");
                        return _XGetGeometry(display, window, root, out x, out y, out width, out height, border_width, depth);
                }
 
                [DllImport ("libX11", EntryPoint="XGetGeometry")]
                internal extern static bool _XGetGeometry(IntPtr display, IntPtr window, IntPtr root, out int x, out int y, IntPtr width, IntPtr height, IntPtr border_width, IntPtr depth);
-               internal static bool XGetGeometry(IntPtr display, IntPtr window, IntPtr root, out int x, out int y, IntPtr width, IntPtr height, IntPtr border_width, IntPtr depth) {
+               internal static bool XGetGeometry(IntPtr display, IntPtr window, IntPtr root, out int x, out int y, IntPtr width, IntPtr height, IntPtr border_width, IntPtr depth)
+               {
                        DebugHelper.TraceWriteLine ("XGetGeometry");
                        return _XGetGeometry(display, window, root, out x, out y, width, height, border_width, depth);
                }
 
                [DllImport ("libX11", EntryPoint="XGetGeometry")]
                internal extern static bool _XGetGeometry(IntPtr display, IntPtr window, IntPtr root, IntPtr x, IntPtr y, out int width, out int height, IntPtr border_width, IntPtr depth);
-               internal static bool XGetGeometry(IntPtr display, IntPtr window, IntPtr root, IntPtr x, IntPtr y, out int width, out int height, IntPtr border_width, IntPtr depth) {
+               internal static bool XGetGeometry(IntPtr display, IntPtr window, IntPtr root, IntPtr x, IntPtr y, out int width, out int height, IntPtr border_width, IntPtr depth)
+               {
                        DebugHelper.TraceWriteLine ("XGetGeometry");
                        return _XGetGeometry(display, window, root, x, y, out width, out height, border_width, depth);
                }
 
                [DllImport ("libX11", EntryPoint="XWarpPointer")]
                internal extern static uint _XWarpPointer(IntPtr display, IntPtr src_w, IntPtr dest_w, int src_x, int src_y, uint src_width, uint src_height, int dest_x, int dest_y);
-               internal static uint XWarpPointer(IntPtr display, IntPtr src_w, IntPtr dest_w, int src_x, int src_y, uint src_width, uint src_height, int dest_x, int dest_y) {
+               internal static uint XWarpPointer(IntPtr display, IntPtr src_w, IntPtr dest_w, int src_x, int src_y, uint src_width, uint src_height, int dest_x, int dest_y)
+               {
                        DebugHelper.TraceWriteLine ("XWarpPointer");
                        return _XWarpPointer(display, src_w, dest_w, src_x, src_y, src_width, src_height, dest_x, dest_y);
                }
 
                [DllImport ("libX11", EntryPoint="XClearWindow")]
                internal extern static int _XClearWindow(IntPtr display, IntPtr window);
-               internal static int XClearWindow(IntPtr display, IntPtr window) {
+               internal static int XClearWindow(IntPtr display, IntPtr window)
+               {
                        DebugHelper.TraceWriteLine ("XClearWindow");
                        return _XClearWindow(display, window);
                }
 
                [DllImport ("libX11", EntryPoint="XClearArea")]
                internal extern static int _XClearArea(IntPtr display, IntPtr window, int x, int y, int width, int height, bool exposures);
-               internal static int XClearArea(IntPtr display, IntPtr window, int x, int y, int width, int height, bool exposures) {
+               internal static int XClearArea(IntPtr display, IntPtr window, int x, int y, int width, int height, bool exposures)
+               {
                        DebugHelper.TraceWriteLine ("XClearArea");
                        return _XClearArea(display, window, x, y, width, height, exposures);
                }
@@ -6524,126 +6746,144 @@ namespace System.Windows.Forms {
                // Colormaps
                [DllImport ("libX11", EntryPoint="XDefaultScreenOfDisplay")]
                internal extern static IntPtr _XDefaultScreenOfDisplay(IntPtr display);
-               internal static IntPtr XDefaultScreenOfDisplay(IntPtr display) {
+               internal static IntPtr XDefaultScreenOfDisplay(IntPtr display)
+               {
                        DebugHelper.TraceWriteLine ("XDefaultScreenOfDisplay");
                        return _XDefaultScreenOfDisplay(display);
                }
 
                [DllImport ("libX11", EntryPoint="XScreenNumberOfScreen")]
                internal extern static int _XScreenNumberOfScreen(IntPtr display, IntPtr Screen);
-               internal static int XDefaultScreenOfDisplay(IntPtr display, IntPtr Screen) {
+               internal static int XDefaultScreenOfDisplay(IntPtr display, IntPtr Screen)
+               {
                        DebugHelper.TraceWriteLine ("XDefaultScreenOfDisplay");
                        return _XScreenNumberOfScreen(display, Screen);
                }
 
                [DllImport ("libX11", EntryPoint="XDefaultVisual")]
                internal extern static IntPtr _XDefaultVisual(IntPtr display, int screen_number);
-               internal static IntPtr XDefaultScreenOfDisplay(IntPtr display, int screen_number) {
+               internal static IntPtr XDefaultScreenOfDisplay(IntPtr display, int screen_number)
+               {
                        DebugHelper.TraceWriteLine ("XDefaultScreenOfDisplay");
                        return _XDefaultVisual(display, screen_number);
                }
 
                [DllImport ("libX11", EntryPoint="XDefaultDepth")]
                internal extern static uint _XDefaultDepth(IntPtr display, int screen_number);
-               internal static uint XDefaultDepth(IntPtr display, int screen_number) {
+               internal static uint XDefaultDepth(IntPtr display, int screen_number)
+               {
                        DebugHelper.TraceWriteLine ("XDefaultDepth");
                        return _XDefaultDepth(display, screen_number);
                }
 
                [DllImport ("libX11", EntryPoint="XDefaultScreen")]
                internal extern static int _XDefaultScreen(IntPtr display);
-               internal static int XDefaultScreen(IntPtr display) {
+               internal static int XDefaultScreen(IntPtr display)
+               {
                        DebugHelper.TraceWriteLine ("XDefaultScreen");
                        return _XDefaultScreen(display);
                }
 
                [DllImport ("libX11", EntryPoint="XDefaultColormap")]
                internal extern static IntPtr _XDefaultColormap(IntPtr display, int screen_number);
-               internal static IntPtr XDefaultColormap(IntPtr display, int screen_number) {
+               internal static IntPtr XDefaultColormap(IntPtr display, int screen_number)
+               {
                        DebugHelper.TraceWriteLine ("XDefaultColormap");
                        return _XDefaultColormap(display, screen_number);
                }
 
                [DllImport ("libX11", EntryPoint="XLookupColor")]
                internal extern static int _XLookupColor(IntPtr display, IntPtr Colormap, string Coloranem, ref XColor exact_def_color, ref XColor screen_def_color);
-               internal static int XLookupColor(IntPtr display, IntPtr Colormap, string Coloranem, ref XColor exact_def_color, ref XColor screen_def_color) {
+               internal static int XLookupColor(IntPtr display, IntPtr Colormap, string Coloranem, ref XColor exact_def_color, ref XColor screen_def_color)
+               {
                        DebugHelper.TraceWriteLine ("XLookupColor");
                        return _XLookupColor(display, Colormap, Coloranem, ref exact_def_color, ref screen_def_color);
                }
 
                [DllImport ("libX11", EntryPoint="XAllocColor")]
                internal extern static int _XAllocColor(IntPtr display, IntPtr Colormap, ref XColor colorcell_def);
-               internal static int XAllocColor(IntPtr display, IntPtr Colormap, ref XColor colorcell_def) {
+               internal static int XAllocColor(IntPtr display, IntPtr Colormap, ref XColor colorcell_def)
+               {
                        DebugHelper.TraceWriteLine ("XAllocColor");
                        return _XAllocColor(display, Colormap, ref colorcell_def);
                }
 
                [DllImport ("libX11", EntryPoint="XSetTransientForHint")]
                internal extern static int _XSetTransientForHint(IntPtr display, IntPtr window, IntPtr prop_window);
-               internal static int XSetTransientForHint(IntPtr display, IntPtr window, IntPtr prop_window) {
+               internal static int XSetTransientForHint(IntPtr display, IntPtr window, IntPtr prop_window)
+               {
                        DebugHelper.TraceWriteLine ("XSetTransientForHint");
                        return _XSetTransientForHint(display, window, prop_window);
                }
 
                [DllImport ("libX11", EntryPoint="XChangeProperty")]
                internal extern static int _XChangeProperty(IntPtr display, IntPtr window, IntPtr property, IntPtr type, int format, PropertyMode mode, ref MotifWmHints data, int nelements);
-               internal static int XChangeProperty(IntPtr display, IntPtr window, IntPtr property, IntPtr type, int format, PropertyMode mode, ref MotifWmHints data, int nelements) {
+               internal static int XChangeProperty(IntPtr display, IntPtr window, IntPtr property, IntPtr type, int format, PropertyMode mode, ref MotifWmHints data, int nelements)
+               {
                        DebugHelper.TraceWriteLine ("XChangeProperty");
                        return _XChangeProperty(display, window, property, type, format, mode, ref data, nelements);
                }
 
                [DllImport ("libX11", EntryPoint="XChangeProperty")]
                internal extern static int _XChangeProperty(IntPtr display, IntPtr window, IntPtr property, IntPtr type, int format, PropertyMode mode, ref uint value, int nelements);
-               internal static int XChangeProperty(IntPtr display, IntPtr window, IntPtr property, IntPtr type, int format, PropertyMode mode, ref uint value, int nelements) {
+               internal static int XChangeProperty(IntPtr display, IntPtr window, IntPtr property, IntPtr type, int format, PropertyMode mode, ref uint value, int nelements)
+               {
                        DebugHelper.TraceWriteLine ("XChangeProperty");
                        return _XChangeProperty(display, window, property, type, format, mode, ref value, nelements);
                }
 
                [DllImport ("libX11", EntryPoint="XChangeProperty")]
                internal extern static int _XChangeProperty(IntPtr display, IntPtr window, IntPtr property, IntPtr type, int format, PropertyMode mode, ref IntPtr value, int nelements);
-               internal static int XChangeProperty(IntPtr display, IntPtr window, IntPtr property, IntPtr type, int format, PropertyMode mode, ref IntPtr value, int nelements) {
+               internal static int XChangeProperty(IntPtr display, IntPtr window, IntPtr property, IntPtr type, int format, PropertyMode mode, ref IntPtr value, int nelements)
+               {
                        DebugHelper.TraceWriteLine ("XChangeProperty");
                        return _XChangeProperty(display, window, property, type, format, mode, ref value, nelements);
                }
 
                [DllImport ("libX11", EntryPoint="XChangeProperty")]
                internal extern static int _XChangeProperty(IntPtr display, IntPtr window, IntPtr property, IntPtr type, int format, PropertyMode mode, uint[] data, int nelements);
-               internal static int XChangeProperty(IntPtr display, IntPtr window, IntPtr property, IntPtr type, int format, PropertyMode mode, uint[] data, int nelements) {
+               internal static int XChangeProperty(IntPtr display, IntPtr window, IntPtr property, IntPtr type, int format, PropertyMode mode, uint[] data, int nelements)
+               {
                        DebugHelper.TraceWriteLine ("XChangeProperty");
                        return _XChangeProperty(display, window, property, type, format, mode, data, nelements);
                }
 
                [DllImport ("libX11", EntryPoint="XChangeProperty")]
                internal extern static int _XChangeProperty(IntPtr display, IntPtr window, IntPtr property, IntPtr type, int format, PropertyMode mode, int[] data, int nelements);
-               internal static int XChangeProperty(IntPtr display, IntPtr window, IntPtr property, IntPtr type, int format, PropertyMode mode, int[] data, int nelements) {
+               internal static int XChangeProperty(IntPtr display, IntPtr window, IntPtr property, IntPtr type, int format, PropertyMode mode, int[] data, int nelements)
+               {
                        DebugHelper.TraceWriteLine ("XChangeProperty");
                        return _XChangeProperty(display, window, property, type, format, mode, data, nelements);
                }
 
                [DllImport ("libX11", EntryPoint="XChangeProperty")]
                internal extern static int _XChangeProperty(IntPtr display, IntPtr window, IntPtr property, IntPtr type, int format, PropertyMode mode, IntPtr[] data, int nelements);
-               internal static int XChangeProperty(IntPtr display, IntPtr window, IntPtr property, IntPtr type, int format, PropertyMode mode, IntPtr[] data, int nelements) {
+               internal static int XChangeProperty(IntPtr display, IntPtr window, IntPtr property, IntPtr type, int format, PropertyMode mode, IntPtr[] data, int nelements)
+               {
                        DebugHelper.TraceWriteLine ("XChangeProperty");
                        return _XChangeProperty(display, window, property, type, format, mode, data, nelements);
                }
 
                [DllImport ("libX11", EntryPoint="XChangeProperty")]
                internal extern static int _XChangeProperty(IntPtr display, IntPtr window, IntPtr property, IntPtr type, int format, PropertyMode mode, IntPtr atoms, int nelements);
-               internal static int XChangeProperty(IntPtr display, IntPtr window, IntPtr property, IntPtr type, int format, PropertyMode mode, IntPtr atoms, int nelements) {
+               internal static int XChangeProperty(IntPtr display, IntPtr window, IntPtr property, IntPtr type, int format, PropertyMode mode, IntPtr atoms, int nelements)
+               {
                        DebugHelper.TraceWriteLine ("XChangeProperty");
                        return _XChangeProperty(display, window, property, type, format, mode, atoms, nelements);
                }
 
                [DllImport ("libX11", EntryPoint="XChangeProperty", CharSet=CharSet.Ansi)]
                internal extern static int _XChangeProperty(IntPtr display, IntPtr window, IntPtr property, IntPtr type, int format, PropertyMode mode, string text, int text_length);
-               internal static int XChangeProperty(IntPtr display, IntPtr window, IntPtr property, IntPtr type, int format, PropertyMode mode, string text, int text_length) {
+               internal static int XChangeProperty(IntPtr display, IntPtr window, IntPtr property, IntPtr type, int format, PropertyMode mode, string text, int text_length)
+               {
                        DebugHelper.TraceWriteLine ("XChangeProperty");
                        return _XChangeProperty(display, window, property, type, format, mode, text, text_length);
                }
 
                [DllImport ("libX11", EntryPoint="XDeleteProperty")]
                internal extern static int _XDeleteProperty(IntPtr display, IntPtr window, IntPtr property);
-               internal static int XDeleteProperty(IntPtr display, IntPtr window, IntPtr property) {
+               internal static int XDeleteProperty(IntPtr display, IntPtr window, IntPtr property)
+               {
                        DebugHelper.TraceWriteLine ("XDeleteProperty");
                        return _XDeleteProperty(display, window, property);
                }
@@ -6651,327 +6891,401 @@ namespace System.Windows.Forms {
                // Drawing
                [DllImport ("libX11", EntryPoint="XCreateGC")]
                internal extern static IntPtr _XCreateGC(IntPtr display, IntPtr window, IntPtr valuemask, ref XGCValues values);
-               internal static IntPtr XCreateGC(IntPtr display, IntPtr window, IntPtr valuemask, ref XGCValues values) {
+               internal static IntPtr XCreateGC(IntPtr display, IntPtr window, IntPtr valuemask, ref XGCValues values)
+               {
                        DebugHelper.TraceWriteLine ("XCreateGC");
                        return _XCreateGC(display, window, valuemask, ref values);
                }
 
                [DllImport ("libX11", EntryPoint="XFreeGC")]
                internal extern static int _XFreeGC(IntPtr display, IntPtr gc);
-               internal static int XFreeGC(IntPtr display, IntPtr gc) {
+               internal static int XFreeGC(IntPtr display, IntPtr gc)
+               {
                        DebugHelper.TraceWriteLine ("XFreeGC");
                        return _XFreeGC(display, gc);
                }
 
                [DllImport ("libX11", EntryPoint="XSetFunction")]
                internal extern static int _XSetFunction(IntPtr display, IntPtr gc, GXFunction function);
-               internal static int XSetFunction(IntPtr display, IntPtr gc, GXFunction function) {
+               internal static int XSetFunction(IntPtr display, IntPtr gc, GXFunction function)
+               {
                        DebugHelper.TraceWriteLine ("XSetFunction");
                        return _XSetFunction(display, gc, function);
                }
 
                [DllImport ("libX11", EntryPoint="XSetLineAttributes")]
                internal extern static int _XSetLineAttributes(IntPtr display, IntPtr gc, int line_width, GCLineStyle line_style, GCCapStyle cap_style, GCJoinStyle join_style);
-               internal static int XSetLineAttributes(IntPtr display, IntPtr gc, int line_width, GCLineStyle line_style, GCCapStyle cap_style, GCJoinStyle join_style) {
+               internal static int XSetLineAttributes(IntPtr display, IntPtr gc, int line_width, GCLineStyle line_style, GCCapStyle cap_style, GCJoinStyle join_style)
+               {
                        DebugHelper.TraceWriteLine ("XSetLineAttributes");
                        return _XSetLineAttributes(display, gc, line_width, line_style, cap_style, join_style);
                }
 
                [DllImport ("libX11", EntryPoint="XDrawLine")]
                internal extern static int _XDrawLine(IntPtr display, IntPtr drawable, IntPtr gc, int x1, int y1, int x2, int y2);
-               internal static int XDrawLine(IntPtr display, IntPtr drawable, IntPtr gc, int x1, int y1, int x2, int y2) {
+               internal static int XDrawLine(IntPtr display, IntPtr drawable, IntPtr gc, int x1, int y1, int x2, int y2)
+               {
                        DebugHelper.TraceWriteLine ("XDrawLine");
                        return _XDrawLine(display, drawable, gc, x1, y1, x2, y2);
                }
 
                [DllImport ("libX11", EntryPoint="XDrawRectangle")]
                internal extern static int _XDrawRectangle(IntPtr display, IntPtr drawable, IntPtr gc, int x1, int y1, int width, int height);
-               internal static int XDrawRectangle(IntPtr display, IntPtr drawable, IntPtr gc, int x1, int y1, int width, int height) {
+               internal static int XDrawRectangle(IntPtr display, IntPtr drawable, IntPtr gc, int x1, int y1, int width, int height)
+               {
                        DebugHelper.TraceWriteLine ("XDrawRectangle");
                        return _XDrawRectangle(display, drawable, gc, x1, y1, width, height);
                }
 
                [DllImport ("libX11", EntryPoint="XFillRectangle")]
                internal extern static int _XFillRectangle(IntPtr display, IntPtr drawable, IntPtr gc, int x1, int y1, int width, int height);
-               internal static int XFillRectangle(IntPtr display, IntPtr drawable, IntPtr gc, int x1, int y1, int width, int height) {
+               internal static int XFillRectangle(IntPtr display, IntPtr drawable, IntPtr gc, int x1, int y1, int width, int height)
+               {
                        DebugHelper.TraceWriteLine ("XFillRectangle");
                        return _XFillRectangle(display, drawable, gc, x1, y1, width, height);
                }
 
                [DllImport ("libX11", EntryPoint="XSetWindowBackground")]
                internal extern static int _XSetWindowBackground(IntPtr display, IntPtr window, IntPtr background);
-               internal static int XSetWindowBackground(IntPtr display, IntPtr window, IntPtr background) {
+               internal static int XSetWindowBackground(IntPtr display, IntPtr window, IntPtr background)
+               {
                        DebugHelper.TraceWriteLine ("XSetWindowBackground");
                        return _XSetWindowBackground(display, window, background);
                }
 
                [DllImport ("libX11", EntryPoint="XCopyArea")]
                internal extern static int _XCopyArea(IntPtr display, IntPtr src, IntPtr dest, IntPtr gc, int src_x, int src_y, int width, int height, int dest_x, int dest_y);
-               internal static int XCopyArea(IntPtr display, IntPtr src, IntPtr dest, IntPtr gc, int src_x, int src_y, int width, int height, int dest_x, int dest_y) {
+               internal static int XCopyArea(IntPtr display, IntPtr src, IntPtr dest, IntPtr gc, int src_x, int src_y, int width, int height, int dest_x, int dest_y)
+               {
                        DebugHelper.TraceWriteLine ("XCopyArea");
                        return _XCopyArea(display, src, dest, gc, src_x, src_y, width, height, dest_x, dest_y);
                }
 
                [DllImport ("libX11", EntryPoint="XGetWindowProperty")]
                internal extern static int _XGetWindowProperty(IntPtr display, IntPtr window, IntPtr atom, IntPtr long_offset, IntPtr long_length, bool delete, IntPtr req_type, out IntPtr actual_type, out int actual_format, out IntPtr nitems, out IntPtr bytes_after, ref IntPtr prop);
-               internal static int XGetWindowProperty(IntPtr display, IntPtr window, IntPtr atom, IntPtr long_offset, IntPtr long_length, bool delete, IntPtr req_type, out IntPtr actual_type, out int actual_format, out IntPtr nitems, out IntPtr bytes_after, ref IntPtr prop) {
+               internal static int XGetWindowProperty(IntPtr display, IntPtr window, IntPtr atom, IntPtr long_offset, IntPtr long_length, bool delete, IntPtr req_type, out IntPtr actual_type, out int actual_format, out IntPtr nitems, out IntPtr bytes_after, ref IntPtr prop)
+               {
                        DebugHelper.TraceWriteLine ("XGetWindowProperty");
                        return _XGetWindowProperty(display, window, atom, long_offset, long_length, delete, req_type, out actual_type, out actual_format, out nitems, out bytes_after, ref prop);
                }
 
                [DllImport ("libX11", EntryPoint="XSetInputFocus")]
                internal extern static int _XSetInputFocus(IntPtr display, IntPtr window, RevertTo revert_to, IntPtr time);
-               internal static int XSetInputFocus(IntPtr display, IntPtr window, RevertTo revert_to, IntPtr time) {
+               internal static int XSetInputFocus(IntPtr display, IntPtr window, RevertTo revert_to, IntPtr time)
+               {
                        DebugHelper.TraceWriteLine ("XSetInputFocus");
                        return _XSetInputFocus(display, window, revert_to, time);
                }
 
                [DllImport ("libX11", EntryPoint="XIconifyWindow")]
                internal extern static int _XIconifyWindow(IntPtr display, IntPtr window, int screen_number);
-               internal static int XIconifyWindow(IntPtr display, IntPtr window, int screen_number) {
+               internal static int XIconifyWindow(IntPtr display, IntPtr window, int screen_number)
+               {
                        DebugHelper.TraceWriteLine ("XIconifyWindow");
                        return _XIconifyWindow(display, window, screen_number);
                }
 
                [DllImport ("libX11", EntryPoint="XDefineCursor")]
                internal extern static int _XDefineCursor(IntPtr display, IntPtr window, IntPtr cursor);
-               internal static int XDefineCursor(IntPtr display, IntPtr window, IntPtr cursor) {
+               internal static int XDefineCursor(IntPtr display, IntPtr window, IntPtr cursor)
+               {
                        DebugHelper.TraceWriteLine ("XDefineCursor");
                        return _XDefineCursor(display, window, cursor);
                }
 
                [DllImport ("libX11", EntryPoint="XUndefineCursor")]
                internal extern static int _XUndefineCursor(IntPtr display, IntPtr window);
-               internal static int XUndefineCursor(IntPtr display, IntPtr window) {
+               internal static int XUndefineCursor(IntPtr display, IntPtr window)
+               {
                        DebugHelper.TraceWriteLine ("XUndefineCursor");
                        return _XUndefineCursor(display, window);
                }
 
                [DllImport ("libX11", EntryPoint="XFreeCursor")]
                internal extern static int _XFreeCursor(IntPtr display, IntPtr cursor);
-               internal static int XFreeCursor(IntPtr display, IntPtr cursor) {
+               internal static int XFreeCursor(IntPtr display, IntPtr cursor)
+               {
                        DebugHelper.TraceWriteLine ("XFreeCursor");
                        return _XFreeCursor(display, cursor);
                }
 
                [DllImport ("libX11", EntryPoint="XCreateFontCursor")]
                internal extern static IntPtr _XCreateFontCursor(IntPtr display, CursorFontShape shape);
-               internal static IntPtr XCreateFontCursor(IntPtr display, CursorFontShape shape) {
+               internal static IntPtr XCreateFontCursor(IntPtr display, CursorFontShape shape)
+               {
                        DebugHelper.TraceWriteLine ("XCreateFontCursor");
                        return _XCreateFontCursor(display, shape);
                }
 
                [DllImport ("libX11", EntryPoint="XCreatePixmapCursor")]
                internal extern static IntPtr _XCreatePixmapCursor(IntPtr display, IntPtr source, IntPtr mask, ref XColor foreground_color, ref XColor background_color, int x_hot, int y_hot);
-               internal static IntPtr XCreatePixmapCursor(IntPtr display, IntPtr source, IntPtr mask, ref XColor foreground_color, ref XColor background_color, int x_hot, int y_hot) {
+               internal static IntPtr XCreatePixmapCursor(IntPtr display, IntPtr source, IntPtr mask, ref XColor foreground_color, ref XColor background_color, int x_hot, int y_hot)
+               {
                        DebugHelper.TraceWriteLine ("XCreatePixmapCursor");
                        return _XCreatePixmapCursor(display, source, mask, ref foreground_color, ref background_color, x_hot, y_hot);
                }
 
                [DllImport ("libX11", EntryPoint="XCreatePixmapFromBitmapData")]
                internal extern static IntPtr _XCreatePixmapFromBitmapData(IntPtr display, IntPtr drawable, byte[] data, int width, int height, IntPtr fg, IntPtr bg, int depth);
-               internal static IntPtr XCreatePixmapFromBitmapData(IntPtr display, IntPtr drawable, byte[] data, int width, int height, IntPtr fg, IntPtr bg, int depth) {
+               internal static IntPtr XCreatePixmapFromBitmapData(IntPtr display, IntPtr drawable, byte[] data, int width, int height, IntPtr fg, IntPtr bg, int depth)
+               {
                        DebugHelper.TraceWriteLine ("XCreatePixmapFromBitmapData");
                        return _XCreatePixmapFromBitmapData(display, drawable, data, width, height, fg, bg, depth);
                }
 
                [DllImport ("libX11", EntryPoint="XCreatePixmap")]
                internal extern static IntPtr _XCreatePixmap(IntPtr display, IntPtr d, int width, int height, int depth);
-               internal static IntPtr XCreatePixmap(IntPtr display, IntPtr d, int width, int height, int depth) {
+               internal static IntPtr XCreatePixmap(IntPtr display, IntPtr d, int width, int height, int depth)
+               {
                        DebugHelper.TraceWriteLine ("XCreatePixmap");
                        return _XCreatePixmap(display, d, width, height, depth);
                }
 
                [DllImport ("libX11", EntryPoint="XFreePixmap")]
                internal extern static IntPtr _XFreePixmap(IntPtr display, IntPtr pixmap);
-               internal static IntPtr XFreePixmap(IntPtr display, IntPtr pixmap) {
+               internal static IntPtr XFreePixmap(IntPtr display, IntPtr pixmap)
+               {
                        DebugHelper.TraceWriteLine ("XFreePixmap");
                        return _XFreePixmap(display, pixmap);
                }
 
                [DllImport ("libX11", EntryPoint="XQueryBestCursor")]
                internal extern static int _XQueryBestCursor(IntPtr display, IntPtr drawable, int width, int height, out int best_width, out int best_height);
-               internal static int XQueryBestCursor(IntPtr display, IntPtr drawable, int width, int height, out int best_width, out int best_height) {
+               internal static int XQueryBestCursor(IntPtr display, IntPtr drawable, int width, int height, out int best_width, out int best_height)
+               {
                        DebugHelper.TraceWriteLine ("XQueryBestCursor");
                        return _XQueryBestCursor(display, drawable, width, height, out best_width, out best_height);
                }
 
                [DllImport ("libX11", EntryPoint="XQueryExtension")]
                internal extern static int _XQueryExtension(IntPtr display, string extension_name, ref int major, ref int first_event, ref int first_error);
-               internal static int XQueryExtension(IntPtr display, string extension_name, ref int major, ref int first_event, ref int first_error) {
+               internal static int XQueryExtension(IntPtr display, string extension_name, ref int major, ref int first_event, ref int first_error)
+               {
                        DebugHelper.TraceWriteLine ("XQueryExtension");
                        return _XQueryExtension(display, extension_name, ref major, ref first_event, ref first_error);
                }
 
                [DllImport ("libX11", EntryPoint="XWhitePixel")]
                internal extern static IntPtr _XWhitePixel(IntPtr display, int screen_no);
-               internal static IntPtr XWhitePixel(IntPtr display, int screen_no) {
+               internal static IntPtr XWhitePixel(IntPtr display, int screen_no)
+               {
                        DebugHelper.TraceWriteLine ("XWhitePixel");
                        return _XWhitePixel(display, screen_no);
                }
 
                [DllImport ("libX11", EntryPoint="XBlackPixel")]
                internal extern static IntPtr _XBlackPixel(IntPtr display, int screen_no);
-               internal static IntPtr XBlackPixel(IntPtr display, int screen_no) {
+               internal static IntPtr XBlackPixel(IntPtr display, int screen_no)
+               {
                        DebugHelper.TraceWriteLine ("XBlackPixel");
                        return _XBlackPixel(display, screen_no);
                }
 
                [DllImport ("libX11", EntryPoint="XGrabServer")]
                internal extern static void _XGrabServer(IntPtr display);
-               internal static void XGrabServer(IntPtr display) {
+               internal static void XGrabServer(IntPtr display)
+               {
                        DebugHelper.TraceWriteLine ("XGrabServer");
                        _XGrabServer(display);
                }
 
                [DllImport ("libX11", EntryPoint="XUngrabServer")]
                internal extern static void _XUngrabServer(IntPtr display);
-               internal static void XUngrabServer(IntPtr display) {
+               internal static void XUngrabServer(IntPtr display)
+               {
                        DebugHelper.TraceWriteLine ("XUngrabServer");
                        _XUngrabServer(display);
                }
 
                [DllImport ("libX11", EntryPoint="XGetWMNormalHints")]
                internal extern static void _XGetWMNormalHints(IntPtr display, IntPtr window, ref XSizeHints hints, out IntPtr supplied_return);
-               internal static void XGetWMNormalHints(IntPtr display, IntPtr window, ref XSizeHints hints, out IntPtr supplied_return) {
+               internal static void XGetWMNormalHints(IntPtr display, IntPtr window, ref XSizeHints hints, out IntPtr supplied_return)
+               {
                        DebugHelper.TraceWriteLine ("XGetWMNormalHints");
                        _XGetWMNormalHints(display, window, ref hints, out supplied_return);
                }
 
                [DllImport ("libX11", EntryPoint="XSetWMNormalHints")]
                internal extern static void _XSetWMNormalHints(IntPtr display, IntPtr window, ref XSizeHints hints);
-               internal static void XSetWMNormalHints(IntPtr display, IntPtr window, ref XSizeHints hints) {
+               internal static void XSetWMNormalHints(IntPtr display, IntPtr window, ref XSizeHints hints)
+               {
                        DebugHelper.TraceWriteLine ("XSetWMNormalHints");
                        _XSetWMNormalHints(display, window, ref hints);
                }
 
                [DllImport ("libX11", EntryPoint="XSetZoomHints")]
                internal extern static void _XSetZoomHints(IntPtr display, IntPtr window, ref XSizeHints hints);
-               internal static void XSetZoomHints(IntPtr display, IntPtr window, ref XSizeHints hints) {
+               internal static void XSetZoomHints(IntPtr display, IntPtr window, ref XSizeHints hints)
+               {
                        DebugHelper.TraceWriteLine ("XSetZoomHints");
                        _XSetZoomHints(display, window, ref hints);
                }
 
                [DllImport ("libX11", EntryPoint="XSetWMHints")]
                internal extern static void _XSetWMHints(IntPtr display, IntPtr window, ref XWMHints wmhints);
-               internal static void XSetWMHints(IntPtr display, IntPtr window, ref XWMHints wmhints) {
+               internal static void XSetWMHints(IntPtr display, IntPtr window, ref XWMHints wmhints)
+               {
                        DebugHelper.TraceWriteLine ("XSetWMHints");
                        _XSetWMHints(display, window, ref wmhints);
                }
 
                [DllImport ("libX11", EntryPoint="XGetIconSizes")]
                internal extern static int _XGetIconSizes(IntPtr display, IntPtr window, out IntPtr size_list, out int count);
-               internal static int XGetIconSizes(IntPtr display, IntPtr window, out IntPtr size_list, out int count) {
+               internal static int XGetIconSizes(IntPtr display, IntPtr window, out IntPtr size_list, out int count)
+               {
                        DebugHelper.TraceWriteLine ("XGetIconSizes");
                        return _XGetIconSizes(display, window, out size_list, out count);
                }
 
                [DllImport ("libX11", EntryPoint="XSetErrorHandler")]
                internal extern static IntPtr _XSetErrorHandler(XErrorHandler error_handler);
-               internal static IntPtr XSetErrorHandler(XErrorHandler error_handler) {
+               internal static IntPtr XSetErrorHandler(XErrorHandler error_handler)
+               {
                        DebugHelper.TraceWriteLine ("XSetErrorHandler");
                        return _XSetErrorHandler(error_handler);
                }
 
                [DllImport ("libX11", EntryPoint="XGetErrorText")]
                internal extern static IntPtr _XGetErrorText(IntPtr display, byte code, StringBuilder buffer, int length);
-               internal static IntPtr XGetErrorText(IntPtr display, byte code, StringBuilder buffer, int length) {
+               internal static IntPtr XGetErrorText(IntPtr display, byte code, StringBuilder buffer, int length)
+               {
                        DebugHelper.TraceWriteLine ("XGetErrorText");
                        return _XGetErrorText(display, code, buffer, length);
                }
 
                [DllImport ("libX11", EntryPoint="XInitThreads")]
                internal extern static int _XInitThreads();
-               internal static int XInitThreads() {
+               internal static int XInitThreads()
+               {
                        DebugHelper.TraceWriteLine ("XInitThreads");
                        return _XInitThreads();
                }
 
                [DllImport ("libX11", EntryPoint="XConvertSelection")]
                internal extern static int _XConvertSelection(IntPtr display, IntPtr selection, IntPtr target, IntPtr property, IntPtr requestor, IntPtr time);
-               internal static int XConvertSelection(IntPtr display, IntPtr selection, IntPtr target, IntPtr property, IntPtr requestor, IntPtr time) {
+               internal static int XConvertSelection(IntPtr display, IntPtr selection, IntPtr target, IntPtr property, IntPtr requestor, IntPtr time)
+               {
                        DebugHelper.TraceWriteLine ("XConvertSelection");
                        return _XConvertSelection(display, selection, target, property, requestor, time);
                }
 
                [DllImport ("libX11", EntryPoint="XGetSelectionOwner")]
                internal extern static IntPtr _XGetSelectionOwner(IntPtr display, IntPtr selection);
-               internal static IntPtr XGetSelectionOwner(IntPtr display, IntPtr selection) {
+               internal static IntPtr XGetSelectionOwner(IntPtr display, IntPtr selection)
+               {
                        DebugHelper.TraceWriteLine ("XGetSelectionOwner");
                        return _XGetSelectionOwner(display, selection);
                }
 
                [DllImport ("libX11", EntryPoint="XSetSelectionOwner")]
                internal extern static int _XSetSelectionOwner(IntPtr display, IntPtr selection, IntPtr owner, IntPtr time);
-               internal static int XSetSelectionOwner(IntPtr display, IntPtr selection, IntPtr owner, IntPtr time) {
+               internal static int XSetSelectionOwner(IntPtr display, IntPtr selection, IntPtr owner, IntPtr time)
+               {
                        DebugHelper.TraceWriteLine ("XSetSelectionOwner");
                        return _XSetSelectionOwner(display, selection, owner, time);
                }
 
                [DllImport ("libX11", EntryPoint="XSetPlaneMask")]
                internal extern static int _XSetPlaneMask(IntPtr display, IntPtr gc, IntPtr mask);
-               internal static int XSetPlaneMask(IntPtr display, IntPtr gc, IntPtr mask) {
+               internal static int XSetPlaneMask(IntPtr display, IntPtr gc, IntPtr mask)
+               {
                        DebugHelper.TraceWriteLine ("XSetPlaneMask");
                        return _XSetPlaneMask(display, gc, mask);
                }
 
                [DllImport ("libX11", EntryPoint="XSetForeground")]
                internal extern static int _XSetForeground(IntPtr display, IntPtr gc, UIntPtr foreground);
-               internal static int XSetForeground(IntPtr display, IntPtr gc, UIntPtr foreground) {
+               internal static int XSetForeground(IntPtr display, IntPtr gc, UIntPtr foreground)
+               {
                        DebugHelper.TraceWriteLine ("XSetForeground");
                        return _XSetForeground(display, gc, foreground);
                }
 
                [DllImport ("libX11", EntryPoint="XSetBackground")]
                internal extern static int _XSetBackground(IntPtr display, IntPtr gc, UIntPtr background);
-               internal static int XSetBackground(IntPtr display, IntPtr gc, UIntPtr background) {
+               internal static int XSetBackground(IntPtr display, IntPtr gc, UIntPtr background)
+               {
                        DebugHelper.TraceWriteLine ("XSetBackground");
                        return _XSetBackground(display, gc, background);
                }
 
                [DllImport ("libX11", EntryPoint="XBell")]
                internal extern static int _XBell(IntPtr display, int percent);
-               internal static int XBell(IntPtr display, int percent) {
+               internal static int XBell(IntPtr display, int percent)
+               {
                        DebugHelper.TraceWriteLine ("XBell");
                        return _XBell(display, percent);
                }
 
                [DllImport ("libX11", EntryPoint="XChangeActivePointerGrab")]
                internal extern static int _XChangeActivePointerGrab (IntPtr display, EventMask event_mask, IntPtr cursor, IntPtr time);
-               internal static int XChangeActivePointerGrab (IntPtr display, EventMask event_mask, IntPtr cursor, IntPtr time) {
+               internal static int XChangeActivePointerGrab (IntPtr display, EventMask event_mask, IntPtr cursor, IntPtr time)
+               {
                        DebugHelper.TraceWriteLine ("XChangeActivePointerGrab");
                        return _XChangeActivePointerGrab (display, event_mask, cursor, time);
                }
 
                [DllImport ("libX11", EntryPoint="XFilterEvent")]
                internal extern static bool _XFilterEvent(ref XEvent xevent, IntPtr window);
-               internal static bool XFilterEvent(ref XEvent xevent, IntPtr window) {
+               internal static bool XFilterEvent(ref XEvent xevent, IntPtr window)
+               {
                        DebugHelper.TraceWriteLine ("XFilterEvent");
                        return _XFilterEvent(ref xevent, window);
                }
 
                [DllImport ("libX11", EntryPoint="XkbSetDetectableAutoRepeat")]
                internal extern static void _XkbSetDetectableAutoRepeat (IntPtr display, bool detectable, IntPtr supported);
-               internal static void XkbSetDetectableAutoRepeat (IntPtr display, bool detectable, IntPtr supported) {
+               internal static void XkbSetDetectableAutoRepeat (IntPtr display, bool detectable, IntPtr supported)
+               {
                        DebugHelper.TraceWriteLine ("XkbSetDetectableAutoRepeat");
                        _XkbSetDetectableAutoRepeat (display, detectable, supported);
                }
 
                [DllImport ("libX11", EntryPoint="XPeekEvent")]
                internal extern static void _XPeekEvent (IntPtr display, ref XEvent xevent);
-               internal static void XPeekEvent (IntPtr display, ref XEvent xevent) {
+               internal static void XPeekEvent (IntPtr display, ref XEvent xevent)
+               {
                        DebugHelper.TraceWriteLine ("XPeekEvent");
                        _XPeekEvent (display, ref xevent);
                }
 
                [DllImport ("libX11", EntryPoint="XIfEvent")]
                internal extern static void _XIfEvent (IntPtr display, ref XEvent xevent, Delegate event_predicate, IntPtr arg);
-               internal static void XIfEvent (IntPtr display, ref XEvent xevent, Delegate event_predicate, IntPtr arg) {
+               internal static void XIfEvent (IntPtr display, ref XEvent xevent, Delegate event_predicate, IntPtr arg)
+               {
                        DebugHelper.TraceWriteLine ("XIfEvent");
                        _XIfEvent (display, ref xevent, event_predicate, arg);
                }
 #endregion
 
+#region Xinerama imports
+               [DllImport ("libXinerama", EntryPoint="XineramaQueryScreens")]
+               extern static IntPtr _XineramaQueryScreens (IntPtr display, out int number);
+               internal static IntPtr XineramaQueryScreens (IntPtr display, out int number)
+               {
+                       DebugHelper.TraceWriteLine ("XineramaQueryScreens");
+                       return _XineramaQueryScreens (display, out number);
+               }
+
+               [DllImport ("libXinerama", EntryPoint="XineramaIsActive")]
+               extern static bool _XineramaIsActive (IntPtr display);
+               static bool XineramaNotInstalled;
+
+               internal static bool XineramaIsActive (IntPtr display)
+               {
+                       DebugHelper.TraceWriteLine ("XineramaIsActive");
+
+                       if (XineramaNotInstalled)
+                               return false;
+                       try {
+                               return _XineramaIsActive (display);
+                       } catch (DllNotFoundException) {
+                               // Xinerama isn't installed
+                               XineramaNotInstalled = true;
+                               return false;
+                       }
+               }
+#endregion
 
 #else //no TRACE defined
 
@@ -7011,6 +7325,9 @@ namespace System.Windows.Forms {
                [DllImport ("libX11", EntryPoint="XMapWindow")]
                internal extern static int XMapWindow(IntPtr display, IntPtr window);
                
+               [DllImport ("libX11", EntryPoint="XMapRaised")]
+               internal extern static int XMapRaised(IntPtr display, IntPtr window);
+               
                [DllImport ("libX11", EntryPoint="XUnmapWindow")]
                internal extern static int XUnmapWindow(IntPtr display, IntPtr window);
                
@@ -7321,7 +7638,47 @@ namespace System.Windows.Forms {
 
                [DllImport ("libX11", EntryPoint="XIfEvent")]
                internal extern static void XIfEvent (IntPtr display, ref XEvent xevent, Delegate event_predicate, IntPtr arg);
+
+               [DllImport ("libX11", EntryPoint="XGetInputFocus")]
+               internal extern static void XGetInputFocus (IntPtr display, out IntPtr focus, out IntPtr revert_to);
                #endregion
+#region Gtk/Gdk imports
+               [DllImport("libgdk-x11-2.0")]
+               internal extern static IntPtr gdk_atom_intern (string atomName, bool onlyIfExists);
+
+               [DllImport("libgtk-x11-2.0")]
+               internal extern static IntPtr gtk_clipboard_get (IntPtr atom);
+
+               [DllImport("libgtk-x11-2.0")]
+               internal extern static void gtk_clipboard_store (IntPtr clipboard);
+
+               [DllImport("libgtk-x11-2.0")]
+               internal extern static void gtk_clipboard_set_text (IntPtr clipboard, string text, int len);
+#endregion
+
+
+#region Xinerama imports
+               [DllImport ("libXinerama")]
+               internal extern static IntPtr XineramaQueryScreens (IntPtr display, out int number);
+
+               [DllImport ("libXinerama", EntryPoint = "XineramaIsActive")]
+               extern static bool _XineramaIsActive (IntPtr display);
+               static bool XineramaNotInstalled;
+
+               internal static bool XineramaIsActive (IntPtr display)
+               {
+                       if (XineramaNotInstalled)
+                               return false;
+                       try {
+                               return _XineramaIsActive (display);
+                       } catch (DllNotFoundException) {
+                               // Xinerama isn't installed
+                               XineramaNotInstalled = true;
+                               return false;
+                       }
+               }
+#endregion
+
 #endif
        }
 }