sig
  type output = {
    created : Wlc.Output.t -> bool;
    destroyed : Wlc.Output.t -> unit;
    focus : Wlc.Output.t -> bool -> unit;
    resolution :
      Wlc.Output.t -> Wlc.Geometry.Size.t -> Wlc.Geometry.Size.t -> unit;
  }
  type view_request = {
    geometry : Wlc.View.t -> Wlc.Geometry.t -> unit;
    state : Wlc.View.t -> Wlc.View.state_bit -> bool -> unit;
  }
  type view = {
    created : Wlc.View.t -> bool;
    destroyed : Wlc.View.t -> unit;
    focus : Wlc.View.t -> bool -> unit;
    move_to_output : Wlc.View.t -> Wlc.Output.t -> Wlc.Output.t -> unit;
    request : Wlc.Interface.view_request;
  }
  type keyboard = {
    key :
      Wlc.View.t option ->
      int -> Wlc.modifiers -> int -> Wlc.Keysym.t -> Wlc.key_state -> bool;
  }
  type pointer = {
    button :
      Wlc.View.t option ->
      int -> Wlc.modifiers -> int -> Wlc.button_state -> bool;
    scroll :
      Wlc.View.t option ->
      int ->
      Wlc.modifiers -> Wlc.scroll_axis_bit list -> float * float -> bool;
    motion : Wlc.View.t option -> int -> Wlc.Geometry.Origin.t -> bool;
  }
  type touch = {
    touch :
      Wlc.View.t option ->
      int ->
      Wlc.modifiers -> Wlc.touch_type -> int -> Wlc.Geometry.Origin.t -> bool;
  }
  type compositor = { ready : unit -> unit; }
  type t = {
    output : Wlc.Interface.output;
    view : Wlc.Interface.view;
    keyboard : Wlc.Interface.keyboard;
    pointer : Wlc.Interface.pointer;
    touch : Wlc.Interface.touch;
    compositor : Wlc.Interface.compositor;
  }
  val dummy : Wlc.Interface.t
end