void present_send_idle_notify(WindowPtr window, CARD32 serial, PixmapPtr pixmap, struct present_fence *idle_fence) { present_window_priv_ptr window_priv = present_window_priv(window); if (window_priv) { present_event_ptr event; xPresentIdleNotify in; in.type = GenericEvent; in.extension = present_request; in.length = (sizeof(xPresentIdleNotify) - 32) >> 2; in.evtype = PresentIdleNotify; in.eid = 0; in.window = window->drawable.id; in.serial = serial; in.pixmap = pixmap->drawable.id; in.idle_fence = present_fence_id(idle_fence); for (event = window_priv->events; event; event = event->next) { if (event->mask & PresentIdleNotifyMask) { in.eid = event->id; WriteEventsToClient(event->client, 1, (xEvent *) &in); } } } }
void present_send_complete_notify(WindowPtr window, CARD8 kind, CARD8 mode, CARD32 serial, uint64_t ust, uint64_t msc) { present_window_priv_ptr window_priv = present_window_priv(window); if (window_priv) { present_event_ptr event; xPresentCompleteNotify cn; cn.type = GenericEvent; cn.extension = present_request; cn.length = (sizeof(xPresentCompleteNotify) - 32) >> 2; cn.evtype = PresentCompleteNotify; cn.kind = kind; cn.mode = mode; cn.eid = 0; cn.window = window->drawable.id; cn.serial = serial; cn.ust = ust; cn.msc = msc; for (event = window_priv->events; event; event = event->next) { if (event->mask & PresentCompleteNotifyMask) { cn.eid = event->id; WriteEventsToClient(event->client, 1, (xEvent *) &cn); } } } if (complete_notify) (*complete_notify)(window, kind, mode, serial, ust, msc); }
void present_send_config_notify(WindowPtr window, int x, int y, int w, int h, int bw, WindowPtr sibling) { present_window_priv_ptr window_priv = present_window_priv(window); if (window_priv) { present_event_ptr event; xPresentConfigureNotify cn; cn.type = GenericEvent; cn.extension = present_request; cn.length = (sizeof(xPresentConfigureNotify) - 32) >> 2; cn.evtype = PresentConfigureNotify; cn.eid = 0; cn.window = window->drawable.id; cn.x = x; cn.y = y; cn.width = w; cn.height = h; cn.off_x = 0; cn.off_y = 0; cn.pixmap_width = w; cn.pixmap_height = h; cn.pixmap_flags = 0; for (event = window_priv->events; event; event = event->next) { if (event->mask & (1 << PresentConfigureNotify)) { cn.eid = event->id; WriteEventsToClient(event->client, 1, (xEvent *) &cn); } } } }
void present_free_events(WindowPtr window) { present_window_priv_ptr window_priv = present_window_priv(window); present_event_ptr event; if (!window_priv) return; while ((event = window_priv->events)) FreeResource(event->id, RT_NONE); }
static int present_free_event(void *data, XID id) { present_event_ptr present_event = (present_event_ptr) data; present_window_priv_ptr window_priv = present_window_priv(present_event->window); present_event_ptr *previous, current; for (previous = &window_priv->events; (current = *previous); previous = ¤t->next) { if (current == present_event) { *previous = present_event->next; break; } } free((void *) present_event); return 1; }
void present_send_config_notify(WindowPtr window, int x, int y, int w, int h, int bw, WindowPtr sibling) { present_window_priv_ptr window_priv = present_window_priv(window); if (window_priv) { xPresentConfigureNotify cn = { .type = GenericEvent, .extension = present_request, .length = (sizeof(xPresentConfigureNotify) - 32) >> 2, .evtype = PresentConfigureNotify, .eid = 0, .window = window->drawable.id, .x = x, .y = y, .width = w, .height = h, .off_x = 0, .off_y = 0, .pixmap_width = w, .pixmap_height = h, .pixmap_flags = 0 }; present_event_ptr event; for (event = window_priv->events; event; event = event->next) { if (event->mask & (1 << PresentConfigureNotify)) { cn.eid = event->id; WriteEventsToClient(event->client, 1, (xEvent *) &cn); } } } } static present_complete_notify_proc complete_notify; void present_register_complete_notify(present_complete_notify_proc proc) { complete_notify = proc; } void present_send_complete_notify(WindowPtr window, CARD8 kind, CARD8 mode, CARD32 serial, uint64_t ust, uint64_t msc) { present_window_priv_ptr window_priv = present_window_priv(window); if (window_priv) { xPresentCompleteNotify cn = { .type = GenericEvent, .extension = present_request, .length = (sizeof(xPresentCompleteNotify) - 32) >> 2, .evtype = PresentCompleteNotify, .kind = kind, .mode = mode, .eid = 0, .window = window->drawable.id, .serial = serial, .ust = ust, .msc = msc, }; present_event_ptr event; for (event = window_priv->events; event; event = event->next) { if (event->mask & PresentCompleteNotifyMask) { cn.eid = event->id; WriteEventsToClient(event->client, 1, (xEvent *) &cn); } } } if (complete_notify) (*complete_notify)(window, kind, mode, serial, ust, msc); } void present_send_idle_notify(WindowPtr window, CARD32 serial, PixmapPtr pixmap, struct present_fence *idle_fence) { present_window_priv_ptr window_priv = present_window_priv(window); if (window_priv) { xPresentIdleNotify in = { .type = GenericEvent, .extension = present_request, .length = (sizeof(xPresentIdleNotify) - 32) >> 2, .evtype = PresentIdleNotify, .eid = 0, .window = window->drawable.id, .serial = serial, .pixmap = pixmap->drawable.id, .idle_fence = present_fence_id(idle_fence) }; present_event_ptr event; for (event = window_priv->events; event; event = event->next) { if (event->mask & PresentIdleNotifyMask) { in.eid = event->id; WriteEventsToClient(event->client, 1, (xEvent *) &in); } } } }