예제 #1
0
int
XkbDDXPrivate(DeviceIntPtr dev,KeyCode key,XkbAction *act)
{
    XkbAnyAction *xf86act = &(act->any);
    char msgbuf[XkbAnyActionDataSize+1];

    if (xf86act->type == XkbSA_XFree86Private) {
        memcpy(msgbuf, xf86act->data, XkbAnyActionDataSize);
        msgbuf[XkbAnyActionDataSize]= '\0';
        if (strcasecmp(msgbuf, "-vmode")==0)
            xf86ProcessActionEvent(ACTION_PREV_MODE, NULL);
        else if (strcasecmp(msgbuf, "+vmode")==0)
            xf86ProcessActionEvent(ACTION_NEXT_MODE, NULL);
        else if (strcasecmp(msgbuf, "prgrbs")==0) {
            DeviceIntPtr tmp;
            xf86Msg(X_INFO, "Printing all currently active device grabs:\n");
            for (tmp = inputInfo.devices; tmp; tmp = tmp->next)
                if (tmp->deviceGrab.grab)
                    PrintDeviceGrabInfo(tmp);
            xf86Msg(X_INFO, "End list of active device grabs\n");
        }
        else if (strcasecmp(msgbuf, "ungrab")==0)
            UngrabAllDevices(FALSE);
        else if (strcasecmp(msgbuf, "clsgrb")==0)
            UngrabAllDevices(TRUE);
        else if (strcasecmp(msgbuf, "prwins")==0)
            PrintWindowTree();
    }

    return 0;
}
예제 #2
0
파일: grabs.c 프로젝트: dlespiau/xserver
void
UngrabAllDevices(Bool kill_client)
{
    DeviceIntPtr dev;
    ClientPtr client;

    ErrorF("Ungrabbing all devices%s; grabs listed below:\n",
           kill_client ? " and killing their owners" : "");

    for (dev = inputInfo.devices; dev; dev = dev->next) {
        if (!dev->deviceGrab.grab)
            continue;
        PrintDeviceGrabInfo(dev);
        client = clients[CLIENT_ID(dev->deviceGrab.grab->resource)];
        if (!kill_client || !client || client->clientGone)
            dev->deviceGrab.DeactivateGrab(dev);
        if (kill_client)
            CloseDownClient(client);
    }

    ErrorF("End list of ungrabbed devices\n");
}