sig
  type types =
      [ `BUTTON_PRESS
      | `BUTTON_RELEASE
      | `THREE_BUTTON_PRESS
      | `TWO_BUTTON_PRESS ]
  type t = GdkEvent.Button.types Gdk.event
  val cast : GdkEvent.any -> GdkEvent.Button.t
  val time : [< GdkEvent.timed ] Gdk.event -> int32
  external x : GdkEvent.Button.t -> float = "ml_GdkEventButton_x"
  external y : GdkEvent.Button.t -> float = "ml_GdkEventButton_y"
  external axes : GdkEvent.Button.t -> (float * float) option
    = "ml_GdkEventButton_axes"
  external state : GdkEvent.Button.t -> int = "ml_GdkEventButton_state"
  external button : GdkEvent.Button.t -> int = "ml_GdkEventButton_button"
  external device : GdkEvent.Button.t -> Gdk.device
    = "ml_GdkEventButton_device"
  external x_root : GdkEvent.Button.t -> float = "ml_GdkEventButton_x_root"
  external y_root : GdkEvent.Button.t -> float = "ml_GdkEventButton_y_root"
  external set_type : GdkEvent.Button.t -> [< GdkEvent.Button.types ] -> unit
    = "ml_gdk_event_set_type"
  external set_button : GdkEvent.Button.t -> int -> unit
    = "ml_gdk_event_button_set_button"
end