diff Gui/wm/ws.c @ 3054:9507f90d8254

add half dvd support for gui
author pontscho
date Wed, 21 Nov 2001 17:43:57 +0000
parents 4db0210755eb
children 38df49b91824
line wrap: on
line diff
--- a/Gui/wm/ws.c	Wed Nov 21 17:07:40 2001 +0000
+++ b/Gui/wm/ws.c	Wed Nov 21 17:43:57 2001 +0000
@@ -36,11 +36,11 @@
 
 typedef struct
 {
- long flags;
- long functions;
- long decorations;
+ unsigned long flags;
+ unsigned long functions;
+ unsigned long decorations;
  long input_mode;
- long status;
+ unsigned long status;
 } MotifWmHints;
 
 Atom                 wsMotifHints;
@@ -107,16 +107,57 @@
 
 void wsWindowDecoration( wsTWindow * win,long d )
 {
+ MotifWmHints *hints = &wsMotifWmHints;
+ Atom type;
+ int format;
+ unsigned long nitems;
+ unsigned long bytes_after;
+
  wsMotifHints=XInternAtom( wsDisplay,"_MOTIF_WM_HINTS",0 );
- if ( wsMotifHints != None )
-  {
-   memset( &wsMotifWmHints,0,sizeof( MotifWmHints ) );
-   wsMotifWmHints.flags=( d?0:MWM_HINTS_FUNCTIONS | MWM_HINTS_DECORATIONS );
-   wsMotifWmHints.functions=( d?0:MWM_FUNC_MOVE | MWM_FUNC_CLOSE | MWM_FUNC_MINIMIZE | MWM_FUNC_MAXIMIZE | MWM_FUNC_RESIZE );
-   wsMotifWmHints.decorations=( d?MWM_DECOR_ALL:0 );
-   XChangeProperty( wsDisplay,win->WindowID,wsMotifHints,wsMotifHints,32,
-                    PropModeReplace,(unsigned char *)&wsMotifWmHints,5 );
-  }
+ if ( wsMotifHints == None ) return;
+
+#if 1
+ memset( &wsMotifWmHints,0,sizeof( MotifWmHints ) );
+ wsMotifWmHints.flags=( d?0:MWM_HINTS_FUNCTIONS | MWM_HINTS_DECORATIONS );
+ wsMotifWmHints.functions=( d?0:MWM_FUNC_MOVE | MWM_FUNC_CLOSE | MWM_FUNC_MINIMIZE | MWM_FUNC_MAXIMIZE | MWM_FUNC_RESIZE );
+ wsMotifWmHints.decorations=( d?MWM_DECOR_ALL:0 );
+ XChangeProperty( wsDisplay,win->WindowID,wsMotifHints,wsMotifHints,32,
+                  PropModeReplace,(unsigned char *)&wsMotifWmHints,5 );
+#else
+  XGetWindowProperty( wsDisplay,win->WindowID,
+                      wsMotifHints,0,5,
+                      False,AnyPropertyType,&type,&format,&nitems,
+                      &bytes_after,(unsigned char **)&hints );
+
+  if ( type != None )
+   {
+    fprintf( stderr,"[ws] set valid mwm hints.\n" );
+    hints->flags=MWM_HINTS_FUNCTIONS | MWM_HINTS_DECORATIONS;
+    if ( d )
+     {
+      hints->functions|=( MWM_FUNC_MOVE | MWM_FUNC_CLOSE | MWM_FUNC_MINIMIZE | MWM_FUNC_MAXIMIZE | MWM_FUNC_RESIZE );
+      hints->decorations|=MWM_DECOR_ALL;
+     }
+     else
+      {
+      hints->functions|=~( MWM_FUNC_MOVE | MWM_FUNC_CLOSE | MWM_FUNC_MINIMIZE | MWM_FUNC_MAXIMIZE | MWM_FUNC_RESIZE );
+      hints->decorations|=~MWM_DECOR_ALL;
+      }
+   }
+   else
+    {
+     fprintf( stderr,"[ws] set my mwm hints.\n" );
+     memset( &wsMotifWmHints,0,sizeof( MotifWmHints ) );
+     hints=&wsMotifWmHints;
+     hints->flags=( d?MWM_HINTS_FUNCTIONS | MWM_HINTS_DECORATIONS:0 );
+     hints->functions=( d?MWM_FUNC_MOVE | MWM_FUNC_CLOSE | MWM_FUNC_MINIMIZE | MWM_FUNC_MAXIMIZE | MWM_FUNC_RESIZE:0 );
+     hints->decorations=( d?MWM_DECOR_ALL:0 );
+    }
+
+ XChangeProperty( wsDisplay,win->WindowID,wsMotifHints,wsMotifHints,32,
+                  PropModeReplace,&wsMotifWmHints,5 );
+ if ( hints != &wsMotifWmHints ) XFree( hints );
+#endif
 }
 
 // ----------------------------------------------------------------------------------------------