/*
 * -- $Header: /cec/src/nestor/servers/R3/shXlib/XGrPointer.c,v 1.1.1.1 90/04/23 10:00:06 spanachi Exp $
 */
#include "copyright.h"

/* $XConsortium: XGrPointer.c,v 11.16 88/09/06 16:08:35 jim Exp $ */
/* Copyright    Massachusetts Institute of Technology    1986	*/
/* -- MULTIPLEX Extension -- */

#define NEED_REPLIES
#include "Xlibint.h"

/* -- additional includes -- */
#include "utils.h"
#include "map.h"

int XGrabPointer(dpy, grab_window, owner_events, event_mask, pointer_mode,
	     keyboard_mode, confine_to, curs, time)
register Display *dpy;
Window grab_window;
Bool owner_events;
unsigned int event_mask; /* CARD16 */
int pointer_mode, keyboard_mode;
Window confine_to;
Cursor curs;
Time time;
{
    xGrabPointerReply rep;
    register xGrabPointerReq *req;
    register int status;

    /* -- flush default dpy's queue to keep buffers aligned -- */
    XmuXFlushDefault( dpy ) ;
    /* -- switch to the chalk holder display -- */
    dpy = XmuXChalkDisplay( dpy ) ;

    LockDisplay(dpy);
    GetReq(GrabPointer, req);
    req->grabWindow = XmuXMapID( dpy , grab_window , FromClient ) ;
    req->ownerEvents = owner_events;
    req->eventMask = event_mask;
    req->pointerMode = pointer_mode;
    req->keyboardMode = keyboard_mode;
    req->confineTo = XmuXMapID( dpy , confine_to , FromClient ) ;
    req->cursor = XmuXMapID( dpy , curs , FromClient ) ;
    req->time = time;
    
    /* if we ever return, suppress the error */
    if (_XReply (dpy, (xReply *) &rep, 0, xTrue) == 0)
	rep.status = GrabSuccess;
    status = rep.status;
    UnlockDisplay(dpy);
    SyncHandle();
    return (status);
}
