more careful treatment of context visibility for rule declarations (see also 39d9c7f175e0, e639d91d9073) -- avoid duplicate warnings;
/* Title: Pure/GUI/jfx_thread.scala
Module: PIDE-GUI
Author: Makarius
Evaluation within the Java FX application thread.
*/
package isabelle
import javafx.application.{Platform => JFX_Platform}
object JFX_Thread
{
/* checks */
def assert() = Predef.assert(JFX_Platform.isFxApplicationThread())
def require() = Predef.require(JFX_Platform.isFxApplicationThread())
/* asynchronous context switch */
def later(body: => Unit)
{
if (JFX_Platform.isFxApplicationThread()) body
else JFX_Platform.runLater(new Runnable { def run = body })
}
def future[A](body: => A): Future[A] =
{
if (JFX_Platform.isFxApplicationThread()) Future.value(body)
else {
val promise = Future.promise[A]
later { promise.fulfill_result(Exn.capture(body)) }
promise
}
}
}