65
66 // A detail code is required for XEMBED_FOCUS_IN. The following values are valid:
67 /* Details for XEMBED_FOCUS_IN: */
68 final static int XEMBED_FOCUS_CURRENT = 0;
69 final static int XEMBED_FOCUS_FIRST = 1;
70 final static int XEMBED_FOCUS_LAST = 2;
71
72 // Modifiers bits
73 final static int XEMBED_MODIFIER_SHIFT = (1 << 0);
74 final static int XEMBED_MODIFIER_CONTROL = (1 << 1);
75 final static int XEMBED_MODIFIER_ALT = (1 << 2);
76 final static int XEMBED_MODIFIER_SUPER = (1 << 3);
77 final static int XEMBED_MODIFIER_HYPER = (1 << 4);
78
79 static XAtom XEmbedInfo;
80 static XAtom XEmbed;
81
82 XEmbedHelper() {
83 if (XEmbed == null) {
84 XEmbed = XAtom.get("_XEMBED");
85 if (xembedLog.isLoggable(Level.FINER)) xembedLog.finer("Created atom " + XEmbed.toString());
86 }
87 if (XEmbedInfo == null) {
88 XEmbedInfo = XAtom.get("_XEMBED_INFO");
89 if (xembedLog.isLoggable(Level.FINER)) xembedLog.finer("Created atom " + XEmbedInfo.toString());
90 }
91 }
92
93 void sendMessage(long window, int message) {
94 sendMessage(window, message, 0, 0, 0);
95 }
96 void sendMessage(long window, int message, long detail, long data1, long data2) {
97 XClientMessageEvent msg = new XClientMessageEvent();
98 msg.set_type((int)XlibWrapper.ClientMessage);
99 msg.set_window(window);
100 msg.set_message_type(XEmbed.getAtom());
101 msg.set_format(32);
102 msg.set_data(0, XToolkit.getCurrentServerTime());
103 msg.set_data(1, message);
104 msg.set_data(2, detail);
105 msg.set_data(3, data1);
106 msg.set_data(4, data2);
107 XToolkit.awtLock();
108 try {
109 if (xembedLog.isLoggable(Level.FINE)) xembedLog.fine("Sending " + XEmbedMessageToString(msg));
110 XlibWrapper.XSendEvent(XToolkit.getDisplay(), window, false, XlibWrapper.NoEventMask, msg.pData);
111 }
112 finally {
113 XToolkit.awtUnlock();
114 }
115 msg.dispose();
116 }
117
118 static String msgidToString(int msg_id) {
119 switch (msg_id) {
120 case XEMBED_EMBEDDED_NOTIFY:
121 return "XEMBED_EMBEDDED_NOTIFY";
122 case XEMBED_WINDOW_ACTIVATE:
123 return "XEMBED_WINDOW_ACTIVATE";
124 case XEMBED_WINDOW_DEACTIVATE:
125 return "XEMBED_WINDOW_DEACTIVATE";
126 case XEMBED_FOCUS_IN:
127 return "XEMBED_FOCUS_IN";
128 case XEMBED_FOCUS_OUT:
129 return "XEMBED_FOCUS_OUT";
201 }
202 // FIXME: What is super/hyper?
203 // FIXME: Experiments show that SUPER is ALT. So what is Alt then?
204 if ((state & XEMBED_MODIFIER_SUPER) != 0) {
205 mods |= InputEvent.ALT_DOWN_MASK;
206 }
207 // if ((state & XEMBED_MODIFIER_HYPER) != 0) {
208 // mods |= InputEvent.DOWN_MASK;
209 // }
210 return mods;
211 }
212
213 // Shouldn't be called on Toolkit thread.
214 AWTKeyStroke getKeyStrokeForKeySym(long keysym, long state) {
215 XBaseWindow.checkSecurity();
216
217 int keycode;
218
219 XToolkit.awtLock();
220 try {
221 keycode = XWindow.getAWTKeyCodeForKeySym((int)keysym);
222 } finally {
223 XToolkit.awtUnlock();
224 }
225
226 int modifiers = getModifiers((int)state);
227 return AWTKeyStroke.getAWTKeyStroke(keycode, modifiers);
228 }
229 }
|
65
66 // A detail code is required for XEMBED_FOCUS_IN. The following values are valid:
67 /* Details for XEMBED_FOCUS_IN: */
68 final static int XEMBED_FOCUS_CURRENT = 0;
69 final static int XEMBED_FOCUS_FIRST = 1;
70 final static int XEMBED_FOCUS_LAST = 2;
71
72 // Modifiers bits
73 final static int XEMBED_MODIFIER_SHIFT = (1 << 0);
74 final static int XEMBED_MODIFIER_CONTROL = (1 << 1);
75 final static int XEMBED_MODIFIER_ALT = (1 << 2);
76 final static int XEMBED_MODIFIER_SUPER = (1 << 3);
77 final static int XEMBED_MODIFIER_HYPER = (1 << 4);
78
79 static XAtom XEmbedInfo;
80 static XAtom XEmbed;
81
82 XEmbedHelper() {
83 if (XEmbed == null) {
84 XEmbed = XAtom.get("_XEMBED");
85 if (xembedLog.isLoggable(Level.FINER)) {
86 xembedLog.finer("Created atom " + XEmbed.toString());
87 }
88 }
89 if (XEmbedInfo == null) {
90 XEmbedInfo = XAtom.get("_XEMBED_INFO");
91 if (xembedLog.isLoggable(Level.FINER)) {
92 xembedLog.finer("Created atom " + XEmbedInfo.toString());
93 }
94 }
95 }
96
97 void sendMessage(long window, int message) {
98 sendMessage(window, message, 0, 0, 0);
99 }
100 void sendMessage(long window, int message, long detail, long data1, long data2) {
101 XClientMessageEvent msg = new XClientMessageEvent();
102 msg.set_type((int)XlibWrapper.ClientMessage);
103 msg.set_window(window);
104 msg.set_message_type(XEmbed.getAtom());
105 msg.set_format(32);
106 msg.set_data(0, XToolkit.getCurrentServerTime());
107 msg.set_data(1, message);
108 msg.set_data(2, detail);
109 msg.set_data(3, data1);
110 msg.set_data(4, data2);
111 XToolkit.awtLock();
112 try {
113 if (xembedLog.isLoggable(Level.FINE)) {
114 xembedLog.fine("Sending " + XEmbedMessageToString(msg));
115 }
116 XlibWrapper.XSendEvent(XToolkit.getDisplay(), window, false, XlibWrapper.NoEventMask, msg.pData);
117 }
118 finally {
119 XToolkit.awtUnlock();
120 }
121 msg.dispose();
122 }
123
124 static String msgidToString(int msg_id) {
125 switch (msg_id) {
126 case XEMBED_EMBEDDED_NOTIFY:
127 return "XEMBED_EMBEDDED_NOTIFY";
128 case XEMBED_WINDOW_ACTIVATE:
129 return "XEMBED_WINDOW_ACTIVATE";
130 case XEMBED_WINDOW_DEACTIVATE:
131 return "XEMBED_WINDOW_DEACTIVATE";
132 case XEMBED_FOCUS_IN:
133 return "XEMBED_FOCUS_IN";
134 case XEMBED_FOCUS_OUT:
135 return "XEMBED_FOCUS_OUT";
207 }
208 // FIXME: What is super/hyper?
209 // FIXME: Experiments show that SUPER is ALT. So what is Alt then?
210 if ((state & XEMBED_MODIFIER_SUPER) != 0) {
211 mods |= InputEvent.ALT_DOWN_MASK;
212 }
213 // if ((state & XEMBED_MODIFIER_HYPER) != 0) {
214 // mods |= InputEvent.DOWN_MASK;
215 // }
216 return mods;
217 }
218
219 // Shouldn't be called on Toolkit thread.
220 AWTKeyStroke getKeyStrokeForKeySym(long keysym, long state) {
221 XBaseWindow.checkSecurity();
222
223 int keycode;
224
225 XToolkit.awtLock();
226 try {
227 XKeysym.Keysym2JavaKeycode kc = XKeysym.getJavaKeycode( keysym );
228 if(kc == null) {
229 keycode = java.awt.event.KeyEvent.VK_UNDEFINED;
230 }else{
231 keycode = kc.getJavaKeycode();
232 }
233 } finally {
234 XToolkit.awtUnlock();
235 }
236
237 int modifiers = getModifiers((int)state);
238 return AWTKeyStroke.getAWTKeyStroke(keycode, modifiers);
239 }
240 }
|