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

Print this page




 725                                               XClientMessageEvent xclient) {
 726         /* flags */
 727         long data1 = sourceProtocolVersion << XDnDConstants.XDND_PROTOCOL_SHIFT;
 728         if (sourceFormats != null && sourceFormats.length > 3) {
 729             data1 |= XDnDConstants.XDND_DATA_TYPES_BIT;
 730         }
 731         long data2 = sourceFormats.length > 0 ? sourceFormats[0] : 0;
 732         long data3 = sourceFormats.length > 1 ? sourceFormats[1] : 0;
 733         long data4 = sourceFormats.length > 2 ? sourceFormats[2] : 0;
 734         sendEnterMessageToToplevelImpl(toplevel, xclient.get_data(0),
 735                                        data1, data2, data3, data4);
 736 
 737     }
 738 
 739     private void sendEnterMessageToToplevelImpl(long toplevel,
 740                                                 long sourceWindow,
 741                                                 long data1, long data2,
 742                                                 long data3, long data4) {
 743         XClientMessageEvent enter = new XClientMessageEvent();
 744         try {
 745             enter.set_type((int)XConstants.ClientMessage);
 746             enter.set_window(toplevel);
 747             enter.set_format(32);
 748             enter.set_message_type(XDnDConstants.XA_XdndEnter.getAtom());
 749             /* XID of the source window */
 750             enter.set_data(0, sourceWindow);
 751             enter.set_data(1, data1);
 752             enter.set_data(2, data2);
 753             enter.set_data(3, data3);
 754             enter.set_data(4, data4);
 755 
 756             forwardClientMessageToToplevel(toplevel, enter);
 757         } finally {
 758             enter.dispose();
 759         }
 760     }
 761 
 762     protected void sendLeaveMessageToToplevel(long toplevel,
 763                                               XClientMessageEvent xclient) {
 764         sendLeaveMessageToToplevelImpl(toplevel, xclient.get_data(0));
 765     }
 766 
 767     protected void sendLeaveMessageToToplevelImpl(long toplevel,
 768                                                   long sourceWindow) {
 769         XClientMessageEvent leave = new XClientMessageEvent();
 770         try {
 771             leave.set_type((int)XConstants.ClientMessage);
 772             leave.set_window(toplevel);
 773             leave.set_format(32);
 774             leave.set_message_type(XDnDConstants.XA_XdndLeave.getAtom());
 775             /* XID of the source window */
 776             leave.set_data(0, sourceWindow);
 777             /* flags */
 778             leave.set_data(1, 0);
 779 
 780             forwardClientMessageToToplevel(toplevel, leave);
 781         } finally {
 782             leave.dispose();
 783         }
 784     }
 785 
 786     public boolean sendResponse(long ctxt, int eventID, int action) {
 787         XClientMessageEvent xclient = new XClientMessageEvent(ctxt);
 788 
 789         if (xclient.get_message_type() !=
 790             XDnDConstants.XA_XdndPosition.getAtom()) {
 791 
 792             return false;
 793         }
 794 
 795         if (eventID == MouseEvent.MOUSE_EXITED) {
 796             action = DnDConstants.ACTION_NONE;
 797         }
 798 
 799         XClientMessageEvent msg = new XClientMessageEvent();
 800         try {
 801             msg.set_type((int)XConstants.ClientMessage);
 802             msg.set_window(xclient.get_data(0));
 803             msg.set_format(32);
 804             msg.set_message_type(XDnDConstants.XA_XdndStatus.getAtom());
 805             /* target window */
 806             msg.set_data(0, xclient.get_window());
 807             /* flags */
 808             long flags = 0;
 809             if (action != DnDConstants.ACTION_NONE) {
 810                 flags |= XDnDConstants.XDND_ACCEPT_DROP_FLAG;
 811             }
 812             msg.set_data(1, flags);
 813             /* specify an empty rectangle */
 814             msg.set_data(2, 0); /* x, y */
 815             msg.set_data(3, 0); /* w, h */
 816             /* action accepted by the target */
 817             msg.set_data(4, XDnDConstants.getXDnDActionForJavaAction(action));
 818 
 819             XToolkit.awtLock();
 820             try {
 821                 XlibWrapper.XSendEvent(XToolkit.getDisplay(),


 869 
 870             long time_stamp = xclient.get_data(2);
 871             long xdndSelectionAtom =
 872                 XDnDConstants.XDnDSelection.getSelectionAtom().getAtom();
 873 
 874             XToolkit.awtLock();
 875             try {
 876                 XlibWrapper.XConvertSelection(XToolkit.getDisplay(),
 877                                               xdndSelectionAtom,
 878                                               XAtom.get("DELETE").getAtom(),
 879                                               XAtom.get("XAWT_SELECTION").getAtom(),
 880                                               XWindow.getXAWTRootWindow().getWindow(),
 881                                               time_stamp);
 882             } finally {
 883                 XToolkit.awtUnlock();
 884             }
 885         }
 886 
 887         XClientMessageEvent msg = new XClientMessageEvent();
 888         try {
 889             msg.set_type((int)XConstants.ClientMessage);
 890             msg.set_window(xclient.get_data(0));
 891             msg.set_format(32);
 892             msg.set_message_type(XDnDConstants.XA_XdndFinished.getAtom());
 893             msg.set_data(0, xclient.get_window()); /* target window */
 894             msg.set_data(1, 0); /* flags */
 895             /* specify an empty rectangle */
 896             msg.set_data(2, 0);
 897             if (sourceProtocolVersion >= 5) {
 898                 if (success) {
 899                     msg.set_data(1, XDnDConstants.XDND_ACCEPT_DROP_FLAG);
 900                 }
 901                 /* action performed by the target */
 902                 msg.set_data(2, XDnDConstants.getXDnDActionForJavaAction(dropAction));
 903             }
 904             msg.set_data(3, 0);
 905             msg.set_data(4, 0);
 906 
 907             XToolkit.awtLock();
 908             try {
 909                 XlibWrapper.XSendEvent(XToolkit.getDisplay(),




 725                                               XClientMessageEvent xclient) {
 726         /* flags */
 727         long data1 = sourceProtocolVersion << XDnDConstants.XDND_PROTOCOL_SHIFT;
 728         if (sourceFormats != null && sourceFormats.length > 3) {
 729             data1 |= XDnDConstants.XDND_DATA_TYPES_BIT;
 730         }
 731         long data2 = sourceFormats.length > 0 ? sourceFormats[0] : 0;
 732         long data3 = sourceFormats.length > 1 ? sourceFormats[1] : 0;
 733         long data4 = sourceFormats.length > 2 ? sourceFormats[2] : 0;
 734         sendEnterMessageToToplevelImpl(toplevel, xclient.get_data(0),
 735                                        data1, data2, data3, data4);
 736 
 737     }
 738 
 739     private void sendEnterMessageToToplevelImpl(long toplevel,
 740                                                 long sourceWindow,
 741                                                 long data1, long data2,
 742                                                 long data3, long data4) {
 743         XClientMessageEvent enter = new XClientMessageEvent();
 744         try {
 745             enter.set_type(XConstants.ClientMessage);
 746             enter.set_window(toplevel);
 747             enter.set_format(32);
 748             enter.set_message_type(XDnDConstants.XA_XdndEnter.getAtom());
 749             /* XID of the source window */
 750             enter.set_data(0, sourceWindow);
 751             enter.set_data(1, data1);
 752             enter.set_data(2, data2);
 753             enter.set_data(3, data3);
 754             enter.set_data(4, data4);
 755 
 756             forwardClientMessageToToplevel(toplevel, enter);
 757         } finally {
 758             enter.dispose();
 759         }
 760     }
 761 
 762     protected void sendLeaveMessageToToplevel(long toplevel,
 763                                               XClientMessageEvent xclient) {
 764         sendLeaveMessageToToplevelImpl(toplevel, xclient.get_data(0));
 765     }
 766 
 767     protected void sendLeaveMessageToToplevelImpl(long toplevel,
 768                                                   long sourceWindow) {
 769         XClientMessageEvent leave = new XClientMessageEvent();
 770         try {
 771             leave.set_type(XConstants.ClientMessage);
 772             leave.set_window(toplevel);
 773             leave.set_format(32);
 774             leave.set_message_type(XDnDConstants.XA_XdndLeave.getAtom());
 775             /* XID of the source window */
 776             leave.set_data(0, sourceWindow);
 777             /* flags */
 778             leave.set_data(1, 0);
 779 
 780             forwardClientMessageToToplevel(toplevel, leave);
 781         } finally {
 782             leave.dispose();
 783         }
 784     }
 785 
 786     public boolean sendResponse(long ctxt, int eventID, int action) {
 787         XClientMessageEvent xclient = new XClientMessageEvent(ctxt);
 788 
 789         if (xclient.get_message_type() !=
 790             XDnDConstants.XA_XdndPosition.getAtom()) {
 791 
 792             return false;
 793         }
 794 
 795         if (eventID == MouseEvent.MOUSE_EXITED) {
 796             action = DnDConstants.ACTION_NONE;
 797         }
 798 
 799         XClientMessageEvent msg = new XClientMessageEvent();
 800         try {
 801             msg.set_type(XConstants.ClientMessage);
 802             msg.set_window(xclient.get_data(0));
 803             msg.set_format(32);
 804             msg.set_message_type(XDnDConstants.XA_XdndStatus.getAtom());
 805             /* target window */
 806             msg.set_data(0, xclient.get_window());
 807             /* flags */
 808             long flags = 0;
 809             if (action != DnDConstants.ACTION_NONE) {
 810                 flags |= XDnDConstants.XDND_ACCEPT_DROP_FLAG;
 811             }
 812             msg.set_data(1, flags);
 813             /* specify an empty rectangle */
 814             msg.set_data(2, 0); /* x, y */
 815             msg.set_data(3, 0); /* w, h */
 816             /* action accepted by the target */
 817             msg.set_data(4, XDnDConstants.getXDnDActionForJavaAction(action));
 818 
 819             XToolkit.awtLock();
 820             try {
 821                 XlibWrapper.XSendEvent(XToolkit.getDisplay(),


 869 
 870             long time_stamp = xclient.get_data(2);
 871             long xdndSelectionAtom =
 872                 XDnDConstants.XDnDSelection.getSelectionAtom().getAtom();
 873 
 874             XToolkit.awtLock();
 875             try {
 876                 XlibWrapper.XConvertSelection(XToolkit.getDisplay(),
 877                                               xdndSelectionAtom,
 878                                               XAtom.get("DELETE").getAtom(),
 879                                               XAtom.get("XAWT_SELECTION").getAtom(),
 880                                               XWindow.getXAWTRootWindow().getWindow(),
 881                                               time_stamp);
 882             } finally {
 883                 XToolkit.awtUnlock();
 884             }
 885         }
 886 
 887         XClientMessageEvent msg = new XClientMessageEvent();
 888         try {
 889             msg.set_type(XConstants.ClientMessage);
 890             msg.set_window(xclient.get_data(0));
 891             msg.set_format(32);
 892             msg.set_message_type(XDnDConstants.XA_XdndFinished.getAtom());
 893             msg.set_data(0, xclient.get_window()); /* target window */
 894             msg.set_data(1, 0); /* flags */
 895             /* specify an empty rectangle */
 896             msg.set_data(2, 0);
 897             if (sourceProtocolVersion >= 5) {
 898                 if (success) {
 899                     msg.set_data(1, XDnDConstants.XDND_ACCEPT_DROP_FLAG);
 900                 }
 901                 /* action performed by the target */
 902                 msg.set_data(2, XDnDConstants.getXDnDActionForJavaAction(dropAction));
 903             }
 904             msg.set_data(3, 0);
 905             msg.set_data(4, 0);
 906 
 907             XToolkit.awtLock();
 908             try {
 909                 XlibWrapper.XSendEvent(XToolkit.getDisplay(),