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; }
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"); }