< 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 >