jdk/src/share/classes/sun/awt/SunDisplayChanger.java
changeset 3938 ef327bd847c0
parent 2 90ce3da70b43
child 5506 202f599c92aa
equal deleted inserted replaced
3934:487e1aa949c4 3938:ef327bd847c0
    31 import java.util.Map;
    31 import java.util.Map;
    32 import java.util.Set;
    32 import java.util.Set;
    33 import java.util.HashMap;
    33 import java.util.HashMap;
    34 import java.util.WeakHashMap;
    34 import java.util.WeakHashMap;
    35 
    35 
    36 import java.util.logging.*;
    36 import sun.util.logging.PlatformLogger;
    37 
    37 
    38 /**
    38 /**
    39  * This class is used to aid in keeping track of DisplayChangedListeners and
    39  * This class is used to aid in keeping track of DisplayChangedListeners and
    40  * notifying them when a display change has taken place. DisplayChangedListeners
    40  * notifying them when a display change has taken place. DisplayChangedListeners
    41  * are notified when the display's bit depth is changed, or when a top-level
    41  * are notified when the display's bit depth is changed, or when a top-level
    52  *
    52  *
    53  * displayChanged() is also called on Windows when they are moved from one
    53  * displayChanged() is also called on Windows when they are moved from one
    54  * screen to another on a system equipped with multiple displays.
    54  * screen to another on a system equipped with multiple displays.
    55  */
    55  */
    56 public class SunDisplayChanger {
    56 public class SunDisplayChanger {
    57     private static final Logger log = Logger.getLogger("sun.awt.multiscreen.SunDisplayChanger");
    57     private static final PlatformLogger log = PlatformLogger.getLogger("sun.awt.multiscreen.SunDisplayChanger");
    58 
    58 
    59     // Create a new synchronizedMap with initial capacity of one listener.
    59     // Create a new synchronizedMap with initial capacity of one listener.
    60     // It is asserted that the most common case is to have one GraphicsDevice
    60     // It is asserted that the most common case is to have one GraphicsDevice
    61     // and one top-level Window.
    61     // and one top-level Window.
    62     private Map listeners = Collections.synchronizedMap(new WeakHashMap(1));
    62     private Map listeners = Collections.synchronizedMap(new WeakHashMap(1));
    66     /*
    66     /*
    67      * Add a DisplayChangeListener to this SunDisplayChanger so that it is
    67      * Add a DisplayChangeListener to this SunDisplayChanger so that it is
    68      * notified when the display is changed.
    68      * notified when the display is changed.
    69      */
    69      */
    70     public void add(DisplayChangedListener theListener) {
    70     public void add(DisplayChangedListener theListener) {
    71         if (log.isLoggable(Level.FINE)) {
    71         if (log.isLoggable(PlatformLogger.FINE)) {
    72             if (theListener == null) {
    72             if (theListener == null) {
    73                 log.log(Level.FINE, "Assertion (theListener != null) failed");
    73                 log.fine("Assertion (theListener != null) failed");
    74             }
    74             }
    75         }
    75         }
    76         if (log.isLoggable(Level.FINER)) {
    76         if (log.isLoggable(PlatformLogger.FINER)) {
    77             log.log(Level.FINER, "Adding listener: " + theListener);
    77             log.finer("Adding listener: " + theListener);
    78         }
    78         }
    79         listeners.put(theListener, null);
    79         listeners.put(theListener, null);
    80     }
    80     }
    81 
    81 
    82     /*
    82     /*
    83      * Remove the given DisplayChangeListener from this SunDisplayChanger.
    83      * Remove the given DisplayChangeListener from this SunDisplayChanger.
    84      */
    84      */
    85     public void remove(DisplayChangedListener theListener) {
    85     public void remove(DisplayChangedListener theListener) {
    86         if (log.isLoggable(Level.FINE)) {
    86         if (log.isLoggable(PlatformLogger.FINE)) {
    87             if (theListener == null) {
    87             if (theListener == null) {
    88                 log.log(Level.FINE, "Assertion (theListener != null) failed");
    88                 log.fine("Assertion (theListener != null) failed");
    89             }
    89             }
    90         }
    90         }
    91         if (log.isLoggable(Level.FINER)) {
    91         if (log.isLoggable(PlatformLogger.FINER)) {
    92             log.log(Level.FINER, "Removing listener: " + theListener);
    92             log.finer("Removing listener: " + theListener);
    93         }
    93         }
    94         listeners.remove(theListener);
    94         listeners.remove(theListener);
    95     }
    95     }
    96 
    96 
    97     /*
    97     /*
    98      * Notify our list of DisplayChangedListeners that a display change has
    98      * Notify our list of DisplayChangedListeners that a display change has
    99      * taken place by calling their displayChanged() methods.
    99      * taken place by calling their displayChanged() methods.
   100      */
   100      */
   101     public void notifyListeners() {
   101     public void notifyListeners() {
   102         if (log.isLoggable(Level.FINEST)) {
   102         if (log.isLoggable(PlatformLogger.FINEST)) {
   103             log.log(Level.FINEST, "notifyListeners");
   103             log.finest("notifyListeners");
   104         }
   104         }
   105     // This method is implemented by making a clone of the set of listeners,
   105     // This method is implemented by making a clone of the set of listeners,
   106     // and then iterating over the clone.  This is because during the course
   106     // and then iterating over the clone.  This is because during the course
   107     // of responding to a display change, it may be appropriate for a
   107     // of responding to a display change, it may be appropriate for a
   108     // DisplayChangedListener to add or remove itself from a SunDisplayChanger.
   108     // DisplayChangedListener to add or remove itself from a SunDisplayChanger.
   124         Iterator itr = cloneSet.iterator();
   124         Iterator itr = cloneSet.iterator();
   125         while (itr.hasNext()) {
   125         while (itr.hasNext()) {
   126             DisplayChangedListener current =
   126             DisplayChangedListener current =
   127              (DisplayChangedListener) itr.next();
   127              (DisplayChangedListener) itr.next();
   128             try {
   128             try {
   129                 if (log.isLoggable(Level.FINEST)) {
   129                 if (log.isLoggable(PlatformLogger.FINEST)) {
   130                     log.log(Level.FINEST, "displayChanged for listener: " + current);
   130                     log.finest("displayChanged for listener: " + current);
   131                 }
   131                 }
   132                 current.displayChanged();
   132                 current.displayChanged();
   133             } catch (IllegalComponentStateException e) {
   133             } catch (IllegalComponentStateException e) {
   134                 // This DisplayChangeListener is no longer valid.  Most
   134                 // This DisplayChangeListener is no longer valid.  Most
   135                 // likely, a top-level window was dispose()d, but its
   135                 // likely, a top-level window was dispose()d, but its
   144     /*
   144     /*
   145      * Notify our list of DisplayChangedListeners that a palette change has
   145      * Notify our list of DisplayChangedListeners that a palette change has
   146      * taken place by calling their paletteChanged() methods.
   146      * taken place by calling their paletteChanged() methods.
   147      */
   147      */
   148     public void notifyPaletteChanged() {
   148     public void notifyPaletteChanged() {
   149         if (log.isLoggable(Level.FINEST)) {
   149         if (log.isLoggable(PlatformLogger.FINEST)) {
   150             log.finest("notifyPaletteChanged");
   150             log.finest("notifyPaletteChanged");
   151         }
   151         }
   152     // This method is implemented by making a clone of the set of listeners,
   152     // This method is implemented by making a clone of the set of listeners,
   153     // and then iterating over the clone.  This is because during the course
   153     // and then iterating over the clone.  This is because during the course
   154     // of responding to a display change, it may be appropriate for a
   154     // of responding to a display change, it may be appropriate for a
   170         Iterator itr = cloneSet.iterator();
   170         Iterator itr = cloneSet.iterator();
   171         while (itr.hasNext()) {
   171         while (itr.hasNext()) {
   172             DisplayChangedListener current =
   172             DisplayChangedListener current =
   173              (DisplayChangedListener) itr.next();
   173              (DisplayChangedListener) itr.next();
   174             try {
   174             try {
   175                 if (log.isLoggable(Level.FINEST)) {
   175                 if (log.isLoggable(PlatformLogger.FINEST)) {
   176                     log.log(Level.FINEST, "paletteChanged for listener: " + current);
   176                     log.finest("paletteChanged for listener: " + current);
   177                 }
   177                 }
   178                 current.paletteChanged();
   178                 current.paletteChanged();
   179             } catch (IllegalComponentStateException e) {
   179             } catch (IllegalComponentStateException e) {
   180                 // This DisplayChangeListener is no longer valid.  Most
   180                 // This DisplayChangeListener is no longer valid.  Most
   181                 // likely, a top-level window was dispose()d, but its
   181                 // likely, a top-level window was dispose()d, but its