< prev index next >

src/java.desktop/macosx/classes/sun/lwawt/macosx/CTrayIcon.java

Print this page

        

*** 41,50 **** --- 41,51 ---- import java.awt.TrayIcon; import java.awt.event.ActionEvent; import java.awt.event.MouseEvent; import java.awt.geom.Point2D; import java.awt.image.BufferedImage; + import java.awt.image.ImageObserver; import java.awt.peer.TrayIconPeer; import javax.swing.Icon; import javax.swing.UIManager;
*** 59,68 **** --- 60,70 ---- // In order to construct MouseEvent object, we need to specify a // Component target. Because TrayIcon isn't Component's subclass, // we use this dummy frame instead private final Frame dummyFrame; + IconObserver observer = new IconObserver(); // A bitmask that indicates what mouse buttons produce MOUSE_CLICKED events // on MOUSE_RELEASE. Click events are only generated if there were no drag // events between MOUSE_PRESSED and MOUSE_RELEASED for particular button private static int mouseClickButtons = 0;
*** 141,151 **** // obtain icon to show along the message Icon icon = getIconForMessageType(messageType); CImage cimage = null; if (icon != null) { BufferedImage image = scaleIcon(icon, 0.75); ! cimage = CImage.getCreator().createFromImage(image); } if (cimage != null) { cimage.execute(imagePtr -> { execute(ptr -> nativeShowNotification(ptr, caption, text, imagePtr)); --- 143,153 ---- // obtain icon to show along the message Icon icon = getIconForMessageType(messageType); CImage cimage = null; if (icon != null) { BufferedImage image = scaleIcon(icon, 0.75); ! cimage = CImage.getCreator().createFromImage(image, null); } if (cimage != null) { cimage.execute(imagePtr -> { execute(ptr -> nativeShowNotification(ptr, caption, text, imagePtr));
*** 182,194 **** //Not used. The popupmenu is shown from the native code. } @Override public void updateImage() { Image image = target.getImage(); ! if (image == null) return; MediaTracker tracker = new MediaTracker(new Button("")); tracker.addImage(image, 0); try { tracker.waitForAll(); } catch (InterruptedException ignore) { } --- 184,201 ---- //Not used. The popupmenu is shown from the native code. } @Override public void updateImage() { + Image image = target.getImage(); ! if (image != null) { ! updateNativeImage(image); ! } ! } + void updateNativeImage(Image image) { MediaTracker tracker = new MediaTracker(new Button("")); tracker.addImage(image, 0); try { tracker.waitForAll(); } catch (InterruptedException ignore) { }
*** 197,207 **** image.getHeight(null) <= 0) { return; } ! CImage cimage = CImage.getCreator().createFromImage(image); boolean imageAutoSize = target.isImageAutoSize(); cimage.execute(imagePtr -> { execute(ptr -> { setNativeImage(ptr, imagePtr, imageAutoSize); }); --- 204,214 ---- image.getHeight(null) <= 0) { return; } ! CImage cimage = CImage.getCreator().createFromImage(image, observer); boolean imageAutoSize = target.isImageAutoSize(); cimage.execute(imagePtr -> { execute(ptr -> { setNativeImage(ptr, imagePtr, imageAutoSize); });
*** 344,350 **** --- 351,377 ---- } else { // this is just an application icon return UIManager.getIcon("OptionPane.informationIcon"); } } + + class IconObserver implements ImageObserver { + @Override + public boolean imageUpdate(Image image, int flags, int x, int y, int width, int height) { + if (image != target.getImage()) // if the image has been changed + { + return false; + } + if ((flags & (ImageObserver.FRAMEBITS | ImageObserver.ALLBITS | + ImageObserver.WIDTH | ImageObserver.HEIGHT)) != 0) + { + SunToolkit.executeOnEventHandlerThread(target, new Runnable() { + public void run() { + updateNativeImage(image); + } + }); + } + return (flags & ImageObserver.ALLBITS) == 0; + } + } }
< prev index next >