24 */ |
24 */ |
25 |
25 |
26 package sun.awt.X11; |
26 package sun.awt.X11; |
27 |
27 |
28 import java.awt.AWTKeyStroke; |
28 import java.awt.AWTKeyStroke; |
29 import java.util.logging.*; |
|
30 import sun.awt.SunToolkit; |
29 import sun.awt.SunToolkit; |
31 import java.awt.Component; |
30 import java.awt.Component; |
32 import java.awt.Container; |
31 import java.awt.Container; |
|
32 import sun.util.logging.PlatformLogger; |
33 |
33 |
34 import sun.awt.X11GraphicsConfig; |
34 import sun.awt.X11GraphicsConfig; |
35 import sun.awt.X11GraphicsDevice; |
35 import sun.awt.X11GraphicsDevice; |
36 |
36 |
37 /** |
37 /** |
38 * Helper class implementing XEmbed protocol handling routines(client side) |
38 * Helper class implementing XEmbed protocol handling routines(client side) |
39 * Window which wants to participate in a protocol should create an instance, |
39 * Window which wants to participate in a protocol should create an instance, |
40 * call install and forward all XClientMessageEvents to it. |
40 * call install and forward all XClientMessageEvents to it. |
41 */ |
41 */ |
42 public class XEmbedClientHelper extends XEmbedHelper implements XEventDispatcher { |
42 public class XEmbedClientHelper extends XEmbedHelper implements XEventDispatcher { |
43 private static final Logger xembedLog = Logger.getLogger("sun.awt.X11.xembed.XEmbedClientHelper"); |
43 private static final PlatformLogger xembedLog = PlatformLogger.getLogger("sun.awt.X11.xembed.XEmbedClientHelper"); |
44 |
44 |
45 private XEmbeddedFramePeer embedded; // XEmbed client |
45 private XEmbeddedFramePeer embedded; // XEmbed client |
46 private long server; // XEmbed server |
46 private long server; // XEmbed server |
47 |
47 |
48 private boolean active; |
48 private boolean active; |
51 XEmbedClientHelper() { |
51 XEmbedClientHelper() { |
52 super(); |
52 super(); |
53 } |
53 } |
54 |
54 |
55 void setClient(XEmbeddedFramePeer client) { |
55 void setClient(XEmbeddedFramePeer client) { |
56 if (xembedLog.isLoggable(Level.FINE)) { |
56 if (xembedLog.isLoggable(PlatformLogger.FINE)) { |
57 xembedLog.fine("XEmbed client: " + client); |
57 xembedLog.fine("XEmbed client: " + client); |
58 } |
58 } |
59 if (embedded != null) { |
59 if (embedded != null) { |
60 XToolkit.removeEventDispatcher(embedded.getWindow(), this); |
60 XToolkit.removeEventDispatcher(embedded.getWindow(), this); |
61 active = false; |
61 active = false; |
65 XToolkit.addEventDispatcher(embedded.getWindow(), this); |
65 XToolkit.addEventDispatcher(embedded.getWindow(), this); |
66 } |
66 } |
67 } |
67 } |
68 |
68 |
69 void install() { |
69 void install() { |
70 if (xembedLog.isLoggable(Level.FINE)) { |
70 if (xembedLog.isLoggable(PlatformLogger.FINE)) { |
71 xembedLog.fine("Installing xembedder on " + embedded); |
71 xembedLog.fine("Installing xembedder on " + embedded); |
72 } |
72 } |
73 long[] info = new long[] { XEMBED_VERSION, XEMBED_MAPPED }; |
73 long[] info = new long[] { XEMBED_VERSION, XEMBED_MAPPED }; |
74 long data = Native.card32ToData(info); |
74 long data = Native.card32ToData(info); |
75 try { |
75 try { |
93 } |
93 } |
94 } |
94 } |
95 |
95 |
96 void handleClientMessage(XEvent xev) { |
96 void handleClientMessage(XEvent xev) { |
97 XClientMessageEvent msg = xev.get_xclient(); |
97 XClientMessageEvent msg = xev.get_xclient(); |
98 if (xembedLog.isLoggable(Level.FINE)) xembedLog.fine(msg.toString()); |
98 if (xembedLog.isLoggable(PlatformLogger.FINE)) xembedLog.fine(msg.toString()); |
99 if (msg.get_message_type() == XEmbed.getAtom()) { |
99 if (msg.get_message_type() == XEmbed.getAtom()) { |
100 if (xembedLog.isLoggable(Level.FINE)) xembedLog.fine("Embedded message: " + msgidToString((int)msg.get_data(1))); |
100 if (xembedLog.isLoggable(PlatformLogger.FINE)) xembedLog.fine("Embedded message: " + msgidToString((int)msg.get_data(1))); |
101 switch ((int)msg.get_data(1)) { |
101 switch ((int)msg.get_data(1)) { |
102 case XEMBED_EMBEDDED_NOTIFY: // Notification about embedding protocol start |
102 case XEMBED_EMBEDDED_NOTIFY: // Notification about embedding protocol start |
103 active = true; |
103 active = true; |
104 server = getEmbedder(embedded, msg); |
104 server = getEmbedder(embedded, msg); |
105 // Check if window is reparented. If not - it was created with |
105 // Check if window is reparented. If not - it was created with |