1 |
# HG changeset patch |
2 |
# User azvegint |
3 |
# Date 1395070254 -14400 |
4 |
# Mon Mar 17 19:30:54 2014 +0400 |
5 |
# Node ID 6406059d2620c8241f6e04398ee0c4591e8820ac |
6 |
# Parent 37099d54a1483fffb9e51552cfda8ac956bd97ee |
7 |
8012224: AWT_TopLevels/TopLevelEvents/Automated/WindowIconifyDeiconifyEventsTest02 fails on Ubuntu 12.04 Unity shell |
8 |
Reviewed-by: anthony, serb |
9 |
|
10 |
diff --git jdk8/jdk/src/solaris/classes/sun/awt/X11/XFramePeer.java jdk8/jdk/src/solaris/classes/sun/awt/X11/XFramePeer.java |
11 |
--- jdk8/jdk/src/solaris/classes/sun/awt/X11/XFramePeer.java |
12 |
+++ jdk8/jdk/src/solaris/classes/sun/awt/X11/XFramePeer.java |
13 |
@@ -284,6 +284,11 @@ |
14 |
if (stateLog.isLoggable(PlatformLogger.Level.FINER)) { |
15 |
stateLog.finer("DeIconifying " + this); |
16 |
} |
17 |
+ |
18 |
+ XNETProtocol net_protocol = XWM.getWM().getNETProtocol(); |
19 |
+ if (net_protocol != null) { |
20 |
+ net_protocol.setActiveWindow(this); |
21 |
+ } |
22 |
xSetVisible(true); |
23 |
} |
24 |
} |
25 |
diff --git jdk8/jdk/src/solaris/classes/sun/awt/X11/XNETProtocol.java jdk8/jdk/src/solaris/classes/sun/awt/X11/XNETProtocol.java |
26 |
--- jdk8/jdk/src/solaris/classes/sun/awt/X11/XNETProtocol.java |
27 |
+++ jdk8/jdk/src/solaris/classes/sun/awt/X11/XNETProtocol.java |
28 |
@@ -213,7 +213,7 @@ |
29 |
* If window is showing then it uses ClientMessage, otherwise adjusts NET_WM_STATE list |
30 |
* @param window Window which NET_WM_STATE property is being modified |
31 |
* @param state State atom to be set/reset |
32 |
- * @param reset Indicates operation, 'set' if false, 'reset' if true |
33 |
+ * @param set Indicates operation, 'set' if false, 'reset' if true |
34 |
*/ |
35 |
private void setStateHelper(XWindowPeer window, XAtom state, boolean set) { |
36 |
if (log.isLoggable(PlatformLogger.Level.FINER)) { |
37 |
@@ -249,6 +249,7 @@ |
38 |
XAtom XA_UTF8_STRING = XAtom.get("UTF8_STRING"); /* like STRING but encoding is UTF-8 */ |
39 |
XAtom XA_NET_SUPPORTING_WM_CHECK = XAtom.get("_NET_SUPPORTING_WM_CHECK"); |
40 |
XAtom XA_NET_SUPPORTED = XAtom.get("_NET_SUPPORTED"); /* list of protocols (property of root) */ |
41 |
+ XAtom XA_NET_ACTIVE_WINDOW = XAtom.get("_NET_ACTIVE_WINDOW"); |
42 |
XAtom XA_NET_WM_NAME = XAtom.get("_NET_WM_NAME"); /* window property */ |
43 |
XAtom XA_NET_WM_STATE = XAtom.get("_NET_WM_STATE");/* both window property and request */ |
44 |
|
45 |
@@ -325,6 +326,32 @@ |
46 |
return res; |
47 |
} |
48 |
|
49 |
+ public void setActiveWindow(XWindow window) { |
50 |
+ if (!active() || !checkProtocol(XA_NET_SUPPORTED, XA_NET_ACTIVE_WINDOW)) { |
51 |
+ return; |
52 |
+ } |
53 |
+ |
54 |
+ XClientMessageEvent msg = new XClientMessageEvent(); |
55 |
+ msg.zero(); |
56 |
+ msg.set_type(XConstants.ClientMessage); |
57 |
+ msg.set_message_type(XA_NET_ACTIVE_WINDOW.getAtom()); |
58 |
+ msg.set_display(XToolkit.getDisplay()); |
59 |
+ msg.set_window(window.getWindow()); |
60 |
+ msg.set_format(32); |
61 |
+ msg.set_data(0, 1); |
62 |
+ msg.set_data(1, XToolkit.getCurrentServerTime()); |
63 |
+ msg.set_data(2, 0); |
64 |
+ |
65 |
+ XToolkit.awtLock(); |
66 |
+ try { |
67 |
+ XlibWrapper.XSendEvent(XToolkit.getDisplay(), XToolkit.getDefaultRootWindow(), false, |
68 |
+ XConstants.SubstructureRedirectMask | XConstants.SubstructureNotifyMask, msg.getPData()); |
69 |
+ } finally { |
70 |
+ XToolkit.awtUnlock(); |
71 |
+ msg.dispose(); |
72 |
+ } |
73 |
+ } |
74 |
+ |
75 |
boolean isWMName(String name) { |
76 |
if (!active()) { |
77 |
return false; |