< prev index next >
src/java.desktop/windows/classes/sun/awt/windows/WDesktopPeer.java
Print this page
@@ -24,15 +24,22 @@
*/
package sun.awt.windows;
+import java.awt.AppEvent;
import java.awt.Desktop.Action;
+import java.awt.EventQueue;
+import java.awt.desktop.SystemEventListener;
+import java.awt.desktop.SystemSleepListener;
+import java.awt.desktop.UserSessionListener;
import java.awt.peer.DesktopPeer;
import java.io.File;
import java.io.IOException;
import java.net.URI;
+import javax.swing.event.EventListenerList;
+import sun.awt.OSInfo;
/**
* Concrete implementation of the interface <code>DesktopPeer</code> for
* the Windows platform.
@@ -43,14 +50,37 @@
/* Contants for the operation verbs */
private static String ACTION_OPEN_VERB = "open";
private static String ACTION_EDIT_VERB = "edit";
private static String ACTION_PRINT_VERB = "print";
+ private static boolean isEventUserSessionSupported = false;
+
+ private static native void init();
+
+ WDesktopPeer() {
+ init();
+ isEventUserSessionSupported = OSInfo.getWindowsVersion()
+ .compareTo(OSInfo.WINDOWS_VISTA) >= 0;
+ }
+
@Override
public boolean isSupported(Action action) {
- // OPEN, EDIT, PRINT, MAIL, BROWSE all supported on windows.
+ switch(action) {
+ case OPEN:
+ case EDIT:
+ case PRINT:
+ case MAIL:
+ case BROWSE:
+ case MOVE_TO_TRASH:
+ case APP_SUDDEN_TERMINATION:
+ case APP_EVENT_SYSTEM_SLEEP:
return true;
+ case APP_EVENT_USER_SESSION:
+ return isEventUserSessionSupported;
+ default:
+ return false;
+ }
}
@Override
public void open(File file) throws IOException {
this.ShellExecute(file, ACTION_OPEN_VERB);
@@ -92,6 +122,72 @@
}
}
private static native String ShellExecute(String fileOrUri, String verb);
+ private static final EventListenerList listenerList = new EventListenerList();
+
+ @Override
+ public void disableSuddenTermination() {
+ setSuddenTerminationEnabled(false);
+ }
+
+ @Override
+ public void enableSuddenTermination() {
+ setSuddenTerminationEnabled(true);
+ }
+
+ private static native void setSuddenTerminationEnabled(boolean enable);
+
+ @Override
+ public void addAppEventListener(final SystemEventListener listener) {
+ if (listener instanceof UserSessionListener) {
+ listenerList.add(UserSessionListener.class, (UserSessionListener) listener);
+ }
+ if (listener instanceof SystemSleepListener) {
+ listenerList.add(SystemSleepListener.class, (SystemSleepListener) listener);
+ }
+ }
+
+ @Override
+ public void removeAppEventListener(final SystemEventListener listener) {
+ if (listener instanceof UserSessionListener) {
+ listenerList.remove(UserSessionListener.class, (UserSessionListener) listener);
+ }
+ if (listener instanceof SystemSleepListener) {
+ listenerList.remove(SystemSleepListener.class, (SystemSleepListener) listener);
+ }
+ }
+
+ private static void userSessionCallback(boolean activated, int reason) {
+ UserSessionListener[] listeners = listenerList.getListeners(UserSessionListener.class);
+ for (UserSessionListener use : listeners) {
+ EventQueue.invokeLater(() -> {
+ if (activated) {
+ use.userSessionActivated(new AppEvent.UserSessionEvent(reason));
+ } else {
+ use.userSessionDeactivated(new AppEvent.UserSessionEvent(reason));
+ }
+ });
+ }
+ }
+
+ private static void systemSleepCallback(boolean resumed) {
+ SystemSleepListener[] listeners = listenerList.getListeners(SystemSleepListener.class);
+ for (SystemSleepListener ssl : listeners) {
+ EventQueue.invokeLater(() -> {
+ if (resumed) {
+ ssl.systemAwoke(new AppEvent.SystemSleepEvent());
+ } else {
+ ssl.systemAboutToSleep(new AppEvent.SystemSleepEvent());
+ }
+ });
+ }
+ }
+
+ @Override
+ public boolean moveToTrash(File file) {
+ return moveToTrash(file.getAbsolutePath());
+ }
+ private static native boolean moveToTrash(String file);
+
}
< prev index next >