< prev index next >
src/java.desktop/windows/classes/sun/awt/windows/WDesktopPeer.java
Print this page
*** 24,38 ****
--- 24,45 ----
*/
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,56 ****
/* 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";
@Override
public boolean isSupported(Action action) {
! // OPEN, EDIT, PRINT, MAIL, BROWSE all supported on windows.
return true;
}
@Override
public void open(File file) throws IOException {
this.ShellExecute(file, ACTION_OPEN_VERB);
--- 50,85 ----
/* 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) {
! switch(action) {
! case OPEN:
! case EDIT:
! case PRINT:
! case MAIL:
! case BROWSE:
! case MOVE_TO_TRASH:
! 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,97 ****
--- 121,180 ----
}
}
private static native String ShellExecute(String fileOrUri, String verb);
+ private static final EventListenerList listenerList = new EventListenerList();
+
+ @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) {
+ UserSessionListener[] listeners = listenerList.getListeners(UserSessionListener.class);
+ for (UserSessionListener use : listeners) {
+ EventQueue.invokeLater(() -> {
+ if (activated) {
+ use.userSessionActivated(new AppEvent.UserSessionEvent());
+ } else {
+ use.userSessionDeactivated(new AppEvent.UserSessionEvent());
+ }
+ });
+ }
+ }
+
+ 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 >