internal override void DoEvents() {
DebugHelper.Enter ();
MSG msg = new MSG ();
XEventQueue queue;
if (OverrideCursorHandle != IntPtr.Zero) {
OverrideCursorHandle = IntPtr.Zero;
}
queue = ThreadQueue(Thread.CurrentThread);
queue.DispatchIdle = false;
in_doevents = true;
while (PeekMessage(queue, ref msg, IntPtr.Zero, 0, 0, (uint)PeekMessageFlags.PM_REMOVE)) {
Message m = Message.Create (msg.hwnd, (int)msg.message, msg.wParam, msg.lParam);
if (Application.FilterMessage (ref m))
continue;
TranslateMessage (ref msg);
DispatchMessage (ref msg);
string key = msg.hwnd + ":" + msg.message;
if (messageHold[key] != null) {
messageHold[key] = ((int)messageHold[key]) - 1;
DebugHelper.WriteLine ("Got " + msg + " for " + key);
}
}
in_doevents = false;
queue.DispatchIdle = true;
DebugHelper.Leave ();
}