Enlightenment CVS committal

Author  : kwo
Project : e16
Module  : e

Dir     : e16/e/src


Modified Files:
        mwm.c 


Log Message:
Allow _MOTIF_WM_HINTS to have only 4 elements (fixes blender, possibly others).
===================================================================
RCS file: /cvsroot/enlightenment/e16/e/src/mwm.c,v
retrieving revision 1.20
retrieving revision 1.21
diff -u -3 -r1.20 -r1.21
--- mwm.c       4 May 2004 19:04:33 -0000       1.20
+++ mwm.c       5 Jul 2004 11:25:20 -0000       1.21
@@ -52,6 +52,9 @@
 #define MWM_INPUT_FULL_APPLICATION_MODAL    3
 
 #define PROP_MWM_HINTS_ELEMENTS             5
+#define PROP_MWM_HINTS_ELEMENTS_MIN         4
+
+static Atom         _MOTIF_WM_HINTS = 0;
 
 /* Motif window hints */
 typedef struct _mwmhints
@@ -68,23 +71,22 @@
 MWM_GetHints(EWin * ewin, Atom atom_change)
 {
    int                 fmt;
-   Atom                a1, a2;
+   Atom                a2;
    unsigned long       num, end;
    MWMHints           *mwmhints;
    unsigned char      *puc;
 
    EDBUG(6, "MWM_GetHints");
+
    if (ewin->internal)
       EDBUG_RETURN_;
-   if (atom_change)
-     {
-       static Atom         atom = 0;
 
-       if (!atom)
-          atom = XInternAtom(disp, "_MOTIF_WM_HINTS", False);
-       if (atom_change != atom)
-          EDBUG_RETURN_;
-     }
+   if (!_MOTIF_WM_HINTS)
+      _MOTIF_WM_HINTS = XInternAtom(disp, "_MOTIF_WM_HINTS", False);
+
+   if (atom_change && atom_change != _MOTIF_WM_HINTS)
+      EDBUG_RETURN_;
+
    ewin->client.mwm_decor_border = 1;
    ewin->client.mwm_decor_resizeh = 1;
    ewin->client.mwm_decor_title = 1;
@@ -96,81 +98,84 @@
    ewin->client.mwm_func_minimize = 1;
    ewin->client.mwm_func_maximize = 1;
    ewin->client.mwm_func_close = 1;
-   a1 = XInternAtom(disp, "_MOTIF_WM_HINTS", False);
+
    puc = NULL;
-   XGetWindowProperty(disp, ewin->client.win, a1, 0, 20, False, a1, &a2, &fmt,
-                     &num, &end, &puc);
+   XGetWindowProperty(disp, ewin->client.win, _MOTIF_WM_HINTS, 0, 20,
+                     False, _MOTIF_WM_HINTS, &a2, &fmt, &num, &end, &puc);
    mwmhints = (MWMHints *) puc;
-   if (mwmhints)
+   if (!mwmhints)
+      EDBUG_RETURN_;
+
+   if (num < PROP_MWM_HINTS_ELEMENTS_MIN)
+      goto done;
+
+   if (mwmhints->flags & MWM_HINTS_DECORATIONS)
      {
-       if (num < PROP_MWM_HINTS_ELEMENTS)
+       ewin->client.mwm_decor_border = 0;
+       ewin->client.mwm_decor_resizeh = 0;
+       ewin->client.mwm_decor_title = 0;
+       ewin->client.mwm_decor_menu = 0;
+       ewin->client.mwm_decor_minimize = 0;
+       ewin->client.mwm_decor_maximize = 0;
+       if (mwmhints->decorations & MWM_DECOR_ALL)
          {
-            XFree(mwmhints);
-            EDBUG_RETURN_;
+            ewin->client.mwm_decor_border = 1;
+            ewin->client.mwm_decor_resizeh = 1;
+            ewin->client.mwm_decor_title = 1;
+            ewin->client.mwm_decor_menu = 1;
+            ewin->client.mwm_decor_minimize = 1;
+            ewin->client.mwm_decor_maximize = 1;
          }
-       if (mwmhints->flags & MWM_HINTS_DECORATIONS)
-         {
-            ewin->client.mwm_decor_border = 0;
-            ewin->client.mwm_decor_resizeh = 0;
-            ewin->client.mwm_decor_title = 0;
-            ewin->client.mwm_decor_menu = 0;
-            ewin->client.mwm_decor_minimize = 0;
-            ewin->client.mwm_decor_maximize = 0;
-            if (mwmhints->decorations & MWM_DECOR_ALL)
-              {
-                 ewin->client.mwm_decor_border = 1;
-                 ewin->client.mwm_decor_resizeh = 1;
-                 ewin->client.mwm_decor_title = 1;
-                 ewin->client.mwm_decor_menu = 1;
-                 ewin->client.mwm_decor_minimize = 1;
-                 ewin->client.mwm_decor_maximize = 1;
-              }
-            if (mwmhints->decorations & MWM_DECOR_BORDER)
-               ewin->client.mwm_decor_border = 1;
-            if (mwmhints->decorations & MWM_DECOR_RESIZEH)
-               ewin->client.mwm_decor_resizeh = 1;
-            if (mwmhints->decorations & MWM_DECOR_TITLE)
-               ewin->client.mwm_decor_title = 1;
-            if (mwmhints->decorations & MWM_DECOR_MENU)
-               ewin->client.mwm_decor_menu = 1;
-            if (mwmhints->decorations & MWM_DECOR_MINIMIZE)
-               ewin->client.mwm_decor_minimize = 1;
-            if (mwmhints->decorations & MWM_DECOR_MAXIMIZE)
-               ewin->client.mwm_decor_maximize = 1;
-         }
-       if (mwmhints->flags & MWM_HINTS_FUNCTIONS)
+       if (mwmhints->decorations & MWM_DECOR_BORDER)
+          ewin->client.mwm_decor_border = 1;
+       if (mwmhints->decorations & MWM_DECOR_RESIZEH)
+          ewin->client.mwm_decor_resizeh = 1;
+       if (mwmhints->decorations & MWM_DECOR_TITLE)
+          ewin->client.mwm_decor_title = 1;
+       if (mwmhints->decorations & MWM_DECOR_MENU)
+          ewin->client.mwm_decor_menu = 1;
+       if (mwmhints->decorations & MWM_DECOR_MINIMIZE)
+          ewin->client.mwm_decor_minimize = 1;
+       if (mwmhints->decorations & MWM_DECOR_MAXIMIZE)
+          ewin->client.mwm_decor_maximize = 1;
+     }
+
+   if (mwmhints->flags & MWM_HINTS_FUNCTIONS)
+     {
+       ewin->client.mwm_func_resize = 0;
+       ewin->client.mwm_func_move = 0;
+       ewin->client.mwm_func_minimize = 0;
+       ewin->client.mwm_func_maximize = 0;
+       ewin->client.mwm_func_close = 0;
+       if (mwmhints->functions & MWM_FUNC_ALL)
          {
-            ewin->client.mwm_func_resize = 0;
-            ewin->client.mwm_func_move = 0;
-            ewin->client.mwm_func_minimize = 0;
-            ewin->client.mwm_func_maximize = 0;
-            ewin->client.mwm_func_close = 0;
-            if (mwmhints->functions & MWM_FUNC_ALL)
-              {
-                 ewin->client.mwm_func_resize = 1;
-                 ewin->client.mwm_func_move = 1;
-                 ewin->client.mwm_func_minimize = 1;
-                 ewin->client.mwm_func_maximize = 1;
-                 ewin->client.mwm_func_close = 1;
-              }
-            if (mwmhints->functions & MWM_FUNC_RESIZE)
-               ewin->client.mwm_func_resize = 1;
-            if (mwmhints->functions & MWM_FUNC_MOVE)
-               ewin->client.mwm_func_move = 1;
-            if (mwmhints->functions & MWM_FUNC_MINIMIZE)
-               ewin->client.mwm_func_minimize = 1;
-            if (mwmhints->functions & MWM_FUNC_MAXIMIZE)
-               ewin->client.mwm_func_maximize = 1;
-            if (mwmhints->functions & MWM_FUNC_CLOSE)
-               ewin->client.mwm_func_close = 1;
+            ewin->client.mwm_func_resize = 1;
+            ewin->client.mwm_func_move = 1;
+            ewin->client.mwm_func_minimize = 1;
+            ewin->client.mwm_func_maximize = 1;
+            ewin->client.mwm_func_close = 1;
          }
-       XFree(mwmhints);
+       if (mwmhints->functions & MWM_FUNC_RESIZE)
+          ewin->client.mwm_func_resize = 1;
+       if (mwmhints->functions & MWM_FUNC_MOVE)
+          ewin->client.mwm_func_move = 1;
+       if (mwmhints->functions & MWM_FUNC_MINIMIZE)
+          ewin->client.mwm_func_minimize = 1;
+       if (mwmhints->functions & MWM_FUNC_MAXIMIZE)
+          ewin->client.mwm_func_maximize = 1;
+       if (mwmhints->functions & MWM_FUNC_CLOSE)
+          ewin->client.mwm_func_close = 1;
      }
+
+ done:
+   if (mwmhints)
+      XFree(mwmhints);
+
    EDBUG_RETURN_;
 }
 
 void
-MWM_SetInfo()
+MWM_SetInfo(void)
 {
    Atom                a1;
    struct _mwminfo




-------------------------------------------------------
This SF.Net email sponsored by Black Hat Briefings & Training.
Attend Black Hat Briefings & Training, Las Vegas July 24-29 - 
digital self defense, top technical experts, no vendor pitches, 
unmatched networking opportunities. Visit www.blackhat.com
_______________________________________________
enlightenment-cvs mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to