]> granicus.if.org Git - python/commitdiff
On OSX passing NULL to NewUniversalFilterProc() does not return NULL but a crashing...
authorJack Jansen <jack.jansen@cwi.nl>
Tue, 20 Feb 2001 22:27:43 +0000 (22:27 +0000)
committerJack Jansen <jack.jansen@cwi.nl>
Tue, 20 Feb 2001 22:27:43 +0000 (22:27 +0000)
Mac/Modules/dlg/Dlgmodule.c
Mac/Modules/dlg/dlgsupport.py

index 070283e5ffa1b75b31a0bb4b705ed765475acd60..2262b544e678b70fbf63434e8ba89bfbc752f545 100644 (file)
@@ -56,10 +56,12 @@ static pascal Boolean Dlg_UnivFilterProc(DialogPtr dialog,
        return rv;
 }
 
-static ModalFilterProcPtr
+static ModalFilterUPP
 Dlg_PassFilterProc(PyObject *callback)
 {
        PyObject *tmp = Dlg_FilterProc_callback;
+       static ModalFilterUPP UnivFilterUpp = NULL;
+       
        Dlg_FilterProc_callback = NULL;
        if (callback == Py_None) {
                Py_XDECREF(tmp);
@@ -68,7 +70,9 @@ Dlg_PassFilterProc(PyObject *callback)
        Py_INCREF(callback);
        Dlg_FilterProc_callback = callback;
        Py_XDECREF(tmp);
-       return &Dlg_UnivFilterProc;
+       if ( UnivFilterUpp == NULL )
+               UnivFilterUpp = NewModalFilterUPP(&Dlg_UnivFilterProc);
+       return UnivFilterUpp;
 }
 
 static PyObject *Dlg_UserItemProc_callback = NULL;
@@ -1077,7 +1081,7 @@ static PyObject *Dlg_ModalDialog(_self, _args)
        if (!PyArg_ParseTuple(_args, "O",
                              &modalFilter))
                return NULL;
-       ModalDialog(NewModalFilterProc(Dlg_PassFilterProc(modalFilter)),
+       ModalDialog(Dlg_PassFilterProc(modalFilter),
                    &itemHit);
        _res = Py_BuildValue("h",
                             itemHit);
@@ -1135,7 +1139,7 @@ static PyObject *Dlg_Alert(_self, _args)
                              &modalFilter))
                return NULL;
        _rv = Alert(alertID,
-                   NewModalFilterProc(Dlg_PassFilterProc(modalFilter)));
+                   Dlg_PassFilterProc(modalFilter));
        _res = Py_BuildValue("h",
                             _rv);
        return _res;
@@ -1154,7 +1158,7 @@ static PyObject *Dlg_StopAlert(_self, _args)
                              &modalFilter))
                return NULL;
        _rv = StopAlert(alertID,
-                       NewModalFilterProc(Dlg_PassFilterProc(modalFilter)));
+                       Dlg_PassFilterProc(modalFilter));
        _res = Py_BuildValue("h",
                             _rv);
        return _res;
@@ -1173,7 +1177,7 @@ static PyObject *Dlg_NoteAlert(_self, _args)
                              &modalFilter))
                return NULL;
        _rv = NoteAlert(alertID,
-                       NewModalFilterProc(Dlg_PassFilterProc(modalFilter)));
+                       Dlg_PassFilterProc(modalFilter));
        _res = Py_BuildValue("h",
                             _rv);
        return _res;
@@ -1192,7 +1196,7 @@ static PyObject *Dlg_CautionAlert(_self, _args)
                              &modalFilter))
                return NULL;
        _rv = CautionAlert(alertID,
-                          NewModalFilterProc(Dlg_PassFilterProc(modalFilter)));
+                          Dlg_PassFilterProc(modalFilter));
        _res = Py_BuildValue("h",
                             _rv);
        return _res;
@@ -1400,7 +1404,7 @@ static PyObject *Dlg_SetUserItemHandler(_self, _args)
                        return NULL;
                }
                
-               if (new == Py_None) {
+               if (new == NULL || new == Py_None) {
                        new = NULL;
                        _res = Py_None;
                        Py_INCREF(Py_None);
index ab22e180ff6a4b0f17dcefe74452ebcdaff81977..594b7a87eb8d5b7c55f5a42f290160849c102553 100644 (file)
@@ -15,7 +15,7 @@ DialogRef = DialogPtr
 OptHandle = OpaqueByValueType("Handle", "OptResObj")
 
 ModalFilterProcPtr = InputOnlyType("PyObject*", "O")
-ModalFilterProcPtr.passInput = lambda name: "NewModalFilterProc(Dlg_PassFilterProc(%s))" % name
+ModalFilterProcPtr.passInput = lambda name: "Dlg_PassFilterProc(%s)" % name
 ModalFilterUPP = ModalFilterProcPtr
 
 RgnHandle = OpaqueByValueType("RgnHandle", "ResObj")
@@ -79,10 +79,12 @@ static pascal Boolean Dlg_UnivFilterProc(DialogPtr dialog,
        return rv;
 }
 
-static ModalFilterProcPtr
+static ModalFilterUPP
 Dlg_PassFilterProc(PyObject *callback)
 {
        PyObject *tmp = Dlg_FilterProc_callback;
+       static ModalFilterUPP UnivFilterUpp = NULL;
+       
        Dlg_FilterProc_callback = NULL;
        if (callback == Py_None) {
                Py_XDECREF(tmp);
@@ -91,7 +93,9 @@ Dlg_PassFilterProc(PyObject *callback)
        Py_INCREF(callback);
        Dlg_FilterProc_callback = callback;
        Py_XDECREF(tmp);
-       return &Dlg_UnivFilterProc;
+       if ( UnivFilterUpp == NULL )
+               UnivFilterUpp = NewModalFilterUPP(&Dlg_UnivFilterProc);
+       return UnivFilterUpp;
 }
 
 static PyObject *Dlg_UserItemProc_callback = NULL;
@@ -267,7 +271,7 @@ setuseritembody = """
                return NULL;
        }
        
-       if (new == Py_None) {
+       if (new == NULL || new == Py_None) {
                new = NULL;
                _res = Py_None;
                Py_INCREF(Py_None);