more friendly desktop application on macOS;
authorwenzelm
Tue, 22 Dec 2020 15:49:22 +0100
changeset 72981 c78d1dfc6571
parent 72978 7e7ed27fe625
child 72982 adda33fdb5d0
more friendly desktop application on macOS;
lib/Tools/java_monitor
src/Pure/GUI/desktop_app.scala
src/Pure/Tools/java_monitor.scala
src/Pure/build-jars
--- a/lib/Tools/java_monitor	Mon Dec 21 23:22:14 2020 +0100
+++ b/lib/Tools/java_monitor	Tue Dec 22 15:49:22 2020 +0100
@@ -4,4 +4,4 @@
 #
 # DESCRIPTION: monitor another Java process
 
-isabelle java isabelle.Java_Monitor "$@"
+isabelle java "-Dapple.awt.application.name=Java Monitor" isabelle.Java_Monitor "$@"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/Pure/GUI/desktop_app.scala	Tue Dec 22 15:49:22 2020 +0100
@@ -0,0 +1,22 @@
+/*  Title:      Pure/GUI/desktop_app.scala
+    Author:     Makarius
+
+Support for desktop applications, notably on macOS.
+*/
+
+package isabelle
+
+import java.awt.Desktop
+
+
+object Desktop_App
+{
+  def desktop_action(action: Desktop.Action, f: Desktop => Unit): Unit =
+    if (Desktop.isDesktopSupported) {
+      val desktop = Desktop.getDesktop
+      if (desktop.isSupported(action)) f(desktop)
+    }
+
+  def about_handler(handler: => Unit): Unit =
+    desktop_action(Desktop.Action.APP_ABOUT, _.setAboutHandler(_ => handler))
+}
--- a/src/Pure/Tools/java_monitor.scala	Mon Dec 21 23:22:14 2020 +0100
+++ b/src/Pure/Tools/java_monitor.scala	Tue Dec 22 15:49:22 2020 +0100
@@ -9,7 +9,8 @@
 
 import java.awt.Component
 import javax.swing.UIManager
-import sun.tools.jconsole.{JConsole, LocalVirtualMachine, VMPanel, ProxyClient}
+import sun.tools.jconsole.{JConsole, LocalVirtualMachine, VMPanel, ProxyClient,
+  Messages, Resources => JConsoleResources}
 
 
 object Java_Monitor
@@ -40,6 +41,13 @@
           System.setProperty("swing.defaultlaf", laf)
       }
 
+      Desktop_App.about_handler {
+        GUI.dialog(null, "Java Monitor",
+          JConsoleResources.format(
+            Messages.JCONSOLE_VERSION, System.getProperty("java.runtime.version"))
+        )
+      }
+
       val jconsole = new JConsole(false)
 
       val screen = GUI.mouse_location()
--- a/src/Pure/build-jars	Mon Dec 21 23:22:14 2020 +0100
+++ b/src/Pure/build-jars	Tue Dec 22 15:49:22 2020 +0100
@@ -45,6 +45,7 @@
   src/Pure/Concurrent/par_list.scala
   src/Pure/Concurrent/synchronized.scala
   src/Pure/GUI/color_value.scala
+  src/Pure/GUI/desktop_app.scala
   src/Pure/GUI/gui.scala
   src/Pure/GUI/gui_thread.scala
   src/Pure/GUI/popup.scala