private FormWindowState UpdateWindowState (IntPtr handle) {
IntPtr actual_atom;
int actual_format;
IntPtr nitems;
IntPtr bytes_after;
IntPtr prop = IntPtr.Zero;
IntPtr atom;
int maximized;
bool minimized;
XWindowAttributes attributes;
Hwnd hwnd;
hwnd = Hwnd.ObjectFromHandle(handle);
maximized = 0;
minimized = false;
XGetWindowProperty(DisplayHandle, hwnd.whole_window, _NET_WM_STATE, IntPtr.Zero, new IntPtr (256), false, (IntPtr)Atom.XA_ATOM, out actual_atom, out actual_format, out nitems, out bytes_after, ref prop);
if (((long)nitems > 0) && (prop != IntPtr.Zero)) {
for (int i = 0; i < (long)nitems; i++) {
atom = (IntPtr)Marshal.ReadInt32(prop, i * 4);
if ((atom == _NET_WM_STATE_MAXIMIZED_HORZ) || (atom == _NET_WM_STATE_MAXIMIZED_VERT)) {
maximized++;
} else if (atom == _NET_WM_STATE_HIDDEN) {
minimized = true;
}
}
XFree(prop);
}
if (minimized) {
return FormWindowState.Minimized;
} else if (maximized == 2) {
return FormWindowState.Maximized;
}
attributes = new XWindowAttributes();
XGetWindowAttributes(DisplayHandle, hwnd.client_window, ref attributes);
if (attributes.map_state == MapState.IsUnmapped) {
return (FormWindowState)(-1);
}
return FormWindowState.Normal;
}