]> matita.cs.unibo.it Git - helm.git/blobdiff - helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gtkSignal.mli
Initial revision
[helm.git] / helm / DEVEL / lablgtk / lablgtk_20000829-0.1.0 / gtkSignal.mli
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gtkSignal.mli b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gtkSignal.mli
new file mode 100644 (file)
index 0000000..0ef2ab2
--- /dev/null
@@ -0,0 +1,45 @@
+(* $Id$ *)
+
+open Gtk
+
+type id
+type ('a,'b) t =
+ { name: string;
+   marshaller: ('b -> GtkArgv.t -> GtkArgv.data list -> unit) }
+
+val stop_emit : unit -> unit
+    (* Call [stop_emit ()] in a callback to prohibit further handling
+       of the current signal invocation, by calling [emit_stop_by_name].
+       Be careful about where you use it, since the concept of current
+       signal may be tricky. *)
+
+val connect :
+  sgn:('a, 'b) t -> callback:'b -> ?after:bool -> 'a obj -> id
+    (* You may use [stop_emit] inside the callback *)
+
+external disconnect : 'a obj -> id -> unit
+  = "ml_gtk_signal_disconnect"
+external emit_stop_by_name : 'a obj -> name:string -> unit
+  = "ml_gtk_signal_emit_stop_by_name"
+    (* Unsafe: use [stop_emit] instead. *)
+external handler_block : 'a obj -> id -> unit
+  = "ml_gtk_signal_handler_block"
+external handler_unblock : 'a obj -> id -> unit
+  = "ml_gtk_signal_handler_unblock"
+
+(* Some marshaller functions, to build signals *)
+val marshal_unit : (unit -> unit) -> GtkArgv.t -> GtkArgv.data list -> unit
+val marshal_int : (int -> unit) -> GtkArgv.t -> GtkArgv.data list -> unit
+
+(* Emitter functions *)
+val emit :
+  'a obj -> sgn:('a, 'b) t -> emitter:('a obj -> name:string -> 'b) -> 'b
+val emit_unit : 'a obj -> sgn:('a, unit -> unit) t -> unit
+val emit_int : 'a obj -> sgn:('a, int -> unit) t -> int -> unit
+
+(* Internal functions. *)
+val enter_callback : (unit -> unit) ref
+val exit_callback : (unit -> unit) ref
+type saved_state
+val push_callback : unit -> saved_state
+val pop_callback : saved_state -> bool