From 7bf5ef8afa4346ef41d12c8fd56fb751dd02345d Mon Sep 17 00:00:00 2001 From: crschnick Date: Sat, 17 Feb 2024 21:10:56 +0000 Subject: [PATCH] Rework macos tray and dock handling --- app/build.gradle | 6 ------ app/src/main/java/io/xpipe/app/core/App.java | 17 +++++++++++++++++ .../java/io/xpipe/app/core/mode/TrayMode.java | 3 ++- build.gradle | 7 +++++++ 4 files changed, 26 insertions(+), 7 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index a89712eb6..140a982aa 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -64,12 +64,6 @@ dependencies { apply from: "$rootDir/gradle/gradle_scripts/local_junit_suite.gradle" -import org.gradle.internal.os.OperatingSystem - -if (OperatingSystem.current() == OperatingSystem.LINUX) { - jvmRunArgs.addAll("--add-opens", "java.desktop/sun.awt.X11=io.xpipe.app") -} - def extensionJarDepList = project.allExtensions.stream().map(p -> p.getTasksByName('jar', true)).toList(); jar { finalizedBy(extensionJarDepList) diff --git a/app/src/main/java/io/xpipe/app/core/App.java b/app/src/main/java/io/xpipe/app/core/App.java index cbc711019..50d1a3bc8 100644 --- a/app/src/main/java/io/xpipe/app/core/App.java +++ b/app/src/main/java/io/xpipe/app/core/App.java @@ -2,6 +2,7 @@ package io.xpipe.app.core; import io.xpipe.app.Main; import io.xpipe.app.comp.AppLayoutComp; +import io.xpipe.app.core.mode.OperationMode; import io.xpipe.app.fxcomps.util.PlatformThread; import io.xpipe.app.issue.ErrorEvent; import io.xpipe.app.issue.TrackEvent; @@ -12,9 +13,13 @@ import javafx.application.Application; import javafx.beans.binding.Bindings; import javafx.stage.Stage; import lombok.Getter; +import lombok.SneakyThrows; import javax.imageio.ImageIO; import java.awt.*; +import java.awt.desktop.AppReopenedEvent; +import java.awt.desktop.AppReopenedListener; +import java.awt.desktop.SystemEventListener; @Getter public class App extends Application { @@ -27,6 +32,7 @@ public class App extends Application { } @Override + @SneakyThrows public void start(Stage primaryStage) { TrackEvent.info("Application launched"); APP = this; @@ -51,6 +57,17 @@ public class App extends Application { Desktop.getDesktop().setPreferencesHandler(e -> { AppLayoutModel.get().selectSettings(); }); + + // Do it this way to prevent IDE inspections from complaining + var c = Class.forName(ModuleLayer.boot().findModule("java.desktop").orElseThrow(), + "com.apple.eawt.Application"); + var m = c.getDeclaredMethod("addAppEventListener", SystemEventListener.class); + m.invoke(c.getMethod("getApplication").invoke(null), new AppReopenedListener() { + @Override + public void appReopened(AppReopenedEvent e) { + OperationMode.switchToAsync(OperationMode.GUI); + } + }); } if (OsType.getLocal().equals(OsType.LINUX)) { diff --git a/app/src/main/java/io/xpipe/app/core/mode/TrayMode.java b/app/src/main/java/io/xpipe/app/core/mode/TrayMode.java index e74743130..b3189d27f 100644 --- a/app/src/main/java/io/xpipe/app/core/mode/TrayMode.java +++ b/app/src/main/java/io/xpipe/app/core/mode/TrayMode.java @@ -3,6 +3,7 @@ package io.xpipe.app.core.mode; import io.xpipe.app.core.AppTray; import io.xpipe.app.fxcomps.util.PlatformThread; import io.xpipe.app.issue.*; +import io.xpipe.core.process.OsType; import java.awt.*; @@ -10,7 +11,7 @@ public class TrayMode extends PlatformMode { @Override public boolean isSupported() { - return super.isSupported() && Desktop.isDesktopSupported() && SystemTray.isSupported(); + return !OsType.getLocal().equals(OsType.MACOS) && super.isSupported() && Desktop.isDesktopSupported() && SystemTray.isSupported(); } @Override diff --git a/build.gradle b/build.gradle index 6b2a2d89d..75fd8b3b1 100644 --- a/build.gradle +++ b/build.gradle @@ -93,6 +93,13 @@ project.ext { useBundledJavaFx = fullVersion && !(platformName == 'linux' && arch == 'arm64') } +if (org.gradle.internal.os.OperatingSystem.current() == org.gradle.internal.os.OperatingSystem.LINUX) { + jvmRunArgs.addAll("--add-opens", "java.desktop/sun.awt.X11=io.xpipe.app") +} +if (org.gradle.internal.os.OperatingSystem.current() == org.gradle.internal.os.OperatingSystem.MAC_OS) { + jvmRunArgs.addAll("--add-exports", "java.desktop/com.apple.eawt=io.xpipe.app") +} + if (isFullRelease && rawVersion.contains("-")) { throw new IllegalArgumentException("Releases must have canonical versions") }