jdk/src/solaris/classes/sun/awt/X11/XWINProtocol.java
changeset 3938 ef327bd847c0
parent 439 3488710b02f8
child 5506 202f599c92aa
equal deleted inserted replaced
3934:487e1aa949c4 3938:ef327bd847c0
    25 
    25 
    26 
    26 
    27 package sun.awt.X11;
    27 package sun.awt.X11;
    28 
    28 
    29 import java.awt.*;
    29 import java.awt.*;
    30 import java.util.logging.Level;
    30 import sun.util.logging.PlatformLogger;
    31 import java.util.logging.Logger;
       
    32 
    31 
    33 class XWINProtocol extends XProtocol implements XStateProtocol, XLayerProtocol {
    32 class XWINProtocol extends XProtocol implements XStateProtocol, XLayerProtocol {
    34     final static Logger log = Logger.getLogger("sun.awt.X11.XWINProtocol");
    33     final static PlatformLogger log = PlatformLogger.getLogger("sun.awt.X11.XWINProtocol");
    35 
    34 
    36 /* Gnome WM spec  */
    35 /* Gnome WM spec  */
    37     XAtom XA_WIN_SUPPORTING_WM_CHECK = XAtom.get("_WIN_SUPPORTING_WM_CHECK");
    36     XAtom XA_WIN_SUPPORTING_WM_CHECK = XAtom.get("_WIN_SUPPORTING_WM_CHECK");
    38     XAtom XA_WIN_PROTOCOLS = XAtom.get("_WIN_PROTOCOLS");
    37     XAtom XA_WIN_PROTOCOLS = XAtom.get("_WIN_PROTOCOLS");
    39     XAtom XA_WIN_STATE = XAtom.get("_WIN_STATE");
    38     XAtom XA_WIN_STATE = XAtom.get("_WIN_STATE");
    62             req.set_window(window.getWindow());
    61             req.set_window(window.getWindow());
    63             req.set_message_type(XA_WIN_STATE.getAtom());
    62             req.set_message_type(XA_WIN_STATE.getAtom());
    64             req.set_format(32);
    63             req.set_format(32);
    65             req.set_data(0, (WIN_STATE_MAXIMIZED_HORIZ | WIN_STATE_MAXIMIZED_VERT));
    64             req.set_data(0, (WIN_STATE_MAXIMIZED_HORIZ | WIN_STATE_MAXIMIZED_VERT));
    66             req.set_data(1, win_state);
    65             req.set_data(1, win_state);
    67             if (log.isLoggable(Level.FINE)) log.fine("Sending WIN_STATE to root to change the state to " + win_state);
    66             if (log.isLoggable(PlatformLogger.FINE)) log.fine("Sending WIN_STATE to root to change the state to " + win_state);
    68             try {
    67             try {
    69                 XToolkit.awtLock();
    68                 XToolkit.awtLock();
    70                 XlibWrapper.XSendEvent(XToolkit.getDisplay(),
    69                 XlibWrapper.XSendEvent(XToolkit.getDisplay(),
    71                         XlibWrapper.RootWindow(XToolkit.getDisplay(),
    70                         XlibWrapper.RootWindow(XToolkit.getDisplay(),
    72                             window.getScreenNumber()),
    71                             window.getScreenNumber()),
   110                 win_state |= WIN_STATE_MAXIMIZED_HORIZ;
   109                 win_state |= WIN_STATE_MAXIMIZED_HORIZ;
   111             } else {
   110             } else {
   112                 win_state &= ~WIN_STATE_MAXIMIZED_HORIZ;
   111                 win_state &= ~WIN_STATE_MAXIMIZED_HORIZ;
   113             }
   112             }
   114             if ((old_win_state ^ win_state) != 0) {
   113             if ((old_win_state ^ win_state) != 0) {
   115                 if (log.isLoggable(Level.FINE)) log.fine("Setting WIN_STATE on " + window + " to change the state to " + win_state);
   114                 if (log.isLoggable(PlatformLogger.FINE)) log.fine("Setting WIN_STATE on " + window + " to change the state to " + win_state);
   116                 XA_WIN_STATE.setCard32Property(window, win_state);
   115                 XA_WIN_STATE.setCard32Property(window, win_state);
   117             }
   116             }
   118         }
   117         }
   119     }
   118     }
   120 
   119 
   155             req.set_message_type(XA_WIN_LAYER.getAtom());
   154             req.set_message_type(XA_WIN_LAYER.getAtom());
   156             req.set_format(32);
   155             req.set_format(32);
   157             req.set_data(0, layer == LAYER_NORMAL ? WIN_LAYER_NORMAL : WIN_LAYER_ONTOP);
   156             req.set_data(0, layer == LAYER_NORMAL ? WIN_LAYER_NORMAL : WIN_LAYER_ONTOP);
   158             req.set_data(1, 0);
   157             req.set_data(1, 0);
   159             req.set_data(2, 0);
   158             req.set_data(2, 0);
   160             if (log.isLoggable(Level.FINE)) log.fine("Setting layer " + layer + " by root message : " + req);
   159             if (log.isLoggable(PlatformLogger.FINE)) log.fine("Setting layer " + layer + " by root message : " + req);
   161             XToolkit.awtLock();
   160             XToolkit.awtLock();
   162             try {
   161             try {
   163                 XlibWrapper.XSendEvent(XToolkit.getDisplay(),
   162                 XlibWrapper.XSendEvent(XToolkit.getDisplay(),
   164                         XlibWrapper.RootWindow(XToolkit.getDisplay(),
   163                         XlibWrapper.RootWindow(XToolkit.getDisplay(),
   165                             window.getScreenNumber()),
   164                             window.getScreenNumber()),
   170             finally {
   169             finally {
   171                 XToolkit.awtUnlock();
   170                 XToolkit.awtUnlock();
   172             }
   171             }
   173             req.dispose();
   172             req.dispose();
   174         } else {
   173         } else {
   175             if (log.isLoggable(Level.FINE)) log.fine("Setting layer property to " + layer);
   174             if (log.isLoggable(PlatformLogger.FINE)) log.fine("Setting layer property to " + layer);
   176             XA_WIN_LAYER.setCard32Property(window, layer == LAYER_NORMAL ? WIN_LAYER_NORMAL : WIN_LAYER_ONTOP);
   175             XA_WIN_LAYER.setCard32Property(window, layer == LAYER_NORMAL ? WIN_LAYER_NORMAL : WIN_LAYER_ONTOP);
   177         }
   176         }
   178     }
   177     }
   179 
   178 
   180     XAtom XA_WIN_LAYER = XAtom.get("_WIN_LAYER");
   179     XAtom XA_WIN_LAYER = XAtom.get("_WIN_LAYER");
   196         if (supportChecked) {
   195         if (supportChecked) {
   197             return;
   196             return;
   198         }
   197         }
   199         WinWindow = checkAnchor(XA_WIN_SUPPORTING_WM_CHECK, XAtom.XA_CARDINAL);
   198         WinWindow = checkAnchor(XA_WIN_SUPPORTING_WM_CHECK, XAtom.XA_CARDINAL);
   200         supportChecked = true;
   199         supportChecked = true;
   201         if (log.isLoggable(Level.FINE)) log.fine("### " + this + " is active: " + (WinWindow != 0));
   200         if (log.isLoggable(PlatformLogger.FINE)) log.fine("### " + this + " is active: " + (WinWindow != 0));
   202     }
   201     }
   203 
   202 
   204     boolean active() {
   203     boolean active() {
   205         detect();
   204         detect();
   206         return WinWindow != 0;
   205         return WinWindow != 0;
   207     }
   206     }
   208     boolean doStateProtocol() {
   207     boolean doStateProtocol() {
   209         boolean res = active() && checkProtocol(XA_WIN_PROTOCOLS, XA_WIN_STATE);
   208         boolean res = active() && checkProtocol(XA_WIN_PROTOCOLS, XA_WIN_STATE);
   210         if (log.isLoggable(Level.FINE)) log.fine("### " + this + " supports state: " + res);
   209         if (log.isLoggable(PlatformLogger.FINE)) log.fine("### " + this + " supports state: " + res);
   211         return res;
   210         return res;
   212     }
   211     }
   213 
   212 
   214     boolean doLayerProtocol() {
   213     boolean doLayerProtocol() {
   215         boolean res = active() && checkProtocol(XA_WIN_PROTOCOLS, XA_WIN_LAYER);
   214         boolean res = active() && checkProtocol(XA_WIN_PROTOCOLS, XA_WIN_LAYER);
   216         if (log.isLoggable(Level.FINE)) log.fine("### " + this + " supports layer: " + res);
   215         if (log.isLoggable(PlatformLogger.FINE)) log.fine("### " + this + " supports layer: " + res);
   217         return res;
   216         return res;
   218     }
   217     }
   219 }
   218 }