internal override bool PostMessage (IntPtr handle, Msg message, IntPtr wparam, IntPtr lparam) {
XEvent xevent = new XEvent ();
Hwnd hwnd = Hwnd.ObjectFromHandle(handle);
xevent.type = XEventName.ClientMessage;
xevent.ClientMessageEvent.display = DisplayHandle;
if (hwnd != null) {
xevent.ClientMessageEvent.window = hwnd.whole_window;
} else {
xevent.ClientMessageEvent.window = IntPtr.Zero;
}
xevent.ClientMessageEvent.message_type = (IntPtr) PostAtom;
xevent.ClientMessageEvent.format = 32;
xevent.ClientMessageEvent.ptr1 = handle;
xevent.ClientMessageEvent.ptr2 = (IntPtr) message;
xevent.ClientMessageEvent.ptr3 = wparam;
xevent.ClientMessageEvent.ptr4 = lparam;
if (hwnd != null)
hwnd.Queue.EnqueueLocked (xevent);
else
ThreadQueue(Thread.CurrentThread).EnqueueLocked (xevent);
return true;
}