jdk/src/solaris/classes/sun/awt/X11/XNETProtocol.java
changeset 18178 ee71c923891d
parent 16839 d0f2e97b7359
child 18275 9e7a5558965d
equal deleted inserted replaced
18177:39b1cab4f97f 18178:ee71c923891d
    41     public boolean supportsState(int state) {
    41     public boolean supportsState(int state) {
    42         return doStateProtocol() ; // TODO - check for Frame constants
    42         return doStateProtocol() ; // TODO - check for Frame constants
    43     }
    43     }
    44 
    44 
    45     public void setState(XWindowPeer window, int state) {
    45     public void setState(XWindowPeer window, int state) {
    46         if (log.isLoggable(PlatformLogger.FINE)) {
    46         if (log.isLoggable(PlatformLogger.Level.FINE)) {
    47             log.fine("Setting state of " + window + " to " + state);
    47             log.fine("Setting state of " + window + " to " + state);
    48         }
    48         }
    49         if (window.isShowing()) {
    49         if (window.isShowing()) {
    50             requestState(window, state);
    50             requestState(window, state);
    51         } else {
    51         } else {
    53         }
    53         }
    54     }
    54     }
    55 
    55 
    56     private void setInitialState(XWindowPeer window, int state) {
    56     private void setInitialState(XWindowPeer window, int state) {
    57         XAtomList old_state = window.getNETWMState();
    57         XAtomList old_state = window.getNETWMState();
    58         if (log.isLoggable(PlatformLogger.FINE)) {
    58         if (log.isLoggable(PlatformLogger.Level.FINE)) {
    59             log.fine("Current state of the window {0} is {1}", window, old_state);
    59             log.fine("Current state of the window {0} is {1}", window, old_state);
    60         }
    60         }
    61         if ((state & Frame.MAXIMIZED_VERT) != 0) {
    61         if ((state & Frame.MAXIMIZED_VERT) != 0) {
    62             old_state.add(XA_NET_WM_STATE_MAXIMIZED_VERT);
    62             old_state.add(XA_NET_WM_STATE_MAXIMIZED_VERT);
    63         } else {
    63         } else {
    66         if ((state & Frame.MAXIMIZED_HORIZ) != 0) {
    66         if ((state & Frame.MAXIMIZED_HORIZ) != 0) {
    67             old_state.add(XA_NET_WM_STATE_MAXIMIZED_HORZ);
    67             old_state.add(XA_NET_WM_STATE_MAXIMIZED_HORZ);
    68         } else {
    68         } else {
    69             old_state.remove(XA_NET_WM_STATE_MAXIMIZED_HORZ);
    69             old_state.remove(XA_NET_WM_STATE_MAXIMIZED_HORZ);
    70         }
    70         }
    71         if (log.isLoggable(PlatformLogger.FINE)) {
    71         if (log.isLoggable(PlatformLogger.Level.FINE)) {
    72             log.fine("Setting initial state of the window {0} to {1}", window, old_state);
    72             log.fine("Setting initial state of the window {0} to {1}", window, old_state);
    73         }
    73         }
    74         window.setNETWMState(old_state);
    74         window.setNETWMState(old_state);
    75     }
    75     }
    76 
    76 
   101                   req.set_data(2, XA_NET_WM_STATE_MAXIMIZED_VERT.getAtom());
   101                   req.set_data(2, XA_NET_WM_STATE_MAXIMIZED_VERT.getAtom());
   102                   break;
   102                   break;
   103               default:
   103               default:
   104                   return;
   104                   return;
   105             }
   105             }
   106             if (log.isLoggable(PlatformLogger.FINE)) {
   106             if (log.isLoggable(PlatformLogger.Level.FINE)) {
   107                 log.fine("Requesting state on " + window + " for " + state);
   107                 log.fine("Requesting state on " + window + " for " + state);
   108             }
   108             }
   109             req.set_type((int)XConstants.ClientMessage);
   109             req.set_type((int)XConstants.ClientMessage);
   110             req.set_window(window.getWindow());
   110             req.set_window(window.getWindow());
   111             req.set_message_type(XA_NET_WM_STATE.getAtom());
   111             req.set_message_type(XA_NET_WM_STATE.getAtom());
   185             req.set_format(32);
   185             req.set_format(32);
   186             req.set_data(0, isAdd ? _NET_WM_STATE_ADD : _NET_WM_STATE_REMOVE);
   186             req.set_data(0, isAdd ? _NET_WM_STATE_ADD : _NET_WM_STATE_REMOVE);
   187             req.set_data(1, state.getAtom());
   187             req.set_data(1, state.getAtom());
   188             // Fix for 6735584: req.data[2] must be set to 0 when only one property is changed
   188             // Fix for 6735584: req.data[2] must be set to 0 when only one property is changed
   189             req.set_data(2, 0);
   189             req.set_data(2, 0);
   190             if (log.isLoggable(PlatformLogger.FINE)) {
   190             if (log.isLoggable(PlatformLogger.Level.FINE)) {
   191                 log.fine("Setting _NET_STATE atom {0} on {1} for {2}", state, window, Boolean.valueOf(isAdd));
   191                 log.fine("Setting _NET_STATE atom {0} on {1} for {2}", state, window, Boolean.valueOf(isAdd));
   192             }
   192             }
   193             XToolkit.awtLock();
   193             XToolkit.awtLock();
   194             try {
   194             try {
   195                 XlibWrapper.XSendEvent(XToolkit.getDisplay(),
   195                 XlibWrapper.XSendEvent(XToolkit.getDisplay(),
   212      * @param window Window which NET_WM_STATE property is being modified
   212      * @param window Window which NET_WM_STATE property is being modified
   213      * @param state State atom to be set/reset
   213      * @param state State atom to be set/reset
   214      * @param reset Indicates operation, 'set' if false, 'reset' if true
   214      * @param reset Indicates operation, 'set' if false, 'reset' if true
   215      */
   215      */
   216     private void setStateHelper(XWindowPeer window, XAtom state, boolean set) {
   216     private void setStateHelper(XWindowPeer window, XAtom state, boolean set) {
   217         if (log.isLoggable(PlatformLogger.FINER)) {
   217         if (log.isLoggable(PlatformLogger.Level.FINER)) {
   218             log.finer("Window visibility is: withdrawn={0}, visible={1}, mapped={2} showing={3}",
   218             log.finer("Window visibility is: withdrawn={0}, visible={1}, mapped={2} showing={3}",
   219                   Boolean.valueOf(window.isWithdrawn()), Boolean.valueOf(window.isVisible()),
   219                   Boolean.valueOf(window.isWithdrawn()), Boolean.valueOf(window.isVisible()),
   220                   Boolean.valueOf(window.isMapped()), Boolean.valueOf(window.isShowing()));
   220                   Boolean.valueOf(window.isMapped()), Boolean.valueOf(window.isShowing()));
   221         }
   221         }
   222         if (window.isShowing()) {
   222         if (window.isShowing()) {
   223             requestState(window, state, set);
   223             requestState(window, state, set);
   224         } else {
   224         } else {
   225             XAtomList net_wm_state = window.getNETWMState();
   225             XAtomList net_wm_state = window.getNETWMState();
   226             if (log.isLoggable(PlatformLogger.FINER)) {
   226             if (log.isLoggable(PlatformLogger.Level.FINER)) {
   227                 log.finer("Current state on {0} is {1}", window, net_wm_state);
   227                 log.finer("Current state on {0} is {1}", window, net_wm_state);
   228             }
   228             }
   229             if (!set) {
   229             if (!set) {
   230                 net_wm_state.remove(state);
   230                 net_wm_state.remove(state);
   231             } else {
   231             } else {
   232                 net_wm_state.add(state);
   232                 net_wm_state.add(state);
   233             }
   233             }
   234             if (log.isLoggable(PlatformLogger.FINE)) {
   234             if (log.isLoggable(PlatformLogger.Level.FINE)) {
   235                 log.fine("Setting states on {0} to {1}", window, net_wm_state);
   235                 log.fine("Setting states on {0} to {1}", window, net_wm_state);
   236             }
   236             }
   237             window.setNETWMState(net_wm_state);
   237             window.setNETWMState(net_wm_state);
   238         }
   238         }
   239         XToolkit.XSync();
   239         XToolkit.XSync();
   288             // TODO: How about detecting WM-restart or exit?
   288             // TODO: How about detecting WM-restart or exit?
   289             return;
   289             return;
   290         }
   290         }
   291         NetWindow = checkAnchor(XA_NET_SUPPORTING_WM_CHECK, XAtom.XA_WINDOW);
   291         NetWindow = checkAnchor(XA_NET_SUPPORTING_WM_CHECK, XAtom.XA_WINDOW);
   292         supportChecked = true;
   292         supportChecked = true;
   293         if (log.isLoggable(PlatformLogger.FINE)) {
   293         if (log.isLoggable(PlatformLogger.Level.FINE)) {
   294             log.fine("### " + this + " is active: " + (NetWindow != 0));
   294             log.fine("### " + this + " is active: " + (NetWindow != 0));
   295         }
   295         }
   296     }
   296     }
   297 
   297 
   298     boolean active() {
   298     boolean active() {
   300         return NetWindow != 0;
   300         return NetWindow != 0;
   301     }
   301     }
   302 
   302 
   303     boolean doStateProtocol() {
   303     boolean doStateProtocol() {
   304         boolean res = active() && checkProtocol(XA_NET_SUPPORTED, XA_NET_WM_STATE);
   304         boolean res = active() && checkProtocol(XA_NET_SUPPORTED, XA_NET_WM_STATE);
   305         if (stateLog.isLoggable(PlatformLogger.FINER)) {
   305         if (stateLog.isLoggable(PlatformLogger.Level.FINER)) {
   306             stateLog.finer("doStateProtocol() returns " + res);
   306             stateLog.finer("doStateProtocol() returns " + res);
   307         }
   307         }
   308         return res;
   308         return res;
   309     }
   309     }
   310 
   310 
   329         }
   329         }
   330         String net_wm_name_string = getWMName();
   330         String net_wm_name_string = getWMName();
   331         if (net_wm_name_string == null) {
   331         if (net_wm_name_string == null) {
   332             return false;
   332             return false;
   333         }
   333         }
   334         if (log.isLoggable(PlatformLogger.FINE)) {
   334         if (log.isLoggable(PlatformLogger.Level.FINE)) {
   335             log.fine("### WM_NAME = " + net_wm_name_string);
   335             log.fine("### WM_NAME = " + net_wm_name_string);
   336         }
   336         }
   337         return net_wm_name_string.startsWith(name);
   337         return net_wm_name_string.startsWith(name);
   338     }
   338     }
   339 
   339