1 /* $Header: /cvsroot/lesstif/lesstif/test/Xm/drag_help/drag_bitmap.c,v 1.3 2001/05/23 13:42:30 amai Exp $ */
2 
3 #include <Xm/Xm.h>
4 #include <Xm/DragDrop.h>
5 #include "bitmap.h"
6 
7 extern Boolean  export_bitmap();
8 
9 void
drop_site_enter(w,client_data,call_data)10 drop_site_enter(w, client_data, call_data)
11 	Widget          w;
12 	XtPointer       client_data;
13 	XtPointer       call_data;
14 {
15 	Bitmap_p        bitmap = (Bitmap_p) client_data;
16 
17 	if (((XmDropSiteEnterCallbackStruct *) call_data)->dropSiteStatus ==
18 	    XmVALID_DROP_SITE)
19 		XtVaSetValues(w, XmNsourceCursorIcon, bitmap->state_icon, NULL);
20 }
21 
22 void
drop_site_leave(w,client_data,call_data)23 drop_site_leave(w, client_data, call_data)
24 	Widget          w;
25 	XtPointer       client_data;
26 	XtPointer       call_data;
27 {
28 	XtVaSetValues(w, XmNsourceCursorIcon, NULL, NULL);
29 }
30 
31 void
drag_bitmap(w,bitmap,event)32 drag_bitmap(w, bitmap, event)
33 	Widget          w;
34 	Bitmap_p        bitmap;
35 	XEvent         *event;
36 {
37 	Widget          drag_context;
38 	Arg             al[10];
39 	int             ac = 0;
40 	Atom            export_targets[2];
41 
42 	export_targets[0] = XA_STRING;
43 	export_targets[1] = XA_PIXMAP;
44 
45 	if (bitmap->state_icon == NULL) {
46 		XtSetArg(al[ac], XmNpixmap, bitmap->bitmap); ac++;
47 		XtSetArg(al[ac], XmNwidth, bitmap->width); ac++;
48 		XtSetArg(al[ac], XmNheight, bitmap->height); ac++;
49 		bitmap->state_icon = XmCreateDragIcon(w, "drag_icon", al, ac);
50 		ac = 0;
51 	}
52 	XtSetArg(al[ac], XmNconvertProc, export_bitmap); ac++;
53 	XtSetArg(al[ac], XmNclientData, bitmap); ac++;
54 	XtSetArg(al[ac], XmNexportTargets, export_targets); ac++;
55 	XtSetArg(al[ac], XmNnumExportTargets, 2); ac++;
56 	XtSetArg(al[ac], XmNdragOperations, XmDROP_COPY); ac++;
57 	drag_context = XmDragStart(w, event, al, ac);
58 
59 	/* Register callbacks for entering and leaving drop sites */
60 	if (drag_context) {
61 		XtAddCallback(drag_context, XmNdropSiteEnterCallback,
62 			      drop_site_enter, (XtPointer) bitmap);
63 		XtAddCallback(drag_context, XmNdropSiteLeaveCallback,
64 			      drop_site_leave, NULL);
65 		/* Extra target XA_PIXMAP */
66 		export_targets[0] = XA_STRING;
67 		export_targets[1] = XA_PIXMAP;
68 	}
69 }
70