1 /*
2 * Copyright (c) 2003, 2008, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
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
7 * published by the Free Software Foundation. Oracle designates this
8 * particular file as subject to the "Classpath" exception as provided
9 * by Oracle in the LICENSE file that accompanied this code.
10 *
11 * This code is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
71 * Creates an instance associated with the specified listener.
72 *
73 * @throws NullPointerException if listener is <code>null</code>.
74 */
75 static XDropTargetProtocol createInstance(XDropTargetProtocolListener listener) {
76 return new XDnDDropTargetProtocol(listener);
77 }
78
79 public String getProtocolName() {
80 return XDragAndDropProtocols.XDnD;
81 }
82
83 public void registerDropTarget(long window) {
84 assert XToolkit.isAWTLockHeldByCurrentThread();
85
86 long data = Native.allocateLongArray(1);
87
88 try {
89 Native.putLong(data, 0, XDnDConstants.XDND_PROTOCOL_VERSION);
90
91 XToolkit.WITH_XERROR_HANDLER(XErrorHandler.VerifyChangePropertyHandler.getInstance());
92 XDnDConstants.XA_XdndAware.setAtomData(window, XAtom.XA_ATOM, data, 1);
93 XToolkit.RESTORE_XERROR_HANDLER();
94
95 if (XToolkit.saved_error != null &&
96 XToolkit.saved_error.get_error_code() != XConstants.Success) {
97 throw new XException("Cannot write XdndAware property");
98 }
99 } finally {
100 unsafe.freeMemory(data);
101 data = 0;
102 }
103 }
104
105 public void unregisterDropTarget(long window) {
106 assert XToolkit.isAWTLockHeldByCurrentThread();
107
108 XDnDConstants.XA_XdndAware.DeleteProperty(window);
109 }
110
111 public void registerEmbedderDropSite(long embedder) {
112 assert XToolkit.isAWTLockHeldByCurrentThread();
113
114 boolean overriden = false;
115 int version = 0;
116 long proxy = 0;
188 }
189 }
190 } finally {
191 wpg3.dispose();
192 }
193 }
194 }
195
196 if (proxy == newProxy) {
197 // Embedder already registered.
198 return;
199 }
200
201 long data = Native.allocateLongArray(1);
202
203 try {
204 Native.putLong(data, 0, XDnDConstants.XDND_PROTOCOL_VERSION);
205
206 /* The proxy window must have the XdndAware set, as XDnD protocol
207 prescribes to check the proxy window for XdndAware. */
208 XToolkit.WITH_XERROR_HANDLER(XErrorHandler.VerifyChangePropertyHandler.getInstance());
209 XDnDConstants.XA_XdndAware.setAtomData(newProxy, XAtom.XA_ATOM,
210 data, 1);
211 XToolkit.RESTORE_XERROR_HANDLER();
212
213 if (XToolkit.saved_error != null &&
214 XToolkit.saved_error.get_error_code() !=
215 XConstants.Success) {
216 throw new XException("Cannot write XdndAware property");
217 }
218
219 Native.putLong(data, 0, newProxy);
220
221 /* The proxy window must have the XdndProxy set to point to itself.*/
222 XToolkit.WITH_XERROR_HANDLER(XErrorHandler.VerifyChangePropertyHandler.getInstance());
223 XDnDConstants.XA_XdndProxy.setAtomData(newProxy, XAtom.XA_WINDOW,
224 data, 1);
225 XToolkit.RESTORE_XERROR_HANDLER();
226
227 if (XToolkit.saved_error != null &&
228 XToolkit.saved_error.get_error_code() !=
229 XConstants.Success) {
230 throw new XException("Cannot write XdndProxy property");
231 }
232
233 Native.putLong(data, 0, XDnDConstants.XDND_PROTOCOL_VERSION);
234
235 XToolkit.WITH_XERROR_HANDLER(XErrorHandler.VerifyChangePropertyHandler.getInstance());
236 XDnDConstants.XA_XdndAware.setAtomData(embedder, XAtom.XA_ATOM,
237 data, 1);
238 XToolkit.RESTORE_XERROR_HANDLER();
239
240 if (XToolkit.saved_error != null &&
241 XToolkit.saved_error.get_error_code() !=
242 XConstants.Success) {
243 throw new XException("Cannot write XdndAware property");
244 }
245
246 Native.putLong(data, 0, newProxy);
247
248 XToolkit.WITH_XERROR_HANDLER(XErrorHandler.VerifyChangePropertyHandler.getInstance());
249 XDnDConstants.XA_XdndProxy.setAtomData(embedder, XAtom.XA_WINDOW,
250 data, 1);
251 XToolkit.RESTORE_XERROR_HANDLER();
252
253 if (XToolkit.saved_error != null &&
254 XToolkit.saved_error.get_error_code() !=
255 XConstants.Success) {
256 throw new XException("Cannot write XdndProxy property");
257 }
258 } finally {
259 unsafe.freeMemory(data);
260 data = 0;
261 }
262
263 putEmbedderRegistryEntry(embedder, overriden, version, proxy);
264 }
265
266 public void unregisterEmbedderDropSite(long embedder) {
267 assert XToolkit.isAWTLockHeldByCurrentThread();
268
269 EmbedderRegistryEntry entry = getEmbedderRegistryEntry(embedder);
270
271 if (entry == null) {
272 return;
273 }
274
275 if (entry.isOverriden()) {
276 long data = Native.allocateLongArray(1);
277
278 try {
279 Native.putLong(data, 0, entry.getVersion());
280
281 XToolkit.WITH_XERROR_HANDLER(XErrorHandler.VerifyChangePropertyHandler.getInstance());
282 XDnDConstants.XA_XdndAware.setAtomData(embedder, XAtom.XA_ATOM,
283 data, 1);
284 XToolkit.RESTORE_XERROR_HANDLER();
285
286 if (XToolkit.saved_error != null &&
287 XToolkit.saved_error.get_error_code() !=
288 XConstants.Success) {
289 throw new XException("Cannot write XdndAware property");
290 }
291
292 Native.putLong(data, 0, (int)entry.getProxy());
293
294 XToolkit.WITH_XERROR_HANDLER(XErrorHandler.VerifyChangePropertyHandler.getInstance());
295 XDnDConstants.XA_XdndProxy.setAtomData(embedder, XAtom.XA_WINDOW,
296 data, 1);
297 XToolkit.RESTORE_XERROR_HANDLER();
298
299 if (XToolkit.saved_error != null &&
300 XToolkit.saved_error.get_error_code() !=
301 XConstants.Success) {
302 throw new XException("Cannot write XdndProxy property");
303 }
304 } finally {
305 unsafe.freeMemory(data);
306 data = 0;
307 }
308 } else {
309 XDnDConstants.XA_XdndAware.DeleteProperty(embedder);
310 XDnDConstants.XA_XdndProxy.DeleteProperty(embedder);
311 }
312 }
313
314 /*
315 * Gets and stores in the registry the embedder's XDnD drop site info
316 * from the embedded.
317 */
318 public void registerEmbeddedDropSite(long embedded) {
319 assert XToolkit.isAWTLockHeldByCurrentThread();
320
321 boolean overriden = false;
524 for (int i = 0; i < 3; i++) {
525 long j;
526 if ((j = xclient.get_data(2 + i)) != XConstants.None) {
527 formats3[countFormats++] = j;
528 }
529 }
530
531 formats = new long[countFormats];
532
533 System.arraycopy(formats3, 0, formats, 0, countFormats);
534 }
535
536 assert XToolkit.isAWTLockHeldByCurrentThread();
537
538 /*
539 * Select for StructureNotifyMask to receive DestroyNotify in case of source
540 * crash.
541 */
542 XWindowAttributes wattr = new XWindowAttributes();
543 try {
544 XToolkit.WITH_XERROR_HANDLER(XErrorHandler.IgnoreBadWindowHandler.getInstance());
545 int status = XlibWrapper.XGetWindowAttributes(XToolkit.getDisplay(),
546 source_win, wattr.pData);
547
548 XToolkit.RESTORE_XERROR_HANDLER();
549
550 if (status == 0 ||
551 (XToolkit.saved_error != null &&
552 XToolkit.saved_error.get_error_code() != XConstants.Success)) {
553 throw new XException("XGetWindowAttributes failed");
554 }
555
556 source_win_mask = wattr.get_your_event_mask();
557 } finally {
558 wattr.dispose();
559 }
560
561 XToolkit.WITH_XERROR_HANDLER(XErrorHandler.IgnoreBadWindowHandler.getInstance());
562 XlibWrapper.XSelectInput(XToolkit.getDisplay(), source_win,
563 source_win_mask |
564 XConstants.StructureNotifyMask);
565
566 XToolkit.RESTORE_XERROR_HANDLER();
567
568 if (XToolkit.saved_error != null &&
569 XToolkit.saved_error.get_error_code() != XConstants.Success) {
570 throw new XException("XSelectInput failed");
571 }
572
573 sourceWindow = source_win;
574 sourceWindowMask = source_win_mask;
575 sourceProtocolVersion = protocol_version;
576 sourceActions = actions;
577 sourceFormats = formats;
578 trackSourceActions = track;
579
580 return true;
581 }
582
583 private boolean processXdndPosition(XClientMessageEvent xclient) {
584 long time_stamp = (int)XConstants.CurrentTime;
585 long xdnd_action = 0;
586 int java_action = DnDConstants.ACTION_NONE;
587 int x = 0;
588 int y = 0;
589
946 public final long getSourceWindow() {
947 return sourceWindow;
948 }
949
950 /**
951 * Reset the state of the object.
952 */
953 public void cleanup() {
954 // Clear the reference to this protocol.
955 XDropTargetEventProcessor.reset();
956
957 if (targetXWindow != null) {
958 notifyProtocolListener(targetXWindow, 0, 0,
959 DnDConstants.ACTION_NONE, null,
960 MouseEvent.MOUSE_EXITED);
961 }
962
963 if (sourceWindow != 0) {
964 XToolkit.awtLock();
965 try {
966 XToolkit.WITH_XERROR_HANDLER(XErrorHandler.IgnoreBadWindowHandler.getInstance());
967 XlibWrapper.XSelectInput(XToolkit.getDisplay(), sourceWindow,
968 sourceWindowMask);
969 XToolkit.RESTORE_XERROR_HANDLER();
970 } finally {
971 XToolkit.awtUnlock();
972 }
973 }
974
975 sourceWindow = 0;
976 sourceWindowMask = 0;
977 sourceProtocolVersion = 0;
978 sourceActions = DnDConstants.ACTION_NONE;
979 sourceFormats = null;
980 trackSourceActions = false;
981 userAction = DnDConstants.ACTION_NONE;
982 sourceX = 0;
983 sourceY = 0;
984 targetXWindow = null;
985 }
986
987 public boolean isDragOverComponent() {
988 return targetXWindow != null;
989 }
1094 + " data2=" + data2
1095 + " data3=" + data3
1096 + " data4=" + data4);
1097 }
1098
1099 // Copy XdndTypeList from source to proxy.
1100 if ((data1 & XDnDConstants.XDND_DATA_TYPES_BIT) != 0) {
1101 WindowPropertyGetter wpg =
1102 new WindowPropertyGetter(xclient.get_data(0),
1103 XDnDConstants.XA_XdndTypeList,
1104 0, 0xFFFF, false,
1105 XAtom.XA_ATOM);
1106 try {
1107 wpg.execute(XErrorHandler.IgnoreBadWindowHandler.getInstance());
1108
1109 if (wpg.getActualType() == XAtom.XA_ATOM &&
1110 wpg.getActualFormat() == 32) {
1111
1112 XToolkit.awtLock();
1113 try {
1114 XToolkit.WITH_XERROR_HANDLER(XErrorHandler.VerifyChangePropertyHandler.getInstance());
1115 XDnDConstants.XA_XdndTypeList.setAtomData(xclient.get_window(),
1116 XAtom.XA_ATOM,
1117 wpg.getData(),
1118 wpg.getNumberOfItems());
1119 XToolkit.RESTORE_XERROR_HANDLER();
1120
1121 if (XToolkit.saved_error != null &&
1122 XToolkit.saved_error.get_error_code() != XConstants.Success) {
1123 if (logger.isLoggable(PlatformLogger.WARNING)) {
1124 logger.warning("Cannot set XdndTypeList on the proxy window");
1125 }
1126 }
1127 } finally {
1128 XToolkit.awtUnlock();
1129 }
1130 } else {
1131 if (logger.isLoggable(PlatformLogger.WARNING)) {
1132 logger.warning("Cannot read XdndTypeList from the source window");
1133 }
1134 }
1135 } finally {
1136 wpg.dispose();
1137 }
1138 }
1139 XDragSourceContextPeer.setProxyModeSourceWindow(xclient.get_data(0));
1140
1141 sendEnterMessageToToplevelImpl(embedded, xclient.get_window(),
1142 data1, data2, data3, data4);
|
1 /*
2 * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
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
7 * published by the Free Software Foundation. Oracle designates this
8 * particular file as subject to the "Classpath" exception as provided
9 * by Oracle in the LICENSE file that accompanied this code.
10 *
11 * This code is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
71 * Creates an instance associated with the specified listener.
72 *
73 * @throws NullPointerException if listener is <code>null</code>.
74 */
75 static XDropTargetProtocol createInstance(XDropTargetProtocolListener listener) {
76 return new XDnDDropTargetProtocol(listener);
77 }
78
79 public String getProtocolName() {
80 return XDragAndDropProtocols.XDnD;
81 }
82
83 public void registerDropTarget(long window) {
84 assert XToolkit.isAWTLockHeldByCurrentThread();
85
86 long data = Native.allocateLongArray(1);
87
88 try {
89 Native.putLong(data, 0, XDnDConstants.XDND_PROTOCOL_VERSION);
90
91 XErrorHandlerUtil.WITH_XERROR_HANDLER(XErrorHandler.VerifyChangePropertyHandler.getInstance());
92 XDnDConstants.XA_XdndAware.setAtomData(window, XAtom.XA_ATOM, data, 1);
93 XErrorHandlerUtil.RESTORE_XERROR_HANDLER();
94
95 if ((XErrorHandlerUtil.saved_error != null) &&
96 (XErrorHandlerUtil.saved_error.get_error_code() != XConstants.Success)) {
97 throw new XException("Cannot write XdndAware property");
98 }
99 } finally {
100 unsafe.freeMemory(data);
101 data = 0;
102 }
103 }
104
105 public void unregisterDropTarget(long window) {
106 assert XToolkit.isAWTLockHeldByCurrentThread();
107
108 XDnDConstants.XA_XdndAware.DeleteProperty(window);
109 }
110
111 public void registerEmbedderDropSite(long embedder) {
112 assert XToolkit.isAWTLockHeldByCurrentThread();
113
114 boolean overriden = false;
115 int version = 0;
116 long proxy = 0;
188 }
189 }
190 } finally {
191 wpg3.dispose();
192 }
193 }
194 }
195
196 if (proxy == newProxy) {
197 // Embedder already registered.
198 return;
199 }
200
201 long data = Native.allocateLongArray(1);
202
203 try {
204 Native.putLong(data, 0, XDnDConstants.XDND_PROTOCOL_VERSION);
205
206 /* The proxy window must have the XdndAware set, as XDnD protocol
207 prescribes to check the proxy window for XdndAware. */
208 XErrorHandlerUtil.WITH_XERROR_HANDLER(XErrorHandler.VerifyChangePropertyHandler.getInstance());
209 XDnDConstants.XA_XdndAware.setAtomData(newProxy, XAtom.XA_ATOM,
210 data, 1);
211 XErrorHandlerUtil.RESTORE_XERROR_HANDLER();
212
213 if ((XErrorHandlerUtil.saved_error != null) &&
214 (XErrorHandlerUtil.saved_error.get_error_code() != XConstants.Success)) {
215 throw new XException("Cannot write XdndAware property");
216 }
217
218 Native.putLong(data, 0, newProxy);
219
220 /* The proxy window must have the XdndProxy set to point to itself.*/
221 XErrorHandlerUtil.WITH_XERROR_HANDLER(XErrorHandler.VerifyChangePropertyHandler.getInstance());
222 XDnDConstants.XA_XdndProxy.setAtomData(newProxy, XAtom.XA_WINDOW,
223 data, 1);
224 XErrorHandlerUtil.RESTORE_XERROR_HANDLER();
225
226 if ((XErrorHandlerUtil.saved_error != null) &&
227 (XErrorHandlerUtil.saved_error.get_error_code() != XConstants.Success)) {
228 throw new XException("Cannot write XdndProxy property");
229 }
230
231 Native.putLong(data, 0, XDnDConstants.XDND_PROTOCOL_VERSION);
232
233 XErrorHandlerUtil.WITH_XERROR_HANDLER(XErrorHandler.VerifyChangePropertyHandler.getInstance());
234 XDnDConstants.XA_XdndAware.setAtomData(embedder, XAtom.XA_ATOM,
235 data, 1);
236 XErrorHandlerUtil.RESTORE_XERROR_HANDLER();
237
238 if ((XErrorHandlerUtil.saved_error != null) &&
239 (XErrorHandlerUtil.saved_error.get_error_code() != XConstants.Success)) {
240 throw new XException("Cannot write XdndAware property");
241 }
242
243 Native.putLong(data, 0, newProxy);
244
245 XErrorHandlerUtil.WITH_XERROR_HANDLER(XErrorHandler.VerifyChangePropertyHandler.getInstance());
246 XDnDConstants.XA_XdndProxy.setAtomData(embedder, XAtom.XA_WINDOW,
247 data, 1);
248 XErrorHandlerUtil.RESTORE_XERROR_HANDLER();
249
250 if ((XErrorHandlerUtil.saved_error != null) &&
251 (XErrorHandlerUtil.saved_error.get_error_code() != XConstants.Success)) {
252 throw new XException("Cannot write XdndProxy property");
253 }
254 } finally {
255 unsafe.freeMemory(data);
256 data = 0;
257 }
258
259 putEmbedderRegistryEntry(embedder, overriden, version, proxy);
260 }
261
262 public void unregisterEmbedderDropSite(long embedder) {
263 assert XToolkit.isAWTLockHeldByCurrentThread();
264
265 EmbedderRegistryEntry entry = getEmbedderRegistryEntry(embedder);
266
267 if (entry == null) {
268 return;
269 }
270
271 if (entry.isOverriden()) {
272 long data = Native.allocateLongArray(1);
273
274 try {
275 Native.putLong(data, 0, entry.getVersion());
276
277 XErrorHandlerUtil.WITH_XERROR_HANDLER(XErrorHandler.VerifyChangePropertyHandler.getInstance());
278 XDnDConstants.XA_XdndAware.setAtomData(embedder, XAtom.XA_ATOM,
279 data, 1);
280 XErrorHandlerUtil.RESTORE_XERROR_HANDLER();
281
282 if ((XErrorHandlerUtil.saved_error != null) &&
283 (XErrorHandlerUtil.saved_error.get_error_code() != XConstants.Success)) {
284 throw new XException("Cannot write XdndAware property");
285 }
286
287 Native.putLong(data, 0, (int)entry.getProxy());
288
289 XErrorHandlerUtil.WITH_XERROR_HANDLER(XErrorHandler.VerifyChangePropertyHandler.getInstance());
290 XDnDConstants.XA_XdndProxy.setAtomData(embedder, XAtom.XA_WINDOW,
291 data, 1);
292 XErrorHandlerUtil.RESTORE_XERROR_HANDLER();
293
294 if ((XErrorHandlerUtil.saved_error != null) &&
295 (XErrorHandlerUtil.saved_error.get_error_code() != XConstants.Success)) {
296 throw new XException("Cannot write XdndProxy property");
297 }
298 } finally {
299 unsafe.freeMemory(data);
300 data = 0;
301 }
302 } else {
303 XDnDConstants.XA_XdndAware.DeleteProperty(embedder);
304 XDnDConstants.XA_XdndProxy.DeleteProperty(embedder);
305 }
306 }
307
308 /*
309 * Gets and stores in the registry the embedder's XDnD drop site info
310 * from the embedded.
311 */
312 public void registerEmbeddedDropSite(long embedded) {
313 assert XToolkit.isAWTLockHeldByCurrentThread();
314
315 boolean overriden = false;
518 for (int i = 0; i < 3; i++) {
519 long j;
520 if ((j = xclient.get_data(2 + i)) != XConstants.None) {
521 formats3[countFormats++] = j;
522 }
523 }
524
525 formats = new long[countFormats];
526
527 System.arraycopy(formats3, 0, formats, 0, countFormats);
528 }
529
530 assert XToolkit.isAWTLockHeldByCurrentThread();
531
532 /*
533 * Select for StructureNotifyMask to receive DestroyNotify in case of source
534 * crash.
535 */
536 XWindowAttributes wattr = new XWindowAttributes();
537 try {
538 XErrorHandlerUtil.WITH_XERROR_HANDLER(XErrorHandler.IgnoreBadWindowHandler.getInstance());
539 int status = XlibWrapper.XGetWindowAttributes(XToolkit.getDisplay(),
540 source_win, wattr.pData);
541
542 XErrorHandlerUtil.RESTORE_XERROR_HANDLER();
543
544 if ((status == 0) ||
545 ((XErrorHandlerUtil.saved_error != null) &&
546 (XErrorHandlerUtil.saved_error.get_error_code() != XConstants.Success))) {
547 throw new XException("XGetWindowAttributes failed");
548 }
549
550 source_win_mask = wattr.get_your_event_mask();
551 } finally {
552 wattr.dispose();
553 }
554
555 XErrorHandlerUtil.WITH_XERROR_HANDLER(XErrorHandler.IgnoreBadWindowHandler.getInstance());
556 XlibWrapper.XSelectInput(XToolkit.getDisplay(), source_win,
557 source_win_mask |
558 XConstants.StructureNotifyMask);
559
560 XErrorHandlerUtil.RESTORE_XERROR_HANDLER();
561
562 if ((XErrorHandlerUtil.saved_error != null) &&
563 (XErrorHandlerUtil.saved_error.get_error_code() != XConstants.Success)) {
564 throw new XException("XSelectInput failed");
565 }
566
567 sourceWindow = source_win;
568 sourceWindowMask = source_win_mask;
569 sourceProtocolVersion = protocol_version;
570 sourceActions = actions;
571 sourceFormats = formats;
572 trackSourceActions = track;
573
574 return true;
575 }
576
577 private boolean processXdndPosition(XClientMessageEvent xclient) {
578 long time_stamp = (int)XConstants.CurrentTime;
579 long xdnd_action = 0;
580 int java_action = DnDConstants.ACTION_NONE;
581 int x = 0;
582 int y = 0;
583
940 public final long getSourceWindow() {
941 return sourceWindow;
942 }
943
944 /**
945 * Reset the state of the object.
946 */
947 public void cleanup() {
948 // Clear the reference to this protocol.
949 XDropTargetEventProcessor.reset();
950
951 if (targetXWindow != null) {
952 notifyProtocolListener(targetXWindow, 0, 0,
953 DnDConstants.ACTION_NONE, null,
954 MouseEvent.MOUSE_EXITED);
955 }
956
957 if (sourceWindow != 0) {
958 XToolkit.awtLock();
959 try {
960 XErrorHandlerUtil.WITH_XERROR_HANDLER(XErrorHandler.IgnoreBadWindowHandler.getInstance());
961 XlibWrapper.XSelectInput(XToolkit.getDisplay(), sourceWindow,
962 sourceWindowMask);
963 XErrorHandlerUtil.RESTORE_XERROR_HANDLER();
964 } finally {
965 XToolkit.awtUnlock();
966 }
967 }
968
969 sourceWindow = 0;
970 sourceWindowMask = 0;
971 sourceProtocolVersion = 0;
972 sourceActions = DnDConstants.ACTION_NONE;
973 sourceFormats = null;
974 trackSourceActions = false;
975 userAction = DnDConstants.ACTION_NONE;
976 sourceX = 0;
977 sourceY = 0;
978 targetXWindow = null;
979 }
980
981 public boolean isDragOverComponent() {
982 return targetXWindow != null;
983 }
1088 + " data2=" + data2
1089 + " data3=" + data3
1090 + " data4=" + data4);
1091 }
1092
1093 // Copy XdndTypeList from source to proxy.
1094 if ((data1 & XDnDConstants.XDND_DATA_TYPES_BIT) != 0) {
1095 WindowPropertyGetter wpg =
1096 new WindowPropertyGetter(xclient.get_data(0),
1097 XDnDConstants.XA_XdndTypeList,
1098 0, 0xFFFF, false,
1099 XAtom.XA_ATOM);
1100 try {
1101 wpg.execute(XErrorHandler.IgnoreBadWindowHandler.getInstance());
1102
1103 if (wpg.getActualType() == XAtom.XA_ATOM &&
1104 wpg.getActualFormat() == 32) {
1105
1106 XToolkit.awtLock();
1107 try {
1108 XErrorHandlerUtil.WITH_XERROR_HANDLER(XErrorHandler.VerifyChangePropertyHandler.getInstance());
1109 XDnDConstants.XA_XdndTypeList.setAtomData(xclient.get_window(),
1110 XAtom.XA_ATOM,
1111 wpg.getData(),
1112 wpg.getNumberOfItems());
1113 XErrorHandlerUtil.RESTORE_XERROR_HANDLER();
1114
1115 if ((XErrorHandlerUtil.saved_error != null) &&
1116 (XErrorHandlerUtil.saved_error.get_error_code() != XConstants.Success)) {
1117 if (logger.isLoggable(PlatformLogger.WARNING)) {
1118 logger.warning("Cannot set XdndTypeList on the proxy window");
1119 }
1120 }
1121 } finally {
1122 XToolkit.awtUnlock();
1123 }
1124 } else {
1125 if (logger.isLoggable(PlatformLogger.WARNING)) {
1126 logger.warning("Cannot read XdndTypeList from the source window");
1127 }
1128 }
1129 } finally {
1130 wpg.dispose();
1131 }
1132 }
1133 XDragSourceContextPeer.setProxyModeSourceWindow(xclient.get_data(0));
1134
1135 sendEnterMessageToToplevelImpl(embedded, xclient.get_window(),
1136 data1, data2, data3, data4);
|