sig
  type flags = [ `none | `on_hold | `on_scroll ]
  module Mouse_in :
    sig
      type t = {
        buttons : int;
        output : Evas.point;
        canvas : Evas.coord_point;
        modifiers : Evas.modifier;
        timestamp : int;
        event_flags : Evas_event.flags;
        dev : Evas.device;
        event_src : Evas.obj;
      }
    end
  type mouse_in = Evas_event.Mouse_in.t
  module Mouse_out :
    sig
      type t = {
        buttons : int;
        output : Evas.point;
        canvas : Evas.coord_point;
        modifiers : Evas.modifier;
        timestamp : int;
        event_flags : Evas_event.flags;
        dev : Evas.device;
        event_src : Evas.obj;
      }
    end
  type mouse_out = Evas_event.Mouse_out.t
  module Mouse_down :
    sig
      type t = {
        button : int;
        output : Evas.point;
        canvas : Evas.coord_point;
        modifiers : Evas.modifier;
        flags : Evas.button_flags;
        timestamp : int;
        event_flags : Evas_event.flags;
        dev : Evas.device;
        event_src : Evas.obj;
      }
    end
  type mouse_down = Evas_event.Mouse_down.t
  module Mouse_up :
    sig
      type t = {
        button : int;
        output : Evas.point;
        canvas : Evas.coord_point;
        modifiers : Evas.modifier;
        flags : Evas.button_flags;
        timestamp : int;
        event_flags : Evas_event.flags;
        dev : Evas.device;
        event_src : Evas.obj;
      }
    end
  type mouse_up = Evas_event.Mouse_up.t
  module Mouse_move :
    sig
      type t = {
        buttons : int;
        cur : Evas.position;
        prev : Evas.position;
        modifiers : Evas.modifier;
        timestamp : int;
        event_flags : Evas_event.flags;
        dev : Evas.device;
        event_src : Evas.obj;
      }
    end
  type mouse_move = Evas_event.Mouse_move.t
  module Mouse_wheel :
    sig
      type t = {
        direction : int;
        z : int;
        output : Evas.point;
        canvas : Evas.coord_point;
        modifiers : Evas.modifier;
        timestamp : int;
        event_flags : Evas_event.flags;
        dev : Evas.device;
      }
    end
  type mouse_wheel = Evas_event.Mouse_wheel.t
  module Multi_down :
    sig
      type t = {
        device : int;
        radius : float;
        radius_x : float;
        radius_y : float;
        pressure : float;
        angle : float;
        output : Evas.point;
        canvas : Evas.coord_precision_point;
        modifiers : Evas.modifier;
        flags : Evas.button_flags;
        timestamp : int;
        event_flags : Evas_event.flags;
        dev : Evas.device;
      }
    end
  type multi_down = Evas_event.Multi_down.t
  module Multi_up :
    sig
      type t = {
        device : int;
        radius : float;
        radius_x : float;
        radius_y : float;
        pressure : float;
        angle : float;
        output : Evas.point;
        canvas : Evas.coord_precision_point;
        modifiers : Evas.modifier;
        flags : Evas.button_flags;
        timestamp : int;
        event_flags : Evas_event.flags;
        dev : Evas.device;
      }
    end
  type multi_up = Evas_event.Multi_up.t
  module Multi_move :
    sig
      type t = {
        device : int;
        radius : float;
        radius_x : float;
        radius_y : float;
        pressure : float;
        angle : float;
        cur : Evas.precision_position;
        modifiers : Evas.modifier;
        timestamp : int;
        event_flags : Evas_event.flags;
        dev : Evas.device;
      }
    end
  type multi_move = Evas_event.Multi_move.t
  module Key_down :
    sig
      type t = {
        keyname : string;
        modifiers : Evas.modifier;
        key : string;
        string : string;
        compose : string;
        timestamp : int;
        event_flags : Evas_event.flags;
        dev : Evas.device;
      }
    end
  type key_down = Evas_event.Key_down.t
  module Key_up :
    sig
      type t = {
        keyname : string;
        modifiers : Evas.modifier;
        key : string;
        string : string;
        compose : string;
        timestamp : int;
        event_flags : Evas_event.flags;
        dev : Evas.device;
      }
    end
  type key_up = Evas_event.Key_up.t
  module Hold :
    sig
      type t = {
        hold : int;
        timestamp : int;
        event_flags : Evas_event.flags;
        dev : Evas.device;
      }
    end
  type hold = Evas_event.Hold.t
  type t =
      [ `canvas_focus_in
      | `canvas_focus_out
      | `canvas_object_focus_in of Evas.obj
      | `canvas_object_focus_out of Evas.obj
      | `changed_size_hints
      | `del
      | `device_changed
      | `focus_in
      | `focus_out
      | `free
      | `hide
      | `hold of Evas_event.hold
      | `image_preloaded
      | `image_resize
      | `image_unloaded
      | `key_down of Evas_event.key_down
      | `key_up of Evas_event.key_up
      | `last
      | `mouse_down of Evas_event.mouse_down
      | `mouse_in of Evas_event.mouse_in
      | `mouse_move of Evas_event.mouse_move
      | `mouse_out of Evas_event.mouse_out
      | `mouse_up of Evas_event.mouse_up
      | `mouse_wheel of Evas_event.mouse_wheel
      | `move
      | `multi_down of Evas_event.multi_down
      | `multi_move of Evas_event.multi_move
      | `multi_up of Evas_event.multi_up
      | `render_flush_post
      | `render_flush_pre
      | `render_post
      | `render_pre
      | `resize
      | `restack
      | `show ]
  type 'a cb = Evas.t -> '-> unit
  type post_cb = Evas.t -> unit
  val callback_add_render_flush_pre : Evas.t -> unit Evas_event.cb -> unit
  val callback_add_render_flush_post : Evas.t -> unit Evas_event.cb -> unit
  val callback_add_canvas_focus_in : Evas.t -> unit Evas_event.cb -> unit
  val callback_add_canvas_focus_out : Evas.t -> unit Evas_event.cb -> unit
  val callback_add_canvas_object_focus_in :
    Evas.t -> Evas.obj Evas_event.cb -> unit
  val callback_add_canvas_object_focus_out :
    Evas.t -> Evas.obj Evas_event.cb -> unit
  val callback_priority_add_render_flush_pre :
    Evas.t -> Evas.callback_priority -> unit Evas_event.cb -> unit
  val callback_priority_add_render_flush_post :
    Evas.t -> Evas.callback_priority -> unit Evas_event.cb -> unit
  val callback_priority_add_canvas_focus_in :
    Evas.t -> Evas.callback_priority -> unit Evas_event.cb -> unit
  val callback_priority_add_canvas_focus_out :
    Evas.t -> Evas.callback_priority -> unit Evas_event.cb -> unit
  val callback_priority_add_canvas_object_focus_in :
    Evas.t -> Evas.callback_priority -> Evas.obj Evas_event.cb -> unit
  val callback_priority_add_canvas_object_focus_out :
    Evas.t -> Evas.callback_priority -> Evas.obj Evas_event.cb -> unit
  val post_callback_push : Evas.t -> Evas_event.post_cb -> unit
  val freeze : Evas.t -> unit
  val thaw : Evas.t -> unit
end