// Dequeue pops an event/error from the queue and returns it. // The queue item is unwrapped and returned as multiple return values. // Only one of the return values can be nil. func Dequeue(xu *xgbutil.XUtil) (xgb.Event, xgb.Error) { xu.EvqueueLck.Lock() defer xu.EvqueueLck.Unlock() everr := xu.Evqueue[0] xu.Evqueue = xu.Evqueue[1:] return everr.Event, everr.Err }
// Enqueue queues up an event read from X. // Note that an event read may return an error, in which case, this queue // entry will be an error and not an event. // // ev, err := XUtilValue.Conn().WaitForEvent() // xevent.Enqueue(XUtilValue, ev, err) // // You probably shouldn't have to enqueue events yourself. This is done // automatically if you're using xevent.Main{Ping} and/or xevent.Read. func Enqueue(xu *xgbutil.XUtil, ev xgb.Event, err xgb.Error) { xu.EvqueueLck.Lock() defer xu.EvqueueLck.Unlock() xu.Evqueue = append(xu.Evqueue, xgbutil.EventOrError{ Event: ev, Err: err, }) }
// DequeueAt removes a particular item from the queue. // This is primarily useful when attempting to compress events. func DequeueAt(xu *xgbutil.XUtil, i int) { xu.EvqueueLck.Lock() defer xu.EvqueueLck.Unlock() xu.Evqueue = append(xu.Evqueue[:i], xu.Evqueue[i+1:]...) }