|
Packit |
b099d7 |
/* $TOG: DNDClientData.c /main/6 1997/11/20 12:42:05 csn $ */
|
|
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 |
/*
|
|
Packit |
b099d7 |
* HISTORY
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
#include <testlib.h>
|
|
Packit |
b099d7 |
#include <Xm/DragDrop.h>
|
|
Packit |
b099d7 |
#include "../Toolkit/bitmaps/gnu.bmp"
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
#define NUM_DROPSITES 5
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Local functions
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
HandleDrop (Widget, XtPointer, XtPointer);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
DropTransfer (Widget w, XtPointer closure, Atom *seltype, Atom *type, XtPointer value, unsigned long *length, int format);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* These are the drop sites being tested
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
Widget DropSite[5];
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
Atom COMPOUND_TEXT;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Client data structure
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
typedef struct { int id;
|
|
Packit |
b099d7 |
XtPointer data;
|
|
Packit |
b099d7 |
} ClientData, *ClientDataPointer;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* dropSiteData related variables
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
Pixmap MyPixmap;
|
|
Packit |
b099d7 |
XmString MyCompString;
|
|
Packit |
b099d7 |
char *MyChar;
|
|
Packit |
b099d7 |
int MyInt;
|
|
Packit |
b099d7 |
Pixel MyPixel;
|
|
Packit |
b099d7 |
ClientData TestData1, TestData2, TestData3, TestData4, TestData5, *cdata;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
Widget RowCol1;
|
|
Packit |
b099d7 |
Widget FormD1, PushB1;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
Widget xmDisplay;
|
|
Packit |
b099d7 |
Atom importList[1];
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
void
|
|
Packit |
b099d7 |
main (int argc, char **argv)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
Arg args[10];
|
|
Packit |
b099d7 |
int i,n;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
CommonTestInit (argc, argv);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
n=0;
|
|
Packit |
b099d7 |
FormD1 = XmCreateFormDialog (Shell1, "FormD1", args, n);
|
|
Packit |
b099d7 |
XtManageChild (FormD1);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
n=0;
|
|
Packit |
b099d7 |
XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++;
|
|
Packit |
b099d7 |
XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++;
|
|
Packit |
b099d7 |
XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++;
|
|
Packit |
b099d7 |
XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++;
|
|
Packit |
b099d7 |
PushB1 = XmCreatePushButton (FormD1, "Drag Source", args, n);
|
|
Packit |
b099d7 |
XtManageChild (PushB1);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
n=0;
|
|
Packit |
b099d7 |
XtSetArg (args[n], XmNpacking, XmPACK_COLUMN); n++;
|
|
Packit |
b099d7 |
XtSetArg (args[n], XmNnumColumns, 1); n++;
|
|
Packit |
b099d7 |
RowCol1 = XmCreateRowColumn (Shell1, "Row", args, n);
|
|
Packit |
b099d7 |
XtManageChild (RowCol1);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
n=0;
|
|
Packit |
b099d7 |
DropSite[0] = XmCreateToggleButton(RowCol1, "ToggleBtn1", args, n);
|
|
Packit |
b099d7 |
XtManageChild (DropSite[0]);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
n=0;
|
|
Packit |
b099d7 |
DropSite[1] = XmCreateLabel(RowCol1, "Label1", args, n);
|
|
Packit |
b099d7 |
XtManageChild (DropSite[1]);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
n=0;
|
|
Packit |
b099d7 |
DropSite[2] = XmCreateList(RowCol1, "List1", args, n);
|
|
Packit |
b099d7 |
XtManageChild (DropSite[2]);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
n=0;
|
|
Packit |
b099d7 |
XtSetArg (args[n], XmNshowValue, True); n++;
|
|
Packit |
b099d7 |
XtSetArg (args[n], XmNorientation, XmHORIZONTAL); n++;
|
|
Packit |
b099d7 |
DropSite[3] = XmCreateScale(RowCol1, "Scale1", args, n);
|
|
Packit |
b099d7 |
XtManageChild (DropSite[3]);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
n=0;
|
|
Packit |
b099d7 |
DropSite[4] = XmCreatePushButton(RowCol1, "PushBtn1", args, n);
|
|
Packit |
b099d7 |
XtManageChild (DropSite[4]);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Create the drop site
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
COMPOUND_TEXT = XmInternAtom (display, "COMPOUND_TEXT",
|
|
Packit |
b099d7 |
False);
|
|
Packit |
b099d7 |
importList[0] = COMPOUND_TEXT;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Create dropsites
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
for (i=0; i < NUM_DROPSITES; i++)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
n=0;
|
|
Packit |
b099d7 |
XtSetArg (args[n], XmNimportTargets, importList); n++;
|
|
Packit |
b099d7 |
XtSetArg (args[n], XmNnumImportTargets,1); n++;
|
|
Packit |
b099d7 |
XtSetArg (args[n], XmNdropProc, HandleDrop); n++;
|
|
Packit |
b099d7 |
XtSetArg (args[n], XmNdropSiteOperations, XmDROP_COPY); n++;
|
|
Packit |
b099d7 |
XmDropSiteRegister (DropSite[i], args, n);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Initialize client data structure
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* First
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
MyPixel = CommonGetColor ("Red");
|
|
Packit |
b099d7 |
TestData1.id = 1;
|
|
Packit |
b099d7 |
TestData1.data = (XtPointer)&MyPixel;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
n=0;
|
|
Packit |
b099d7 |
XtSetArg (args[n], XmNclientData, (XtPointer)&TestData1); n++;
|
|
Packit |
b099d7 |
XmDropSiteUpdate (DropSite[0],args,n);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Second
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
MyPixmap = XCreatePixmapFromBitmapData(display,
|
|
Packit |
b099d7 |
DefaultRootWindow(display),
|
|
Packit |
b099d7 |
gnu_bits, gnu_width, gnu_height,
|
|
Packit |
b099d7 |
WhitePixel(display,DefaultScreen(display)),
|
|
Packit |
b099d7 |
BlackPixel(display,DefaultScreen(display)),
|
|
Packit |
b099d7 |
DefaultDepth(display,DefaultScreen(display)));
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
TestData2.id = 2;
|
|
Packit |
b099d7 |
TestData2.data = (XtPointer)&MyPixmap;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
n=0;
|
|
Packit |
b099d7 |
XtSetArg (args[n], XmNclientData, (XtPointer)&TestData2); n++;
|
|
Packit |
b099d7 |
XmDropSiteUpdate (DropSite[1],args,n);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Third
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
MyCompString = XmStringCreate ("ListItem",
|
|
Packit |
b099d7 |
XmSTRING_DEFAULT_CHARSET);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
TestData3.id = 3;
|
|
Packit |
b099d7 |
TestData3.data = (XtPointer)&MyCompString;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
n=0;
|
|
Packit |
b099d7 |
XtSetArg (args[n], XmNclientData, (XtPointer)&TestData3); n++;
|
|
Packit |
b099d7 |
XmDropSiteUpdate (DropSite[2],args,n);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Fourth
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
MyInt = 2;
|
|
Packit |
b099d7 |
TestData4.id = 4;
|
|
Packit |
b099d7 |
TestData4.data = (XtPointer)&MyInt;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
n=0;
|
|
Packit |
b099d7 |
XtSetArg (args[n], XmNclientData, (XtPointer)&TestData4); n++;
|
|
Packit |
b099d7 |
XmDropSiteUpdate (DropSite[3],args,n);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Fifth
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
MyChar = "Another Label";
|
|
Packit |
b099d7 |
TestData5.id = 5;
|
|
Packit |
b099d7 |
TestData5.data = (XtPointer)&MyChar;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
n=0;
|
|
Packit |
b099d7 |
XtSetArg (args[n], XmNclientData, (XtPointer)&TestData5); n++;
|
|
Packit |
b099d7 |
XmDropSiteUpdate (DropSite[4],args,n);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XtRealizeWidget (Shell1);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
CommonPause();
|
|
Packit |
b099d7 |
CommonPause();
|
|
Packit |
b099d7 |
CommonPause();
|
|
Packit |
b099d7 |
CommonPause();
|
|
Packit |
b099d7 |
CommonPause();
|
|
Packit |
b099d7 |
CommonPause();
|
|
Packit |
b099d7 |
CommonPause();
|
|
Packit |
b099d7 |
CommonPause();
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XtAppMainLoop(app_context);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
HandleDrop (Widget w, XtPointer client_data, XtPointer call_data)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmDropProcCallback DropProc;
|
|
Packit |
b099d7 |
Widget dc;
|
|
Packit |
b099d7 |
XmDropTransferEntryRec transferEntries[2];
|
|
Packit |
b099d7 |
XmDropTransferEntry transferList;
|
|
Packit |
b099d7 |
Atom *importTargets;
|
|
Packit |
b099d7 |
Arg args[MAX_ARGS];
|
|
Packit |
b099d7 |
int n;
|
|
Packit |
b099d7 |
Arg cargs[MAX_ARGS];
|
|
Packit |
b099d7 |
int cn;
|
|
Packit |
b099d7 |
ClientData *cdata;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
int which_widget;
|
|
Packit |
b099d7 |
XmString tcs, ListItems[1];
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
DropProc = (XmDropProcCallback)call_data;
|
|
Packit |
b099d7 |
dc = DropProc->dragContext;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
n=0;
|
|
Packit |
b099d7 |
if ((DropProc->dropAction != XmDROP) ||
|
|
Packit |
b099d7 |
(DropProc->operation != XmDROP_COPY))
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNtransferStatus, XmTRANSFER_FAILURE); n++;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
cn=0;
|
|
Packit |
b099d7 |
XtSetArg (cargs[n], XmNclientData, &cdata); cn++;
|
|
Packit |
b099d7 |
XmDropSiteRetrieve (w, cargs, cn);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
which_widget = cdata->id;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
cn = 0;
|
|
Packit |
b099d7 |
switch (which_widget)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
case 1:
|
|
Packit |
b099d7 |
XtSetArg(cargs[cn], XmNbackground, *((Pixel *)cdata->data)); cn++;
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
case 2:
|
|
Packit |
b099d7 |
XtSetArg(cargs[cn], XmNlabelType, XmPIXMAP); cn++;
|
|
Packit |
b099d7 |
XtSetArg(cargs[cn], XmNlabelPixmap,*((Pixmap *)cdata->data));cn++;
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
case 3:
|
|
Packit |
b099d7 |
ListItems[0] = *((XmString *)cdata->data);
|
|
Packit |
b099d7 |
XmListAddItem (w, ListItems[0], 1);
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
case 4:
|
|
Packit |
b099d7 |
XtSetArg(cargs[cn], XmNvalue,*((int *)cdata->data)); cn++;
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
case 5:
|
|
Packit |
b099d7 |
tcs = XmStringCreate (*((char **)cdata->data),
|
|
Packit |
b099d7 |
XmFONTLIST_DEFAULT_TAG); cn++;
|
|
Packit |
b099d7 |
XtSetArg(cargs[cn], XmNlabelString, tcs); cn++;
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
default:
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (cn > 0)
|
|
Packit |
b099d7 |
XtSetValues (w,cargs,cn);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XmDropTransferStart(dc,args,n);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|