src/solaris/classes/sun/awt/X11/XSystemTrayPeer.java

Print this page




  41     private volatile boolean available;
  42     private final XMSelection selection = new XMSelection("_NET_SYSTEM_TRAY");
  43 
  44     private static final int SCREEN = 0;
  45     private static final String SYSTEM_TRAY_PROPERTY_NAME = "systemTray";
  46     private static final XAtom _NET_SYSTEM_TRAY = XAtom.get("_NET_SYSTEM_TRAY_S" + SCREEN);
  47     private static final XAtom _XEMBED_INFO = XAtom.get("_XEMBED_INFO");
  48     private static final XAtom _NET_SYSTEM_TRAY_OPCODE = XAtom.get("_NET_SYSTEM_TRAY_OPCODE");
  49     private static final XAtom _NET_WM_ICON = XAtom.get("_NET_WM_ICON");
  50     private static final long SYSTEM_TRAY_REQUEST_DOCK = 0;
  51 
  52     XSystemTrayPeer(SystemTray target) {
  53         this.target = target;
  54         peerInstance = this;
  55 
  56         selection.addSelectionListener(this);
  57 
  58         long selection_owner = selection.getOwner(SCREEN);
  59         available = (selection_owner != XConstants.None);
  60 

  61         log.fine(" check if system tray is available. selection owner: " + selection_owner);
  62     }

  63 
  64     public void ownerChanged(int screen, XMSelection sel, long newOwner, long data, long timestamp) {
  65         if (screen != SCREEN) {
  66             return;
  67         }
  68         if (!available) {
  69             available = true;
  70             firePropertyChange(SYSTEM_TRAY_PROPERTY_NAME, null, target);
  71         } else {
  72             removeTrayPeers();
  73         }
  74         createTrayPeers();
  75     }
  76 
  77     public void ownerDeath(int screen, XMSelection sel, long deadOwner) {
  78         if (screen != SCREEN) {
  79             return;
  80         }
  81         if (available) {
  82             available = false;


  89     }
  90 
  91     public Dimension getTrayIconSize() {
  92         return new Dimension(XTrayIconPeer.TRAY_ICON_HEIGHT, XTrayIconPeer.TRAY_ICON_WIDTH);
  93     }
  94 
  95     boolean isAvailable() {
  96         return available;
  97     }
  98 
  99     void dispose() {
 100         selection.removeSelectionListener(this);
 101     }
 102 
 103     // ***********************************************************************
 104     // ***********************************************************************
 105 
 106     void addTrayIcon(XTrayIconPeer tiPeer) throws AWTException {
 107         long selection_owner = selection.getOwner(SCREEN);
 108 

 109         log.fine(" send SYSTEM_TRAY_REQUEST_DOCK message to owner: " + selection_owner);

 110 
 111         if (selection_owner == XConstants.None) {
 112             throw new AWTException("TrayIcon couldn't be displayed.");
 113         }
 114 
 115         long tray_window = tiPeer.getWindow();
 116         long data[] = new long[] {XEmbedHelper.XEMBED_VERSION, XEmbedHelper.XEMBED_MAPPED};
 117         long data_ptr = Native.card32ToData(data);
 118 
 119         _XEMBED_INFO.setAtomData(tray_window, data_ptr, data.length);
 120 
 121         sendMessage(selection_owner, SYSTEM_TRAY_REQUEST_DOCK, tray_window, 0, 0);
 122     }
 123 
 124     void sendMessage(long win, long msg, long data1, long data2, long data3) {
 125         XClientMessageEvent xev = new XClientMessageEvent();
 126 
 127         try {
 128             xev.set_type(XConstants.ClientMessage);
 129             xev.set_window(win);




  41     private volatile boolean available;
  42     private final XMSelection selection = new XMSelection("_NET_SYSTEM_TRAY");
  43 
  44     private static final int SCREEN = 0;
  45     private static final String SYSTEM_TRAY_PROPERTY_NAME = "systemTray";
  46     private static final XAtom _NET_SYSTEM_TRAY = XAtom.get("_NET_SYSTEM_TRAY_S" + SCREEN);
  47     private static final XAtom _XEMBED_INFO = XAtom.get("_XEMBED_INFO");
  48     private static final XAtom _NET_SYSTEM_TRAY_OPCODE = XAtom.get("_NET_SYSTEM_TRAY_OPCODE");
  49     private static final XAtom _NET_WM_ICON = XAtom.get("_NET_WM_ICON");
  50     private static final long SYSTEM_TRAY_REQUEST_DOCK = 0;
  51 
  52     XSystemTrayPeer(SystemTray target) {
  53         this.target = target;
  54         peerInstance = this;
  55 
  56         selection.addSelectionListener(this);
  57 
  58         long selection_owner = selection.getOwner(SCREEN);
  59         available = (selection_owner != XConstants.None);
  60 
  61         if (log.isLoggable(PlatformLogger.FINE)) {
  62             log.fine(" check if system tray is available. selection owner: " + selection_owner);
  63         }
  64     }
  65 
  66     public void ownerChanged(int screen, XMSelection sel, long newOwner, long data, long timestamp) {
  67         if (screen != SCREEN) {
  68             return;
  69         }
  70         if (!available) {
  71             available = true;
  72             firePropertyChange(SYSTEM_TRAY_PROPERTY_NAME, null, target);
  73         } else {
  74             removeTrayPeers();
  75         }
  76         createTrayPeers();
  77     }
  78 
  79     public void ownerDeath(int screen, XMSelection sel, long deadOwner) {
  80         if (screen != SCREEN) {
  81             return;
  82         }
  83         if (available) {
  84             available = false;


  91     }
  92 
  93     public Dimension getTrayIconSize() {
  94         return new Dimension(XTrayIconPeer.TRAY_ICON_HEIGHT, XTrayIconPeer.TRAY_ICON_WIDTH);
  95     }
  96 
  97     boolean isAvailable() {
  98         return available;
  99     }
 100 
 101     void dispose() {
 102         selection.removeSelectionListener(this);
 103     }
 104 
 105     // ***********************************************************************
 106     // ***********************************************************************
 107 
 108     void addTrayIcon(XTrayIconPeer tiPeer) throws AWTException {
 109         long selection_owner = selection.getOwner(SCREEN);
 110 
 111         if (log.isLoggable(PlatformLogger.FINE)) {
 112             log.fine(" send SYSTEM_TRAY_REQUEST_DOCK message to owner: " + selection_owner);
 113         }
 114 
 115         if (selection_owner == XConstants.None) {
 116             throw new AWTException("TrayIcon couldn't be displayed.");
 117         }
 118 
 119         long tray_window = tiPeer.getWindow();
 120         long data[] = new long[] {XEmbedHelper.XEMBED_VERSION, XEmbedHelper.XEMBED_MAPPED};
 121         long data_ptr = Native.card32ToData(data);
 122 
 123         _XEMBED_INFO.setAtomData(tray_window, data_ptr, data.length);
 124 
 125         sendMessage(selection_owner, SYSTEM_TRAY_REQUEST_DOCK, tray_window, 0, 0);
 126     }
 127 
 128     void sendMessage(long win, long msg, long data1, long data2, long data3) {
 129         XClientMessageEvent xev = new XClientMessageEvent();
 130 
 131         try {
 132             xev.set_type(XConstants.ClientMessage);
 133             xev.set_window(win);