src/solaris/classes/sun/awt/X11/XDnDDropTargetProtocol.java

Print this page


   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);