@@ -87,6 +87,8 @@ static PyObject *tracker;
8787static ControlActionUPP mytracker_upp ;
8888static ControlUserPaneDrawUPP mydrawproc_upp ;
8989static ControlUserPaneIdleUPP myidleproc_upp ;
90+ static ControlUserPaneHitTestUPP myhittestproc_upp ;
91+ static ControlUserPaneTrackingUPP mytrackingproc_upp ;
9092
9193extern int settrackfunc (PyObject * ); /* forward */
9294extern void clrtrackfunc (void ); /* forward */
@@ -1982,6 +1984,10 @@ setcallback(self, which, callback, uppp)
19821984 * uppp = mydrawproc_upp ;
19831985 else if ( which == kControlUserPaneIdleProcTag )
19841986 * uppp = myidleproc_upp ;
1987+ else if ( which == kControlUserPaneHitTestProcTag )
1988+ * uppp = myhittestproc_upp ;
1989+ else if ( which == kControlUserPaneTrackingProcTag )
1990+ * uppp = mytrackingproc_upp ;
19851991 else
19861992 return -1 ;
19871993 /* Only now do we test for clearing of the callback: */
@@ -2010,12 +2016,12 @@ callcallback(self, which, arglist)
20102016 sprintf (keybuf , "%x" , which );
20112017 if ( self -> ob_callbackdict == NULL ||
20122018 (func = PyDict_GetItemString (self -> ob_callbackdict , keybuf )) == NULL ) {
2013- PySys_WriteStderr ("Control callback without callback object\n" );
2019+ PySys_WriteStderr ("Control callback %x without callback object\n" , which );
20142020 return NULL ;
20152021 }
20162022 rv = PyEval_CallObject (func , arglist );
20172023 if ( rv == NULL )
2018- PySys_WriteStderr ("Exception in control callback handler\n" );
2024+ PySys_WriteStderr ("Exception in control callback %x handler\n" , which );
20192025 return rv ;
20202026}
20212027
@@ -2045,6 +2051,42 @@ myidleproc(ControlHandle control)
20452051 Py_XDECREF (rv );
20462052}
20472053
2054+ static pascal ControlPartCode
2055+ myhittestproc (ControlHandle control , Point where )
2056+ {
2057+ ControlObject * ctl_obj ;
2058+ PyObject * arglist , * rv ;
2059+ short c_rv = -1 ;
2060+
2061+ ctl_obj = (ControlObject * )CtlObj_WhichControl (control );
2062+ arglist = Py_BuildValue ("OO&" , ctl_obj , PyMac_BuildPoint , & where );
2063+ rv = callcallback (ctl_obj , kControlUserPaneHitTestProcTag , arglist );
2064+ Py_XDECREF (arglist );
2065+ /* Ignore errors, nothing we can do about them */
2066+ if ( rv )
2067+ PyArg_Parse (rv , "h" , & c_rv );
2068+ Py_XDECREF (rv );
2069+ return (ControlPartCode )c_rv ;
2070+ }
2071+
2072+ static pascal ControlPartCode
2073+ mytrackingproc (ControlHandle control , Point startPt , ControlActionUPP actionProc )
2074+ {
2075+ ControlObject * ctl_obj ;
2076+ PyObject * arglist , * rv ;
2077+ short c_rv = -1 ;
2078+
2079+ ctl_obj = (ControlObject * )CtlObj_WhichControl (control );
2080+ /* We cannot pass the actionProc without lots of work */
2081+ arglist = Py_BuildValue ("OO&" , ctl_obj , PyMac_BuildPoint , & startPt );
2082+ rv = callcallback (ctl_obj , kControlUserPaneTrackingProcTag , arglist );
2083+ Py_XDECREF (arglist );
2084+ if ( rv )
2085+ PyArg_Parse (rv , "h" , & c_rv );
2086+ Py_XDECREF (rv );
2087+ return (ControlPartCode )c_rv ;
2088+ }
2089+
20482090
20492091
20502092void initCtl ()
@@ -2057,6 +2099,8 @@ void initCtl()
20572099 mytracker_upp = NewControlActionProc (mytracker );
20582100 mydrawproc_upp = NewControlUserPaneDrawProc (mydrawproc );
20592101 myidleproc_upp = NewControlUserPaneDrawProc (myidleproc );
2102+ myhittestproc_upp = NewControlUserPaneHitTestProc (myhittestproc );
2103+ mytrackingproc_upp = NewControlUserPaneTrackingProc (mytrackingproc );
20602104
20612105
20622106 m = Py_InitModule ("Ctl" , Ctl_methods );
0 commit comments