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

/* $XConsortium: XGrKeybd.c,v 11.15 88/09/06 16:08:34 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 XGrabKeyboard (dpy, window, ownerEvents, pointerMode, keyboardMode, time)
    register Display *dpy;
    Window window;
    Bool ownerEvents;
    int pointerMode, keyboardMode;
    Time time;
{

    xGrabKeyboardReply rep;
    register xGrabKeyboardReq *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(GrabKeyboard, req);
    /* -- must map !! -- */
    req->grabWindow = XmuXMapID( dpy , window , FromClient ) ;
    req->ownerEvents = ownerEvents;
    req->pointerMode = pointerMode;
    req->keyboardMode = keyboardMode;
    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);
}

