|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Motif
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* Copyright (c) 1987-2012, The Open Group. All rights reserved.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* These libraries and programs are free software; you can
|
|
Packit |
b099d7 |
* redistribute them and/or modify them under the terms of the GNU
|
|
Packit |
b099d7 |
* Lesser General Public License as published by the Free Software
|
|
Packit |
b099d7 |
* Foundation; either version 2 of the License, or (at your option)
|
|
Packit |
b099d7 |
* any later version.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* These libraries and programs are distributed in the hope that
|
|
Packit |
b099d7 |
* they will be useful, but WITHOUT ANY WARRANTY; without even the
|
|
Packit |
b099d7 |
* implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
|
Packit |
b099d7 |
* PURPOSE. See the GNU Lesser General Public License for more
|
|
Packit |
b099d7 |
* details.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* You should have received a copy of the GNU Lesser General Public
|
|
Packit |
b099d7 |
* License along with these librararies and programs; if not, write
|
|
Packit |
b099d7 |
* to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
|
|
Packit |
b099d7 |
* Floor, Boston, MA 02110-1301 USA
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* HISTORY
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
#ifdef REV_INFO
|
|
Packit |
b099d7 |
#ifndef lint
|
|
Packit |
b099d7 |
static char rcsid[] = "$XConsortium: DNDDrop3.c /main/8 1995/07/14 11:52:47 drk $"
|
|
Packit |
b099d7 |
#endif
|
|
Packit |
b099d7 |
#endif
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* (c) Copyright 1987, 1988, 1989 HEWLETT-PACKARD COMPANY */
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* file: DNDDrop3.c
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* This tests non-rectangular dropSites, i.e., dropSites that have to be
|
|
Packit |
b099d7 |
* represented by more that one rectangle.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
#include <stdio.h>
|
|
Packit |
b099d7 |
#include <X11/X.h>
|
|
Packit |
b099d7 |
#include <X11/Xlib.h>
|
|
Packit |
b099d7 |
#include <X11/IntrinsicP.h>
|
|
Packit |
b099d7 |
#include <X11/StringDefs.h>
|
|
Packit |
b099d7 |
#include <Xm/TextP.h>
|
|
Packit |
b099d7 |
#include <Xm/TextFP.h>
|
|
Packit |
b099d7 |
#include <Xm/FormP.h>
|
|
Packit |
b099d7 |
#include <Xm/PushBP.h>
|
|
Packit |
b099d7 |
#include <Xm/RowColumn.h>
|
|
Packit |
b099d7 |
#include <Xm/LabelP.h>
|
|
Packit |
b099d7 |
#include <Xm/DropSMgrP.h>
|
|
Packit |
b099d7 |
#include <Xm/DragCP.h>
|
|
Packit |
b099d7 |
#include <Xm/AtomMgr.h>
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static void StartMyDragProc();
|
|
Packit |
b099d7 |
static void RaiseProc();
|
|
Packit |
b099d7 |
static void LowerProc();
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XRectangle rects0[] = {
|
|
Packit |
b099d7 |
{ 40, 0, 40, 40 },
|
|
Packit |
b099d7 |
{ 0, 40, 120, 40 },
|
|
Packit |
b099d7 |
{ 40, 80, 40, 40 },
|
|
Packit |
b099d7 |
};
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XRectangle rects1[] = {
|
|
Packit |
b099d7 |
{ 0, 0, 40, 40 },
|
|
Packit |
b099d7 |
{ 80, 0, 40, 40 },
|
|
Packit |
b099d7 |
{ 0, 40, 120, 40 },
|
|
Packit |
b099d7 |
};
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XRectangle rects2[] = {
|
|
Packit |
b099d7 |
{ 20, 0, 40, 40 },
|
|
Packit |
b099d7 |
{ 0, 40, 80, 20 },
|
|
Packit |
b099d7 |
};
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XRectangle rects3[] = {
|
|
Packit |
b099d7 |
{ 0, 0, 40, 60 },
|
|
Packit |
b099d7 |
{ 40, 20, 40, 20 },
|
|
Packit |
b099d7 |
};
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
typedef struct _DropZoneRec {
|
|
Packit |
b099d7 |
char *name;
|
|
Packit |
b099d7 |
XRectangle *rects;
|
|
Packit |
b099d7 |
int num_rects;
|
|
Packit |
b099d7 |
Region region;
|
|
Packit |
b099d7 |
Widget refW;
|
|
Packit |
b099d7 |
Widget icon;
|
|
Packit |
b099d7 |
} DropZoneRec, *DropZone;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static DropZoneRec DropZones[] = {
|
|
Packit |
b099d7 |
{ "cross", rects0, XtNumber(rects0), NULL, NULL, NULL},
|
|
Packit |
b099d7 |
{ "trough", rects1, XtNumber(rects1), NULL, NULL, NULL},
|
|
Packit |
b099d7 |
{ "MwmIcon", rects2, XtNumber(rects2), NULL, NULL, NULL},
|
|
Packit |
b099d7 |
{ "mallet", rects3, XtNumber(rects3), NULL, NULL, NULL},
|
|
Packit |
b099d7 |
};
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static int numZones = XtNumber(DropZones);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static String myDNDTranslations =
|
|
Packit |
b099d7 |
" <Btn2Down> : StartMyDrag() \n\
|
|
Packit |
b099d7 |
m <Btn1Up> : Raise(1) \n\
|
|
Packit |
b099d7 |
<Btn1Up> : Raise(0) \n\
|
|
Packit |
b099d7 |
m <Btn1Up> : Lower(1) \n\
|
|
Packit |
b099d7 |
<Btn1Up> : Lower(0)";
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static XtActionsRec myDNDActions[] = {
|
|
Packit |
b099d7 |
{ "StartMyDrag", StartMyDragProc },
|
|
Packit |
b099d7 |
{ "Raise", RaiseProc },
|
|
Packit |
b099d7 |
{ "Lower", LowerProc },
|
|
Packit |
b099d7 |
};
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
Widget shell1;
|
|
Packit |
b099d7 |
Widget form1;
|
|
Packit |
b099d7 |
Widget p0, p1, p2, p3;
|
|
Packit |
b099d7 |
Widget text1;
|
|
Packit |
b099d7 |
int n = 0;
|
|
Packit |
b099d7 |
Arg args[30];
|
|
Packit |
b099d7 |
XtAppContext this_app;
|
|
Packit |
b099d7 |
Display *display;
|
|
Packit |
b099d7 |
int i;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
Pixel GetPixel(dpy, name)
|
|
Packit |
b099d7 |
Display *dpy;
|
|
Packit |
b099d7 |
char *name;
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XColor color, exact_color;
|
|
Packit |
b099d7 |
int scr = DefaultScreen(dpy);
|
|
Packit |
b099d7 |
Colormap cmap = DefaultColormap(dpy, scr);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XAllocNamedColor(dpy, cmap, name, &color, &exact_color);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
return(color.pixel);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
void ExposeEventHandler(w, client_data, event, continue_to_dispatch)
|
|
Packit |
b099d7 |
Widget w;
|
|
Packit |
b099d7 |
XtPointer client_data;
|
|
Packit |
b099d7 |
XEvent *event;
|
|
Packit |
b099d7 |
Boolean *continue_to_dispatch;
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
static Boolean first_time = True;
|
|
Packit |
b099d7 |
XGCValues values;
|
|
Packit |
b099d7 |
unsigned long valueMask;
|
|
Packit |
b099d7 |
static GC dzGC;
|
|
Packit |
b099d7 |
Pixel zoneColor;
|
|
Packit |
b099d7 |
int i, j;
|
|
Packit |
b099d7 |
Region clipRegion = NULL;
|
|
Packit |
b099d7 |
Region sibRegion = NULL;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
*continue_to_dispatch = True;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (first_time)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
valueMask = GCGraphicsExposures;
|
|
Packit |
b099d7 |
values.graphics_exposures = False;
|
|
Packit |
b099d7 |
dzGC = XCreateGC(XtDisplay(w), XtWindow(w), valueMask, &values);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
clipRegion = XCreateRegion();
|
|
Packit |
b099d7 |
sibRegion = XCreateRegion();
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
for (i=0; i < XtNumber(DropZones); i++)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
valueMask = (GCForeground | GCBackground);
|
|
Packit |
b099d7 |
values.background = DropZones[i].refW->core.background_pixel;
|
|
Packit |
b099d7 |
values.foreground = DropZones[i].refW->core.background_pixel;
|
|
Packit |
b099d7 |
XChangeGC(XtDisplay(w), dzGC, valueMask, &values);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XUnionRegion(DropZones[i].region, DropZones[i].region,
|
|
Packit |
b099d7 |
clipRegion);
|
|
Packit |
b099d7 |
XOffsetRegion(clipRegion, XtX(w), XtY(w));
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
for (j=0; j < i ; j++)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XUnionRegion(DropZones[j].region, DropZones[j].region,
|
|
Packit |
b099d7 |
sibRegion);
|
|
Packit |
b099d7 |
XOffsetRegion(sibRegion, XtX(DropZones[j].refW),
|
|
Packit |
b099d7 |
XtY(DropZones[j].refW));
|
|
Packit |
b099d7 |
XSubtractRegion(clipRegion, sibRegion, clipRegion);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XSetRegion(XtDisplay(w), dzGC, clipRegion);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XFillRectangle(XtDisplay(w), XtWindow(w), dzGC,
|
|
Packit |
b099d7 |
XtX(w), XtY(w), XtWidth(w), XtHeight(w));
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static void RaiseProc(w, event, params, num_params)
|
|
Packit |
b099d7 |
Widget w;
|
|
Packit |
b099d7 |
XEvent *event;
|
|
Packit |
b099d7 |
String *params;
|
|
Packit |
b099d7 |
Cardinal *num_params;
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
int operation;
|
|
Packit |
b099d7 |
if (*num_params)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
/* We only expect one */
|
|
Packit |
b099d7 |
operation = atoi(params[0]);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
switch(operation)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
case 1:
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
/* Raise to top of stack */
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
case 0:
|
|
Packit |
b099d7 |
default:
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
/* Circulate the stack upwards */
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static void LowerProc(w, event, params, num_params)
|
|
Packit |
b099d7 |
Widget w;
|
|
Packit |
b099d7 |
XEvent *event;
|
|
Packit |
b099d7 |
String *params;
|
|
Packit |
b099d7 |
Cardinal *num_params;
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static void StartMyDragProc(w, event, params, num_params)
|
|
Packit |
b099d7 |
Widget w;
|
|
Packit |
b099d7 |
XEvent *event;
|
|
Packit |
b099d7 |
String *params;
|
|
Packit |
b099d7 |
Cardinal *num_params;
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
Arg args[30];
|
|
Packit |
b099d7 |
int n, i;
|
|
Packit |
b099d7 |
XButtonEvent *myEvent = (XButtonEvent *) event;
|
|
Packit |
b099d7 |
Widget dc;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* detect which, if any drop zone the drag started in */
|
|
Packit |
b099d7 |
for (i=0; i < numZones; i++)
|
|
Packit |
b099d7 |
if (XPointInRegion(DropZones[i].region, myEvent->x, myEvent->y))
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* if in a drop zone, load the appropriate cursor */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (i == numZones)
|
|
Packit |
b099d7 |
return;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
n = 0;
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNsourceCursorIcon, DropZones[i].icon); n++;
|
|
Packit |
b099d7 |
dc = XmDragStart(w, event, args, n);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static void MyDropProc(w, client_data, call_data)
|
|
Packit |
b099d7 |
Widget w;
|
|
Packit |
b099d7 |
XtPointer client_data;
|
|
Packit |
b099d7 |
XtPointer call_data;
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmDropProcCallbackStruct *cb =
|
|
Packit |
b099d7 |
(XmDropProcCallbackStruct *) call_data;
|
|
Packit |
b099d7 |
Position newX = cb->x - XtX(w);
|
|
Packit |
b099d7 |
Position newY = cb->y - XtY(w);
|
|
Packit |
b099d7 |
Arg args[5];
|
|
Packit |
b099d7 |
int n;
|
|
Packit |
b099d7 |
Boolean junk;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
n = 0;
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNx, newX); n++;
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNy, newY); n++;
|
|
Packit |
b099d7 |
XtSetValues(w, args, n);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
ExposeEventHandler(w, NULL, NULL, &junk);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
void CreateDropZone(w, targets, num_targets, dz)
|
|
Packit |
b099d7 |
Widget w;
|
|
Packit |
b099d7 |
Atom *targets;
|
|
Packit |
b099d7 |
Cardinal num_targets;
|
|
Packit |
b099d7 |
DropZone dz;
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
Display *display = XtDisplay(w);
|
|
Packit |
b099d7 |
XRectangle clipBox;
|
|
Packit |
b099d7 |
unsigned long vMask;
|
|
Packit |
b099d7 |
XGCValues values;
|
|
Packit |
b099d7 |
Pixmap iconMap, maskMap;
|
|
Packit |
b099d7 |
GC clipGC;
|
|
Packit |
b099d7 |
static Boolean first_time = True;
|
|
Packit |
b099d7 |
static Region r1, r2;
|
|
Packit |
b099d7 |
unsigned long valueMask;
|
|
Packit |
b099d7 |
char buf[128];
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (first_time)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
r1 = XCreateRegion();
|
|
Packit |
b099d7 |
r2 = XCreateRegion();
|
|
Packit |
b099d7 |
first_time = False;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
dz->refW = w;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Create and set the region from the rectangle data */
|
|
Packit |
b099d7 |
dz->region = XCreateRegion();
|
|
Packit |
b099d7 |
for (i=0; i < dz->num_rects; i++)
|
|
Packit |
b099d7 |
XUnionRectWithRegion(&(dz->rects[i]), dz->region, dz->region);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Get the bounding box of the region */
|
|
Packit |
b099d7 |
XClipBox(dz->region, &clipBox);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
n = 0;
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNwidth, clipBox.width); n++;
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNheight, clipBox.height); n++;
|
|
Packit |
b099d7 |
XtSetValues(w, args, n);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Create depth 1 pixmaps the size of bounding box */
|
|
Packit |
b099d7 |
iconMap = XCreatePixmap(display, DefaultRootWindow(display),
|
|
Packit |
b099d7 |
clipBox.width, clipBox.height, 1);
|
|
Packit |
b099d7 |
maskMap = XCreatePixmap(display, DefaultRootWindow(display),
|
|
Packit |
b099d7 |
clipBox.width, clipBox.height, 1);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Fill the bitmaps with 0's */
|
|
Packit |
b099d7 |
vMask = (GCForeground | GCBackground);
|
|
Packit |
b099d7 |
values.background = 0;
|
|
Packit |
b099d7 |
values.foreground = 0;
|
|
Packit |
b099d7 |
clipGC = XCreateGC(display, iconMap, vMask, &values);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XFillRectangle(display, iconMap, clipGC, 0, 0, clipBox.width,
|
|
Packit |
b099d7 |
clipBox.height);
|
|
Packit |
b099d7 |
XFillRectangle(display, maskMap, clipGC, 0, 0, clipBox.width,
|
|
Packit |
b099d7 |
clipBox.height);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Now we write with 1's */
|
|
Packit |
b099d7 |
valueMask = (GCForeground | GCBackground);
|
|
Packit |
b099d7 |
values.background = 1;
|
|
Packit |
b099d7 |
values.foreground = 1;
|
|
Packit |
b099d7 |
XChangeGC(display, clipGC, valueMask, &values);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Fill the shape of the icon with 1's */
|
|
Packit |
b099d7 |
XUnionRegion(dz->region, dz->region, r1);
|
|
Packit |
b099d7 |
XOffsetRegion(r1, (-1 * clipBox.x), (-1 * clipBox.y));
|
|
Packit |
b099d7 |
XSetRegion(display, clipGC, r1);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XFillRectangle(display, iconMap, clipGC,
|
|
Packit |
b099d7 |
0, 0, clipBox.width, clipBox.height);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Create a clip region to shoot the 1's thru into the mask */
|
|
Packit |
b099d7 |
XUnionRegion(r1, r1, r2);
|
|
Packit |
b099d7 |
XShrinkRegion(r2, 2, 2);
|
|
Packit |
b099d7 |
XSubtractRegion(r1, r2, r1);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XSetRegion(display, clipGC, r1);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XFillRectangle(display, maskMap, clipGC,
|
|
Packit |
b099d7 |
0, 0, clipBox.width, clipBox.height);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
n = 0;
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNpixmap, iconMap); n++;
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNmask, maskMap); n++;
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNdepth, 1); n++;
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNwidth, clipBox.width); n++;
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNheight, clipBox.height); n++;
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNhotX, (clipBox.width / 2)); n++;
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNhotY, (clipBox.height / 2)); n++;
|
|
Packit |
b099d7 |
dz->icon = XmCreateDragIcon(w, dz->name, args, n);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
n = 0;
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNimportTargets, targets); n++;
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNnumImportTargets, num_targets); n++;
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNdropRectangles, dz->rects); n++;
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNnumDropRectangles, dz->num_rects); n++;
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNdropProc, MyDropProc); n++;
|
|
Packit |
b099d7 |
XmDropSiteRegister(w, args, n);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
main(argc, argv)
|
|
Packit |
b099d7 |
int argc;
|
|
Packit |
b099d7 |
char **argv;
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
int i;
|
|
Packit |
b099d7 |
Atom targets[1];
|
|
Packit |
b099d7 |
unsigned short *ID;
|
|
Packit |
b099d7 |
XtTranslations myParsedTranslations;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XtToolkitInitialize();
|
|
Packit |
b099d7 |
this_app = XtCreateApplicationContext();
|
|
Packit |
b099d7 |
display = XtOpenDisplay(this_app, NULL, NULL, "DNDNonRect",
|
|
Packit |
b099d7 |
NULL, 0, &argc, argv);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (display == NULL) {
|
|
Packit |
b099d7 |
fprintf(stderr, "%s: Can't open display\n", argv[0]);
|
|
Packit |
b099d7 |
exit(1);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
targets[0] = XmInternAtom(display, "COMPOUND_TEXT", False);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XtAppAddActions(this_app, myDNDActions, XtNumber(myDNDActions));
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
myParsedTranslations = XtParseTranslationTable(myDNDTranslations);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
n = 0;
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNallowShellResize, True); n++;
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNwidth, 400); n++;
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNheight, 300); n++;
|
|
Packit |
b099d7 |
shell1 = XtAppCreateShell(NULL, "XMclient",
|
|
Packit |
b099d7 |
applicationShellWidgetClass, display, args, n);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
n = 0;
|
|
Packit |
b099d7 |
form1 = XmCreateForm(shell1, "form1", args, n);
|
|
Packit |
b099d7 |
XtManageChild(form1);
|
|
Packit |
b099d7 |
XtOverrideTranslations(form1, myParsedTranslations);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XtAddEventHandler(form1, ExposureMask, True, ExposeEventHandler,
|
|
Packit |
b099d7 |
NULL);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
n = 0;
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNx, 10); n++;
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNy, 10); n++;
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNbackground, GetPixel(display, "DarkGreen"));
|
|
Packit |
b099d7 |
n++;
|
|
Packit |
b099d7 |
p0 = XtCreateWidget("p0", xmPrimitiveWidgetClass, form1, args, n);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
CreateDropZone(p0, targets, XtNumber(targets), &DropZones[0]);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
n = 0;
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNx, 50); n++;
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNy, 50); n++;
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNbackground, GetPixel(display, "Blue")); n++;
|
|
Packit |
b099d7 |
p1 = XtCreateWidget("p1", xmPrimitiveWidgetClass, form1, args, n);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
CreateDropZone(p1, targets, XtNumber(targets), &DropZones[1]);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
n = 0;
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNbackground, GetPixel(display, "Cyan")); n++;
|
|
Packit |
b099d7 |
p2 = XtCreateWidget("p2", xmPrimitiveWidgetClass, form1, args, n);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
CreateDropZone(p2, targets, XtNumber(targets), &DropZones[2]);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
n = 0;
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNx, 150); n++;
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNy, 150); n++;
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNbackground, GetPixel(display, "Orange")); n++;
|
|
Packit |
b099d7 |
p3 = XtCreateWidget("p3", xmPrimitiveWidgetClass, form1, args, n);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
CreateDropZone(p3, targets, XtNumber(targets), &DropZones[3]);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
n = 0;
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); n++;
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); n++;
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNtopAttachment, XmATTACH_NONE); n++;
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNbottomAttachment, XmATTACH_FORM); n++;
|
|
Packit |
b099d7 |
text1 = XmCreateTextField( form1, "text1", args, n);
|
|
Packit |
b099d7 |
XtManageChild(text1);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XtRealizeWidget(shell1);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* MainLoop */
|
|
Packit |
b099d7 |
XtAppMainLoop(this_app);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|