From 0ebfd70fc038bbd07fc24ebf03056245dc0c2dc6 Mon Sep 17 00:00:00 2001 From: hades Date: Fri, 13 Mar 2020 14:29:22 +0800 Subject: [PATCH 1/4] REPORT-28099 --- .../fr/design/mainframe/DesignerFrame.java | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrame.java b/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrame.java index d6b9c047e..e72f43a5c 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrame.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrame.java @@ -109,6 +109,9 @@ import java.awt.event.WindowListener; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; +import java.lang.reflect.InvocationHandler; +import java.lang.reflect.Method; +import java.lang.reflect.Proxy; import java.util.ArrayList; import java.util.Iterator; import java.util.List; @@ -316,6 +319,8 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta // window close listener. this.addWindowListeners(getFrameListeners()); + addMacOsListener(); + this.addComponentListener(new ComponentAdapter() { @Override @@ -523,6 +528,29 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta } } + private void addMacOsListener() { + if (OperatingSystem.isMacos()) { + try { + Class app = Class.forName("com.apple.eawt.Application"); + Class handler = Class.forName("com.apple.eawt.QuitHandler"); + Object instance = Proxy.newProxyInstance(handler.getClassLoader(), new Class[]{handler}, + new InvocationHandler() { + @Override + public Object invoke(Object proxy, Method method, + Object[] args) throws Throwable { + if ("handleQuitRequestWith".equals(method.getName())) { + DesignerFrame.this.exit(); + } + return null; + } + }); + Reflect.on(Reflect.on(app).call("getApplication").get()).call("setQuitHandler", instance); + } catch (ClassNotFoundException e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + } + } + } + protected ArrayList getFrameListeners() { ArrayList arrayList = new ArrayList<>(); From f4fe8314e8bcf5e750401b20495c9b6c676e0fe0 Mon Sep 17 00:00:00 2001 From: hades Date: Fri, 13 Mar 2020 15:42:26 +0800 Subject: [PATCH 2/4] =?UTF-8?q?fix=20=E9=80=82=E9=85=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/design/mainframe/DesignerFrame.java | 23 ++-------- .../com/fr/design/os/impl/MacOsAction.java | 44 +++++++++++++++++++ 2 files changed, 47 insertions(+), 20 deletions(-) create mode 100644 designer-base/src/main/java/com/fr/design/os/impl/MacOsAction.java diff --git a/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrame.java b/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrame.java index e72f43a5c..e119a4f01 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrame.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrame.java @@ -40,6 +40,7 @@ import com.fr.design.mainframe.toolbar.ToolBarMenuDockPlus; import com.fr.design.mainframe.vcs.common.VcsHelper; import com.fr.design.menu.MenuManager; import com.fr.design.menu.ShortCut; +import com.fr.design.os.impl.MacOsAction; import com.fr.design.os.impl.SupportOSImpl; import com.fr.design.utils.gui.GUICoreUtils; import com.fr.event.EventDispatcher; @@ -529,26 +530,8 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta } private void addMacOsListener() { - if (OperatingSystem.isMacos()) { - try { - Class app = Class.forName("com.apple.eawt.Application"); - Class handler = Class.forName("com.apple.eawt.QuitHandler"); - Object instance = Proxy.newProxyInstance(handler.getClassLoader(), new Class[]{handler}, - new InvocationHandler() { - @Override - public Object invoke(Object proxy, Method method, - Object[] args) throws Throwable { - if ("handleQuitRequestWith".equals(method.getName())) { - DesignerFrame.this.exit(); - } - return null; - } - }); - Reflect.on(Reflect.on(app).call("getApplication").get()).call("setQuitHandler", instance); - } catch (ClassNotFoundException e) { - FineLoggerFactory.getLogger().error(e.getMessage(), e); - } - } + MacOsAction macOsAction = OSSupportCenter.getAction(MacOsAction.class); + macOsAction.execute(this); } protected ArrayList getFrameListeners() { diff --git a/designer-base/src/main/java/com/fr/design/os/impl/MacOsAction.java b/designer-base/src/main/java/com/fr/design/os/impl/MacOsAction.java new file mode 100644 index 000000000..7f5c7be08 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/os/impl/MacOsAction.java @@ -0,0 +1,44 @@ +package com.fr.design.os.impl; + +import com.fr.design.mainframe.DesignerFrame; +import com.fr.invoke.Reflect; +import com.fr.log.FineLoggerFactory; +import com.fr.stable.os.OperatingSystem; +import com.fr.stable.os.support.OSBasedAction; + +import java.lang.reflect.InvocationHandler; +import java.lang.reflect.Method; +import java.lang.reflect.Proxy; + +/** + * @author hades + * @version 10.0 + * Created by hades on 2020/3/13 + */ +public class MacOsAction implements OSBasedAction { + + @Override + public void execute(final Object... objects) { + if (OperatingSystem.isMacos()) { + try { + Class app = Class.forName("com.apple.eawt.Application"); + Class handler = Class.forName("com.apple.eawt.QuitHandler"); + Object instance = Proxy.newProxyInstance(handler.getClassLoader(), new Class[]{handler}, + new InvocationHandler() { + @Override + public Object invoke(Object proxy, Method method, + Object[] args) throws Throwable { + if ("handleQuitRequestWith".equals(method.getName())) { + DesignerFrame designerFrame = (DesignerFrame) objects[0]; + designerFrame.exit(); + } + return null; + } + }); + Reflect.on(Reflect.on(app).call("getApplication").get()).call("setQuitHandler", instance); + } catch (ClassNotFoundException e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + } + } + } +} From 0b87e101ff2e67156b1cc613ea86808213813605 Mon Sep 17 00:00:00 2001 From: hades Date: Fri, 13 Mar 2020 15:44:26 +0800 Subject: [PATCH 3/4] =?UTF-8?q?fix=20=E6=97=A0=E7=94=A8import?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/fr/design/mainframe/DesignerFrame.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrame.java b/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrame.java index e119a4f01..4a9fbac8a 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrame.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrame.java @@ -110,9 +110,6 @@ import java.awt.event.WindowListener; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; -import java.lang.reflect.InvocationHandler; -import java.lang.reflect.Method; -import java.lang.reflect.Proxy; import java.util.ArrayList; import java.util.Iterator; import java.util.List; From a5943c127935fe9ff4a72775dd8230739dde5b99 Mon Sep 17 00:00:00 2001 From: hades Date: Fri, 13 Mar 2020 17:17:07 +0800 Subject: [PATCH 4/4] =?UTF-8?q?fix=20=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/design/mainframe/DesignerFrame.java | 5 +-- .../com/fr/design/os/impl/MacOsAction.java | 44 ------------------- .../os/impl/MacOsAddListenerAction.java | 41 +++++++++++++++++ .../com/fr/design/os/impl/SupportOSImpl.java | 10 +++++ 4 files changed, 53 insertions(+), 47 deletions(-) delete mode 100644 designer-base/src/main/java/com/fr/design/os/impl/MacOsAction.java create mode 100644 designer-base/src/main/java/com/fr/design/os/impl/MacOsAddListenerAction.java diff --git a/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrame.java b/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrame.java index 4a9fbac8a..237f2f975 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrame.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrame.java @@ -40,7 +40,7 @@ import com.fr.design.mainframe.toolbar.ToolBarMenuDockPlus; import com.fr.design.mainframe.vcs.common.VcsHelper; import com.fr.design.menu.MenuManager; import com.fr.design.menu.ShortCut; -import com.fr.design.os.impl.MacOsAction; +import com.fr.design.os.impl.MacOsAddListenerAction; import com.fr.design.os.impl.SupportOSImpl; import com.fr.design.utils.gui.GUICoreUtils; import com.fr.event.EventDispatcher; @@ -527,8 +527,7 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta } private void addMacOsListener() { - MacOsAction macOsAction = OSSupportCenter.getAction(MacOsAction.class); - macOsAction.execute(this); + OSSupportCenter.buildAction(new MacOsAddListenerAction(), SupportOSImpl.DOCK_QUIT); } protected ArrayList getFrameListeners() { diff --git a/designer-base/src/main/java/com/fr/design/os/impl/MacOsAction.java b/designer-base/src/main/java/com/fr/design/os/impl/MacOsAction.java deleted file mode 100644 index 7f5c7be08..000000000 --- a/designer-base/src/main/java/com/fr/design/os/impl/MacOsAction.java +++ /dev/null @@ -1,44 +0,0 @@ -package com.fr.design.os.impl; - -import com.fr.design.mainframe.DesignerFrame; -import com.fr.invoke.Reflect; -import com.fr.log.FineLoggerFactory; -import com.fr.stable.os.OperatingSystem; -import com.fr.stable.os.support.OSBasedAction; - -import java.lang.reflect.InvocationHandler; -import java.lang.reflect.Method; -import java.lang.reflect.Proxy; - -/** - * @author hades - * @version 10.0 - * Created by hades on 2020/3/13 - */ -public class MacOsAction implements OSBasedAction { - - @Override - public void execute(final Object... objects) { - if (OperatingSystem.isMacos()) { - try { - Class app = Class.forName("com.apple.eawt.Application"); - Class handler = Class.forName("com.apple.eawt.QuitHandler"); - Object instance = Proxy.newProxyInstance(handler.getClassLoader(), new Class[]{handler}, - new InvocationHandler() { - @Override - public Object invoke(Object proxy, Method method, - Object[] args) throws Throwable { - if ("handleQuitRequestWith".equals(method.getName())) { - DesignerFrame designerFrame = (DesignerFrame) objects[0]; - designerFrame.exit(); - } - return null; - } - }); - Reflect.on(Reflect.on(app).call("getApplication").get()).call("setQuitHandler", instance); - } catch (ClassNotFoundException e) { - FineLoggerFactory.getLogger().error(e.getMessage(), e); - } - } - } -} diff --git a/designer-base/src/main/java/com/fr/design/os/impl/MacOsAddListenerAction.java b/designer-base/src/main/java/com/fr/design/os/impl/MacOsAddListenerAction.java new file mode 100644 index 000000000..4d8c892b9 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/os/impl/MacOsAddListenerAction.java @@ -0,0 +1,41 @@ +package com.fr.design.os.impl; + +import com.fr.design.mainframe.DesignerFrame; +import com.fr.invoke.Reflect; +import com.fr.log.FineLoggerFactory; +import com.fr.stable.os.support.OSBasedAction; + +import java.lang.reflect.InvocationHandler; +import java.lang.reflect.Method; +import java.lang.reflect.Proxy; + +/** + * @author hades + * @version 10.0 + * Created by hades on 2020/3/13 + */ +public class MacOsAddListenerAction implements OSBasedAction { + + @Override + public void execute(final Object... objects) { + try { + Class app = Class.forName("com.apple.eawt.Application"); + Class handler = Class.forName("com.apple.eawt.QuitHandler"); + Object instance = Proxy.newProxyInstance(handler.getClassLoader(), new Class[]{handler}, + new InvocationHandler() { + @Override + public Object invoke(Object proxy, Method method, + Object[] args) throws Throwable { + if ("handleQuitRequestWith".equals(method.getName())) { + DesignerFrame designerFrame = (DesignerFrame) objects[0]; + designerFrame.exit(); + } + return null; + } + }); + Reflect.on(Reflect.on(app).call("getApplication").get()).call("setQuitHandler", instance); + } catch (ClassNotFoundException e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + } + } +} diff --git a/designer-base/src/main/java/com/fr/design/os/impl/SupportOSImpl.java b/designer-base/src/main/java/com/fr/design/os/impl/SupportOSImpl.java index 9bc29b829..2518ef57c 100644 --- a/designer-base/src/main/java/com/fr/design/os/impl/SupportOSImpl.java +++ b/designer-base/src/main/java/com/fr/design/os/impl/SupportOSImpl.java @@ -73,6 +73,16 @@ public enum SupportOSImpl implements SupportOS { public boolean support() { return FRContext.isChineseEnv() && !OperatingSystem.isMacos() && Arch.getArch() != Arch.ARM; } + }, + + /** + * mac下dock栏右键退出 + */ + DOCK_QUIT { + @Override + public boolean support() { + return OperatingSystem.isMacos(); + } } }