// Copyright 2018 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

library fuchsia.ui.views;

using fuchsia.ui.gfx;

union Event {
  ChildViewAttachedEvent child_view_attached;
  ChildViewUnavailableEvent child_view_unavailable;
};

// Called when a child view is attached.
struct ChildViewAttachedEvent {
  uint32 view_holder_id;
};

// Called when a child view has become unavailable.
//
// A child may become unavailable for many reasons such being unregistered
// by its application, abnormal termination of its application, or
// cycles being introduced in the view tree.
//
// To complete removal of an unavailable child, this view component must
// call RemoveChild() on its view with |child_key|.
//
// The implementation should invoke the callback once the event has
// been handled.
struct ChildViewUnavailableEvent {
  uint32 view_holder_id;
};
