Skip to content

Commit 968bf21

Browse files
committed
Merge branch 'fix-quitting-on-macos' into develop
2 parents 263cea4 + 50d673a commit 968bf21

File tree

3 files changed

+13
-7
lines changed

3 files changed

+13
-7
lines changed

pom.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@
7373
</developer>
7474
<developer>
7575
<name>Johan Kaving</name>
76+
<url>https://github.com/jkaving/</url>
7677
</developer>
7778
<developer>
7879
<name>Maciej Kwiecien</name>

src/main/java/com/tagtraum/perf/gcviewer/ctrl/action/Exit.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,8 @@ public void actionPerformed(final ActionEvent e) {
3939
}
4040

4141
// Used by OS X adaptations
42-
public void quit() {
42+
public boolean quit() {
4343
actionPerformed(null);
44+
return true;
4445
}
4546
}

src/main/java/com/tagtraum/perf/gcviewer/view/util/OSXSupport.java

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,15 @@
11
package com.tagtraum.perf.gcviewer.view.util;
22

3-
import javax.swing.Action;
4-
5-
import com.tagtraum.perf.gcviewer.util.LoggerHelper;
6-
73
import java.awt.Image;
84
import java.awt.Window;
95
import java.lang.reflect.InvocationHandler;
106
import java.lang.reflect.Method;
117
import java.lang.reflect.Proxy;
128
import java.util.logging.Level;
139
import java.util.logging.Logger;
10+
import javax.swing.Action;
11+
12+
import com.tagtraum.perf.gcviewer.util.LoggerHelper;
1413

1514
/**
1615
* Handles Mac OS X specific stuff.
@@ -112,7 +111,7 @@ public static void addOSXHandler(String handlerClassName,
112111

113112
Class<?> handlerClass = Class.forName(handlerClassName);
114113
if (action != null) {
115-
Object aboutHandlerProxy =
114+
Object handlerProxy =
116115
Proxy.newProxyInstance(OSXSupport.class.getClassLoader(),
117116
new Class[]{handlerClass},
118117
new InvocationHandler() {
@@ -121,10 +120,15 @@ public Object invoke(Object o, Method method, Object[] args) throws Throwable {
121120
if (method.getName().equals(handlerMethodName)) {
122121
action.actionPerformed(null);
123122
}
123+
if (method.getName().equals("handleQuitRequestWith")) {
124+
// https://www.coderanch.com/how-to/javadoc/appledoc/api/com/apple/eawt/QuitHandler.html
125+
Object quitResponse = args[1];
126+
Class.forName("com.apple.eawt.QuitResponse").getDeclaredMethod("performQuit").invoke(quitResponse);
127+
}
124128
return null;
125129
}
126130
});
127-
application.getClass().getMethod(handlerSetterMethodName, handlerClass).invoke(application, aboutHandlerProxy);
131+
application.getClass().getMethod(handlerSetterMethodName, handlerClass).invoke(application, handlerProxy);
128132
} else {
129133
application.getClass().getMethod(handlerSetterMethodName, handlerClass).invoke(application, (Object) null);
130134
}

0 commit comments

Comments
 (0)