symbian-qemu-0.9.1-12/python-2.6.1/Mac/Modules/drag/_Dragmodule.c
changeset 1 2fb8b9db1c86
equal deleted inserted replaced
0:ffa851df0825 1:2fb8b9db1c86
       
     1 
       
     2 /* ========================== Module _Drag ========================== */
       
     3 
       
     4 #include "Python.h"
       
     5 
       
     6 #ifndef __LP64__
       
     7 
       
     8 
       
     9 #include "pymactoolbox.h"
       
    10 
       
    11 /* Macro to test whether a weak-loaded CFM function exists */
       
    12 #define PyMac_PRECHECK(rtn) do { if ( &rtn == NULL )  {\
       
    13         PyErr_SetString(PyExc_NotImplementedError, \
       
    14         "Not available in this shared library/OS version"); \
       
    15         return NULL; \
       
    16     }} while(0)
       
    17 
       
    18 
       
    19 #include <Carbon/Carbon.h>
       
    20 
       
    21 /* Callback glue routines */
       
    22 DragTrackingHandlerUPP dragglue_TrackingHandlerUPP;
       
    23 DragReceiveHandlerUPP dragglue_ReceiveHandlerUPP;
       
    24 DragSendDataUPP dragglue_SendDataUPP;
       
    25 #if 0
       
    26 DragInputUPP dragglue_InputUPP;
       
    27 DragDrawingUPP dragglue_DrawingUPP;
       
    28 #endif
       
    29 
       
    30 #ifdef USE_TOOLBOX_OBJECT_GLUE
       
    31 extern PyObject *_DragObj_New(DragRef);
       
    32 extern int _DragObj_Convert(PyObject *, DragRef *);
       
    33 
       
    34 #define DragObj_New _DragObj_New
       
    35 #define DragObj_Convert _DragObj_Convert
       
    36 #endif
       
    37 
       
    38 static PyObject *Drag_Error;
       
    39 
       
    40 /* ---------------------- Object type DragObj ----------------------- */
       
    41 
       
    42 PyTypeObject DragObj_Type;
       
    43 
       
    44 #define DragObj_Check(x) ((x)->ob_type == &DragObj_Type || PyObject_TypeCheck((x), &DragObj_Type))
       
    45 
       
    46 typedef struct DragObjObject {
       
    47 	PyObject_HEAD
       
    48 	DragRef ob_itself;
       
    49 	PyObject *sendproc;
       
    50 } DragObjObject;
       
    51 
       
    52 PyObject *DragObj_New(DragRef itself)
       
    53 {
       
    54 	DragObjObject *it;
       
    55 	if (itself == NULL) {
       
    56 	                                PyErr_SetString(Drag_Error,"Cannot create null Drag");
       
    57 	                                return NULL;
       
    58 	                        }
       
    59 	it = PyObject_NEW(DragObjObject, &DragObj_Type);
       
    60 	if (it == NULL) return NULL;
       
    61 	it->ob_itself = itself;
       
    62 	it->sendproc = NULL;
       
    63 	return (PyObject *)it;
       
    64 }
       
    65 
       
    66 int DragObj_Convert(PyObject *v, DragRef *p_itself)
       
    67 {
       
    68 	if (!DragObj_Check(v))
       
    69 	{
       
    70 		PyErr_SetString(PyExc_TypeError, "DragObj required");
       
    71 		return 0;
       
    72 	}
       
    73 	*p_itself = ((DragObjObject *)v)->ob_itself;
       
    74 	return 1;
       
    75 }
       
    76 
       
    77 static void DragObj_dealloc(DragObjObject *self)
       
    78 {
       
    79 	Py_XDECREF(self->sendproc);
       
    80 	self->ob_type->tp_free((PyObject *)self);
       
    81 }
       
    82 
       
    83 static PyObject *DragObj_DisposeDrag(DragObjObject *_self, PyObject *_args)
       
    84 {
       
    85 	PyObject *_res = NULL;
       
    86 	OSErr _err;
       
    87 #ifndef DisposeDrag
       
    88 	PyMac_PRECHECK(DisposeDrag);
       
    89 #endif
       
    90 	if (!PyArg_ParseTuple(_args, ""))
       
    91 		return NULL;
       
    92 	_err = DisposeDrag(_self->ob_itself);
       
    93 	if (_err != noErr) return PyMac_Error(_err);
       
    94 	Py_INCREF(Py_None);
       
    95 	_res = Py_None;
       
    96 	return _res;
       
    97 }
       
    98 
       
    99 static PyObject *DragObj_AddDragItemFlavor(DragObjObject *_self, PyObject *_args)
       
   100 {
       
   101 	PyObject *_res = NULL;
       
   102 	OSErr _err;
       
   103 	ItemReference theItemRef;
       
   104 	FlavorType theType;
       
   105 	char *dataPtr__in__;
       
   106 	long dataPtr__len__;
       
   107 	int dataPtr__in_len__;
       
   108 	FlavorFlags theFlags;
       
   109 #ifndef AddDragItemFlavor
       
   110 	PyMac_PRECHECK(AddDragItemFlavor);
       
   111 #endif
       
   112 	if (!PyArg_ParseTuple(_args, "lO&z#l",
       
   113 	                      &theItemRef,
       
   114 	                      PyMac_GetOSType, &theType,
       
   115 	                      &dataPtr__in__, &dataPtr__in_len__,
       
   116 	                      &theFlags))
       
   117 		return NULL;
       
   118 	dataPtr__len__ = dataPtr__in_len__;
       
   119 	_err = AddDragItemFlavor(_self->ob_itself,
       
   120 	                         theItemRef,
       
   121 	                         theType,
       
   122 	                         dataPtr__in__, dataPtr__len__,
       
   123 	                         theFlags);
       
   124 	if (_err != noErr) return PyMac_Error(_err);
       
   125 	Py_INCREF(Py_None);
       
   126 	_res = Py_None;
       
   127 	return _res;
       
   128 }
       
   129 
       
   130 static PyObject *DragObj_SetDragItemFlavorData(DragObjObject *_self, PyObject *_args)
       
   131 {
       
   132 	PyObject *_res = NULL;
       
   133 	OSErr _err;
       
   134 	ItemReference theItemRef;
       
   135 	FlavorType theType;
       
   136 	char *dataPtr__in__;
       
   137 	long dataPtr__len__;
       
   138 	int dataPtr__in_len__;
       
   139 	UInt32 dataOffset;
       
   140 #ifndef SetDragItemFlavorData
       
   141 	PyMac_PRECHECK(SetDragItemFlavorData);
       
   142 #endif
       
   143 	if (!PyArg_ParseTuple(_args, "lO&z#l",
       
   144 	                      &theItemRef,
       
   145 	                      PyMac_GetOSType, &theType,
       
   146 	                      &dataPtr__in__, &dataPtr__in_len__,
       
   147 	                      &dataOffset))
       
   148 		return NULL;
       
   149 	dataPtr__len__ = dataPtr__in_len__;
       
   150 	_err = SetDragItemFlavorData(_self->ob_itself,
       
   151 	                             theItemRef,
       
   152 	                             theType,
       
   153 	                             dataPtr__in__, dataPtr__len__,
       
   154 	                             dataOffset);
       
   155 	if (_err != noErr) return PyMac_Error(_err);
       
   156 	Py_INCREF(Py_None);
       
   157 	_res = Py_None;
       
   158 	return _res;
       
   159 }
       
   160 
       
   161 static PyObject *DragObj_SetDragImage(DragObjObject *_self, PyObject *_args)
       
   162 {
       
   163 	PyObject *_res = NULL;
       
   164 	OSErr _err;
       
   165 	PixMapHandle imagePixMap;
       
   166 	RgnHandle imageRgn;
       
   167 	Point imageOffsetPt;
       
   168 	DragImageFlags theImageFlags;
       
   169 #ifndef SetDragImage
       
   170 	PyMac_PRECHECK(SetDragImage);
       
   171 #endif
       
   172 	if (!PyArg_ParseTuple(_args, "O&O&O&l",
       
   173 	                      ResObj_Convert, &imagePixMap,
       
   174 	                      ResObj_Convert, &imageRgn,
       
   175 	                      PyMac_GetPoint, &imageOffsetPt,
       
   176 	                      &theImageFlags))
       
   177 		return NULL;
       
   178 	_err = SetDragImage(_self->ob_itself,
       
   179 	                    imagePixMap,
       
   180 	                    imageRgn,
       
   181 	                    imageOffsetPt,
       
   182 	                    theImageFlags);
       
   183 	if (_err != noErr) return PyMac_Error(_err);
       
   184 	Py_INCREF(Py_None);
       
   185 	_res = Py_None;
       
   186 	return _res;
       
   187 }
       
   188 
       
   189 static PyObject *DragObj_ChangeDragBehaviors(DragObjObject *_self, PyObject *_args)
       
   190 {
       
   191 	PyObject *_res = NULL;
       
   192 	OSErr _err;
       
   193 	DragBehaviors inBehaviorsToSet;
       
   194 	DragBehaviors inBehaviorsToClear;
       
   195 #ifndef ChangeDragBehaviors
       
   196 	PyMac_PRECHECK(ChangeDragBehaviors);
       
   197 #endif
       
   198 	if (!PyArg_ParseTuple(_args, "ll",
       
   199 	                      &inBehaviorsToSet,
       
   200 	                      &inBehaviorsToClear))
       
   201 		return NULL;
       
   202 	_err = ChangeDragBehaviors(_self->ob_itself,
       
   203 	                           inBehaviorsToSet,
       
   204 	                           inBehaviorsToClear);
       
   205 	if (_err != noErr) return PyMac_Error(_err);
       
   206 	Py_INCREF(Py_None);
       
   207 	_res = Py_None;
       
   208 	return _res;
       
   209 }
       
   210 
       
   211 static PyObject *DragObj_TrackDrag(DragObjObject *_self, PyObject *_args)
       
   212 {
       
   213 	PyObject *_res = NULL;
       
   214 	OSErr _err;
       
   215 	EventRecord theEvent;
       
   216 	RgnHandle theRegion;
       
   217 #ifndef TrackDrag
       
   218 	PyMac_PRECHECK(TrackDrag);
       
   219 #endif
       
   220 	if (!PyArg_ParseTuple(_args, "O&O&",
       
   221 	                      PyMac_GetEventRecord, &theEvent,
       
   222 	                      ResObj_Convert, &theRegion))
       
   223 		return NULL;
       
   224 	_err = TrackDrag(_self->ob_itself,
       
   225 	                 &theEvent,
       
   226 	                 theRegion);
       
   227 	if (_err != noErr) return PyMac_Error(_err);
       
   228 	Py_INCREF(Py_None);
       
   229 	_res = Py_None;
       
   230 	return _res;
       
   231 }
       
   232 
       
   233 static PyObject *DragObj_CountDragItems(DragObjObject *_self, PyObject *_args)
       
   234 {
       
   235 	PyObject *_res = NULL;
       
   236 	OSErr _err;
       
   237 	UInt16 numItems;
       
   238 #ifndef CountDragItems
       
   239 	PyMac_PRECHECK(CountDragItems);
       
   240 #endif
       
   241 	if (!PyArg_ParseTuple(_args, ""))
       
   242 		return NULL;
       
   243 	_err = CountDragItems(_self->ob_itself,
       
   244 	                      &numItems);
       
   245 	if (_err != noErr) return PyMac_Error(_err);
       
   246 	_res = Py_BuildValue("H",
       
   247 	                     numItems);
       
   248 	return _res;
       
   249 }
       
   250 
       
   251 static PyObject *DragObj_GetDragItemReferenceNumber(DragObjObject *_self, PyObject *_args)
       
   252 {
       
   253 	PyObject *_res = NULL;
       
   254 	OSErr _err;
       
   255 	UInt16 index;
       
   256 	ItemReference theItemRef;
       
   257 #ifndef GetDragItemReferenceNumber
       
   258 	PyMac_PRECHECK(GetDragItemReferenceNumber);
       
   259 #endif
       
   260 	if (!PyArg_ParseTuple(_args, "H",
       
   261 	                      &index))
       
   262 		return NULL;
       
   263 	_err = GetDragItemReferenceNumber(_self->ob_itself,
       
   264 	                                  index,
       
   265 	                                  &theItemRef);
       
   266 	if (_err != noErr) return PyMac_Error(_err);
       
   267 	_res = Py_BuildValue("l",
       
   268 	                     theItemRef);
       
   269 	return _res;
       
   270 }
       
   271 
       
   272 static PyObject *DragObj_CountDragItemFlavors(DragObjObject *_self, PyObject *_args)
       
   273 {
       
   274 	PyObject *_res = NULL;
       
   275 	OSErr _err;
       
   276 	ItemReference theItemRef;
       
   277 	UInt16 numFlavors;
       
   278 #ifndef CountDragItemFlavors
       
   279 	PyMac_PRECHECK(CountDragItemFlavors);
       
   280 #endif
       
   281 	if (!PyArg_ParseTuple(_args, "l",
       
   282 	                      &theItemRef))
       
   283 		return NULL;
       
   284 	_err = CountDragItemFlavors(_self->ob_itself,
       
   285 	                            theItemRef,
       
   286 	                            &numFlavors);
       
   287 	if (_err != noErr) return PyMac_Error(_err);
       
   288 	_res = Py_BuildValue("H",
       
   289 	                     numFlavors);
       
   290 	return _res;
       
   291 }
       
   292 
       
   293 static PyObject *DragObj_GetFlavorType(DragObjObject *_self, PyObject *_args)
       
   294 {
       
   295 	PyObject *_res = NULL;
       
   296 	OSErr _err;
       
   297 	ItemReference theItemRef;
       
   298 	UInt16 index;
       
   299 	FlavorType theType;
       
   300 #ifndef GetFlavorType
       
   301 	PyMac_PRECHECK(GetFlavorType);
       
   302 #endif
       
   303 	if (!PyArg_ParseTuple(_args, "lH",
       
   304 	                      &theItemRef,
       
   305 	                      &index))
       
   306 		return NULL;
       
   307 	_err = GetFlavorType(_self->ob_itself,
       
   308 	                     theItemRef,
       
   309 	                     index,
       
   310 	                     &theType);
       
   311 	if (_err != noErr) return PyMac_Error(_err);
       
   312 	_res = Py_BuildValue("O&",
       
   313 	                     PyMac_BuildOSType, theType);
       
   314 	return _res;
       
   315 }
       
   316 
       
   317 static PyObject *DragObj_GetFlavorFlags(DragObjObject *_self, PyObject *_args)
       
   318 {
       
   319 	PyObject *_res = NULL;
       
   320 	OSErr _err;
       
   321 	ItemReference theItemRef;
       
   322 	FlavorType theType;
       
   323 	FlavorFlags theFlags;
       
   324 #ifndef GetFlavorFlags
       
   325 	PyMac_PRECHECK(GetFlavorFlags);
       
   326 #endif
       
   327 	if (!PyArg_ParseTuple(_args, "lO&",
       
   328 	                      &theItemRef,
       
   329 	                      PyMac_GetOSType, &theType))
       
   330 		return NULL;
       
   331 	_err = GetFlavorFlags(_self->ob_itself,
       
   332 	                      theItemRef,
       
   333 	                      theType,
       
   334 	                      &theFlags);
       
   335 	if (_err != noErr) return PyMac_Error(_err);
       
   336 	_res = Py_BuildValue("l",
       
   337 	                     theFlags);
       
   338 	return _res;
       
   339 }
       
   340 
       
   341 static PyObject *DragObj_GetFlavorDataSize(DragObjObject *_self, PyObject *_args)
       
   342 {
       
   343 	PyObject *_res = NULL;
       
   344 	OSErr _err;
       
   345 	ItemReference theItemRef;
       
   346 	FlavorType theType;
       
   347 	Size dataSize;
       
   348 #ifndef GetFlavorDataSize
       
   349 	PyMac_PRECHECK(GetFlavorDataSize);
       
   350 #endif
       
   351 	if (!PyArg_ParseTuple(_args, "lO&",
       
   352 	                      &theItemRef,
       
   353 	                      PyMac_GetOSType, &theType))
       
   354 		return NULL;
       
   355 	_err = GetFlavorDataSize(_self->ob_itself,
       
   356 	                         theItemRef,
       
   357 	                         theType,
       
   358 	                         &dataSize);
       
   359 	if (_err != noErr) return PyMac_Error(_err);
       
   360 	_res = Py_BuildValue("l",
       
   361 	                     dataSize);
       
   362 	return _res;
       
   363 }
       
   364 
       
   365 static PyObject *DragObj_GetFlavorData(DragObjObject *_self, PyObject *_args)
       
   366 {
       
   367 	PyObject *_res = NULL;
       
   368 	OSErr _err;
       
   369 	ItemReference theItemRef;
       
   370 	FlavorType theType;
       
   371 	char *dataPtr__out__;
       
   372 	long dataPtr__len__;
       
   373 	int dataPtr__in_len__;
       
   374 	UInt32 dataOffset;
       
   375 #ifndef GetFlavorData
       
   376 	PyMac_PRECHECK(GetFlavorData);
       
   377 #endif
       
   378 	if (!PyArg_ParseTuple(_args, "lO&il",
       
   379 	                      &theItemRef,
       
   380 	                      PyMac_GetOSType, &theType,
       
   381 	                      &dataPtr__in_len__,
       
   382 	                      &dataOffset))
       
   383 		return NULL;
       
   384 	if ((dataPtr__out__ = malloc(dataPtr__in_len__)) == NULL)
       
   385 	{
       
   386 		PyErr_NoMemory();
       
   387 		goto dataPtr__error__;
       
   388 	}
       
   389 	dataPtr__len__ = dataPtr__in_len__;
       
   390 	_err = GetFlavorData(_self->ob_itself,
       
   391 	                     theItemRef,
       
   392 	                     theType,
       
   393 	                     dataPtr__out__, &dataPtr__len__,
       
   394 	                     dataOffset);
       
   395 	if (_err != noErr) return PyMac_Error(_err);
       
   396 	_res = Py_BuildValue("s#",
       
   397 	                     dataPtr__out__, (int)dataPtr__len__);
       
   398 	free(dataPtr__out__);
       
   399  dataPtr__error__: ;
       
   400 	return _res;
       
   401 }
       
   402 
       
   403 static PyObject *DragObj_GetDragItemBounds(DragObjObject *_self, PyObject *_args)
       
   404 {
       
   405 	PyObject *_res = NULL;
       
   406 	OSErr _err;
       
   407 	ItemReference theItemRef;
       
   408 	Rect itemBounds;
       
   409 #ifndef GetDragItemBounds
       
   410 	PyMac_PRECHECK(GetDragItemBounds);
       
   411 #endif
       
   412 	if (!PyArg_ParseTuple(_args, "l",
       
   413 	                      &theItemRef))
       
   414 		return NULL;
       
   415 	_err = GetDragItemBounds(_self->ob_itself,
       
   416 	                         theItemRef,
       
   417 	                         &itemBounds);
       
   418 	if (_err != noErr) return PyMac_Error(_err);
       
   419 	_res = Py_BuildValue("O&",
       
   420 	                     PyMac_BuildRect, &itemBounds);
       
   421 	return _res;
       
   422 }
       
   423 
       
   424 static PyObject *DragObj_SetDragItemBounds(DragObjObject *_self, PyObject *_args)
       
   425 {
       
   426 	PyObject *_res = NULL;
       
   427 	OSErr _err;
       
   428 	ItemReference theItemRef;
       
   429 	Rect itemBounds;
       
   430 #ifndef SetDragItemBounds
       
   431 	PyMac_PRECHECK(SetDragItemBounds);
       
   432 #endif
       
   433 	if (!PyArg_ParseTuple(_args, "lO&",
       
   434 	                      &theItemRef,
       
   435 	                      PyMac_GetRect, &itemBounds))
       
   436 		return NULL;
       
   437 	_err = SetDragItemBounds(_self->ob_itself,
       
   438 	                         theItemRef,
       
   439 	                         &itemBounds);
       
   440 	if (_err != noErr) return PyMac_Error(_err);
       
   441 	Py_INCREF(Py_None);
       
   442 	_res = Py_None;
       
   443 	return _res;
       
   444 }
       
   445 
       
   446 static PyObject *DragObj_GetDropLocation(DragObjObject *_self, PyObject *_args)
       
   447 {
       
   448 	PyObject *_res = NULL;
       
   449 	OSErr _err;
       
   450 	AEDesc dropLocation;
       
   451 #ifndef GetDropLocation
       
   452 	PyMac_PRECHECK(GetDropLocation);
       
   453 #endif
       
   454 	if (!PyArg_ParseTuple(_args, ""))
       
   455 		return NULL;
       
   456 	_err = GetDropLocation(_self->ob_itself,
       
   457 	                       &dropLocation);
       
   458 	if (_err != noErr) return PyMac_Error(_err);
       
   459 	_res = Py_BuildValue("O&",
       
   460 	                     AEDesc_New, &dropLocation);
       
   461 	return _res;
       
   462 }
       
   463 
       
   464 static PyObject *DragObj_SetDropLocation(DragObjObject *_self, PyObject *_args)
       
   465 {
       
   466 	PyObject *_res = NULL;
       
   467 	OSErr _err;
       
   468 	AEDesc dropLocation;
       
   469 #ifndef SetDropLocation
       
   470 	PyMac_PRECHECK(SetDropLocation);
       
   471 #endif
       
   472 	if (!PyArg_ParseTuple(_args, "O&",
       
   473 	                      AEDesc_Convert, &dropLocation))
       
   474 		return NULL;
       
   475 	_err = SetDropLocation(_self->ob_itself,
       
   476 	                       &dropLocation);
       
   477 	if (_err != noErr) return PyMac_Error(_err);
       
   478 	Py_INCREF(Py_None);
       
   479 	_res = Py_None;
       
   480 	return _res;
       
   481 }
       
   482 
       
   483 static PyObject *DragObj_GetDragAttributes(DragObjObject *_self, PyObject *_args)
       
   484 {
       
   485 	PyObject *_res = NULL;
       
   486 	OSErr _err;
       
   487 	DragAttributes flags;
       
   488 #ifndef GetDragAttributes
       
   489 	PyMac_PRECHECK(GetDragAttributes);
       
   490 #endif
       
   491 	if (!PyArg_ParseTuple(_args, ""))
       
   492 		return NULL;
       
   493 	_err = GetDragAttributes(_self->ob_itself,
       
   494 	                         &flags);
       
   495 	if (_err != noErr) return PyMac_Error(_err);
       
   496 	_res = Py_BuildValue("l",
       
   497 	                     flags);
       
   498 	return _res;
       
   499 }
       
   500 
       
   501 static PyObject *DragObj_GetDragMouse(DragObjObject *_self, PyObject *_args)
       
   502 {
       
   503 	PyObject *_res = NULL;
       
   504 	OSErr _err;
       
   505 	Point mouse;
       
   506 	Point globalPinnedMouse;
       
   507 #ifndef GetDragMouse
       
   508 	PyMac_PRECHECK(GetDragMouse);
       
   509 #endif
       
   510 	if (!PyArg_ParseTuple(_args, ""))
       
   511 		return NULL;
       
   512 	_err = GetDragMouse(_self->ob_itself,
       
   513 	                    &mouse,
       
   514 	                    &globalPinnedMouse);
       
   515 	if (_err != noErr) return PyMac_Error(_err);
       
   516 	_res = Py_BuildValue("O&O&",
       
   517 	                     PyMac_BuildPoint, mouse,
       
   518 	                     PyMac_BuildPoint, globalPinnedMouse);
       
   519 	return _res;
       
   520 }
       
   521 
       
   522 static PyObject *DragObj_SetDragMouse(DragObjObject *_self, PyObject *_args)
       
   523 {
       
   524 	PyObject *_res = NULL;
       
   525 	OSErr _err;
       
   526 	Point globalPinnedMouse;
       
   527 #ifndef SetDragMouse
       
   528 	PyMac_PRECHECK(SetDragMouse);
       
   529 #endif
       
   530 	if (!PyArg_ParseTuple(_args, "O&",
       
   531 	                      PyMac_GetPoint, &globalPinnedMouse))
       
   532 		return NULL;
       
   533 	_err = SetDragMouse(_self->ob_itself,
       
   534 	                    globalPinnedMouse);
       
   535 	if (_err != noErr) return PyMac_Error(_err);
       
   536 	Py_INCREF(Py_None);
       
   537 	_res = Py_None;
       
   538 	return _res;
       
   539 }
       
   540 
       
   541 static PyObject *DragObj_GetDragOrigin(DragObjObject *_self, PyObject *_args)
       
   542 {
       
   543 	PyObject *_res = NULL;
       
   544 	OSErr _err;
       
   545 	Point globalInitialMouse;
       
   546 #ifndef GetDragOrigin
       
   547 	PyMac_PRECHECK(GetDragOrigin);
       
   548 #endif
       
   549 	if (!PyArg_ParseTuple(_args, ""))
       
   550 		return NULL;
       
   551 	_err = GetDragOrigin(_self->ob_itself,
       
   552 	                     &globalInitialMouse);
       
   553 	if (_err != noErr) return PyMac_Error(_err);
       
   554 	_res = Py_BuildValue("O&",
       
   555 	                     PyMac_BuildPoint, globalInitialMouse);
       
   556 	return _res;
       
   557 }
       
   558 
       
   559 static PyObject *DragObj_GetDragModifiers(DragObjObject *_self, PyObject *_args)
       
   560 {
       
   561 	PyObject *_res = NULL;
       
   562 	OSErr _err;
       
   563 	SInt16 modifiers;
       
   564 	SInt16 mouseDownModifiers;
       
   565 	SInt16 mouseUpModifiers;
       
   566 #ifndef GetDragModifiers
       
   567 	PyMac_PRECHECK(GetDragModifiers);
       
   568 #endif
       
   569 	if (!PyArg_ParseTuple(_args, ""))
       
   570 		return NULL;
       
   571 	_err = GetDragModifiers(_self->ob_itself,
       
   572 	                        &modifiers,
       
   573 	                        &mouseDownModifiers,
       
   574 	                        &mouseUpModifiers);
       
   575 	if (_err != noErr) return PyMac_Error(_err);
       
   576 	_res = Py_BuildValue("hhh",
       
   577 	                     modifiers,
       
   578 	                     mouseDownModifiers,
       
   579 	                     mouseUpModifiers);
       
   580 	return _res;
       
   581 }
       
   582 
       
   583 static PyObject *DragObj_ShowDragHilite(DragObjObject *_self, PyObject *_args)
       
   584 {
       
   585 	PyObject *_res = NULL;
       
   586 	OSErr _err;
       
   587 	RgnHandle hiliteFrame;
       
   588 	Boolean inside;
       
   589 #ifndef ShowDragHilite
       
   590 	PyMac_PRECHECK(ShowDragHilite);
       
   591 #endif
       
   592 	if (!PyArg_ParseTuple(_args, "O&b",
       
   593 	                      ResObj_Convert, &hiliteFrame,
       
   594 	                      &inside))
       
   595 		return NULL;
       
   596 	_err = ShowDragHilite(_self->ob_itself,
       
   597 	                      hiliteFrame,
       
   598 	                      inside);
       
   599 	if (_err != noErr) return PyMac_Error(_err);
       
   600 	Py_INCREF(Py_None);
       
   601 	_res = Py_None;
       
   602 	return _res;
       
   603 }
       
   604 
       
   605 static PyObject *DragObj_HideDragHilite(DragObjObject *_self, PyObject *_args)
       
   606 {
       
   607 	PyObject *_res = NULL;
       
   608 	OSErr _err;
       
   609 #ifndef HideDragHilite
       
   610 	PyMac_PRECHECK(HideDragHilite);
       
   611 #endif
       
   612 	if (!PyArg_ParseTuple(_args, ""))
       
   613 		return NULL;
       
   614 	_err = HideDragHilite(_self->ob_itself);
       
   615 	if (_err != noErr) return PyMac_Error(_err);
       
   616 	Py_INCREF(Py_None);
       
   617 	_res = Py_None;
       
   618 	return _res;
       
   619 }
       
   620 
       
   621 static PyObject *DragObj_DragPreScroll(DragObjObject *_self, PyObject *_args)
       
   622 {
       
   623 	PyObject *_res = NULL;
       
   624 	OSErr _err;
       
   625 	SInt16 dH;
       
   626 	SInt16 dV;
       
   627 #ifndef DragPreScroll
       
   628 	PyMac_PRECHECK(DragPreScroll);
       
   629 #endif
       
   630 	if (!PyArg_ParseTuple(_args, "hh",
       
   631 	                      &dH,
       
   632 	                      &dV))
       
   633 		return NULL;
       
   634 	_err = DragPreScroll(_self->ob_itself,
       
   635 	                     dH,
       
   636 	                     dV);
       
   637 	if (_err != noErr) return PyMac_Error(_err);
       
   638 	Py_INCREF(Py_None);
       
   639 	_res = Py_None;
       
   640 	return _res;
       
   641 }
       
   642 
       
   643 static PyObject *DragObj_DragPostScroll(DragObjObject *_self, PyObject *_args)
       
   644 {
       
   645 	PyObject *_res = NULL;
       
   646 	OSErr _err;
       
   647 #ifndef DragPostScroll
       
   648 	PyMac_PRECHECK(DragPostScroll);
       
   649 #endif
       
   650 	if (!PyArg_ParseTuple(_args, ""))
       
   651 		return NULL;
       
   652 	_err = DragPostScroll(_self->ob_itself);
       
   653 	if (_err != noErr) return PyMac_Error(_err);
       
   654 	Py_INCREF(Py_None);
       
   655 	_res = Py_None;
       
   656 	return _res;
       
   657 }
       
   658 
       
   659 static PyObject *DragObj_UpdateDragHilite(DragObjObject *_self, PyObject *_args)
       
   660 {
       
   661 	PyObject *_res = NULL;
       
   662 	OSErr _err;
       
   663 	RgnHandle updateRgn;
       
   664 #ifndef UpdateDragHilite
       
   665 	PyMac_PRECHECK(UpdateDragHilite);
       
   666 #endif
       
   667 	if (!PyArg_ParseTuple(_args, "O&",
       
   668 	                      ResObj_Convert, &updateRgn))
       
   669 		return NULL;
       
   670 	_err = UpdateDragHilite(_self->ob_itself,
       
   671 	                        updateRgn);
       
   672 	if (_err != noErr) return PyMac_Error(_err);
       
   673 	Py_INCREF(Py_None);
       
   674 	_res = Py_None;
       
   675 	return _res;
       
   676 }
       
   677 
       
   678 static PyMethodDef DragObj_methods[] = {
       
   679 	{"DisposeDrag", (PyCFunction)DragObj_DisposeDrag, 1,
       
   680 	 PyDoc_STR("() -> None")},
       
   681 	{"AddDragItemFlavor", (PyCFunction)DragObj_AddDragItemFlavor, 1,
       
   682 	 PyDoc_STR("(ItemReference theItemRef, FlavorType theType, Buffer dataPtr, FlavorFlags theFlags) -> None")},
       
   683 	{"SetDragItemFlavorData", (PyCFunction)DragObj_SetDragItemFlavorData, 1,
       
   684 	 PyDoc_STR("(ItemReference theItemRef, FlavorType theType, Buffer dataPtr, UInt32 dataOffset) -> None")},
       
   685 	{"SetDragImage", (PyCFunction)DragObj_SetDragImage, 1,
       
   686 	 PyDoc_STR("(PixMapHandle imagePixMap, RgnHandle imageRgn, Point imageOffsetPt, DragImageFlags theImageFlags) -> None")},
       
   687 	{"ChangeDragBehaviors", (PyCFunction)DragObj_ChangeDragBehaviors, 1,
       
   688 	 PyDoc_STR("(DragBehaviors inBehaviorsToSet, DragBehaviors inBehaviorsToClear) -> None")},
       
   689 	{"TrackDrag", (PyCFunction)DragObj_TrackDrag, 1,
       
   690 	 PyDoc_STR("(EventRecord theEvent, RgnHandle theRegion) -> None")},
       
   691 	{"CountDragItems", (PyCFunction)DragObj_CountDragItems, 1,
       
   692 	 PyDoc_STR("() -> (UInt16 numItems)")},
       
   693 	{"GetDragItemReferenceNumber", (PyCFunction)DragObj_GetDragItemReferenceNumber, 1,
       
   694 	 PyDoc_STR("(UInt16 index) -> (ItemReference theItemRef)")},
       
   695 	{"CountDragItemFlavors", (PyCFunction)DragObj_CountDragItemFlavors, 1,
       
   696 	 PyDoc_STR("(ItemReference theItemRef) -> (UInt16 numFlavors)")},
       
   697 	{"GetFlavorType", (PyCFunction)DragObj_GetFlavorType, 1,
       
   698 	 PyDoc_STR("(ItemReference theItemRef, UInt16 index) -> (FlavorType theType)")},
       
   699 	{"GetFlavorFlags", (PyCFunction)DragObj_GetFlavorFlags, 1,
       
   700 	 PyDoc_STR("(ItemReference theItemRef, FlavorType theType) -> (FlavorFlags theFlags)")},
       
   701 	{"GetFlavorDataSize", (PyCFunction)DragObj_GetFlavorDataSize, 1,
       
   702 	 PyDoc_STR("(ItemReference theItemRef, FlavorType theType) -> (Size dataSize)")},
       
   703 	{"GetFlavorData", (PyCFunction)DragObj_GetFlavorData, 1,
       
   704 	 PyDoc_STR("(ItemReference theItemRef, FlavorType theType, Buffer dataPtr, UInt32 dataOffset) -> (Buffer dataPtr)")},
       
   705 	{"GetDragItemBounds", (PyCFunction)DragObj_GetDragItemBounds, 1,
       
   706 	 PyDoc_STR("(ItemReference theItemRef) -> (Rect itemBounds)")},
       
   707 	{"SetDragItemBounds", (PyCFunction)DragObj_SetDragItemBounds, 1,
       
   708 	 PyDoc_STR("(ItemReference theItemRef, Rect itemBounds) -> None")},
       
   709 	{"GetDropLocation", (PyCFunction)DragObj_GetDropLocation, 1,
       
   710 	 PyDoc_STR("() -> (AEDesc dropLocation)")},
       
   711 	{"SetDropLocation", (PyCFunction)DragObj_SetDropLocation, 1,
       
   712 	 PyDoc_STR("(AEDesc dropLocation) -> None")},
       
   713 	{"GetDragAttributes", (PyCFunction)DragObj_GetDragAttributes, 1,
       
   714 	 PyDoc_STR("() -> (DragAttributes flags)")},
       
   715 	{"GetDragMouse", (PyCFunction)DragObj_GetDragMouse, 1,
       
   716 	 PyDoc_STR("() -> (Point mouse, Point globalPinnedMouse)")},
       
   717 	{"SetDragMouse", (PyCFunction)DragObj_SetDragMouse, 1,
       
   718 	 PyDoc_STR("(Point globalPinnedMouse) -> None")},
       
   719 	{"GetDragOrigin", (PyCFunction)DragObj_GetDragOrigin, 1,
       
   720 	 PyDoc_STR("() -> (Point globalInitialMouse)")},
       
   721 	{"GetDragModifiers", (PyCFunction)DragObj_GetDragModifiers, 1,
       
   722 	 PyDoc_STR("() -> (SInt16 modifiers, SInt16 mouseDownModifiers, SInt16 mouseUpModifiers)")},
       
   723 	{"ShowDragHilite", (PyCFunction)DragObj_ShowDragHilite, 1,
       
   724 	 PyDoc_STR("(RgnHandle hiliteFrame, Boolean inside) -> None")},
       
   725 	{"HideDragHilite", (PyCFunction)DragObj_HideDragHilite, 1,
       
   726 	 PyDoc_STR("() -> None")},
       
   727 	{"DragPreScroll", (PyCFunction)DragObj_DragPreScroll, 1,
       
   728 	 PyDoc_STR("(SInt16 dH, SInt16 dV) -> None")},
       
   729 	{"DragPostScroll", (PyCFunction)DragObj_DragPostScroll, 1,
       
   730 	 PyDoc_STR("() -> None")},
       
   731 	{"UpdateDragHilite", (PyCFunction)DragObj_UpdateDragHilite, 1,
       
   732 	 PyDoc_STR("(RgnHandle updateRgn) -> None")},
       
   733 	{NULL, NULL, 0}
       
   734 };
       
   735 
       
   736 #define DragObj_getsetlist NULL
       
   737 
       
   738 
       
   739 #define DragObj_compare NULL
       
   740 
       
   741 #define DragObj_repr NULL
       
   742 
       
   743 #define DragObj_hash NULL
       
   744 #define DragObj_tp_init 0
       
   745 
       
   746 #define DragObj_tp_alloc PyType_GenericAlloc
       
   747 
       
   748 static PyObject *DragObj_tp_new(PyTypeObject *type, PyObject *_args, PyObject *_kwds)
       
   749 {
       
   750 	PyObject *_self;
       
   751 	DragRef itself;
       
   752 	char *kw[] = {"itself", 0};
       
   753 
       
   754 	if (!PyArg_ParseTupleAndKeywords(_args, _kwds, "O&", kw, DragObj_Convert, &itself)) return NULL;
       
   755 	if ((_self = type->tp_alloc(type, 0)) == NULL) return NULL;
       
   756 	((DragObjObject *)_self)->ob_itself = itself;
       
   757 	return _self;
       
   758 }
       
   759 
       
   760 #define DragObj_tp_free PyObject_Del
       
   761 
       
   762 
       
   763 PyTypeObject DragObj_Type = {
       
   764 	PyObject_HEAD_INIT(NULL)
       
   765 	0, /*ob_size*/
       
   766 	"_Drag.DragObj", /*tp_name*/
       
   767 	sizeof(DragObjObject), /*tp_basicsize*/
       
   768 	0, /*tp_itemsize*/
       
   769 	/* methods */
       
   770 	(destructor) DragObj_dealloc, /*tp_dealloc*/
       
   771 	0, /*tp_print*/
       
   772 	(getattrfunc)0, /*tp_getattr*/
       
   773 	(setattrfunc)0, /*tp_setattr*/
       
   774 	(cmpfunc) DragObj_compare, /*tp_compare*/
       
   775 	(reprfunc) DragObj_repr, /*tp_repr*/
       
   776 	(PyNumberMethods *)0, /* tp_as_number */
       
   777 	(PySequenceMethods *)0, /* tp_as_sequence */
       
   778 	(PyMappingMethods *)0, /* tp_as_mapping */
       
   779 	(hashfunc) DragObj_hash, /*tp_hash*/
       
   780 	0, /*tp_call*/
       
   781 	0, /*tp_str*/
       
   782 	PyObject_GenericGetAttr, /*tp_getattro*/
       
   783 	PyObject_GenericSetAttr, /*tp_setattro */
       
   784 	0, /*tp_as_buffer*/
       
   785 	Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE, /* tp_flags */
       
   786 	0, /*tp_doc*/
       
   787 	0, /*tp_traverse*/
       
   788 	0, /*tp_clear*/
       
   789 	0, /*tp_richcompare*/
       
   790 	0, /*tp_weaklistoffset*/
       
   791 	0, /*tp_iter*/
       
   792 	0, /*tp_iternext*/
       
   793 	DragObj_methods, /* tp_methods */
       
   794 	0, /*tp_members*/
       
   795 	DragObj_getsetlist, /*tp_getset*/
       
   796 	0, /*tp_base*/
       
   797 	0, /*tp_dict*/
       
   798 	0, /*tp_descr_get*/
       
   799 	0, /*tp_descr_set*/
       
   800 	0, /*tp_dictoffset*/
       
   801 	DragObj_tp_init, /* tp_init */
       
   802 	DragObj_tp_alloc, /* tp_alloc */
       
   803 	DragObj_tp_new, /* tp_new */
       
   804 	DragObj_tp_free, /* tp_free */
       
   805 };
       
   806 
       
   807 /* -------------------- End object type DragObj --------------------- */
       
   808 
       
   809 
       
   810 static PyObject *Drag_NewDrag(PyObject *_self, PyObject *_args)
       
   811 {
       
   812 	PyObject *_res = NULL;
       
   813 	OSErr _err;
       
   814 	DragRef theDrag;
       
   815 #ifndef NewDrag
       
   816 	PyMac_PRECHECK(NewDrag);
       
   817 #endif
       
   818 	if (!PyArg_ParseTuple(_args, ""))
       
   819 		return NULL;
       
   820 	_err = NewDrag(&theDrag);
       
   821 	if (_err != noErr) return PyMac_Error(_err);
       
   822 	_res = Py_BuildValue("O&",
       
   823 	                     DragObj_New, theDrag);
       
   824 	return _res;
       
   825 }
       
   826 
       
   827 static PyObject *Drag_GetDragHiliteColor(PyObject *_self, PyObject *_args)
       
   828 {
       
   829 	PyObject *_res = NULL;
       
   830 	OSErr _err;
       
   831 	WindowPtr window;
       
   832 	RGBColor color;
       
   833 #ifndef GetDragHiliteColor
       
   834 	PyMac_PRECHECK(GetDragHiliteColor);
       
   835 #endif
       
   836 	if (!PyArg_ParseTuple(_args, "O&",
       
   837 	                      WinObj_Convert, &window))
       
   838 		return NULL;
       
   839 	_err = GetDragHiliteColor(window,
       
   840 	                          &color);
       
   841 	if (_err != noErr) return PyMac_Error(_err);
       
   842 	_res = Py_BuildValue("O&",
       
   843 	                     QdRGB_New, &color);
       
   844 	return _res;
       
   845 }
       
   846 
       
   847 static PyObject *Drag_WaitMouseMoved(PyObject *_self, PyObject *_args)
       
   848 {
       
   849 	PyObject *_res = NULL;
       
   850 	Boolean _rv;
       
   851 	Point initialMouse;
       
   852 #ifndef WaitMouseMoved
       
   853 	PyMac_PRECHECK(WaitMouseMoved);
       
   854 #endif
       
   855 	if (!PyArg_ParseTuple(_args, "O&",
       
   856 	                      PyMac_GetPoint, &initialMouse))
       
   857 		return NULL;
       
   858 	_rv = WaitMouseMoved(initialMouse);
       
   859 	_res = Py_BuildValue("b",
       
   860 	                     _rv);
       
   861 	return _res;
       
   862 }
       
   863 
       
   864 static PyObject *Drag_ZoomRects(PyObject *_self, PyObject *_args)
       
   865 {
       
   866 	PyObject *_res = NULL;
       
   867 	OSErr _err;
       
   868 	Rect fromRect;
       
   869 	Rect toRect;
       
   870 	SInt16 zoomSteps;
       
   871 	ZoomAcceleration acceleration;
       
   872 #ifndef ZoomRects
       
   873 	PyMac_PRECHECK(ZoomRects);
       
   874 #endif
       
   875 	if (!PyArg_ParseTuple(_args, "O&O&hh",
       
   876 	                      PyMac_GetRect, &fromRect,
       
   877 	                      PyMac_GetRect, &toRect,
       
   878 	                      &zoomSteps,
       
   879 	                      &acceleration))
       
   880 		return NULL;
       
   881 	_err = ZoomRects(&fromRect,
       
   882 	                 &toRect,
       
   883 	                 zoomSteps,
       
   884 	                 acceleration);
       
   885 	if (_err != noErr) return PyMac_Error(_err);
       
   886 	Py_INCREF(Py_None);
       
   887 	_res = Py_None;
       
   888 	return _res;
       
   889 }
       
   890 
       
   891 static PyObject *Drag_ZoomRegion(PyObject *_self, PyObject *_args)
       
   892 {
       
   893 	PyObject *_res = NULL;
       
   894 	OSErr _err;
       
   895 	RgnHandle region;
       
   896 	Point zoomDistance;
       
   897 	SInt16 zoomSteps;
       
   898 	ZoomAcceleration acceleration;
       
   899 #ifndef ZoomRegion
       
   900 	PyMac_PRECHECK(ZoomRegion);
       
   901 #endif
       
   902 	if (!PyArg_ParseTuple(_args, "O&O&hh",
       
   903 	                      ResObj_Convert, &region,
       
   904 	                      PyMac_GetPoint, &zoomDistance,
       
   905 	                      &zoomSteps,
       
   906 	                      &acceleration))
       
   907 		return NULL;
       
   908 	_err = ZoomRegion(region,
       
   909 	                  zoomDistance,
       
   910 	                  zoomSteps,
       
   911 	                  acceleration);
       
   912 	if (_err != noErr) return PyMac_Error(_err);
       
   913 	Py_INCREF(Py_None);
       
   914 	_res = Py_None;
       
   915 	return _res;
       
   916 }
       
   917 
       
   918 static PyObject *Drag_InstallTrackingHandler(PyObject *_self, PyObject *_args)
       
   919 {
       
   920 	PyObject *_res = NULL;
       
   921 
       
   922 	    PyObject *callback;
       
   923 	    WindowPtr theWindow = NULL;
       
   924 	    OSErr _err;
       
   925 
       
   926 	    if ( !PyArg_ParseTuple(_args, "O|O&", &callback, WinObj_Convert, &theWindow) )
       
   927 	        return NULL;
       
   928 	    Py_INCREF(callback);        /* Cannot decref later, too bad */
       
   929 	    _err = InstallTrackingHandler(dragglue_TrackingHandlerUPP, theWindow, (void *)callback);
       
   930 	        if (_err != noErr) return PyMac_Error(_err);
       
   931 	        Py_INCREF(Py_None);
       
   932 	        _res = Py_None;
       
   933 	        return _res;
       
   934 
       
   935 }
       
   936 
       
   937 static PyObject *Drag_InstallReceiveHandler(PyObject *_self, PyObject *_args)
       
   938 {
       
   939 	PyObject *_res = NULL;
       
   940 
       
   941 	    PyObject *callback;
       
   942 	    WindowPtr theWindow = NULL;
       
   943 	    OSErr _err;
       
   944 
       
   945 	    if ( !PyArg_ParseTuple(_args, "O|O&", &callback, WinObj_Convert, &theWindow) )
       
   946 	        return NULL;
       
   947 	    Py_INCREF(callback);        /* Cannot decref later, too bad */
       
   948 	    _err = InstallReceiveHandler(dragglue_ReceiveHandlerUPP, theWindow, (void *)callback);
       
   949 	        if (_err != noErr) return PyMac_Error(_err);
       
   950 	        Py_INCREF(Py_None);
       
   951 	        _res = Py_None;
       
   952 	        return _res;
       
   953 
       
   954 }
       
   955 
       
   956 static PyObject *Drag_RemoveTrackingHandler(PyObject *_self, PyObject *_args)
       
   957 {
       
   958 	PyObject *_res = NULL;
       
   959 
       
   960 	    WindowPtr theWindow = NULL;
       
   961 	    OSErr _err;
       
   962 
       
   963 	    if ( !PyArg_ParseTuple(_args, "|O&", WinObj_Convert, &theWindow) )
       
   964 	        return NULL;
       
   965 	    _err = RemoveTrackingHandler(dragglue_TrackingHandlerUPP, theWindow);
       
   966 	        if (_err != noErr) return PyMac_Error(_err);
       
   967 	        Py_INCREF(Py_None);
       
   968 	        _res = Py_None;
       
   969 	        return _res;
       
   970 
       
   971 }
       
   972 
       
   973 static PyObject *Drag_RemoveReceiveHandler(PyObject *_self, PyObject *_args)
       
   974 {
       
   975 	PyObject *_res = NULL;
       
   976 
       
   977 	    WindowPtr theWindow = NULL;
       
   978 	    OSErr _err;
       
   979 
       
   980 	    if ( !PyArg_ParseTuple(_args, "|O&", WinObj_Convert, &theWindow) )
       
   981 	        return NULL;
       
   982 	    _err = RemoveReceiveHandler(dragglue_ReceiveHandlerUPP, theWindow);
       
   983 	        if (_err != noErr) return PyMac_Error(_err);
       
   984 	        Py_INCREF(Py_None);
       
   985 	        _res = Py_None;
       
   986 	        return _res;
       
   987 
       
   988 }
       
   989 
       
   990 static PyMethodDef Drag_methods[] = {
       
   991 	{"NewDrag", (PyCFunction)Drag_NewDrag, 1,
       
   992 	 PyDoc_STR("() -> (DragRef theDrag)")},
       
   993 	{"GetDragHiliteColor", (PyCFunction)Drag_GetDragHiliteColor, 1,
       
   994 	 PyDoc_STR("(WindowPtr window) -> (RGBColor color)")},
       
   995 	{"WaitMouseMoved", (PyCFunction)Drag_WaitMouseMoved, 1,
       
   996 	 PyDoc_STR("(Point initialMouse) -> (Boolean _rv)")},
       
   997 	{"ZoomRects", (PyCFunction)Drag_ZoomRects, 1,
       
   998 	 PyDoc_STR("(Rect fromRect, Rect toRect, SInt16 zoomSteps, ZoomAcceleration acceleration) -> None")},
       
   999 	{"ZoomRegion", (PyCFunction)Drag_ZoomRegion, 1,
       
  1000 	 PyDoc_STR("(RgnHandle region, Point zoomDistance, SInt16 zoomSteps, ZoomAcceleration acceleration) -> None")},
       
  1001 	{"InstallTrackingHandler", (PyCFunction)Drag_InstallTrackingHandler, 1,
       
  1002 	 PyDoc_STR(NULL)},
       
  1003 	{"InstallReceiveHandler", (PyCFunction)Drag_InstallReceiveHandler, 1,
       
  1004 	 PyDoc_STR(NULL)},
       
  1005 	{"RemoveTrackingHandler", (PyCFunction)Drag_RemoveTrackingHandler, 1,
       
  1006 	 PyDoc_STR(NULL)},
       
  1007 	{"RemoveReceiveHandler", (PyCFunction)Drag_RemoveReceiveHandler, 1,
       
  1008 	 PyDoc_STR(NULL)},
       
  1009 	{NULL, NULL, 0}
       
  1010 };
       
  1011 
       
  1012 
       
  1013 
       
  1014 static pascal OSErr
       
  1015 dragglue_TrackingHandler(DragTrackingMessage theMessage, WindowPtr theWindow,
       
  1016                          void *handlerRefCon, DragReference theDrag)
       
  1017 {
       
  1018         PyObject *args, *rv;
       
  1019         int i;
       
  1020 
       
  1021         args = Py_BuildValue("hO&O&", theMessage, DragObj_New, theDrag, WinObj_WhichWindow, theWindow);
       
  1022         if ( args == NULL )
       
  1023                 return -1;
       
  1024         rv = PyEval_CallObject((PyObject *)handlerRefCon, args);
       
  1025         Py_DECREF(args);
       
  1026         if ( rv == NULL ) {
       
  1027                 PySys_WriteStderr("Drag: Exception in TrackingHandler\n");
       
  1028                 PyErr_Print();
       
  1029                 return -1;
       
  1030         }
       
  1031         i = -1;
       
  1032         if ( rv == Py_None )
       
  1033                 i = 0;
       
  1034         else
       
  1035                 PyArg_Parse(rv, "l", &i);
       
  1036         Py_DECREF(rv);
       
  1037         return i;
       
  1038 }
       
  1039 
       
  1040 static pascal OSErr
       
  1041 dragglue_ReceiveHandler(WindowPtr theWindow, void *handlerRefCon,
       
  1042                         DragReference theDrag)
       
  1043 {
       
  1044         PyObject *args, *rv;
       
  1045         int i;
       
  1046 
       
  1047         args = Py_BuildValue("O&O&", DragObj_New, theDrag, WinObj_WhichWindow, theWindow);
       
  1048         if ( args == NULL )
       
  1049                 return -1;
       
  1050         rv = PyEval_CallObject((PyObject *)handlerRefCon, args);
       
  1051         Py_DECREF(args);
       
  1052         if ( rv == NULL ) {
       
  1053                 PySys_WriteStderr("Drag: Exception in ReceiveHandler\n");
       
  1054                 PyErr_Print();
       
  1055                 return -1;
       
  1056         }
       
  1057         i = -1;
       
  1058         if ( rv == Py_None )
       
  1059                 i = 0;
       
  1060         else
       
  1061                 PyArg_Parse(rv, "l", &i);
       
  1062         Py_DECREF(rv);
       
  1063         return i;
       
  1064 }
       
  1065 
       
  1066 static pascal OSErr
       
  1067 dragglue_SendData(FlavorType theType, void *dragSendRefCon,
       
  1068                       ItemReference theItem, DragReference theDrag)
       
  1069 {
       
  1070         DragObjObject *self = (DragObjObject *)dragSendRefCon;
       
  1071         PyObject *args, *rv;
       
  1072         int i;
       
  1073 
       
  1074         if ( self->sendproc == NULL )
       
  1075                 return -1;
       
  1076         args = Py_BuildValue("O&l", PyMac_BuildOSType, theType, theItem);
       
  1077         if ( args == NULL )
       
  1078                 return -1;
       
  1079         rv = PyEval_CallObject(self->sendproc, args);
       
  1080         Py_DECREF(args);
       
  1081         if ( rv == NULL ) {
       
  1082                 PySys_WriteStderr("Drag: Exception in SendDataHandler\n");
       
  1083                 PyErr_Print();
       
  1084                 return -1;
       
  1085         }
       
  1086         i = -1;
       
  1087         if ( rv == Py_None )
       
  1088                 i = 0;
       
  1089         else
       
  1090                 PyArg_Parse(rv, "l", &i);
       
  1091         Py_DECREF(rv);
       
  1092         return i;
       
  1093 }
       
  1094 
       
  1095 #if 0
       
  1096 static pascal OSErr
       
  1097 dragglue_Input(Point *mouse, short *modifiers,
       
  1098                    void *dragSendRefCon, DragReference theDrag)
       
  1099 {
       
  1100     return 0;
       
  1101 }
       
  1102 
       
  1103 static pascal OSErr
       
  1104 dragglue_Drawing(xxxx
       
  1105                    void *dragSendRefCon, DragReference theDrag)
       
  1106 {
       
  1107     return 0;
       
  1108 }
       
  1109 #endif
       
  1110 #else /* __LP64__ */
       
  1111 static PyMethodDef Drag_methods[] = {
       
  1112 	{NULL, NULL, 0}
       
  1113 };
       
  1114 #endif /* __LP64__ */
       
  1115 
       
  1116 
       
  1117 void init_Drag(void)
       
  1118 {
       
  1119 	PyObject *m;
       
  1120 #ifndef __LP64__
       
  1121 	PyObject *d;
       
  1122 
       
  1123 
       
  1124 
       
  1125 	        PyMac_INIT_TOOLBOX_OBJECT_NEW(DragRef, DragObj_New);
       
  1126 	        PyMac_INIT_TOOLBOX_OBJECT_CONVERT(DragRef, DragObj_Convert);
       
  1127 #endif /* !__LP64__ */
       
  1128 
       
  1129 
       
  1130 	m = Py_InitModule("_Drag", Drag_methods);
       
  1131 #ifndef __LP64__
       
  1132 	d = PyModule_GetDict(m);
       
  1133 	Drag_Error = PyMac_GetOSErrException();
       
  1134 	if (Drag_Error == NULL ||
       
  1135 	    PyDict_SetItemString(d, "Error", Drag_Error) != 0)
       
  1136 		return;
       
  1137 	DragObj_Type.ob_type = &PyType_Type;
       
  1138 	if (PyType_Ready(&DragObj_Type) < 0) return;
       
  1139 	Py_INCREF(&DragObj_Type);
       
  1140 	PyModule_AddObject(m, "DragObj", (PyObject *)&DragObj_Type);
       
  1141 	/* Backward-compatible name */
       
  1142 	Py_INCREF(&DragObj_Type);
       
  1143 	PyModule_AddObject(m, "DragObjType", (PyObject *)&DragObj_Type);
       
  1144 
       
  1145 	dragglue_TrackingHandlerUPP = NewDragTrackingHandlerUPP(dragglue_TrackingHandler);
       
  1146 	dragglue_ReceiveHandlerUPP = NewDragReceiveHandlerUPP(dragglue_ReceiveHandler);
       
  1147 	dragglue_SendDataUPP = NewDragSendDataUPP(dragglue_SendData);
       
  1148 #if 0
       
  1149 	dragglue_InputUPP = NewDragInputUPP(dragglue_Input);
       
  1150 	dragglue_DrawingUPP = NewDragDrawingUPP(dragglue_Drawing);
       
  1151 #endif
       
  1152 
       
  1153 #endif /* !__LP64__ */
       
  1154 
       
  1155 }
       
  1156 
       
  1157 /* ======================== End module _Drag ======================== */
       
  1158