--- old/src/java.desktop/unix/classes/sun/awt/X11/XDecoratedPeer.java 2016-06-17 11:06:05.277915517 +0300 +++ new/src/java.desktop/unix/classes/sun/awt/X11/XDecoratedPeer.java 2016-06-17 11:06:05.161915521 +0300 @@ -1010,7 +1010,22 @@ if (focusLog.isLoggable(PlatformLogger.Level.FINE)) { focusLog.fine("WM_TAKE_FOCUS on {0}", this); } - requestWindowFocus(cl.get_data(1), true); + + if (XWM.getWMID() == XWM.UNITY_COMPIZ_WM) { + // JDK-8159460 + Window focusedWindow = XKeyboardFocusManagerPeer.getInstance() + .getCurrentFocusedWindow(); + Window activeWindow = XWindowPeer.getDecoratedOwner(focusedWindow); + if (activeWindow != target) { + requestWindowFocus(cl.get_data(1), true); + } else { + WindowEvent we = new WindowEvent(focusedWindow, + WindowEvent.WINDOW_GAINED_FOCUS); + sendEvent(we); + } + } else { + requestWindowFocus(cl.get_data(1), true); + } } /**