--- 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); + } } /** --- old/src/java.desktop/unix/classes/sun/awt/X11/XWM.java 2016-06-17 11:06:05.565915507 +0300 +++ new/src/java.desktop/unix/classes/sun/awt/X11/XWM.java 2016-06-17 11:06:05.445915511 +0300 @@ -104,7 +104,8 @@ COMPIZ_WM = 12, LG3D_WM = 13, CWM_WM = 14, - MUTTER_WM = 15; + MUTTER_WM = 15, + UNITY_COMPIZ_WM = 16; public String toString() { switch (WMID) { case NO_WM: @@ -129,6 +130,8 @@ return "Metacity"; case COMPIZ_WM: return "Compiz"; + case UNITY_COMPIZ_WM: + return "Unity Compiz"; case LG3D_WM: return "LookingGlass"; case CWM_WM: @@ -572,6 +575,10 @@ return isNetWMName("compiz"); } + static boolean isUnityCompiz() { + return isNetWMName("Compiz"); + } + static boolean isLookingGlass() { return isNetWMName("LG3D"); } @@ -790,6 +797,8 @@ awt_wmgr = CWM_WM; } else if (doIsIceWM && isIceWM()) { awt_wmgr = XWM.ICE_WM; + } else if (isUnityCompiz()) { + awt_wmgr = XWM.UNITY_COMPIZ_WM; } /* * We don't check for legacy WM when we already know that WM