# HG changeset patch # User ssadetsky # Date 1468396258 -10800 # Node ID 96d7761b869a16593209c520d197639030a24438 # Parent f8c20b96a710c775054a22469bd20b7e063934be 8159460: On Ubuntu Unity, problem with java/awt/Window/FindOwner/FindOwnerTest Reviewed-by: azvegint diff -r f8c20b96a710 -r 96d7761b869a jdk/src/java.desktop/unix/classes/sun/awt/X11/XDecoratedPeer.java --- a/jdk/src/java.desktop/unix/classes/sun/awt/X11/XDecoratedPeer.java Tue Jul 12 18:47:57 2016 +0300 +++ b/jdk/src/java.desktop/unix/classes/sun/awt/X11/XDecoratedPeer.java Wed Jul 13 10:50:58 2016 +0300 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2016, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -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); + } } /** diff -r f8c20b96a710 -r 96d7761b869a jdk/src/java.desktop/unix/classes/sun/awt/X11/XWM.java --- a/jdk/src/java.desktop/unix/classes/sun/awt/X11/XWM.java Tue Jul 12 18:47:57 2016 +0300 +++ b/jdk/src/java.desktop/unix/classes/sun/awt/X11/XWM.java Wed Jul 13 10:50:58 2016 +0300 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2016, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -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 diff -r f8c20b96a710 -r 96d7761b869a jdk/test/java/awt/Window/FindOwner/FindOwnerTest.html --- a/jdk/test/java/awt/Window/FindOwner/FindOwnerTest.html Tue Jul 12 18:47:57 2016 +0300 +++ b/jdk/test/java/awt/Window/FindOwner/FindOwnerTest.html Wed Jul 13 10:50:58 2016 +0300 @@ -1,5 +1,5 @@