1 /* |
1 /* |
2 * Copyright 2003-2005 Sun Microsystems, Inc. All Rights Reserved. |
2 * Copyright 2003-2008 Sun Microsystems, Inc. All Rights Reserved. |
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
4 * |
4 * |
5 * This code is free software; you can redistribute it and/or modify it |
5 * This code is free software; you can redistribute it and/or modify it |
6 * under the terms of the GNU General Public License version 2 only, as |
6 * under the terms of the GNU General Public License version 2 only, as |
7 * published by the Free Software Foundation. Sun designates this |
7 * published by the Free Software Foundation. Sun designates this |
91 XToolkit.WITH_XERROR_HANDLER(XWM.VerifyChangePropertyHandler); |
91 XToolkit.WITH_XERROR_HANDLER(XWM.VerifyChangePropertyHandler); |
92 XDnDConstants.XA_XdndAware.setAtomData(window, XAtom.XA_ATOM, data, 1); |
92 XDnDConstants.XA_XdndAware.setAtomData(window, XAtom.XA_ATOM, data, 1); |
93 XToolkit.RESTORE_XERROR_HANDLER(); |
93 XToolkit.RESTORE_XERROR_HANDLER(); |
94 |
94 |
95 if (XToolkit.saved_error != null && |
95 if (XToolkit.saved_error != null && |
96 XToolkit.saved_error.get_error_code() != XlibWrapper.Success) { |
96 XToolkit.saved_error.get_error_code() != XConstants.Success) { |
97 throw new XException("Cannot write XdndAware property"); |
97 throw new XException("Cannot write XdndAware property"); |
98 } |
98 } |
99 } finally { |
99 } finally { |
100 unsafe.freeMemory(data); |
100 unsafe.freeMemory(data); |
101 data = 0; |
101 data = 0; |
117 long newProxy = XDropTargetRegistry.getDnDProxyWindow(); |
117 long newProxy = XDropTargetRegistry.getDnDProxyWindow(); |
118 int status = 0; |
118 int status = 0; |
119 |
119 |
120 WindowPropertyGetter wpg1 = |
120 WindowPropertyGetter wpg1 = |
121 new WindowPropertyGetter(embedder, XDnDConstants.XA_XdndAware, 0, 1, |
121 new WindowPropertyGetter(embedder, XDnDConstants.XA_XdndAware, 0, 1, |
122 false, XlibWrapper.AnyPropertyType); |
122 false, XConstants.AnyPropertyType); |
123 |
123 |
124 try { |
124 try { |
125 status = wpg1.execute(XToolkit.IgnoreBadWindowHandler); |
125 status = wpg1.execute(XToolkit.IgnoreBadWindowHandler); |
126 |
126 |
127 if (status == XlibWrapper.Success && |
127 if (status == XConstants.Success && |
128 wpg1.getData() != 0 && wpg1.getActualType() == XAtom.XA_ATOM) { |
128 wpg1.getData() != 0 && wpg1.getActualType() == XAtom.XA_ATOM) { |
129 |
129 |
130 overriden = true; |
130 overriden = true; |
131 version = (int)Native.getLong(wpg1.getData()); |
131 version = (int)Native.getLong(wpg1.getData()); |
132 } |
132 } |
141 0, 1, false, XAtom.XA_WINDOW); |
141 0, 1, false, XAtom.XA_WINDOW); |
142 |
142 |
143 try { |
143 try { |
144 status = wpg2.execute(XToolkit.IgnoreBadWindowHandler); |
144 status = wpg2.execute(XToolkit.IgnoreBadWindowHandler); |
145 |
145 |
146 if (status == XlibWrapper.Success && |
146 if (status == XConstants.Success && |
147 wpg2.getData() != 0 && |
147 wpg2.getData() != 0 && |
148 wpg2.getActualType() == XAtom.XA_WINDOW) { |
148 wpg2.getActualType() == XAtom.XA_WINDOW) { |
149 |
149 |
150 proxy = Native.getLong(wpg2.getData()); |
150 proxy = Native.getLong(wpg2.getData()); |
151 } |
151 } |
159 0, 1, false, XAtom.XA_WINDOW); |
159 0, 1, false, XAtom.XA_WINDOW); |
160 |
160 |
161 try { |
161 try { |
162 status = wpg3.execute(XToolkit.IgnoreBadWindowHandler); |
162 status = wpg3.execute(XToolkit.IgnoreBadWindowHandler); |
163 |
163 |
164 if (status != XlibWrapper.Success || |
164 if (status != XConstants.Success || |
165 wpg3.getData() == 0 || |
165 wpg3.getData() == 0 || |
166 wpg3.getActualType() != XAtom.XA_WINDOW || |
166 wpg3.getActualType() != XAtom.XA_WINDOW || |
167 Native.getLong(wpg3.getData()) != proxy) { |
167 Native.getLong(wpg3.getData()) != proxy) { |
168 |
168 |
169 proxy = 0; |
169 proxy = 0; |
170 } else { |
170 } else { |
171 WindowPropertyGetter wpg4 = |
171 WindowPropertyGetter wpg4 = |
172 new WindowPropertyGetter(proxy, |
172 new WindowPropertyGetter(proxy, |
173 XDnDConstants.XA_XdndAware, |
173 XDnDConstants.XA_XdndAware, |
174 0, 1, false, |
174 0, 1, false, |
175 XlibWrapper.AnyPropertyType); |
175 XConstants.AnyPropertyType); |
176 |
176 |
177 try { |
177 try { |
178 status = wpg4.execute(XToolkit.IgnoreBadWindowHandler); |
178 status = wpg4.execute(XToolkit.IgnoreBadWindowHandler); |
179 |
179 |
180 if (status != XlibWrapper.Success || |
180 if (status != XConstants.Success || |
181 wpg4.getData() == 0 || |
181 wpg4.getData() == 0 || |
182 wpg4.getActualType() != XAtom.XA_ATOM) { |
182 wpg4.getActualType() != XAtom.XA_ATOM) { |
183 |
183 |
184 proxy = 0; |
184 proxy = 0; |
185 } |
185 } |
210 data, 1); |
210 data, 1); |
211 XToolkit.RESTORE_XERROR_HANDLER(); |
211 XToolkit.RESTORE_XERROR_HANDLER(); |
212 |
212 |
213 if (XToolkit.saved_error != null && |
213 if (XToolkit.saved_error != null && |
214 XToolkit.saved_error.get_error_code() != |
214 XToolkit.saved_error.get_error_code() != |
215 XlibWrapper.Success) { |
215 XConstants.Success) { |
216 throw new XException("Cannot write XdndAware property"); |
216 throw new XException("Cannot write XdndAware property"); |
217 } |
217 } |
218 |
218 |
219 Native.putLong(data, 0, newProxy); |
219 Native.putLong(data, 0, newProxy); |
220 |
220 |
224 data, 1); |
224 data, 1); |
225 XToolkit.RESTORE_XERROR_HANDLER(); |
225 XToolkit.RESTORE_XERROR_HANDLER(); |
226 |
226 |
227 if (XToolkit.saved_error != null && |
227 if (XToolkit.saved_error != null && |
228 XToolkit.saved_error.get_error_code() != |
228 XToolkit.saved_error.get_error_code() != |
229 XlibWrapper.Success) { |
229 XConstants.Success) { |
230 throw new XException("Cannot write XdndProxy property"); |
230 throw new XException("Cannot write XdndProxy property"); |
231 } |
231 } |
232 |
232 |
233 Native.putLong(data, 0, XDnDConstants.XDND_PROTOCOL_VERSION); |
233 Native.putLong(data, 0, XDnDConstants.XDND_PROTOCOL_VERSION); |
234 |
234 |
237 data, 1); |
237 data, 1); |
238 XToolkit.RESTORE_XERROR_HANDLER(); |
238 XToolkit.RESTORE_XERROR_HANDLER(); |
239 |
239 |
240 if (XToolkit.saved_error != null && |
240 if (XToolkit.saved_error != null && |
241 XToolkit.saved_error.get_error_code() != |
241 XToolkit.saved_error.get_error_code() != |
242 XlibWrapper.Success) { |
242 XConstants.Success) { |
243 throw new XException("Cannot write XdndAware property"); |
243 throw new XException("Cannot write XdndAware property"); |
244 } |
244 } |
245 |
245 |
246 Native.putLong(data, 0, newProxy); |
246 Native.putLong(data, 0, newProxy); |
247 |
247 |
250 data, 1); |
250 data, 1); |
251 XToolkit.RESTORE_XERROR_HANDLER(); |
251 XToolkit.RESTORE_XERROR_HANDLER(); |
252 |
252 |
253 if (XToolkit.saved_error != null && |
253 if (XToolkit.saved_error != null && |
254 XToolkit.saved_error.get_error_code() != |
254 XToolkit.saved_error.get_error_code() != |
255 XlibWrapper.Success) { |
255 XConstants.Success) { |
256 throw new XException("Cannot write XdndProxy property"); |
256 throw new XException("Cannot write XdndProxy property"); |
257 } |
257 } |
258 } finally { |
258 } finally { |
259 unsafe.freeMemory(data); |
259 unsafe.freeMemory(data); |
260 data = 0; |
260 data = 0; |
283 data, 1); |
283 data, 1); |
284 XToolkit.RESTORE_XERROR_HANDLER(); |
284 XToolkit.RESTORE_XERROR_HANDLER(); |
285 |
285 |
286 if (XToolkit.saved_error != null && |
286 if (XToolkit.saved_error != null && |
287 XToolkit.saved_error.get_error_code() != |
287 XToolkit.saved_error.get_error_code() != |
288 XlibWrapper.Success) { |
288 XConstants.Success) { |
289 throw new XException("Cannot write XdndAware property"); |
289 throw new XException("Cannot write XdndAware property"); |
290 } |
290 } |
291 |
291 |
292 Native.putLong(data, 0, (int)entry.getProxy()); |
292 Native.putLong(data, 0, (int)entry.getProxy()); |
293 |
293 |
296 data, 1); |
296 data, 1); |
297 XToolkit.RESTORE_XERROR_HANDLER(); |
297 XToolkit.RESTORE_XERROR_HANDLER(); |
298 |
298 |
299 if (XToolkit.saved_error != null && |
299 if (XToolkit.saved_error != null && |
300 XToolkit.saved_error.get_error_code() != |
300 XToolkit.saved_error.get_error_code() != |
301 XlibWrapper.Success) { |
301 XConstants.Success) { |
302 throw new XException("Cannot write XdndProxy property"); |
302 throw new XException("Cannot write XdndProxy property"); |
303 } |
303 } |
304 } finally { |
304 } finally { |
305 unsafe.freeMemory(data); |
305 unsafe.freeMemory(data); |
306 data = 0; |
306 data = 0; |
324 long newProxy = XDropTargetRegistry.getDnDProxyWindow(); |
324 long newProxy = XDropTargetRegistry.getDnDProxyWindow(); |
325 int status = 0; |
325 int status = 0; |
326 |
326 |
327 WindowPropertyGetter wpg1 = |
327 WindowPropertyGetter wpg1 = |
328 new WindowPropertyGetter(embedded, XDnDConstants.XA_XdndAware, 0, 1, |
328 new WindowPropertyGetter(embedded, XDnDConstants.XA_XdndAware, 0, 1, |
329 false, XlibWrapper.AnyPropertyType); |
329 false, XConstants.AnyPropertyType); |
330 |
330 |
331 try { |
331 try { |
332 status = wpg1.execute(XToolkit.IgnoreBadWindowHandler); |
332 status = wpg1.execute(XToolkit.IgnoreBadWindowHandler); |
333 |
333 |
334 if (status == XlibWrapper.Success && |
334 if (status == XConstants.Success && |
335 wpg1.getData() != 0 && wpg1.getActualType() == XAtom.XA_ATOM) { |
335 wpg1.getData() != 0 && wpg1.getActualType() == XAtom.XA_ATOM) { |
336 |
336 |
337 overriden = true; |
337 overriden = true; |
338 version = (int)Native.getLong(wpg1.getData()); |
338 version = (int)Native.getLong(wpg1.getData()); |
339 } |
339 } |
348 0, 1, false, XAtom.XA_WINDOW); |
348 0, 1, false, XAtom.XA_WINDOW); |
349 |
349 |
350 try { |
350 try { |
351 status = wpg2.execute(XToolkit.IgnoreBadWindowHandler); |
351 status = wpg2.execute(XToolkit.IgnoreBadWindowHandler); |
352 |
352 |
353 if (status == XlibWrapper.Success && |
353 if (status == XConstants.Success && |
354 wpg2.getData() != 0 && |
354 wpg2.getData() != 0 && |
355 wpg2.getActualType() == XAtom.XA_WINDOW) { |
355 wpg2.getActualType() == XAtom.XA_WINDOW) { |
356 |
356 |
357 proxy = Native.getLong(wpg2.getData()); |
357 proxy = Native.getLong(wpg2.getData()); |
358 } |
358 } |
366 0, 1, false, XAtom.XA_WINDOW); |
366 0, 1, false, XAtom.XA_WINDOW); |
367 |
367 |
368 try { |
368 try { |
369 status = wpg3.execute(XToolkit.IgnoreBadWindowHandler); |
369 status = wpg3.execute(XToolkit.IgnoreBadWindowHandler); |
370 |
370 |
371 if (status != XlibWrapper.Success || |
371 if (status != XConstants.Success || |
372 wpg3.getData() == 0 || |
372 wpg3.getData() == 0 || |
373 wpg3.getActualType() != XAtom.XA_WINDOW || |
373 wpg3.getActualType() != XAtom.XA_WINDOW || |
374 Native.getLong(wpg3.getData()) != proxy) { |
374 Native.getLong(wpg3.getData()) != proxy) { |
375 |
375 |
376 proxy = 0; |
376 proxy = 0; |
377 } else { |
377 } else { |
378 WindowPropertyGetter wpg4 = |
378 WindowPropertyGetter wpg4 = |
379 new WindowPropertyGetter(proxy, |
379 new WindowPropertyGetter(proxy, |
380 XDnDConstants.XA_XdndAware, |
380 XDnDConstants.XA_XdndAware, |
381 0, 1, false, |
381 0, 1, false, |
382 XlibWrapper.AnyPropertyType); |
382 XConstants.AnyPropertyType); |
383 |
383 |
384 try { |
384 try { |
385 status = wpg4.execute(XToolkit.IgnoreBadWindowHandler); |
385 status = wpg4.execute(XToolkit.IgnoreBadWindowHandler); |
386 |
386 |
387 if (status != XlibWrapper.Success || |
387 if (status != XConstants.Success || |
388 wpg4.getData() == 0 || |
388 wpg4.getData() == 0 || |
389 wpg4.getActualType() != XAtom.XA_ATOM) { |
389 wpg4.getActualType() != XAtom.XA_ATOM) { |
390 |
390 |
391 proxy = 0; |
391 proxy = 0; |
392 } |
392 } |
406 public boolean isProtocolSupported(long window) { |
406 public boolean isProtocolSupported(long window) { |
407 assert XToolkit.isAWTLockHeldByCurrentThread(); |
407 assert XToolkit.isAWTLockHeldByCurrentThread(); |
408 |
408 |
409 WindowPropertyGetter wpg1 = |
409 WindowPropertyGetter wpg1 = |
410 new WindowPropertyGetter(window, XDnDConstants.XA_XdndAware, 0, 1, |
410 new WindowPropertyGetter(window, XDnDConstants.XA_XdndAware, 0, 1, |
411 false, XlibWrapper.AnyPropertyType); |
411 false, XConstants.AnyPropertyType); |
412 |
412 |
413 try { |
413 try { |
414 int status = wpg1.execute(XToolkit.IgnoreBadWindowHandler); |
414 int status = wpg1.execute(XToolkit.IgnoreBadWindowHandler); |
415 |
415 |
416 if (status == XlibWrapper.Success && |
416 if (status == XConstants.Success && |
417 wpg1.getData() != 0 && wpg1.getActualType() == XAtom.XA_ATOM) { |
417 wpg1.getData() != 0 && wpg1.getActualType() == XAtom.XA_ATOM) { |
418 |
418 |
419 return true; |
419 return true; |
420 } else { |
420 } else { |
421 return false; |
421 return false; |
521 int countFormats = 0; |
521 int countFormats = 0; |
522 long[] formats3 = new long[3]; |
522 long[] formats3 = new long[3]; |
523 |
523 |
524 for (int i = 0; i < 3; i++) { |
524 for (int i = 0; i < 3; i++) { |
525 long j; |
525 long j; |
526 if ((j = xclient.get_data(2 + i)) != XlibWrapper.None) { |
526 if ((j = xclient.get_data(2 + i)) != XConstants.None) { |
527 formats3[countFormats++] = j; |
527 formats3[countFormats++] = j; |
528 } |
528 } |
529 } |
529 } |
530 |
530 |
531 formats = new long[countFormats]; |
531 formats = new long[countFormats]; |
547 |
547 |
548 XToolkit.RESTORE_XERROR_HANDLER(); |
548 XToolkit.RESTORE_XERROR_HANDLER(); |
549 |
549 |
550 if (status == 0 || |
550 if (status == 0 || |
551 (XToolkit.saved_error != null && |
551 (XToolkit.saved_error != null && |
552 XToolkit.saved_error.get_error_code() != XlibWrapper.Success)) { |
552 XToolkit.saved_error.get_error_code() != XConstants.Success)) { |
553 throw new XException("XGetWindowAttributes failed"); |
553 throw new XException("XGetWindowAttributes failed"); |
554 } |
554 } |
555 |
555 |
556 source_win_mask = wattr.get_your_event_mask(); |
556 source_win_mask = wattr.get_your_event_mask(); |
557 } finally { |
557 } finally { |
559 } |
559 } |
560 |
560 |
561 XToolkit.WITH_XERROR_HANDLER(XToolkit.IgnoreBadWindowHandler); |
561 XToolkit.WITH_XERROR_HANDLER(XToolkit.IgnoreBadWindowHandler); |
562 XlibWrapper.XSelectInput(XToolkit.getDisplay(), source_win, |
562 XlibWrapper.XSelectInput(XToolkit.getDisplay(), source_win, |
563 source_win_mask | |
563 source_win_mask | |
564 XlibWrapper.StructureNotifyMask); |
564 XConstants.StructureNotifyMask); |
565 |
565 |
566 XToolkit.RESTORE_XERROR_HANDLER(); |
566 XToolkit.RESTORE_XERROR_HANDLER(); |
567 |
567 |
568 if (XToolkit.saved_error != null && |
568 if (XToolkit.saved_error != null && |
569 XToolkit.saved_error.get_error_code() != XlibWrapper.Success) { |
569 XToolkit.saved_error.get_error_code() != XConstants.Success) { |
570 throw new XException("XSelectInput failed"); |
570 throw new XException("XSelectInput failed"); |
571 } |
571 } |
572 |
572 |
573 sourceWindow = source_win; |
573 sourceWindow = source_win; |
574 sourceWindowMask = source_win_mask; |
574 sourceWindowMask = source_win_mask; |
746 long sourceWindow, |
746 long sourceWindow, |
747 long data1, long data2, |
747 long data1, long data2, |
748 long data3, long data4) { |
748 long data3, long data4) { |
749 XClientMessageEvent enter = new XClientMessageEvent(); |
749 XClientMessageEvent enter = new XClientMessageEvent(); |
750 try { |
750 try { |
751 enter.set_type((int)XlibWrapper.ClientMessage); |
751 enter.set_type((int)XConstants.ClientMessage); |
752 enter.set_window(toplevel); |
752 enter.set_window(toplevel); |
753 enter.set_format(32); |
753 enter.set_format(32); |
754 enter.set_message_type(XDnDConstants.XA_XdndEnter.getAtom()); |
754 enter.set_message_type(XDnDConstants.XA_XdndEnter.getAtom()); |
755 /* XID of the source window */ |
755 /* XID of the source window */ |
756 enter.set_data(0, sourceWindow); |
756 enter.set_data(0, sourceWindow); |
772 |
772 |
773 protected void sendLeaveMessageToToplevelImpl(long toplevel, |
773 protected void sendLeaveMessageToToplevelImpl(long toplevel, |
774 long sourceWindow) { |
774 long sourceWindow) { |
775 XClientMessageEvent leave = new XClientMessageEvent(); |
775 XClientMessageEvent leave = new XClientMessageEvent(); |
776 try { |
776 try { |
777 leave.set_type((int)XlibWrapper.ClientMessage); |
777 leave.set_type((int)XConstants.ClientMessage); |
778 leave.set_window(toplevel); |
778 leave.set_window(toplevel); |
779 leave.set_format(32); |
779 leave.set_format(32); |
780 leave.set_message_type(XDnDConstants.XA_XdndLeave.getAtom()); |
780 leave.set_message_type(XDnDConstants.XA_XdndLeave.getAtom()); |
781 /* XID of the source window */ |
781 /* XID of the source window */ |
782 leave.set_data(0, sourceWindow); |
782 leave.set_data(0, sourceWindow); |
802 action = DnDConstants.ACTION_NONE; |
802 action = DnDConstants.ACTION_NONE; |
803 } |
803 } |
804 |
804 |
805 XClientMessageEvent msg = new XClientMessageEvent(); |
805 XClientMessageEvent msg = new XClientMessageEvent(); |
806 try { |
806 try { |
807 msg.set_type((int)XlibWrapper.ClientMessage); |
807 msg.set_type((int)XConstants.ClientMessage); |
808 msg.set_window(xclient.get_data(0)); |
808 msg.set_window(xclient.get_data(0)); |
809 msg.set_format(32); |
809 msg.set_format(32); |
810 msg.set_message_type(XDnDConstants.XA_XdndStatus.getAtom()); |
810 msg.set_message_type(XDnDConstants.XA_XdndStatus.getAtom()); |
811 /* target window */ |
811 /* target window */ |
812 msg.set_data(0, xclient.get_window()); |
812 msg.set_data(0, xclient.get_window()); |
840 |
840 |
841 public Object getData(long ctxt, long format) |
841 public Object getData(long ctxt, long format) |
842 throws IllegalArgumentException, IOException { |
842 throws IllegalArgumentException, IOException { |
843 XClientMessageEvent xclient = new XClientMessageEvent(ctxt); |
843 XClientMessageEvent xclient = new XClientMessageEvent(ctxt); |
844 long message_type = xclient.get_message_type(); |
844 long message_type = xclient.get_message_type(); |
845 long time_stamp = XlibWrapper.CurrentTime; |
845 long time_stamp = XConstants.CurrentTime; |
846 |
846 |
847 // NOTE: we assume that the source supports at least version 1, so we |
847 // NOTE: we assume that the source supports at least version 1, so we |
848 // can use the time stamp |
848 // can use the time stamp |
849 if (message_type == XDnDConstants.XA_XdndPosition.getAtom()) { |
849 if (message_type == XDnDConstants.XA_XdndPosition.getAtom()) { |
850 // X server time is an unsigned 32-bit number! |
850 // X server time is an unsigned 32-bit number! |
890 } |
890 } |
891 } |
891 } |
892 |
892 |
893 XClientMessageEvent msg = new XClientMessageEvent(); |
893 XClientMessageEvent msg = new XClientMessageEvent(); |
894 try { |
894 try { |
895 msg.set_type((int)XlibWrapper.ClientMessage); |
895 msg.set_type((int)XConstants.ClientMessage); |
896 msg.set_window(xclient.get_data(0)); |
896 msg.set_window(xclient.get_data(0)); |
897 msg.set_format(32); |
897 msg.set_format(32); |
898 msg.set_message_type(XDnDConstants.XA_XdndFinished.getAtom()); |
898 msg.set_message_type(XDnDConstants.XA_XdndFinished.getAtom()); |
899 msg.set_data(0, xclient.get_window()); /* target window */ |
899 msg.set_data(0, xclient.get_window()); /* target window */ |
900 msg.set_data(1, 0); /* flags */ |
900 msg.set_data(1, 0); /* flags */ |
1117 wpg.getData(), |
1117 wpg.getData(), |
1118 wpg.getNumberOfItems()); |
1118 wpg.getNumberOfItems()); |
1119 XToolkit.RESTORE_XERROR_HANDLER(); |
1119 XToolkit.RESTORE_XERROR_HANDLER(); |
1120 |
1120 |
1121 if (XToolkit.saved_error != null && |
1121 if (XToolkit.saved_error != null && |
1122 XToolkit.saved_error.get_error_code() != XlibWrapper.Success) { |
1122 XToolkit.saved_error.get_error_code() != XConstants.Success) { |
1123 if (logger.isLoggable(Level.WARNING)) { |
1123 if (logger.isLoggable(Level.WARNING)) { |
1124 logger.warning("Cannot set XdndTypeList on the proxy window"); |
1124 logger.warning("Cannot set XdndTypeList on the proxy window"); |
1125 } |
1125 } |
1126 } |
1126 } |
1127 } finally { |
1127 } finally { |