This reverts the change in from-xming-patch11 which makes parented windows 
non-resizeable

Because this was trying to do something which we should be doing, as an 
alternative we
try checking WM_NORMAL_HINTS for windows which shouldn't  be resizable

If a window has a maximum size specified, no maximize box
If a window has a fixed size (max size == min size, per ICCM ....), no resizing 
frame

---
 xserver/hw/xwin/winmultiwindowwm.c |   33 +++++++++++++++++++++++++++++----
 1 file changed, 29 insertions(+), 4 deletions(-)

Index: xorg-server-1.5.3/xserver/hw/xwin/winmultiwindowwm.c
===================================================================
--- xorg-server-1.5.3.orig/xserver/hw/xwin/winmultiwindowwm.c   2009-01-06 
20:46:30.000000000 +0000
+++ xorg-server-1.5.3/xserver/hw/xwin/winmultiwindowwm.c        2009-01-13 
03:18:22.000000000 +0000
@@ -1470,6 +1470,7 @@
 #define HINT_BORDER    (1L<<1)
 #define HINT_SIZEBOX   (1l<<2)
 #define HINT_CAPTION   (1l<<3)
+#define HINT_NOMAXIMIZE (1L<<4)
 /* These two are used on their own */
 #define HINT_MAX       (1L<<0)
 #define HINT_MIN       (1L<<1)
@@ -1547,6 +1548,29 @@
     if (pAtom) XFree(pAtom);
   }
 
+  XSizeHints *normal_hint = XAllocSizeHints();
+  long supplied;
+  if (normal_hint && (XGetWMNormalHints(pDisplay, iWindow, &normal_hint, 
&supplied) == Success))
+    {
+      if (normal_hint->flags & PMaxSize)
+       {
+         /* Not maximizable if a maximum size is specified */
+         hint |= HINT_NOMAXIMIZE;
+
+         if (normal_hint->flags & PMinSize)
+           {
+             /*
+                If both minimum size and maximum size are specified and are 
the same,
+                don't bother with a resizing frame
+             */
+             if ((normal_hint->min_width == normal_hint->max_width)
+                 && (normal_hint->min_height == normal_hint->max_height))
+                 hint = (hint & ~HINT_SIZEBOX);
+           }
+       }
+    }
+  XFree(normal_hint);
+
   /* Apply Styles, overriding hint settings from above */
   rcStyle = winOverrideStyle((unsigned long)pWin);
   if (rcStyle & STYLE_TOPMOST) *zstyle = HWND_TOPMOST;
@@ -1565,15 +1589,16 @@
        hint = (hint & ~HINT_BORDER & ~HINT_CAPTION & ~HINT_SIZEBOX) | 
HINT_NOFRAME;
 
   SetWindowLongPtr (hWnd, GWL_STYLE, GetWindowLongPtr(hWnd, GWL_STYLE) & 
~WS_CAPTION & ~WS_SIZEBOX); /* Just in case */
-  if (!hint) /* All on, but no resize of children is allowed */
-    SetWindowLongPtr (hWnd, GWL_STYLE, GetWindowLongPtr(hWnd, GWL_STYLE) | 
WS_CAPTION | (GetParent(hWnd) ? 0 : WS_SIZEBOX));
+  if (!hint) /* All on */
+    SetWindowLongPtr (hWnd, GWL_STYLE, GetWindowLongPtr(hWnd, GWL_STYLE) | 
WS_CAPTION | WS_SIZEBOX);
   else if (hint & HINT_NOFRAME); /* All off, so do nothing */
   else  SetWindowLongPtr (hWnd, GWL_STYLE, GetWindowLongPtr(hWnd, GWL_STYLE) |
                        ((hint & HINT_BORDER) ? WS_BORDER : 0) |
-                       ((hint & HINT_SIZEBOX) ? (GetParent(hWnd) ? 0 : 
WS_SIZEBOX) : 0) |
+                       ((hint & HINT_SIZEBOX) ? WS_SIZEBOX : 0) |
                        ((hint & HINT_CAPTION) ? WS_CAPTION : 0));
 
-  return;
+  if (hint & HINT_NOMAXIMIZE)
+    SetWindowLongPtr(hWnd, GWL_STYLE, GetWindowLongPtr(hWnd, GWL_STYLE) & 
~WS_MAXIMIZEBOX);
 }
 
 void

-- 


--
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
Problem reports:       http://cygwin.com/problems.html
Documentation:         http://x.cygwin.com/docs/
FAQ:                   http://x.cygwin.com/docs/faq/

Reply via email to