int present_select_input(ClientPtr client, XID eid, WindowPtr window, CARD32 mask) { present_window_priv_ptr window_priv = present_get_window_priv(window, mask != 0); present_event_ptr event; if (!window_priv) { if (mask) return BadAlloc; return Success; } event = calloc (1, sizeof (present_event_rec)); if (!event) return BadAlloc; event->client = client; event->window = window; event->id = eid; event->mask = mask; event->next = window_priv->events; window_priv->events = event; if (!AddResource(event->id, present_event_type, (void *) event)) return BadAlloc; return Success; }
int present_select_input(ClientPtr client, XID eid, WindowPtr window, CARD32 mask) { present_window_priv_ptr window_priv; present_event_ptr event; int ret; /* Check to see if we're modifying an existing event selection */ ret = dixLookupResourceByType((void **) &event, eid, present_event_type, client, DixWriteAccess); if (ret == Success) { /* Match error for the wrong window; also don't modify some other * client's event selection */ if (event->window != window || event->client != client) return BadMatch; if (mask) event->mask = mask; else FreeResource(eid, RT_NONE); return Success; } if (ret != BadValue) return ret; if (mask == 0) return Success; LEGAL_NEW_RESOURCE(eid, client); window_priv = present_get_window_priv(window, TRUE); if (!window_priv) return BadAlloc; event = calloc (1, sizeof (present_event_rec)); if (!event) return BadAlloc; event->client = client; event->window = window; event->id = eid; event->mask = mask; event->next = window_priv->events; window_priv->events = event; if (!AddResource(event->id, present_event_type, (void *) event)) return BadAlloc; return Success; }