kadel@manta.NOSC.MIL (Rich Kadel) (12/06/90)
This is to followup my previous posting on my problems getting XSendEvent
to work. I had to put the server into debug to figure this one out.
My problem was with the event mask parameter. As instructed in Doug Young's
book (Xt programming/Motif Edition), I gave it the value "XtAllEvents".
This doesn't work (at least in X11R4--no offense Doug). The simple
solution is to use NoEventMask when sending a client message.
OK. For anyone that's interested, here's why it doesn't work (I don't know
whether I'd call this a bug or not, but it IS misleading):
Client sees:
#define XtAllEvents ((EventMask) -1L) /* 0xFFFFFFFF */
Server sees (in dix/events.c):
#define OwnerGrabButtonMask (1L<<24)
#define AllEventsMask (lastEventMask|(lastEventMask-1)) /* 0x1FFFFFF */
lastEventMask = OwnerGrabButtonMask;
in server function ProcSendEvent():
if (stuff->eventMask & ~AllEventMasks)
return BadValue;
This check stops events with the supplied mask XtAllEvents! I suggest
that XtAllEvents should be defined more explicitly in the future.
"Thanks!" to those who responded so quickly to my question.
(P.S. I don't know why XIconifyWindow() didn't work for me. It looks like
it should have. I'll try it again later.)
Rich Kadelken@csis.dit.csiro.au (Ken Yap) (12/10/90)
>Client sees: > #define XtAllEvents ((EventMask) -1L) /* 0xFFFFFFFF */ Tsk. Did some Xt programmer assume all the world's a 2's complement machine?