X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mcs%2Fclass%2FManaged.Windows.Forms%2FSystem.Windows.Forms%2FXplatUIX11.cs;h=be2966157251a3edacf74110190c667537623fb2;hb=e946a6cdebde729e1c03ec374184254ab38da184;hp=512dbafeaa6700d1b45036377063e31c7baad29d;hpb=1804709f3c84fae89e05a19faecc53805c3133d0;p=mono.git diff --git a/mcs/class/Managed.Windows.Forms/System.Windows.Forms/XplatUIX11.cs b/mcs/class/Managed.Windows.Forms/System.Windows.Forms/XplatUIX11.cs index 512dbafeaa6..be296615725 100644 --- a/mcs/class/Managed.Windows.Forms/System.Windows.Forms/XplatUIX11.cs +++ b/mcs/class/Managed.Windows.Forms/System.Windows.Forms/XplatUIX11.cs @@ -78,155 +78,155 @@ namespace System.Windows.Forms { #region Local Variables // General static volatile XplatUIX11 Instance; - private static int RefCount; - private static object XlibLock; // Our locking object - private static bool themes_enabled; + static int RefCount; + static object XlibLock; // Our locking object + static bool themes_enabled; // General X11 - private static IntPtr DisplayHandle; // X11 handle to display - private static int ScreenNo; // Screen number used - private static IntPtr DefaultColormap; // Colormap for screen - private static IntPtr CustomVisual; // Visual for window creation - private static IntPtr CustomColormap; // Colormap for window creation - private static IntPtr RootWindow; // Handle of the root window for the screen/display - private static IntPtr FosterParent; // Container to hold child windows until their parent exists - private static XErrorHandler ErrorHandler; // Error handler delegate - private static bool ErrorExceptions; // Throw exceptions on X errors - private int render_major_opcode; - private int render_first_event; - private int render_first_error; + static IntPtr DisplayHandle; // X11 handle to display + static int ScreenNo; // Screen number used + static IntPtr DefaultColormap; // Colormap for screen + static IntPtr CustomVisual; // Visual for window creation + static IntPtr CustomColormap; // Colormap for window creation + static IntPtr RootWindow; // Handle of the root window for the screen/display + static IntPtr FosterParent; // Container to hold child windows until their parent exists + static XErrorHandler ErrorHandler; // Error handler delegate + static bool ErrorExceptions; // Throw exceptions on X errors + int render_major_opcode; + int render_first_event; + int render_first_error; // Clipboard - private static IntPtr ClipMagic; - private static ClipboardData Clipboard; // Our clipboard + static IntPtr ClipMagic; + static ClipboardData Clipboard; // Our clipboard // Communication - private static IntPtr PostAtom; // PostMessage atom - private static IntPtr AsyncAtom; // Support for async messages + static IntPtr PostAtom; // PostMessage atom + static IntPtr AsyncAtom; // Support for async messages // Message Loop - private static Hashtable MessageQueues; // Holds our thread-specific XEventQueues - private static ArrayList unattached_timer_list; // holds timers that are enabled but not attached to a window. + static Hashtable MessageQueues; // Holds our thread-specific XEventQueues + static ArrayList unattached_timer_list; // holds timers that are enabled but not attached to a window. #if __MonoCS__ // - private static Pollfd[] pollfds; // For watching the X11 socket - private static bool wake_waiting; - private static object wake_waiting_lock = new object (); + static Pollfd[] pollfds; // For watching the X11 socket + static bool wake_waiting; + static object wake_waiting_lock = new object (); #endif // - private static X11Keyboard Keyboard; // - private static X11Dnd Dnd; - private static Socket listen; // - private static Socket wake; // - private static Socket wake_receive; // - private static byte[] network_buffer; // - private static bool detectable_key_auto_repeat; + static X11Keyboard Keyboard; // + static X11Dnd Dnd; + static Socket listen; // + static Socket wake; // + static Socket wake_receive; // + static byte[] network_buffer; // + static bool detectable_key_auto_repeat; // Focus tracking - private static IntPtr ActiveWindow; // Handle of the active window - private static IntPtr FocusWindow; // Handle of the window with keyboard focus (if any) + static IntPtr ActiveWindow; // Handle of the active window + static IntPtr FocusWindow; // Handle of the window with keyboard focus (if any) // Modality support - private static Stack ModalWindows; // Stack of our modal windows + static Stack ModalWindows; // Stack of our modal windows // Systray - private static IntPtr SystrayMgrWindow; // Handle of the Systray Manager window + static IntPtr SystrayMgrWindow; // Handle of the Systray Manager window // Cursors - private static IntPtr LastCursorWindow; // The last window we set the cursor on - private static IntPtr LastCursorHandle; // The handle that was last set on LastCursorWindow - private static IntPtr OverrideCursorHandle; // The cursor that is set to override any other cursors + static IntPtr LastCursorWindow; // The last window we set the cursor on + static IntPtr LastCursorHandle; // The handle that was last set on LastCursorWindow + static IntPtr OverrideCursorHandle; // The cursor that is set to override any other cursors // Caret - private static CaretStruct Caret; // + static CaretStruct Caret; // // Last window containing the pointer - private static IntPtr LastPointerWindow; // The last window containing the pointer + static IntPtr LastPointerWindow; // The last window containing the pointer // Our atoms - private static IntPtr WM_PROTOCOLS; - private static IntPtr WM_DELETE_WINDOW; - private static IntPtr WM_TAKE_FOCUS; - //private static IntPtr _NET_SUPPORTED; - //private static IntPtr _NET_CLIENT_LIST; - //private static IntPtr _NET_NUMBER_OF_DESKTOPS; - private static IntPtr _NET_DESKTOP_GEOMETRY; - //private static IntPtr _NET_DESKTOP_VIEWPORT; - private static IntPtr _NET_CURRENT_DESKTOP; - //private static IntPtr _NET_DESKTOP_NAMES; - private static IntPtr _NET_ACTIVE_WINDOW; - private static IntPtr _NET_WORKAREA; - //private static IntPtr _NET_SUPPORTING_WM_CHECK; - //private static IntPtr _NET_VIRTUAL_ROOTS; - //private static IntPtr _NET_DESKTOP_LAYOUT; - //private static IntPtr _NET_SHOWING_DESKTOP; - //private static IntPtr _NET_CLOSE_WINDOW; - //private static IntPtr _NET_MOVERESIZE_WINDOW; - //private static IntPtr _NET_WM_MOVERESIZE; - //private static IntPtr _NET_RESTACK_WINDOW; - //private static IntPtr _NET_REQUEST_FRAME_EXTENTS; - private static IntPtr _NET_WM_NAME; - //private static IntPtr _NET_WM_VISIBLE_NAME; - //private static IntPtr _NET_WM_ICON_NAME; - //private static IntPtr _NET_WM_VISIBLE_ICON_NAME; - //private static IntPtr _NET_WM_DESKTOP; - private static IntPtr _NET_WM_WINDOW_TYPE; - private static IntPtr _NET_WM_STATE; - //private static IntPtr _NET_WM_ALLOWED_ACTIONS; - //private static IntPtr _NET_WM_STRUT; - //private static IntPtr _NET_WM_STRUT_PARTIAL; - //private static IntPtr _NET_WM_ICON_GEOMETRY; - private static IntPtr _NET_WM_ICON; - //private static IntPtr _NET_WM_PID; - //private static IntPtr _NET_WM_HANDLED_ICONS; - private static IntPtr _NET_WM_USER_TIME; - private static IntPtr _NET_FRAME_EXTENTS; - //private static IntPtr _NET_WM_PING; - //private static IntPtr _NET_WM_SYNC_REQUEST; - private static IntPtr _NET_SYSTEM_TRAY_S; - //private static IntPtr _NET_SYSTEM_TRAY_ORIENTATION; - private static IntPtr _NET_SYSTEM_TRAY_OPCODE; - private static IntPtr _NET_WM_STATE_MAXIMIZED_HORZ; - private static IntPtr _NET_WM_STATE_MAXIMIZED_VERT; - private static IntPtr _XEMBED; - private static IntPtr _XEMBED_INFO; - private static IntPtr _MOTIF_WM_HINTS; - private static IntPtr _NET_WM_STATE_SKIP_TASKBAR; - private static IntPtr _NET_WM_STATE_ABOVE; - private static IntPtr _NET_WM_STATE_MODAL; - private static IntPtr _NET_WM_STATE_HIDDEN; - private static IntPtr _NET_WM_CONTEXT_HELP; - private static IntPtr _NET_WM_WINDOW_OPACITY; - //private static IntPtr _NET_WM_WINDOW_TYPE_DESKTOP; - //private static IntPtr _NET_WM_WINDOW_TYPE_DOCK; - //private static IntPtr _NET_WM_WINDOW_TYPE_TOOLBAR; - //private static IntPtr _NET_WM_WINDOW_TYPE_MENU; - private static IntPtr _NET_WM_WINDOW_TYPE_UTILITY; - //private static IntPtr _NET_WM_WINDOW_TYPE_SPLASH; - // private static IntPtr _NET_WM_WINDOW_TYPE_DIALOG; - private static IntPtr _NET_WM_WINDOW_TYPE_NORMAL; - private static IntPtr CLIPBOARD; - private static IntPtr PRIMARY; - //private static IntPtr DIB; - private static IntPtr OEMTEXT; - private static IntPtr UTF8_STRING; - private static IntPtr UTF16_STRING; - private static IntPtr RICHTEXTFORMAT; - private static IntPtr TARGETS; + static IntPtr WM_PROTOCOLS; + static IntPtr WM_DELETE_WINDOW; + static IntPtr WM_TAKE_FOCUS; + //static IntPtr _NET_SUPPORTED; + //static IntPtr _NET_CLIENT_LIST; + //static IntPtr _NET_NUMBER_OF_DESKTOPS; + static IntPtr _NET_DESKTOP_GEOMETRY; + //static IntPtr _NET_DESKTOP_VIEWPORT; + static IntPtr _NET_CURRENT_DESKTOP; + //static IntPtr _NET_DESKTOP_NAMES; + static IntPtr _NET_ACTIVE_WINDOW; + static IntPtr _NET_WORKAREA; + //static IntPtr _NET_SUPPORTING_WM_CHECK; + //static IntPtr _NET_VIRTUAL_ROOTS; + //static IntPtr _NET_DESKTOP_LAYOUT; + //static IntPtr _NET_SHOWING_DESKTOP; + //static IntPtr _NET_CLOSE_WINDOW; + //static IntPtr _NET_MOVERESIZE_WINDOW; + static IntPtr _NET_WM_MOVERESIZE; + //static IntPtr _NET_RESTACK_WINDOW; + //static IntPtr _NET_REQUEST_FRAME_EXTENTS; + static IntPtr _NET_WM_NAME; + //static IntPtr _NET_WM_VISIBLE_NAME; + //static IntPtr _NET_WM_ICON_NAME; + //static IntPtr _NET_WM_VISIBLE_ICON_NAME; + //static IntPtr _NET_WM_DESKTOP; + static IntPtr _NET_WM_WINDOW_TYPE; + static IntPtr _NET_WM_STATE; + //static IntPtr _NET_WM_ALLOWED_ACTIONS; + //static IntPtr _NET_WM_STRUT; + //static IntPtr _NET_WM_STRUT_PARTIAL; + //static IntPtr _NET_WM_ICON_GEOMETRY; + static IntPtr _NET_WM_ICON; + //static IntPtr _NET_WM_PID; + //static IntPtr _NET_WM_HANDLED_ICONS; + static IntPtr _NET_WM_USER_TIME; + static IntPtr _NET_FRAME_EXTENTS; + //static IntPtr _NET_WM_PING; + //static IntPtr _NET_WM_SYNC_REQUEST; + static IntPtr _NET_SYSTEM_TRAY_S; + //static IntPtr _NET_SYSTEM_TRAY_ORIENTATION; + static IntPtr _NET_SYSTEM_TRAY_OPCODE; + static IntPtr _NET_WM_STATE_MAXIMIZED_HORZ; + static IntPtr _NET_WM_STATE_MAXIMIZED_VERT; + static IntPtr _XEMBED; + static IntPtr _XEMBED_INFO; + static IntPtr _MOTIF_WM_HINTS; + static IntPtr _NET_WM_STATE_SKIP_TASKBAR; + static IntPtr _NET_WM_STATE_ABOVE; + static IntPtr _NET_WM_STATE_MODAL; + static IntPtr _NET_WM_STATE_HIDDEN; + static IntPtr _NET_WM_CONTEXT_HELP; + static IntPtr _NET_WM_WINDOW_OPACITY; + //static IntPtr _NET_WM_WINDOW_TYPE_DESKTOP; + //static IntPtr _NET_WM_WINDOW_TYPE_DOCK; + //static IntPtr _NET_WM_WINDOW_TYPE_TOOLBAR; + //static IntPtr _NET_WM_WINDOW_TYPE_MENU; + static IntPtr _NET_WM_WINDOW_TYPE_UTILITY; + //static IntPtr _NET_WM_WINDOW_TYPE_SPLASH; + // static IntPtr _NET_WM_WINDOW_TYPE_DIALOG; + static IntPtr _NET_WM_WINDOW_TYPE_NORMAL; + static IntPtr CLIPBOARD; + static IntPtr PRIMARY; + //static IntPtr DIB; + static IntPtr OEMTEXT; + static IntPtr UTF8_STRING; + static IntPtr UTF16_STRING; + static IntPtr RICHTEXTFORMAT; + static IntPtr TARGETS; // mouse hover message generation - private static HoverStruct HoverState; // + static HoverStruct HoverState; // // double click message generation - private static ClickStruct ClickPending; // + static ClickStruct ClickPending; // // Support for mouse grab - private static GrabStruct Grab; // + static GrabStruct Grab; // // State Point mouse_position; // Last position of mouse, in screen coords internal static MouseButtons MouseState; // Last state of mouse buttons internal static bool in_doevents; // 'Constants' - private static int DoubleClickInterval; // msec; max interval between clicks to count as double click + static int DoubleClickInterval; // msec; max interval between clicks to count as double click const EventMask SelectInputMask = (EventMask.ButtonPressMask | EventMask.ButtonReleaseMask | @@ -247,7 +247,8 @@ namespace System.Windows.Forms { #endregion // Local Variables #region Constructors - private XplatUIX11() { + XplatUIX11() + { // Handle singleton stuff first RefCount = 0; in_doevents = false; @@ -425,7 +426,8 @@ namespace System.Windows.Forms { #endregion // XExceptionClass #region Internal Methods - internal void SetDisplay(IntPtr display_handle) { + internal void SetDisplay(IntPtr display_handle) + { if (display_handle != IntPtr.Zero) { Hwnd hwnd; @@ -497,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__ @@ -549,14 +557,20 @@ namespace System.Windows.Forms { } #endregion // Internal Methods - #region Private Methods - private int unixtime() { + #region Methods + [Conditional ("DriverDebug")] + static void DriverDebug (string format, params object [] args) + { + Console.WriteLine (String.Format (format, args)); + } + + int unixtime() { TimeSpan t = (DateTime.UtcNow - new DateTime(1970, 1, 1)); return (int) t.TotalSeconds; } - private static void SetupAtoms() { + static void SetupAtoms() { // make sure this array stays in sync with the statements below string [] atom_names = new string[] { "WM_PROTOCOLS", @@ -577,7 +591,7 @@ namespace System.Windows.Forms { //"_NET_SHOWING_DESKTOP", //"_NET_CLOSE_WINDOW", //"_NET_MOVERESIZE_WINDOW", - //"_NET_WM_MOVERESIZE", + "_NET_WM_MOVERESIZE", //"_NET_RESTACK_WINDOW", //"_NET_REQUEST_FRAME_EXTENTS", "_NET_WM_NAME", @@ -653,7 +667,7 @@ namespace System.Windows.Forms { //_NET_SHOWING_DESKTOP = atoms [off++]; //_NET_CLOSE_WINDOW = atoms [off++]; //_NET_MOVERESIZE_WINDOW = atoms [off++]; - //_NET_WM_MOVERESIZE = atoms [off++]; + _NET_WM_MOVERESIZE = atoms [off++]; //_NET_RESTACK_WINDOW = atoms [off++]; //_NET_REQUEST_FRAME_EXTENTS = atoms [off++]; _NET_WM_NAME = atoms [off++]; @@ -710,14 +724,18 @@ namespace System.Windows.Forms { _NET_SYSTEM_TRAY_S = XInternAtom (DisplayHandle, "_NET_SYSTEM_TRAY_S" + ScreenNo.ToString(), false); } - private void GetSystrayManagerWindow() { + void GetSystrayManagerWindow() { XGrabServer(DisplayHandle); SystrayMgrWindow = XGetSelectionOwner(DisplayHandle, _NET_SYSTEM_TRAY_S); XUngrabServer(DisplayHandle); XFlush(DisplayHandle); } - private void SendNetWMMessage(IntPtr window, IntPtr message_type, IntPtr l0, IntPtr l1, IntPtr l2) { + void SendNetWMMessage(IntPtr window, IntPtr message_type, IntPtr l0, IntPtr l1, IntPtr l2) { + SendNetWMMessage (window, message_type, l0, l1, l2, IntPtr.Zero); + } + + void SendNetWMMessage(IntPtr window, IntPtr message_type, IntPtr l0, IntPtr l1, IntPtr l2, IntPtr l3) { XEvent xev; xev = new XEvent(); @@ -729,10 +747,11 @@ namespace System.Windows.Forms { xev.ClientMessageEvent.ptr1 = l0; xev.ClientMessageEvent.ptr2 = l1; xev.ClientMessageEvent.ptr3 = l2; + xev.ClientMessageEvent.ptr4 = l3; XSendEvent(DisplayHandle, RootWindow, false, new IntPtr ((int) (EventMask.SubstructureRedirectMask | EventMask.SubstructureNotifyMask)), ref xev); } - private void SendNetClientMessage(IntPtr window, IntPtr message_type, IntPtr l0, IntPtr l1, IntPtr l2) { + void SendNetClientMessage(IntPtr window, IntPtr message_type, IntPtr l0, IntPtr l1, IntPtr l2) { XEvent xev; xev = new XEvent(); @@ -904,7 +923,7 @@ namespace System.Windows.Forms { return new Point (x, y); } - private void DeriveStyles(int Style, int ExStyle, out FormBorderStyle border_style, out bool border_static, out TitleStyle title_style, out int caption_height, out int tool_caption_height) { + void DeriveStyles(int Style, int ExStyle, out FormBorderStyle border_style, out bool border_static, out TitleStyle title_style, out int caption_height, out int tool_caption_height) { caption_height = 0; tool_caption_height = 19; @@ -984,11 +1003,11 @@ namespace System.Windows.Forms { } } - private void SetHwndStyles(Hwnd hwnd, CreateParams cp) { + void SetHwndStyles(Hwnd hwnd, CreateParams cp) { DeriveStyles(cp.Style, cp.ExStyle, out hwnd.border_style, out hwnd.border_static, out hwnd.title_style, out hwnd.caption_height, out hwnd.tool_caption_height); } - private void SetWMStyles(Hwnd hwnd, CreateParams cp) { + void SetWMStyles(Hwnd hwnd, CreateParams cp) { MotifWmHints mwmHints; MotifFunctions functions; MotifDecorations decorations; @@ -1093,9 +1112,7 @@ namespace System.Windows.Forms { mwmHints.functions = (IntPtr)functions; mwmHints.decorations = (IntPtr)decorations; -#if debug - Console.WriteLine ("SetWMStyles ({0}, {1}) functions = {2}, decorations = {3}", hwnd, cp, functions, decorations); -#endif + DriverDebug ("SetWMStyles ({0}, {1}) functions = {2}, decorations = {3}", hwnd, cp, functions, decorations); if (cp.IsSet (WindowExStyles.WS_EX_TOOLWINDOW)) { // needed! map toolwindows to _NET_WM_WINDOW_TYPE_UTILITY to make newer metacity versions happy @@ -1179,7 +1196,7 @@ namespace System.Windows.Forms { } } - private void SetIcon(Hwnd hwnd, Icon icon) + void SetIcon(Hwnd hwnd, Icon icon) { if (icon == null) { // XXX @@ -1218,11 +1235,17 @@ namespace System.Windows.Forms { } } - private void WakeupMain () { - wake.Send (new byte [] { 0xFF }); + void WakeupMain () { + try { + wake.Send (new byte [] { 0xFF }); + } catch (SocketException ex) { + if (ex.SocketErrorCode != SocketError.WouldBlock) { + throw; + } + } } - private XEventQueue ThreadQueue(Thread thread) { + XEventQueue ThreadQueue(Thread thread) { XEventQueue queue; queue = (XEventQueue)MessageQueues[thread]; @@ -1234,7 +1257,7 @@ namespace System.Windows.Forms { return queue; } - private void TranslatePropertyToClipboard(IntPtr property) { + void TranslatePropertyToClipboard(IntPtr property) { IntPtr actual_atom; int actual_format; IntPtr nitems; @@ -1247,13 +1270,26 @@ namespace System.Windows.Forms { if ((long)nitems > 0) { if (property == (IntPtr)Atom.XA_STRING) { - Clipboard.Item = Marshal.PtrToStringAnsi(prop); + // 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 (s); } else if (property == (IntPtr)Atom.XA_BITMAP) { // FIXME - convert bitmap to image } else if (property == (IntPtr)Atom.XA_PIXMAP) { // FIXME - convert pixmap to image } else if (property == OEMTEXT) { - Clipboard.Item = Marshal.PtrToStringAnsi(prop); + Clipboard.Item = UnescapeUnicodeFromAnsi (Marshal.PtrToStringAnsi(prop)); } else if (property == UTF8_STRING) { byte [] buffer = new byte [(int)nitems]; for (int i = 0; i < (int)nitems; i++) @@ -1280,7 +1316,54 @@ namespace System.Windows.Forms { } } - private void AddExpose (Hwnd hwnd, bool client, int x, int y, int width, int height) { + string UnescapeUnicodeFromAnsi (string value) + { + if (value == null || value.IndexOf ("\\u") == -1) + return value; + + StringBuilder sb = new StringBuilder (value.Length); + int start, pos; + + start = pos = 0; + while (start < value.Length) { + pos = value.IndexOf ("\\u", start); + if (pos == -1) + break; + + sb.Append (value, start, pos - start); + pos += 2; + start = pos; + + int length = 0; + while (pos < value.Length) { + if (!ValidHexDigit (value [pos])) + break; + length++; + pos++; + } + + int res; + if (!Int32.TryParse (value.Substring (start, length), System.Globalization.NumberStyles.HexNumber, + null, out res)) + return value; // Error, return the unescaped original value. + + sb.Append ((char)res); + start = pos; + } + + // Append any remaining data. + if (start < value.Length) + sb.Append (value, start, value.Length - start); + + 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)) { return; @@ -1315,7 +1398,7 @@ namespace System.Windows.Forms { } } - private static Hwnd.Borders FrameExtents (IntPtr window) + static Hwnd.Borders FrameExtents (IntPtr window) { IntPtr actual_atom; int actual_format; @@ -1338,7 +1421,7 @@ namespace System.Windows.Forms { return rect; } - private void AddConfigureNotify (XEvent xevent) { + void AddConfigureNotify (XEvent xevent) { Hwnd hwnd; hwnd = Hwnd.GetObjectFromWindow(xevent.ConfigureEvent.window); @@ -1368,9 +1451,9 @@ namespace System.Windows.Forms { hwnd.height = TranslatedSize.Height; hwnd.ClientRect = Rectangle.Empty; -#if debug - Console.WriteLine ("AddConfigureNotify (hwnd.Handle = {1}, final hwnd.rect = {0}, reported rect={2})", new Rectangle (hwnd.x, hwnd.y, hwnd.width, hwnd.height), hwnd.Handle, new Rectangle (xevent.ConfigureEvent.x, xevent.ConfigureEvent.y, xevent.ConfigureEvent.width, xevent.ConfigureEvent.width)); -#endif + DriverDebug ("AddConfigureNotify (hwnd.Handle = {1}, final hwnd.rect = {0}, reported rect={2})", + new Rectangle (hwnd.x, hwnd.y, hwnd.width, hwnd.height), hwnd.Handle, + new Rectangle (xevent.ConfigureEvent.x, xevent.ConfigureEvent.y, xevent.ConfigureEvent.width, xevent.ConfigureEvent.width)); lock (hwnd.configure_lock) { if (!hwnd.configure_pending) { hwnd.Queue.EnqueueLocked (xevent); @@ -1381,7 +1464,7 @@ namespace System.Windows.Forms { // We drop configure events for Client windows } - private void ShowCaret() { + void ShowCaret() { if ((Caret.gc == IntPtr.Zero) || Caret.On) { return; } @@ -1392,7 +1475,7 @@ namespace System.Windows.Forms { } } - private void HideCaret() { + void HideCaret() { if ((Caret.gc == IntPtr.Zero) || !Caret.On) { return; } @@ -1403,7 +1486,7 @@ namespace System.Windows.Forms { } } - private int NextTimeout (ArrayList timers, DateTime now) { + int NextTimeout (ArrayList timers, DateTime now) { int timeout = 0; foreach (Timer timer in timers) { @@ -1425,7 +1508,7 @@ namespace System.Windows.Forms { return timeout; } - private void CheckTimers (ArrayList timers, DateTime now) { + void CheckTimers (ArrayList timers, DateTime now) { int count; count = timers.Count; @@ -1456,12 +1539,12 @@ namespace System.Windows.Forms { } } - private void WaitForHwndMessage (Hwnd hwnd, Msg message) { + void WaitForHwndMessage (Hwnd hwnd, Msg message) { WaitForHwndMessage (hwnd, message, false); } - private void WaitForHwndMessage (Hwnd hwnd, Msg message, bool process) { + void WaitForHwndMessage (Hwnd hwnd, Msg message, bool process) { MSG msg = new MSG (); XEventQueue queue; @@ -1520,7 +1603,7 @@ namespace System.Windows.Forms { } - private void MapWindow(Hwnd hwnd, WindowType windows) { + void MapWindow(Hwnd hwnd, WindowType windows) { if (!hwnd.mapped) { Form f = Control.FromHandle(hwnd.Handle) as Form; if (f != null) { @@ -1536,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; @@ -1558,7 +1653,7 @@ namespace System.Windows.Forms { } } - private void UnmapWindow(Hwnd hwnd, WindowType windows) { + void UnmapWindow(Hwnd hwnd, WindowType windows) { if (hwnd.mapped) { Form f = null; if (Control.FromHandle(hwnd.Handle) is Form) { @@ -1598,7 +1693,11 @@ namespace System.Windows.Forms { } } - private void UpdateMessageQueue (XEventQueue queue) { + void UpdateMessageQueue (XEventQueue queue) { + UpdateMessageQueue(queue, true); + } + + void UpdateMessageQueue (XEventQueue queue, bool allowIdle) { DateTime now; int pending; Hwnd hwnd; @@ -1609,7 +1708,7 @@ namespace System.Windows.Forms { pending = XPending (DisplayHandle); } - if (pending == 0) { + if (pending == 0 && allowIdle) { if ((queue == null || queue.DispatchIdle) && Idle != null) { Idle (this, EventArgs.Empty); } @@ -1685,11 +1784,8 @@ namespace System.Windows.Forms { if (hwnd == null) continue; -#if debug - Console.WriteLine ("UpdateMessageQueue (), got Event: {0}", xevent.ToString ()); -#else DebugHelper.WriteLine ("UpdateMessageQueue got Event: " + xevent.ToString ()); -#endif + switch (xevent.type) { case XEventName.Expose: AddExpose (hwnd, xevent.ExposeEvent.window == hwnd.ClientWindow, xevent.ExposeEvent.x, xevent.ExposeEvent.y, xevent.ExposeEvent.width, xevent.ExposeEvent.height); @@ -1832,9 +1928,7 @@ namespace System.Windows.Forms { XDeleteProperty(DisplayHandle, FosterParent, (IntPtr)xevent.SelectionEvent.property); if (!Clipboard.Formats.Contains(xevent.SelectionEvent.property)) { Clipboard.Formats.Add(xevent.SelectionEvent.property); - #if DriverDebugExtra - Console.WriteLine("Got supported clipboard atom format: {0}", xevent.SelectionEvent.property); - #endif + DriverDebug("Got supported clipboard atom format: {0}", xevent.SelectionEvent.property); } } } else if (Clipboard.Retrieving) { @@ -1903,9 +1997,7 @@ namespace System.Windows.Forms { break; case XEventName.PropertyNotify: -#if debug - Console.WriteLine ("UpdateMessageQueue (), got Event: {0}", xevent.ToString ()); -#endif + DriverDebug ("UpdateMessageQueue (), got Event: {0}", xevent.ToString ()); if (xevent.PropertyEvent.atom == _NET_ACTIVE_WINDOW) { IntPtr actual_atom; int actual_format; @@ -1968,7 +2060,7 @@ namespace System.Windows.Forms { } } - private IntPtr GetMousewParam(int Delta) { + IntPtr GetMousewParam(int Delta) { int result = 0; if ((MouseState & MouseButtons.Left) != 0) { @@ -1996,7 +2088,7 @@ namespace System.Windows.Forms { return (IntPtr)result; } - private IntPtr XGetParent(IntPtr handle) { + IntPtr XGetParent(IntPtr handle) { IntPtr Root; IntPtr Parent; IntPtr Children; @@ -2014,7 +2106,7 @@ namespace System.Windows.Forms { return Parent; } - private int HandleError (IntPtr display, ref XErrorEvent error_event) + int HandleError (IntPtr display, ref XErrorEvent error_event) { // we need to workaround a problem with the // ordering of destruction of Drawables and @@ -2041,7 +2133,7 @@ namespace System.Windows.Forms { return 0; } - private void AccumulateDestroyedHandles (Control c, ArrayList list) + void AccumulateDestroyedHandles (Control c, ArrayList list) { DebugHelper.Enter (); if (c != null) { @@ -2053,10 +2145,8 @@ namespace System.Windows.Forms { if (c.IsHandleCreated && !c.IsDisposed) { Hwnd hwnd = Hwnd.ObjectFromHandle(c.Handle); - #if DriverDebug || DriverDebugDestroy - Console.WriteLine (" + adding {0} to the list of zombie windows", XplatUI.Window (hwnd.Handle)); - Console.WriteLine (" + parent X window is {0:X}", XGetParent (hwnd.whole_window).ToInt32()); - #endif + DriverDebug (" + adding {0} to the list of zombie windows", XplatUI.Window (hwnd.Handle)); + DriverDebug (" + parent X window is {0:X}", XGetParent (hwnd.whole_window).ToInt32()); list.Add (hwnd); CleanupCachedWindows (hwnd); @@ -2089,7 +2179,7 @@ namespace System.Windows.Forms { DestroyCaret (hwnd.Handle); } - private void PerformNCCalc(Hwnd hwnd) { + void PerformNCCalc(Hwnd hwnd) { XplatUIWin32.NCCALCSIZE_PARAMS ncp; IntPtr ptr; Rectangle rect; @@ -2121,10 +2211,10 @@ namespace System.Windows.Forms { AddExpose (hwnd, hwnd.WholeWindow == hwnd.ClientWindow, 0, 0, hwnd.Width, hwnd.Height); } - #endregion // Private Methods + #endregion // Methods #region Callbacks - private void MouseHover(object sender, EventArgs e) { + void MouseHover(object sender, EventArgs e) { XEvent xevent; Hwnd hwnd; @@ -2149,7 +2239,7 @@ namespace System.Windows.Forms { } } - private void CaretCallback(object sender, EventArgs e) { + void CaretCallback(object sender, EventArgs e) { if (Caret.Paused) { return; } @@ -2481,7 +2571,7 @@ namespace System.Windows.Forms { XFree(prop); XGetWindowProperty(DisplayHandle, RootWindow, _NET_WORKAREA, IntPtr.Zero, new IntPtr (256), false, (IntPtr)Atom.XA_CARDINAL, out actual_atom, out actual_format, out nitems, out bytes_after, ref prop); - if ((long)nitems < 4 * current_desktop) { + if ((long)nitems < 4 * (current_desktop + 1)) { goto failsafe; } @@ -2520,7 +2610,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)); @@ -2529,7 +2620,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); @@ -2538,12 +2630,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); @@ -2570,13 +2664,15 @@ namespace System.Windows.Forms { } } - internal override void AudibleAlert() { + 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) { @@ -2592,12 +2688,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; @@ -2613,7 +2711,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; @@ -2630,7 +2729,7 @@ namespace System.Windows.Forms { Clipboard.Enumerating = true; while (Clipboard.Enumerating) { - UpdateMessageQueue(null); + UpdateMessageQueue(null, false); } f = f.Next; } @@ -2645,14 +2744,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"); } @@ -2678,7 +2779,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 @@ -2686,27 +2788,48 @@ 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; while (Clipboard.Retrieving) { - UpdateMessageQueue(null); + UpdateMessageQueue(null, false); } 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); } } @@ -2841,9 +2964,7 @@ namespace System.Windows.Forms { hwnd.WholeWindow = WholeWindow; hwnd.ClientWindow = ClientWindow; - #if DriverDebug || DriverDebugCreate - Console.WriteLine("Created window {0:X} / {1:X} parent {2:X}, Style {3}, ExStyle {4}", ClientWindow.ToInt32(), WholeWindow.ToInt32(), hwnd.parent != null ? hwnd.parent.Handle.ToInt32() : 0, (WindowStyles)cp.Style, (WindowExStyles)cp.ExStyle); - #endif + DriverDebug("Created window {0:X} / {1:X} parent {2:X}, Style {3}, ExStyle {4}", ClientWindow.ToInt32(), WholeWindow.ToInt32(), hwnd.parent != null ? hwnd.parent.Handle.ToInt32() : 0, (WindowStyles)cp.Style, (WindowExStyles)cp.ExStyle); if (!StyleSet (cp.Style, WindowStyles.WS_CHILD)) { if ((X != unchecked((int)0x80000000)) && (Y != unchecked((int)0x80000000))) { @@ -2863,13 +2984,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); @@ -2915,7 +3031,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 = ""; @@ -2924,7 +3041,7 @@ namespace System.Windows.Forms { create_params.Width = Width; create_params.Height = Height; - create_params.ClassName=XplatUI.DefaultClassName; + create_params.ClassName=XplatUI.GetDefaultClassName (GetType ()); create_params.ClassStyle = 0; create_params.ExStyle=0; create_params.Parent=IntPtr.Zero; @@ -2933,7 +3050,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; @@ -3020,7 +3138,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; @@ -3033,26 +3152,20 @@ namespace System.Windows.Forms { size = XcursorGetDefaultSize (DisplayHandle); theme = XcursorGetTheme (DisplayHandle); IntPtr images_ptr = XcursorLibraryLoadImages (name, theme, size); -#if debug - Console.WriteLine ("DefineStdCursorBitmap, id={0}, #id={1}, name{2}, size={3}, theme: {4}, images_ptr={5}", id, (int) id, name, size, Marshal.PtrToStringAnsi (theme), images_ptr); -#endif + DriverDebug ("DefineStdCursorBitmap, id={0}, #id={1}, name{2}, size={3}, theme: {4}, images_ptr={5}", id, (int) id, name, size, Marshal.PtrToStringAnsi (theme), images_ptr); if (images_ptr == IntPtr.Zero) { return null; } XcursorImages images = (XcursorImages) Marshal.PtrToStructure (images_ptr, typeof (XcursorImages)); -#if debug - Console.WriteLine ("DefineStdCursorBitmap, cursor has {0} images", images.nimage); -#endif + DriverDebug ("DefineStdCursorBitmap, cursor has {0} images", images.nimage); if (images.nimage > 0) { // We only care about the first image. XcursorImage image = (XcursorImage)Marshal.PtrToStructure (Marshal.ReadIntPtr (images.images), typeof (XcursorImage)); -#if debug - Console.WriteLine ("DefineStdCursorBitmap, loaded image > 16) == (int)Msg.WM_LBUTTONDOWN) { - AudibleAlert(); + AudibleAlert(AlertType.Default); } handle = Cursors.Default.handle; break; @@ -3394,7 +3510,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 (); @@ -3410,13 +3527,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); @@ -3424,15 +3543,11 @@ namespace System.Windows.Forms { // wait until it's completely dead before returning from // "destroying" calls, but just in case.... if (hwnd == null || hwnd.zombie) { - #if DriverDebug || DriverDebugDestroy - Console.WriteLine("window {0:X} already destroyed", handle.ToInt32()); - #endif + DriverDebug ("window {0:X} already destroyed", handle.ToInt32()); return; } - #if DriverDebug || DriverDebugDestroy - Console.WriteLine("Destroying window {0}", XplatUI.Window(hwnd.client_window)); - #endif + DriverDebug ("Destroying window {0}", XplatUI.Window(hwnd.client_window)); SendParentNotify (hwnd.Handle, Msg.WM_DESTROY, int.MaxValue, int.MaxValue); @@ -3450,16 +3565,12 @@ namespace System.Windows.Forms { lock (XlibLock) { if (hwnd.whole_window != IntPtr.Zero) { - #if DriverDebug || DriverDebugDestroy - Console.WriteLine ("XDestroyWindow (whole_window = {0:X})", hwnd.whole_window.ToInt32()); - #endif + DriverDebug ("XDestroyWindow (whole_window = {0:X})", hwnd.whole_window.ToInt32()); Keyboard.DestroyICForWindow (hwnd.whole_window); XDestroyWindow(DisplayHandle, hwnd.whole_window); } else if (hwnd.client_window != IntPtr.Zero) { - #if DriverDebug || DriverDebugDestroy - Console.WriteLine ("XDestroyWindow (client_window = {0:X})", hwnd.client_window.ToInt32()); - #endif + DriverDebug ("XDestroyWindow (client_window = {0:X})", hwnd.client_window.ToInt32()); Keyboard.DestroyICForWindow (hwnd.client_window); XDestroyWindow(DisplayHandle, hwnd.client_window); } @@ -3467,7 +3578,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); } @@ -3632,7 +3744,8 @@ namespace System.Windows.Forms { XFreeGC(DisplayHandle, gc); } - internal override void DoEvents() { + internal override void DoEvents() + { DebugHelper.Enter (); MSG msg = new MSG (); @@ -3669,7 +3782,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); @@ -3678,11 +3792,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; @@ -3694,6 +3810,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) { @@ -3709,7 +3829,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); @@ -3720,14 +3841,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) { @@ -3738,7 +3861,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."; @@ -3750,7 +3874,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); @@ -3761,11 +3886,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; @@ -3794,19 +3921,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); @@ -3818,7 +3948,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; @@ -3866,9 +3997,7 @@ namespace System.Windows.Forms { // client_window, and that'll result in BadWindow errors if there's some lag // between the XDestroyWindow call and the DestroyNotify event. if (hwnd == null || hwnd.zombie && xevent.AnyEvent.type != XEventName.ClientMessage) { - #if DriverDebug || DriverDebugDestroy - Console.WriteLine("GetMessage(): Got message {0} for non-existent or already destroyed window {1:X}", xevent.type, xevent.AnyEvent.window.ToInt32()); - #endif + DriverDebug("GetMessage(): Got message {0} for non-existent or already destroyed window {1:X}", xevent.type, xevent.AnyEvent.window.ToInt32()); goto ProcessNextMessage; } @@ -4136,9 +4265,9 @@ namespace System.Windows.Forms { case XEventName.MotionNotify: { if (client) { - #if DriverDebugExtra - Console.WriteLine("GetMessage(): Window {0:X} MotionNotify x={1} y={2}", client ? hwnd.client_window.ToInt32() : hwnd.whole_window.ToInt32(), xevent.MotionEvent.x, xevent.MotionEvent.y); - #endif + DriverDebug("GetMessage(): Window {0:X} MotionNotify x={1} y={2}", + client ? hwnd.client_window.ToInt32() : hwnd.whole_window.ToInt32(), + xevent.MotionEvent.x, xevent.MotionEvent.y); if (Grab.Hwnd != IntPtr.Zero) { msg.hwnd = Grab.Hwnd; @@ -4191,9 +4320,9 @@ namespace System.Windows.Forms { HitTest ht; IntPtr dummy; - #if DriverDebugExtra - Console.WriteLine("GetMessage(): non-client area {0:X} MotionNotify x={1} y={2}", client ? hwnd.client_window.ToInt32() : hwnd.whole_window.ToInt32(), xevent.MotionEvent.x, xevent.MotionEvent.y); - #endif + DriverDebug("GetMessage(): non-client area {0:X} MotionNotify x={1} y={2}", + client ? hwnd.client_window.ToInt32() : hwnd.whole_window.ToInt32(), + xevent.MotionEvent.x, xevent.MotionEvent.y); msg.message = Msg.WM_NCMOUSEMOVE; if (!hwnd.Enabled) { @@ -4341,9 +4470,9 @@ namespace System.Windows.Forms { case XEventName.ConfigureNotify: { if (!client && (xevent.ConfigureEvent.xevent == xevent.ConfigureEvent.window)) { // Ignore events for children (SubstructureNotify) and client areas - #if DriverDebugExtra - Console.WriteLine("GetMessage(): Window {0:X} ConfigureNotify x={1} y={2} width={3} height={4}", hwnd.client_window.ToInt32(), xevent.ConfigureEvent.x, xevent.ConfigureEvent.y, xevent.ConfigureEvent.width, xevent.ConfigureEvent.height); - #endif + DriverDebug("GetMessage(): Window {0:X} ConfigureNotify x={1} y={2} width={3} height={4}", + hwnd.client_window.ToInt32(), xevent.ConfigureEvent.x, + xevent.ConfigureEvent.y, xevent.ConfigureEvent.width, xevent.ConfigureEvent.height); lock (hwnd.configure_lock) { Form form = Control.FromHandle (hwnd.client_window) as Form; @@ -4395,8 +4524,8 @@ namespace System.Windows.Forms { } goto ProcessNextMessage; } - SendMessage(FocusWindow, Msg.WM_SETFOCUS, IntPtr.Zero, IntPtr.Zero); Keyboard.FocusIn (FocusWindow); + SendMessage(FocusWindow, Msg.WM_SETFOCUS, IntPtr.Zero, IntPtr.Zero); goto ProcessNextMessage; } @@ -4480,9 +4609,9 @@ namespace System.Windows.Forms { break; } } - #if DriverDebugExtra - Console.WriteLine("GetMessage(): Window {0:X} Exposed non-client area {1},{2} {3}x{4}", hwnd.client_window.ToInt32(), xevent.ExposeEvent.x, xevent.ExposeEvent.y, xevent.ExposeEvent.width, xevent.ExposeEvent.height); - #endif + DriverDebug("GetMessage(): Window {0:X} Exposed non-client area {1},{2} {3}x{4}", + hwnd.client_window.ToInt32(), xevent.ExposeEvent.x, xevent.ExposeEvent.y, + xevent.ExposeEvent.width, xevent.ExposeEvent.height); Rectangle rect = new Rectangle (xevent.ExposeEvent.x, xevent.ExposeEvent.y, xevent.ExposeEvent.width, xevent.ExposeEvent.height); Region region = new Region (rect); @@ -4492,9 +4621,9 @@ namespace System.Windows.Forms { msg.refobject = region; break; } - #if DriverDebugExtra - Console.WriteLine("GetMessage(): Window {0:X} Exposed area {1},{2} {3}x{4}", hwnd.client_window.ToInt32(), xevent.ExposeEvent.x, xevent.ExposeEvent.y, xevent.ExposeEvent.width, xevent.ExposeEvent.height); - #endif + DriverDebug("GetMessage(): Window {0:X} Exposed area {1},{2} {3}x{4}", + hwnd.client_window.ToInt32(), xevent.ExposeEvent.x, xevent.ExposeEvent.y, + xevent.ExposeEvent.width, xevent.ExposeEvent.height); if (Caret.Visible == true) { Caret.Paused = true; HideCaret(); @@ -4517,9 +4646,7 @@ namespace System.Windows.Forms { if ((hwnd != null) && (hwnd.client_window == xevent.DestroyWindowEvent.window)) { CleanupCachedWindows (hwnd); - #if DriverDebugDestroy - Console.WriteLine("Received X11 Destroy Notification for {0}", XplatUI.Window(hwnd.client_window)); - #endif + DriverDebug("Received X11 Destroy Notification for {0}", XplatUI.Window(hwnd.client_window)); msg.hwnd = hwnd.client_window; msg.message=Msg.WM_DESTROY; @@ -4603,7 +4730,7 @@ namespace System.Windows.Forms { return true; } - private HitTest NCHitTest (Hwnd hwnd, int x, int y) + HitTest NCHitTest (Hwnd hwnd, int x, int y) { // The hit test is sent in screen coordinates IntPtr dummy; @@ -4613,7 +4740,24 @@ namespace System.Windows.Forms { (IntPtr) (screen_y << 16 | screen_x & 0xFFFF)); } - internal override bool GetText(IntPtr handle, out string text) { + // Our very basic implementation of MoveResize - we can extend it later + // *if* needed + internal override void BeginMoveResize (IntPtr handle) + { + // We *need* to ungrab the pointer in the current display + XplatUI.UngrabWindow (Grab.Hwnd); + + int x_root, y_root; + GetCursorPos (IntPtr.Zero, out x_root, out y_root); + + Hwnd hwnd = Hwnd.ObjectFromHandle (handle); + SendNetWMMessage (hwnd.whole_window, _NET_WM_MOVERESIZE, (IntPtr) x_root, (IntPtr) y_root, + (IntPtr) NetWmMoveResize._NET_WM_MOVERESIZE_SIZE_BOTTOMRIGHT, + (IntPtr) 1); // left button + } + + internal override bool GetText(IntPtr handle, out string text) + { lock (XlibLock) { IntPtr actual_atom; @@ -4650,7 +4794,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); @@ -4680,7 +4825,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); @@ -4691,7 +4837,7 @@ namespace System.Windows.Forms { return hwnd.cached_window_state; } - private FormWindowState UpdateWindowState (IntPtr handle) { + FormWindowState UpdateWindowState (IntPtr handle) { IntPtr actual_atom; int actual_format; IntPtr nitems; @@ -4736,13 +4882,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; @@ -4777,7 +4925,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); @@ -4785,7 +4934,7 @@ namespace System.Windows.Forms { WindowUngrabbed (hwnd); } - private void WindowUngrabbed (IntPtr hwnd) { + void WindowUngrabbed (IntPtr hwnd) { bool was_grabbed = Grab.Hwnd != IntPtr.Zero; Grab.Hwnd = IntPtr.Zero; @@ -4802,13 +4951,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); @@ -4820,7 +4971,8 @@ namespace System.Windows.Forms { } } - internal override void InvalidateNC (IntPtr handle) { + internal override void InvalidateNC (IntPtr handle) + { Hwnd hwnd; hwnd = Hwnd.ObjectFromHandle(handle); @@ -4828,17 +4980,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) { @@ -4854,7 +5009,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; @@ -4886,7 +5042,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; @@ -4917,7 +5074,11 @@ namespace System.Windows.Forms { clip_region.MakeEmpty(); foreach (Rectangle r in hwnd.ClipRectangles) { - clip_region.Union (r); + /* Expand the region slightly. + * See bug 464464. + */ + Rectangle r2 = Rectangle.FromLTRB (r.Left, r.Top, r.Right, r.Bottom + 1); + clip_region.Union (r2); } if (hwnd.UserClip != null) { @@ -4954,7 +5115,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); @@ -4974,7 +5136,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; @@ -5004,7 +5167,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); @@ -5032,7 +5196,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) @@ -5047,7 +5212,8 @@ namespace System.Windows.Forms { // TODO } - internal override void RequestNCRecalc(IntPtr handle) { + internal override void RequestNCRecalc(IntPtr handle) + { Hwnd hwnd; hwnd = Hwnd.ObjectFromHandle(handle); @@ -5061,7 +5227,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); @@ -5076,7 +5243,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; @@ -5092,7 +5260,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; @@ -5140,7 +5309,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; @@ -5198,7 +5368,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; @@ -5252,7 +5423,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 (); @@ -5290,9 +5462,7 @@ namespace System.Windows.Forms { data.Result = result; SendAsyncMethod (data); - #if DriverDebug || DriverDebugThreads - Console.WriteLine ("Sending {0} message across.", message); - #endif + DriverDebug("Sending {0} message across.", message); return IntPtr.Zero; } @@ -5302,7 +5472,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; @@ -5347,7 +5518,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 (); @@ -5361,7 +5533,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(); @@ -5378,7 +5551,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); @@ -5389,7 +5563,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) { @@ -5418,7 +5593,7 @@ namespace System.Windows.Forms { } } - private void QueryPointer (IntPtr display, IntPtr w, out IntPtr root, out IntPtr child, + void QueryPointer (IntPtr display, IntPtr w, out IntPtr root, out IntPtr child, out int root_x, out int root_y, out int child_x, out int child_y, out int mask) { @@ -5453,7 +5628,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; @@ -5519,7 +5695,8 @@ namespace System.Windows.Forms { } } - internal override void SetFocus(IntPtr handle) { + internal override void SetFocus(IntPtr handle) + { Hwnd hwnd; IntPtr prev_focus_window; @@ -5538,14 +5715,15 @@ namespace System.Windows.Forms { if (prev_focus_window != IntPtr.Zero) { SendMessage(prev_focus_window, Msg.WM_KILLFOCUS, FocusWindow, IntPtr.Zero); - } - SendMessage(FocusWindow, Msg.WM_SETFOCUS, prev_focus_window, IntPtr.Zero); + } Keyboard.FocusIn (FocusWindow); + SendMessage(FocusWindow, Msg.WM_SETFOCUS, prev_focus_window, IntPtr.Zero); //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); @@ -5554,7 +5732,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); @@ -5563,7 +5742,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 { @@ -5580,23 +5760,23 @@ 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); hwnd.parent = Hwnd.ObjectFromHandle(parent); lock (XlibLock) { - #if DriverDebug || DriverDebugParent - Console.WriteLine("Parent for window {0} = {1}", XplatUI.Window(hwnd.Handle), XplatUI.Window(hwnd.parent != null ? hwnd.parent.Handle : IntPtr.Zero)); - #endif + DriverDebug("Parent for window {0} = {1}", XplatUI.Window(hwnd.Handle), XplatUI.Window(hwnd.parent != null ? hwnd.parent.Handle : IntPtr.Zero)); XReparentWindow(DisplayHandle, hwnd.whole_window, hwnd.parent == null ? FosterParent : hwnd.parent.client_window, hwnd.x, hwnd.y); } return IntPtr.Zero; } - internal override void SetTimer (Timer timer) { + internal override void SetTimer (Timer timer) + { XEventQueue queue = (XEventQueue) MessageQueues [timer.thread]; if (queue == null) { @@ -5610,9 +5790,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) { @@ -5635,7 +5817,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; @@ -5696,7 +5879,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); } @@ -5756,7 +5940,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); @@ -5821,7 +6006,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; @@ -5870,7 +6056,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); @@ -5883,7 +6070,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; @@ -5902,7 +6090,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) { @@ -5953,21 +6142,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) { @@ -5975,9 +6168,7 @@ namespace System.Windows.Forms { Hwnd hwnd; hwnd = Hwnd.ObjectFromHandle(handle); - #if DriverDebug - Console.WriteLine("Adding Systray Whole:{0:X}, Client:{1:X}", hwnd.whole_window.ToInt32(), hwnd.client_window.ToInt32()); - #endif + DriverDebug("Adding Systray Whole:{0:X}, Client:{1:X}", hwnd.whole_window.ToInt32(), hwnd.client_window.ToInt32()); // Oh boy. if (hwnd.client_window != hwnd.whole_window) { @@ -5996,6 +6187,10 @@ namespace System.Windows.Forms { hwnd.Queue.Paint.Remove (hwnd); } + // We are going to be directly mapped by the system tray, so mark as mapped + // so we can later properly unmap it. + hwnd.mapped = true; + size_hints = new XSizeHints(); size_hints.flags = (IntPtr)(XSizeHintsFlags.PMinSize | XSizeHintsFlags.PMaxSize | XSizeHintsFlags.PBaseSize); @@ -6038,7 +6233,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); @@ -6052,7 +6248,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); @@ -6061,17 +6258,18 @@ namespace System.Windows.Forms { tt.Dispose(); tt = null; } + // Close any balloon window *we* fired. + ThemeEngine.Current.HideBalloonWindow (handle); } -#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); @@ -6090,11 +6288,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); @@ -6193,90 +6393,110 @@ 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); } [DllImport ("libX11", EntryPoint="XMoveResizeWindow")] - private extern static int _XMoveResizeWindow(IntPtr display, IntPtr window, int x, int y, int width, int height); - private static int XMoveResizeWindow(IntPtr display, IntPtr window, int x, int y, int width, int height) { + extern static int _XMoveResizeWindow(IntPtr display, IntPtr window, int x, int y, int width, int height); + static int XMoveResizeWindow(IntPtr display, IntPtr window, int x, int y, int width, int height) { DebugHelper.TraceWriteLine ("XMoveResizeWindow"); return _XMoveResizeWindow(display, window, x, y, width, height); } @@ -6290,182 +6510,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); } @@ -6473,126 +6719,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); } @@ -6600,322 +6864,368 @@ 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); } @@ -6960,6 +7270,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); @@ -6991,7 +7304,7 @@ namespace System.Windows.Forms { internal extern static int XReparentWindow(IntPtr display, IntPtr window, IntPtr parent, int x, int y); [DllImport ("libX11", EntryPoint="XMoveResizeWindow")] - private extern static int XMoveResizeWindow(IntPtr display, IntPtr window, int x, int y, int width, int height); + extern static int XMoveResizeWindow(IntPtr display, IntPtr window, int x, int y, int width, int height); internal static int MoveResizeWindow(IntPtr display, IntPtr window, int x, int y, int width, int height) { int ret = XMoveResizeWindow (display, window, x, y, width, height); @@ -7270,7 +7583,24 @@ 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 + #endif } }