8159460: On Ubuntu Unity, problem with java/awt/Window/FindOwner/FindOwnerTest
Reviewed-by: azvegint
--- 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);
+ }
}
/**
--- 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
--- 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 @@
<!--
- Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ Copyright (c) 2015, 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
@@ -23,7 +23,7 @@
@test
@key headful
- @bug 8139227
+ @bug 8139227 8159460
@summary Text fields in JPopupMenu structure do not receive focus in hosted
Applets
@author Semyon Sadetsky