Subject: Re: bug#4523: 23.1.50; Cannot set Motif Hints (Reopen of bug#4363)
From: Jan Djärv <[email-masked]>
To: Ulrich Neumerkel <[email-masked]>, [email-masked]
Cc: [email-masked], [email-masked]
Date: Sat, 14 Nov 2009 19:57:26 +0100

Ulrich Neumerkel skrev:
> --text follows this line--
> 
> There is no way to set Motif Hints like the nodecoration hint which is
> needed to go fullscreen with the qvwm windowmanager.  I need this for
> older IGEL-X-Terminals were qvwm is preinstalled.
> 
> Unfortunatly Emacs still needs "manual" customization going into
> C-sources and guessing where those hints should be put.  That is not
> everybody's turf.  I try to avoid that myself delaying upgrades by
> years.  Last time I upgraded was 2002/2003.  Everytime the relevant
> files change a bit so it takes time to adjust.  I wonder how other
> people do that.
> 
> At least some "better defined" way as simply patching sources manually
> would be nice.  Maybe there is no need to put Motif hints by default.
> But it would be very helpful to avoid any customization that goes
> beyond .emacs.el editing.
>

Motif wm hits is just a property with 5 values. Just use x-change-window-property.

(defun make-special-frame (data)
   (let ((ff (make-frame '((visibility . nil)))))
     (progn
       (x-change-window-property "_MOTIF_WM_HINTS" data ff
                                 "_MOTIF_WM_HINTS" 32 t)
        (make-frame-visible ff))))

To make a frame without decoration:

(make-special-frame '(2 0 0 0 0))

The first value tells what to change (from /usr/include/Xm/MwmUtils.h):
#define MWM_HINTS_FUNCTIONS     (1L << 0)
#define MWM_HINTS_DECORATIONS   (1L << 1)
#define MWM_HINTS_INPUT_MODE    (1L << 2)
#define MWM_HINTS_STATUS        (1L << 3)

The third is the decorations:
#define MWM_DECOR_ALL           (1L << 0)
#define MWM_DECOR_BORDER        (1L << 1)
#define MWM_DECOR_RESIZEH       (1L << 2)
#define MWM_DECOR_TITLE         (1L << 3)
#define MWM_DECOR_MENU          (1L << 4)
#define MWM_DECOR_MINIMIZE      (1L << 5)
#define MWM_DECOR_MAXIMIZE      (1L << 6)

Note that most wm:s just check MWM_HINTS when the window is mapped, thats why 
the function creates it invisible at first.
If a frame is visible, you must (make-frame-invisble), 
(x-change-window-properties...) (make-frame-visible).

We are not putting in code for old deprecated stuff.  There are new and better 
ways than MOTIF WM HINTS nowdays.

	Jan D.