|
Packit |
bd2e5d |
##ifdef CAMLTK
|
|
Packit |
bd2e5d |
|
|
Packit |
bd2e5d |
open Widget;;
|
|
Packit |
bd2e5d |
|
|
Packit |
bd2e5d |
(* Events and bindings *)
|
|
Packit |
bd2e5d |
(* Builtin types *)
|
|
Packit |
bd2e5d |
(* type *)
|
|
Packit |
bd2e5d |
type xEvent =
|
|
Packit |
bd2e5d |
| Activate
|
|
Packit |
bd2e5d |
| ButtonPress (* also Button, but we omit it *)
|
|
Packit |
bd2e5d |
| ButtonPressDetail of int
|
|
Packit |
bd2e5d |
| ButtonRelease
|
|
Packit |
bd2e5d |
| ButtonReleaseDetail of int
|
|
Packit |
bd2e5d |
| Circulate
|
|
Packit |
bd2e5d |
| ColorMap (* not Colormap, avoiding confusion between the Colormap option *)
|
|
Packit |
bd2e5d |
| Configure
|
|
Packit |
bd2e5d |
| Deactivate
|
|
Packit |
bd2e5d |
| Destroy
|
|
Packit |
bd2e5d |
| Enter
|
|
Packit |
bd2e5d |
| Expose
|
|
Packit |
bd2e5d |
| FocusIn
|
|
Packit |
bd2e5d |
| FocusOut
|
|
Packit |
bd2e5d |
| Gravity
|
|
Packit |
bd2e5d |
| KeyPress (* also Key, but we omit it *)
|
|
Packit |
bd2e5d |
| KeyPressDetail of string (* /usr/include/X11/keysymdef.h *)
|
|
Packit |
bd2e5d |
| KeyRelease
|
|
Packit |
bd2e5d |
| KeyReleaseDetail of string
|
|
Packit |
bd2e5d |
| Leave
|
|
Packit |
bd2e5d |
| Map
|
|
Packit |
bd2e5d |
| Motion
|
|
Packit |
bd2e5d |
| Property
|
|
Packit |
bd2e5d |
| Reparent
|
|
Packit |
bd2e5d |
| Unmap
|
|
Packit |
bd2e5d |
| Visibility
|
|
Packit |
bd2e5d |
| Virtual of string (* Virtual event. Must be without modifiers *)
|
|
Packit |
bd2e5d |
;;
|
|
Packit |
bd2e5d |
(* /type *)
|
|
Packit |
bd2e5d |
|
|
Packit |
bd2e5d |
(* type *)
|
|
Packit |
bd2e5d |
type modifier =
|
|
Packit |
bd2e5d |
| Control
|
|
Packit |
bd2e5d |
| Shift
|
|
Packit |
bd2e5d |
| Lock
|
|
Packit |
bd2e5d |
| Button1
|
|
Packit |
bd2e5d |
| Button2
|
|
Packit |
bd2e5d |
| Button3
|
|
Packit |
bd2e5d |
| Button4
|
|
Packit |
bd2e5d |
| Button5
|
|
Packit |
bd2e5d |
| Double
|
|
Packit |
bd2e5d |
| Triple
|
|
Packit |
bd2e5d |
| Mod1
|
|
Packit |
bd2e5d |
| Mod2
|
|
Packit |
bd2e5d |
| Mod3
|
|
Packit |
bd2e5d |
| Mod4
|
|
Packit |
bd2e5d |
| Mod5
|
|
Packit |
bd2e5d |
| Meta
|
|
Packit |
bd2e5d |
| Alt
|
|
Packit |
bd2e5d |
;;
|
|
Packit |
bd2e5d |
(* /type *)
|
|
Packit |
bd2e5d |
|
|
Packit |
bd2e5d |
(* Event structure, passed to bounded functions *)
|
|
Packit |
bd2e5d |
|
|
Packit |
bd2e5d |
(* type *)
|
|
Packit |
bd2e5d |
type eventInfo =
|
|
Packit |
bd2e5d |
{
|
|
Packit |
bd2e5d |
(* %# : event serial number is unsupported *)
|
|
Packit |
bd2e5d |
mutable ev_Above : int; (* tk: %a *)
|
|
Packit |
bd2e5d |
mutable ev_ButtonNumber : int; (* tk: %b *)
|
|
Packit |
bd2e5d |
mutable ev_Count : int; (* tk: %c *)
|
|
Packit |
bd2e5d |
mutable ev_Detail : string; (* tk: %d *)
|
|
Packit |
bd2e5d |
mutable ev_Focus : bool; (* tk: %f *)
|
|
Packit |
bd2e5d |
mutable ev_Height : int; (* tk: %h *)
|
|
Packit |
bd2e5d |
mutable ev_KeyCode : int; (* tk: %k *)
|
|
Packit |
bd2e5d |
mutable ev_Mode : string; (* tk: %m *)
|
|
Packit |
bd2e5d |
mutable ev_OverrideRedirect : bool; (* tk: %o *)
|
|
Packit |
bd2e5d |
mutable ev_Place : string; (* tk: %p *)
|
|
Packit |
bd2e5d |
mutable ev_State : string; (* tk: %s *)
|
|
Packit |
bd2e5d |
mutable ev_Time : int; (* tk: %t *)
|
|
Packit |
bd2e5d |
mutable ev_Width : int; (* tk: %w *)
|
|
Packit |
bd2e5d |
mutable ev_MouseX : int; (* tk: %x *)
|
|
Packit |
bd2e5d |
mutable ev_MouseY : int; (* tk: %y *)
|
|
Packit |
bd2e5d |
mutable ev_Char : string; (* tk: %A *)
|
|
Packit |
bd2e5d |
mutable ev_BorderWidth : int; (* tk: %B *)
|
|
Packit |
bd2e5d |
mutable ev_SendEvent : bool; (* tk: %E *)
|
|
Packit |
bd2e5d |
mutable ev_KeySymString : string; (* tk: %K *)
|
|
Packit |
bd2e5d |
mutable ev_KeySymInt : int; (* tk: %N *)
|
|
Packit |
bd2e5d |
mutable ev_RootWindow : int; (* tk: %R *)
|
|
Packit |
bd2e5d |
mutable ev_SubWindow : int; (* tk: %S *)
|
|
Packit |
bd2e5d |
mutable ev_Type : int; (* tk: %T *)
|
|
Packit |
bd2e5d |
mutable ev_Widget : widget; (* tk: %W *)
|
|
Packit |
bd2e5d |
mutable ev_RootX : int; (* tk: %X *)
|
|
Packit |
bd2e5d |
mutable ev_RootY : int (* tk: %Y *)
|
|
Packit |
bd2e5d |
}
|
|
Packit |
bd2e5d |
;;
|
|
Packit |
bd2e5d |
(* /type *)
|
|
Packit |
bd2e5d |
|
|
Packit |
bd2e5d |
|
|
Packit |
bd2e5d |
(* To avoid collision with other constructors (Width, State),
|
|
Packit |
bd2e5d |
use Ev_ prefix *)
|
|
Packit |
bd2e5d |
(* type *)
|
|
Packit |
bd2e5d |
type eventField =
|
|
Packit |
bd2e5d |
| Ev_Above
|
|
Packit |
bd2e5d |
| Ev_ButtonNumber
|
|
Packit |
bd2e5d |
| Ev_Count
|
|
Packit |
bd2e5d |
| Ev_Detail
|
|
Packit |
bd2e5d |
| Ev_Focus
|
|
Packit |
bd2e5d |
| Ev_Height
|
|
Packit |
bd2e5d |
| Ev_KeyCode
|
|
Packit |
bd2e5d |
| Ev_Mode
|
|
Packit |
bd2e5d |
| Ev_OverrideRedirect
|
|
Packit |
bd2e5d |
| Ev_Place
|
|
Packit |
bd2e5d |
| Ev_State
|
|
Packit |
bd2e5d |
| Ev_Time
|
|
Packit |
bd2e5d |
| Ev_Width
|
|
Packit |
bd2e5d |
| Ev_MouseX
|
|
Packit |
bd2e5d |
| Ev_MouseY
|
|
Packit |
bd2e5d |
| Ev_Char
|
|
Packit |
bd2e5d |
| Ev_BorderWidth
|
|
Packit |
bd2e5d |
| Ev_SendEvent
|
|
Packit |
bd2e5d |
| Ev_KeySymString
|
|
Packit |
bd2e5d |
| Ev_KeySymInt
|
|
Packit |
bd2e5d |
| Ev_RootWindow
|
|
Packit |
bd2e5d |
| Ev_SubWindow
|
|
Packit |
bd2e5d |
| Ev_Type
|
|
Packit |
bd2e5d |
| Ev_Widget
|
|
Packit |
bd2e5d |
| Ev_RootX
|
|
Packit |
bd2e5d |
| Ev_RootY
|
|
Packit |
bd2e5d |
;;
|
|
Packit |
bd2e5d |
(* /type *)
|
|
Packit |
bd2e5d |
|
|
Packit |
bd2e5d |
let filleventInfo ev v = function
|
|
Packit |
bd2e5d |
| Ev_Above -> ev.ev_Above <- int_of_string v
|
|
Packit |
bd2e5d |
| Ev_ButtonNumber -> ev.ev_ButtonNumber <- int_of_string v
|
|
Packit |
bd2e5d |
| Ev_Count -> ev.ev_Count <- int_of_string v
|
|
Packit |
bd2e5d |
| Ev_Detail -> ev.ev_Detail <- v
|
|
Packit |
bd2e5d |
| Ev_Focus -> ev.ev_Focus <- v = "1"
|
|
Packit |
bd2e5d |
| Ev_Height -> ev.ev_Height <- int_of_string v
|
|
Packit |
bd2e5d |
| Ev_KeyCode -> ev.ev_KeyCode <- int_of_string v
|
|
Packit |
bd2e5d |
| Ev_Mode -> ev.ev_Mode <- v
|
|
Packit |
bd2e5d |
| Ev_OverrideRedirect -> ev.ev_OverrideRedirect <- v = "1"
|
|
Packit |
bd2e5d |
| Ev_Place -> ev.ev_Place <- v
|
|
Packit |
bd2e5d |
| Ev_State -> ev.ev_State <- v
|
|
Packit |
bd2e5d |
| Ev_Time -> ev.ev_Time <- int_of_string v
|
|
Packit |
bd2e5d |
| Ev_Width -> ev.ev_Width <- int_of_string v
|
|
Packit |
bd2e5d |
| Ev_MouseX -> ev.ev_MouseX <- int_of_string v
|
|
Packit |
bd2e5d |
| Ev_MouseY -> ev.ev_MouseY <- int_of_string v
|
|
Packit |
bd2e5d |
| Ev_Char -> ev.ev_Char <- v
|
|
Packit |
bd2e5d |
| Ev_BorderWidth -> ev.ev_BorderWidth <- int_of_string v
|
|
Packit |
bd2e5d |
| Ev_SendEvent -> ev.ev_SendEvent <- v = "1"
|
|
Packit |
bd2e5d |
| Ev_KeySymString -> ev.ev_KeySymString <- v
|
|
Packit |
bd2e5d |
| Ev_KeySymInt -> ev.ev_KeySymInt <- int_of_string v
|
|
Packit |
bd2e5d |
| Ev_RootWindow -> ev.ev_RootWindow <- int_of_string v
|
|
Packit |
bd2e5d |
| Ev_SubWindow -> ev.ev_SubWindow <- int_of_string v
|
|
Packit |
bd2e5d |
| Ev_Type -> ev.ev_Type <- int_of_string v
|
|
Packit |
bd2e5d |
| Ev_Widget -> ev.ev_Widget <- cTKtoCAMLwidget v
|
|
Packit |
bd2e5d |
| Ev_RootX -> ev.ev_RootX <- int_of_string v
|
|
Packit |
bd2e5d |
| Ev_RootY -> ev.ev_RootY <- int_of_string v
|
|
Packit |
bd2e5d |
;;
|
|
Packit |
bd2e5d |
|
|
Packit |
bd2e5d |
let wrapeventInfo f what =
|
|
Packit |
bd2e5d |
let ev = {
|
|
Packit |
bd2e5d |
ev_Above = 0;
|
|
Packit |
bd2e5d |
ev_ButtonNumber = 0;
|
|
Packit |
bd2e5d |
ev_Count = 0;
|
|
Packit |
bd2e5d |
ev_Detail = "";
|
|
Packit |
bd2e5d |
ev_Focus = false;
|
|
Packit |
bd2e5d |
ev_Height = 0;
|
|
Packit |
bd2e5d |
ev_KeyCode = 0;
|
|
Packit |
bd2e5d |
ev_Mode = "";
|
|
Packit |
bd2e5d |
ev_OverrideRedirect = false;
|
|
Packit |
bd2e5d |
ev_Place = "";
|
|
Packit |
bd2e5d |
ev_State = "";
|
|
Packit |
bd2e5d |
ev_Time = 0;
|
|
Packit |
bd2e5d |
ev_Width = 0;
|
|
Packit |
bd2e5d |
ev_MouseX = 0;
|
|
Packit |
bd2e5d |
ev_MouseY = 0;
|
|
Packit |
bd2e5d |
ev_Char = "";
|
|
Packit |
bd2e5d |
ev_BorderWidth = 0;
|
|
Packit |
bd2e5d |
ev_SendEvent = false;
|
|
Packit |
bd2e5d |
ev_KeySymString = "";
|
|
Packit |
bd2e5d |
ev_KeySymInt = 0;
|
|
Packit |
bd2e5d |
ev_RootWindow = 0;
|
|
Packit |
bd2e5d |
ev_SubWindow = 0;
|
|
Packit |
bd2e5d |
ev_Type = 0;
|
|
Packit |
bd2e5d |
ev_Widget = Widget.default_toplevel;
|
|
Packit |
bd2e5d |
ev_RootX = 0;
|
|
Packit |
bd2e5d |
ev_RootY = 0 } in
|
|
Packit |
bd2e5d |
function args ->
|
|
Packit |
bd2e5d |
let l = ref args in
|
|
Packit |
bd2e5d |
List.iter (function field ->
|
|
Packit |
bd2e5d |
match !l with
|
|
Packit |
bd2e5d |
[] -> ()
|
|
Packit |
bd2e5d |
| v::rest -> filleventInfo ev v field; l:=rest)
|
|
Packit |
bd2e5d |
what;
|
|
Packit |
bd2e5d |
f ev
|
|
Packit |
bd2e5d |
;;
|
|
Packit |
bd2e5d |
|
|
Packit |
bd2e5d |
let rec writeeventField = function
|
|
Packit |
bd2e5d |
| [] -> ""
|
|
Packit |
bd2e5d |
| field::rest ->
|
|
Packit |
bd2e5d |
begin
|
|
Packit |
bd2e5d |
match field with
|
|
Packit |
bd2e5d |
| Ev_Above -> " %a"
|
|
Packit |
bd2e5d |
| Ev_ButtonNumber ->" %b"
|
|
Packit |
bd2e5d |
| Ev_Count -> " %c"
|
|
Packit |
bd2e5d |
| Ev_Detail -> " %d"
|
|
Packit |
bd2e5d |
| Ev_Focus -> " %f"
|
|
Packit |
bd2e5d |
| Ev_Height -> " %h"
|
|
Packit |
bd2e5d |
| Ev_KeyCode -> " %k"
|
|
Packit |
bd2e5d |
| Ev_Mode -> " %m"
|
|
Packit |
bd2e5d |
| Ev_OverrideRedirect -> " %o"
|
|
Packit |
bd2e5d |
| Ev_Place -> " %p"
|
|
Packit |
bd2e5d |
| Ev_State -> " %s"
|
|
Packit |
bd2e5d |
| Ev_Time -> " %t"
|
|
Packit |
bd2e5d |
| Ev_Width -> " %w"
|
|
Packit |
bd2e5d |
| Ev_MouseX -> " %x"
|
|
Packit |
bd2e5d |
| Ev_MouseY -> " %y"
|
|
Packit |
bd2e5d |
(* Quoting is done by Tk *)
|
|
Packit |
bd2e5d |
| Ev_Char -> " %A"
|
|
Packit |
bd2e5d |
| Ev_BorderWidth -> " %B"
|
|
Packit |
bd2e5d |
| Ev_SendEvent -> " %E"
|
|
Packit |
bd2e5d |
| Ev_KeySymString -> " %K"
|
|
Packit |
bd2e5d |
| Ev_KeySymInt -> " %N"
|
|
Packit |
bd2e5d |
| Ev_RootWindow ->" %R"
|
|
Packit |
bd2e5d |
| Ev_SubWindow -> " %S"
|
|
Packit |
bd2e5d |
| Ev_Type -> " %T"
|
|
Packit |
bd2e5d |
| Ev_Widget ->" %W"
|
|
Packit |
bd2e5d |
| Ev_RootX -> " %X"
|
|
Packit |
bd2e5d |
| Ev_RootY -> " %Y"
|
|
Packit |
bd2e5d |
end
|
|
Packit |
bd2e5d |
^ writeeventField rest
|
|
Packit |
bd2e5d |
;;
|
|
Packit |
bd2e5d |
|
|
Packit |
bd2e5d |
##else
|
|
Packit |
bd2e5d |
|
|
Packit |
bd2e5d |
open Widget;;
|
|
Packit |
bd2e5d |
|
|
Packit |
bd2e5d |
(* Events and bindings *)
|
|
Packit |
bd2e5d |
(* Builtin types *)
|
|
Packit |
bd2e5d |
|
|
Packit |
bd2e5d |
(* type *)
|
|
Packit |
bd2e5d |
type event = [
|
|
Packit |
bd2e5d |
| `Activate
|
|
Packit |
bd2e5d |
| `ButtonPress (* also Button, but we omit it *)
|
|
Packit |
bd2e5d |
| `ButtonPressDetail of int
|
|
Packit |
bd2e5d |
| `ButtonRelease
|
|
Packit |
bd2e5d |
| `ButtonReleaseDetail of int
|
|
Packit |
bd2e5d |
| `Circulate
|
|
Packit |
bd2e5d |
| `Colormap
|
|
Packit |
bd2e5d |
| `Configure
|
|
Packit |
bd2e5d |
| `Deactivate
|
|
Packit |
bd2e5d |
| `Destroy
|
|
Packit |
bd2e5d |
| `Enter
|
|
Packit |
bd2e5d |
| `Expose
|
|
Packit |
bd2e5d |
| `FocusIn
|
|
Packit |
bd2e5d |
| `FocusOut
|
|
Packit |
bd2e5d |
| `Gravity
|
|
Packit |
bd2e5d |
| `KeyPress (* also Key, but we omit it *)
|
|
Packit |
bd2e5d |
| `KeyPressDetail of string (* /usr/include/X11/keysymdef.h *)
|
|
Packit |
bd2e5d |
| `KeyRelease
|
|
Packit |
bd2e5d |
| `KeyReleaseDetail of string
|
|
Packit |
bd2e5d |
| `Leave
|
|
Packit |
bd2e5d |
| `Map
|
|
Packit |
bd2e5d |
| `Motion
|
|
Packit |
bd2e5d |
| `Property
|
|
Packit |
bd2e5d |
| `Reparent
|
|
Packit |
bd2e5d |
| `Unmap
|
|
Packit |
bd2e5d |
| `Visibility
|
|
Packit |
bd2e5d |
| `Virtual of string (* Virtual event. Must be without modifiers *)
|
|
Packit |
bd2e5d |
| `Modified of modifier list * event
|
|
Packit |
bd2e5d |
]
|
|
Packit |
bd2e5d |
|
|
Packit |
bd2e5d |
and modifier = [
|
|
Packit |
bd2e5d |
| `Control
|
|
Packit |
bd2e5d |
| `Shift
|
|
Packit |
bd2e5d |
| `Lock
|
|
Packit |
bd2e5d |
| `Button1
|
|
Packit |
bd2e5d |
| `Button2
|
|
Packit |
bd2e5d |
| `Button3
|
|
Packit |
bd2e5d |
| `Button4
|
|
Packit |
bd2e5d |
| `Button5
|
|
Packit |
bd2e5d |
| `Double
|
|
Packit |
bd2e5d |
| `Triple
|
|
Packit |
bd2e5d |
| `Mod1
|
|
Packit |
bd2e5d |
| `Mod2
|
|
Packit |
bd2e5d |
| `Mod3
|
|
Packit |
bd2e5d |
| `Mod4
|
|
Packit |
bd2e5d |
| `Mod5
|
|
Packit |
bd2e5d |
| `Meta
|
|
Packit |
bd2e5d |
| `Alt
|
|
Packit |
bd2e5d |
]
|
|
Packit |
bd2e5d |
;;
|
|
Packit |
bd2e5d |
(* /type *)
|
|
Packit |
bd2e5d |
|
|
Packit |
bd2e5d |
(* Event structure, passed to bounded functions *)
|
|
Packit |
bd2e5d |
|
|
Packit |
bd2e5d |
(* type *)
|
|
Packit |
bd2e5d |
type eventInfo = {
|
|
Packit |
bd2e5d |
(* %# : event serial number is unsupported *)
|
|
Packit |
bd2e5d |
mutable ev_Above : int; (* tk: %a *)
|
|
Packit |
bd2e5d |
mutable ev_ButtonNumber : int; (* tk: %b *)
|
|
Packit |
bd2e5d |
mutable ev_Count : int; (* tk: %c *)
|
|
Packit |
bd2e5d |
mutable ev_Detail : string; (* tk: %d *)
|
|
Packit |
bd2e5d |
mutable ev_Focus : bool; (* tk: %f *)
|
|
Packit |
bd2e5d |
mutable ev_Height : int; (* tk: %h *)
|
|
Packit |
bd2e5d |
mutable ev_KeyCode : int; (* tk: %k *)
|
|
Packit |
bd2e5d |
mutable ev_Mode : string; (* tk: %m *)
|
|
Packit |
bd2e5d |
mutable ev_OverrideRedirect : bool; (* tk: %o *)
|
|
Packit |
bd2e5d |
mutable ev_Place : string; (* tk: %p *)
|
|
Packit |
bd2e5d |
mutable ev_State : string; (* tk: %s *)
|
|
Packit |
bd2e5d |
mutable ev_Time : int; (* tk: %t *)
|
|
Packit |
bd2e5d |
mutable ev_Width : int; (* tk: %w *)
|
|
Packit |
bd2e5d |
mutable ev_MouseX : int; (* tk: %x *)
|
|
Packit |
bd2e5d |
mutable ev_MouseY : int; (* tk: %y *)
|
|
Packit |
bd2e5d |
mutable ev_Char : string; (* tk: %A *)
|
|
Packit |
bd2e5d |
mutable ev_BorderWidth : int; (* tk: %B *)
|
|
Packit |
bd2e5d |
mutable ev_SendEvent : bool; (* tk: %E *)
|
|
Packit |
bd2e5d |
mutable ev_KeySymString : string; (* tk: %K *)
|
|
Packit |
bd2e5d |
mutable ev_KeySymInt : int; (* tk: %N *)
|
|
Packit |
bd2e5d |
mutable ev_RootWindow : int; (* tk: %R *)
|
|
Packit |
bd2e5d |
mutable ev_SubWindow : int; (* tk: %S *)
|
|
Packit |
bd2e5d |
mutable ev_Type : int; (* tk: %T *)
|
|
Packit |
bd2e5d |
mutable ev_Widget : any widget; (* tk: %W *)
|
|
Packit |
bd2e5d |
mutable ev_RootX : int; (* tk: %X *)
|
|
Packit |
bd2e5d |
mutable ev_RootY : int (* tk: %Y *)
|
|
Packit |
bd2e5d |
}
|
|
Packit |
bd2e5d |
;;
|
|
Packit |
bd2e5d |
(* /type *)
|
|
Packit |
bd2e5d |
|
|
Packit |
bd2e5d |
|
|
Packit |
bd2e5d |
(* To avoid collision with other constructors (Width, State),
|
|
Packit |
bd2e5d |
use Ev_ prefix *)
|
|
Packit |
bd2e5d |
(* type *)
|
|
Packit |
bd2e5d |
type eventField = [
|
|
Packit |
bd2e5d |
| `Above
|
|
Packit |
bd2e5d |
| `ButtonNumber
|
|
Packit |
bd2e5d |
| `Count
|
|
Packit |
bd2e5d |
| `Detail
|
|
Packit |
bd2e5d |
| `Focus
|
|
Packit |
bd2e5d |
| `Height
|
|
Packit |
bd2e5d |
| `KeyCode
|
|
Packit |
bd2e5d |
| `Mode
|
|
Packit |
bd2e5d |
| `OverrideRedirect
|
|
Packit |
bd2e5d |
| `Place
|
|
Packit |
bd2e5d |
| `State
|
|
Packit |
bd2e5d |
| `Time
|
|
Packit |
bd2e5d |
| `Width
|
|
Packit |
bd2e5d |
| `MouseX
|
|
Packit |
bd2e5d |
| `MouseY
|
|
Packit |
bd2e5d |
| `Char
|
|
Packit |
bd2e5d |
| `BorderWidth
|
|
Packit |
bd2e5d |
| `SendEvent
|
|
Packit |
bd2e5d |
| `KeySymString
|
|
Packit |
bd2e5d |
| `KeySymInt
|
|
Packit |
bd2e5d |
| `RootWindow
|
|
Packit |
bd2e5d |
| `SubWindow
|
|
Packit |
bd2e5d |
| `Type
|
|
Packit |
bd2e5d |
| `Widget
|
|
Packit |
bd2e5d |
| `RootX
|
|
Packit |
bd2e5d |
| `RootY
|
|
Packit |
bd2e5d |
]
|
|
Packit |
bd2e5d |
;;
|
|
Packit |
bd2e5d |
(* /type *)
|
|
Packit |
bd2e5d |
|
|
Packit |
bd2e5d |
let filleventInfo ev v : eventField -> unit = function
|
|
Packit |
bd2e5d |
| `Above -> ev.ev_Above <- int_of_string v
|
|
Packit |
bd2e5d |
| `ButtonNumber -> ev.ev_ButtonNumber <- int_of_string v
|
|
Packit |
bd2e5d |
| `Count -> ev.ev_Count <- int_of_string v
|
|
Packit |
bd2e5d |
| `Detail -> ev.ev_Detail <- v
|
|
Packit |
bd2e5d |
| `Focus -> ev.ev_Focus <- v = "1"
|
|
Packit |
bd2e5d |
| `Height -> ev.ev_Height <- int_of_string v
|
|
Packit |
bd2e5d |
| `KeyCode -> ev.ev_KeyCode <- int_of_string v
|
|
Packit |
bd2e5d |
| `Mode -> ev.ev_Mode <- v
|
|
Packit |
bd2e5d |
| `OverrideRedirect -> ev.ev_OverrideRedirect <- v = "1"
|
|
Packit |
bd2e5d |
| `Place -> ev.ev_Place <- v
|
|
Packit |
bd2e5d |
| `State -> ev.ev_State <- v
|
|
Packit |
bd2e5d |
| `Time -> ev.ev_Time <- int_of_string v
|
|
Packit |
bd2e5d |
| `Width -> ev.ev_Width <- int_of_string v
|
|
Packit |
bd2e5d |
| `MouseX -> ev.ev_MouseX <- int_of_string v
|
|
Packit |
bd2e5d |
| `MouseY -> ev.ev_MouseY <- int_of_string v
|
|
Packit |
bd2e5d |
| `Char -> ev.ev_Char <- v
|
|
Packit |
bd2e5d |
| `BorderWidth -> ev.ev_BorderWidth <- int_of_string v
|
|
Packit |
bd2e5d |
| `SendEvent -> ev.ev_SendEvent <- v = "1"
|
|
Packit |
bd2e5d |
| `KeySymString -> ev.ev_KeySymString <- v
|
|
Packit |
bd2e5d |
| `KeySymInt -> ev.ev_KeySymInt <- int_of_string v
|
|
Packit |
bd2e5d |
| `RootWindow -> ev.ev_RootWindow <- int_of_string v
|
|
Packit |
bd2e5d |
| `SubWindow -> ev.ev_SubWindow <- int_of_string v
|
|
Packit |
bd2e5d |
| `Type -> ev.ev_Type <- int_of_string v
|
|
Packit |
bd2e5d |
| `Widget -> ev.ev_Widget <- cTKtoCAMLwidget v
|
|
Packit |
bd2e5d |
| `RootX -> ev.ev_RootX <- int_of_string v
|
|
Packit |
bd2e5d |
| `RootY -> ev.ev_RootY <- int_of_string v
|
|
Packit |
bd2e5d |
;;
|
|
Packit |
bd2e5d |
|
|
Packit |
bd2e5d |
let wrapeventInfo f (what : eventField list) =
|
|
Packit |
bd2e5d |
let ev = {
|
|
Packit |
bd2e5d |
ev_Above = 0;
|
|
Packit |
bd2e5d |
ev_ButtonNumber = 0;
|
|
Packit |
bd2e5d |
ev_Count = 0;
|
|
Packit |
bd2e5d |
ev_Detail = "";
|
|
Packit |
bd2e5d |
ev_Focus = false;
|
|
Packit |
bd2e5d |
ev_Height = 0;
|
|
Packit |
bd2e5d |
ev_KeyCode = 0;
|
|
Packit |
bd2e5d |
ev_Mode = "";
|
|
Packit |
bd2e5d |
ev_OverrideRedirect = false;
|
|
Packit |
bd2e5d |
ev_Place = "";
|
|
Packit |
bd2e5d |
ev_State = "";
|
|
Packit |
bd2e5d |
ev_Time = 0;
|
|
Packit |
bd2e5d |
ev_Width = 0;
|
|
Packit |
bd2e5d |
ev_MouseX = 0;
|
|
Packit |
bd2e5d |
ev_MouseY = 0;
|
|
Packit |
bd2e5d |
ev_Char = "";
|
|
Packit |
bd2e5d |
ev_BorderWidth = 0;
|
|
Packit |
bd2e5d |
ev_SendEvent = false;
|
|
Packit |
bd2e5d |
ev_KeySymString = "";
|
|
Packit |
bd2e5d |
ev_KeySymInt = 0;
|
|
Packit |
bd2e5d |
ev_RootWindow = 0;
|
|
Packit |
bd2e5d |
ev_SubWindow = 0;
|
|
Packit |
bd2e5d |
ev_Type = 0;
|
|
Packit |
bd2e5d |
ev_Widget = forget_type default_toplevel;
|
|
Packit |
bd2e5d |
ev_RootX = 0;
|
|
Packit |
bd2e5d |
ev_RootY = 0 } in
|
|
Packit |
bd2e5d |
function args ->
|
|
Packit |
bd2e5d |
let l = ref args in
|
|
Packit |
bd2e5d |
List.iter what ~f:
|
|
Packit |
bd2e5d |
begin fun field ->
|
|
Packit |
bd2e5d |
match !l with
|
|
Packit |
bd2e5d |
| [] -> ()
|
|
Packit |
bd2e5d |
| v :: rest -> filleventInfo ev v field; l := rest
|
|
Packit |
bd2e5d |
end;
|
|
Packit |
bd2e5d |
f ev
|
|
Packit |
bd2e5d |
;;
|
|
Packit |
bd2e5d |
|
|
Packit |
bd2e5d |
let rec writeeventField : eventField list -> string = function
|
|
Packit |
bd2e5d |
| [] -> ""
|
|
Packit |
bd2e5d |
| field :: rest ->
|
|
Packit |
bd2e5d |
begin
|
|
Packit |
bd2e5d |
match field with
|
|
Packit |
bd2e5d |
| `Above -> " %a"
|
|
Packit |
bd2e5d |
| `ButtonNumber ->" %b"
|
|
Packit |
bd2e5d |
| `Count -> " %c"
|
|
Packit |
bd2e5d |
| `Detail -> " %d"
|
|
Packit |
bd2e5d |
| `Focus -> " %f"
|
|
Packit |
bd2e5d |
| `Height -> " %h"
|
|
Packit |
bd2e5d |
| `KeyCode -> " %k"
|
|
Packit |
bd2e5d |
| `Mode -> " %m"
|
|
Packit |
bd2e5d |
| `OverrideRedirect -> " %o"
|
|
Packit |
bd2e5d |
| `Place -> " %p"
|
|
Packit |
bd2e5d |
| `State -> " %s"
|
|
Packit |
bd2e5d |
| `Time -> " %t"
|
|
Packit |
bd2e5d |
| `Width -> " %w"
|
|
Packit |
bd2e5d |
| `MouseX -> " %x"
|
|
Packit |
bd2e5d |
| `MouseY -> " %y"
|
|
Packit |
bd2e5d |
(* Quoting is done by Tk *)
|
|
Packit |
bd2e5d |
| `Char -> " %A"
|
|
Packit |
bd2e5d |
| `BorderWidth -> " %B"
|
|
Packit |
bd2e5d |
| `SendEvent -> " %E"
|
|
Packit |
bd2e5d |
| `KeySymString -> " %K"
|
|
Packit |
bd2e5d |
| `KeySymInt -> " %N"
|
|
Packit |
bd2e5d |
| `RootWindow ->" %R"
|
|
Packit |
bd2e5d |
| `SubWindow -> " %S"
|
|
Packit |
bd2e5d |
| `Type -> " %T"
|
|
Packit |
bd2e5d |
| `Widget -> " %W"
|
|
Packit |
bd2e5d |
| `RootX -> " %X"
|
|
Packit |
bd2e5d |
| `RootY -> " %Y"
|
|
Packit |
bd2e5d |
end
|
|
Packit |
bd2e5d |
^ writeeventField rest
|
|
Packit |
bd2e5d |
;;
|
|
Packit |
bd2e5d |
|
|
Packit |
bd2e5d |
##endif
|