code: func newTray(o *TrayOptions, c *asticontext.Canceller, d *dispatcher, i *identifier, wrt *writer) (t *Tray) {
  	// Init
  	t = &Tray{
  		o:      o,
  		object: newObject(nil, c, d, i, wrt, i.new()),
  	}
  
  	// Make sure the tray's context is cancelled once the destroyed event is received
  	t.On(EventNameTrayEventDestroyed, func(e Event) (deleteListener bool) {
  		t.cancel()
  		return true
  	})
  	return
  }
docs: // newTray creates a new tray