private void AddConfigureNotify (XEvent xevent) {
Hwnd hwnd;
hwnd = Hwnd.GetObjectFromWindow(xevent.ConfigureEvent.window);
// Don't waste time
if (hwnd == null || hwnd.zombie) {
return;
}
if ((xevent.ConfigureEvent.window == hwnd.whole_window)/* && (xevent.ConfigureEvent.window == xevent.ConfigureEvent.xevent)*/) {
if (hwnd.parent == null) {
// The location given by the event is not reliable between different wm's,
// so use an alternative way of getting it.
Point location = GetTopLevelWindowLocation (hwnd);
hwnd.x = location.X;
hwnd.y = location.Y;
}
// XXX this sucks. this isn't thread safe
Control ctrl = Control.FromHandle (hwnd.Handle);
Size TranslatedSize;
if (ctrl != null) {
TranslatedSize = TranslateXWindowSizeToWindowSize (ctrl.GetCreateParams (), xevent.ConfigureEvent.width, xevent.ConfigureEvent.height);
} else {
TranslatedSize = new Size (xevent.ConfigureEvent.width, xevent.ConfigureEvent.height);
}
hwnd.width = TranslatedSize.Width;
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
lock (hwnd.configure_lock) {
if (!hwnd.configure_pending) {
hwnd.Queue.EnqueueLocked (xevent);
hwnd.configure_pending = true;
}
}
}
// We drop configure events for Client windows
}