lablgtk3

OCaml interface to GTK+3
IN THIS PACKAGE
Module GtkThread
val main : unit -> unit

The main loop to use with threads. GMain.main does not work! This changes GMain.main to call threaded_main rather than GtkMain.Main.default_main, so subsequent calls will work. The first call sets the GUI thread, and subsequent calls to main will be automatically routed through sync. With system threads, the ocaml giant lock is now released on polling, so that other ocaml threads can run without busy wait.

Setting busy_waiting to true forces the main loop to be non-blocking. This is required with VM threads. The default value is set to true at startup if the environment variable LABLGTK_BUSY_WAIT is set to something other than 0.

val busy_waiting : bool ref

Setting busy_waiting to true forces the main loop to be non-blocking. This is required with VM threads. The default value is set to true at startup if the environment variable LABLGTK_BUSY_WAIT is set to something other than 0.

Start the main loop in a new GUI thread. Do not use recursively. Do not use with the Quartz backend, as the GUI must imperatively run in the main thread.

val start : unit -> Thread.t

Start the main loop in a new GUI thread. Do not use recursively. Do not use with the Quartz backend, as the GUI must imperatively run in the main thread.

The real main function

val thread_main : unit -> unit

The real main function

Forget the current GUI thread. The next call to main will register its caller as GUI thread.

val reset : unit -> unit

Forget the current GUI thread. The next call to main will register its caller as GUI thread.

val async : ( 'a -> unit ) -> 'a -> unit

Add an asynchronous job (to do in the main thread)

Add a synchronous job (to do in the main thread)

val sync : ( 'a -> 'b ) -> 'a -> 'b

Add a synchronous job (to do in the main thread)

Whether it is safe to call most GTK functions directly from the current thread

val gui_safe : unit -> bool

Whether it is safe to call most GTK functions directly from the current thread

Allow other threads to run, and process the message queue. The following ensures that messages will be processed even if another main loop is running: Glib.Timeout.add ~ms:100 ~callback:GtkThread.do_jobs

val do_jobs : unit -> bool

Allow other threads to run, and process the message queue. The following ensures that messages will be processed even if another main loop is running: Glib.Timeout.add ~ms:100 ~callback:GtkThread.do_jobs

val set_do_jobs_delay : float -> unit

Set the delay used in the main loop when busy_waiting is true. Higher value will make the application less CPU-consuming, but (relatively) less reactive. Default value is 0.013 .