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