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

Print this page

        

@@ -211,11 +211,11 @@
     /**
      * Helper function to set/reset one state in NET_WM_STATE
      * If window is showing then it uses ClientMessage, otherwise adjusts NET_WM_STATE list
      * @param window Window which NET_WM_STATE property is being modified
      * @param state State atom to be set/reset
-     * @param reset Indicates operation, 'set' if false, 'reset' if true
+     * @param set Indicates operation, 'set' if false, 'reset' if true
      */
     private void setStateHelper(XWindowPeer window, XAtom state, boolean set) {
         if (log.isLoggable(PlatformLogger.Level.FINER)) {
             log.finer("Window visibility is: withdrawn={0}, visible={1}, mapped={2} showing={3}",
                   Boolean.valueOf(window.isWithdrawn()), Boolean.valueOf(window.isVisible()),

@@ -247,10 +247,11 @@
 
     /* New "netwm" spec from www.freedesktop.org */
     XAtom XA_UTF8_STRING = XAtom.get("UTF8_STRING");   /* like STRING but encoding is UTF-8 */
     XAtom XA_NET_SUPPORTING_WM_CHECK = XAtom.get("_NET_SUPPORTING_WM_CHECK");
     XAtom XA_NET_SUPPORTED = XAtom.get("_NET_SUPPORTED");      /* list of protocols (property of root) */
+    XAtom XA_NET_ACTIVE_WINDOW = XAtom.get("_NET_ACTIVE_WINDOW");
     XAtom XA_NET_WM_NAME = XAtom.get("_NET_WM_NAME");  /* window property */
     XAtom XA_NET_WM_STATE = XAtom.get("_NET_WM_STATE");/* both window property and request */
 
 /*
  * _NET_WM_STATE is a list of atoms.

@@ -323,10 +324,37 @@
     boolean doOpacityProtocol() {
         boolean res = active() && checkProtocol(XA_NET_SUPPORTED, XA_NET_WM_WINDOW_OPACITY);
         return res;
     }
 
+    public void setActiveWindow(XWindow window) {
+        if (!active() && !checkProtocol(XA_NET_SUPPORTED, XA_NET_ACTIVE_WINDOW)) {
+            return;
+        }
+
+        XClientMessageEvent msg = new XClientMessageEvent();
+        XToolkit.awtLock();
+        try {
+            msg.zero();
+            msg.set_type(XConstants.ClientMessage);
+            msg.set_message_type(XA_NET_ACTIVE_WINDOW.getAtom());
+            msg.set_display(XToolkit.getDisplay());
+            msg.set_window(window.getWindow());
+            msg.set_format(32);
+            msg.set_data(0, 1);
+            msg.set_data(1, XToolkit.getCurrentServerTime());
+            msg.set_data(2, 0);
+
+            XlibWrapper.XSendEvent(XToolkit.getDisplay(), XToolkit.getDefaultRootWindow(), false,
+                    XConstants.SubstructureRedirectMask | XConstants.SubstructureNotifyMask, msg.getPData());
+
+        } finally {
+            XToolkit.awtUnlock();
+            msg.dispose();
+        }
+    }
+
     boolean isWMName(String name) {
         if (!active()) {
             return false;
         }
         String net_wm_name_string = getWMName();