]> granicus.if.org Git - python/commitdiff
- "manage" controls created by CreateXxxXxxControl() functions.
authorJust van Rossum <just@letterror.com>
Thu, 13 Dec 2001 21:24:37 +0000 (21:24 +0000)
committerJust van Rossum <just@letterror.com>
Thu, 13 Dec 2001 21:24:37 +0000 (21:24 +0000)
- FindControlUnderMouse() returns an existing control, not a new one.

Mac/Modules/ctl/_Ctlmodule.c
Mac/Modules/ctl/ctledit.py
Mac/Modules/ctl/ctlscan.py

index 3c6ba5e52192dd1530e7aeb80e643023253a3296..70bdb3e4c61b122490c43933b9d4e7073ee2e90d 100644 (file)
@@ -4035,29 +4035,6 @@ static PyObject *Ctl_FindControl(PyObject *_self, PyObject *_args)
        return _res;
 }
 
-static PyObject *Ctl_FindControlUnderMouse(PyObject *_self, PyObject *_args)
-{
-       PyObject *_res = NULL;
-       ControlHandle _rv;
-       Point inWhere;
-       WindowPtr inWindow;
-       SInt16 outPart;
-#ifndef FindControlUnderMouse
-       PyMac_PRECHECK(FindControlUnderMouse);
-#endif
-       if (!PyArg_ParseTuple(_args, "O&O&",
-                             PyMac_GetPoint, &inWhere,
-                             WinObj_Convert, &inWindow))
-               return NULL;
-       _rv = FindControlUnderMouse(inWhere,
-                                   inWindow,
-                                   &outPart);
-       _res = Py_BuildValue("O&h",
-                            CtlObj_New, _rv,
-                            outPart);
-       return _res;
-}
-
 static PyObject *Ctl_IdleControls(PyObject *_self, PyObject *_args)
 {
        PyObject *_res = NULL;
@@ -4137,7 +4114,7 @@ static PyObject *Ctl_CreateRootControl(PyObject *_self, PyObject *_args)
                                 &outControl);
        if (_err != noErr) return PyMac_Error(_err);
        _res = Py_BuildValue("O&",
-                            CtlObj_WhichControl, outControl);
+                            CtlObj_New, outControl);
        return _res;
 }
 
@@ -4340,7 +4317,7 @@ static PyObject *Ctl_CreateDisclosureTriangleControl(PyObject *_self, PyObject *
                                               &outControl);
        if (_err != noErr) return PyMac_Error(_err);
        _res = Py_BuildValue("O&",
-                            CtlObj_WhichControl, outControl);
+                            CtlObj_New, outControl);
        return _res;
 }
 
@@ -4375,7 +4352,7 @@ static PyObject *Ctl_CreateProgressBarControl(PyObject *_self, PyObject *_args)
                                        &outControl);
        if (_err != noErr) return PyMac_Error(_err);
        _res = Py_BuildValue("O&",
-                            CtlObj_WhichControl, outControl);
+                            CtlObj_New, outControl);
        return _res;
 }
 
@@ -4410,7 +4387,7 @@ static PyObject *Ctl_CreateLittleArrowsControl(PyObject *_self, PyObject *_args)
                                         &outControl);
        if (_err != noErr) return PyMac_Error(_err);
        _res = Py_BuildValue("O&",
-                            CtlObj_WhichControl, outControl);
+                            CtlObj_New, outControl);
        return _res;
 }
 
@@ -4433,7 +4410,7 @@ static PyObject *Ctl_CreateChasingArrowsControl(PyObject *_self, PyObject *_args
                                          &outControl);
        if (_err != noErr) return PyMac_Error(_err);
        _res = Py_BuildValue("O&",
-                            CtlObj_WhichControl, outControl);
+                            CtlObj_New, outControl);
        return _res;
 }
 
@@ -4456,7 +4433,7 @@ static PyObject *Ctl_CreateSeparatorControl(PyObject *_self, PyObject *_args)
                                      &outControl);
        if (_err != noErr) return PyMac_Error(_err);
        _res = Py_BuildValue("O&",
-                            CtlObj_WhichControl, outControl);
+                            CtlObj_New, outControl);
        return _res;
 }
 
@@ -4485,7 +4462,7 @@ static PyObject *Ctl_CreateGroupBoxControl(PyObject *_self, PyObject *_args)
                                     &outControl);
        if (_err != noErr) return PyMac_Error(_err);
        _res = Py_BuildValue("O&",
-                            CtlObj_WhichControl, outControl);
+                            CtlObj_New, outControl);
        return _res;
 }
 
@@ -4520,7 +4497,7 @@ static PyObject *Ctl_CreateCheckGroupBoxControl(PyObject *_self, PyObject *_args
                                          &outControl);
        if (_err != noErr) return PyMac_Error(_err);
        _res = Py_BuildValue("O&",
-                            CtlObj_WhichControl, outControl);
+                            CtlObj_New, outControl);
        return _res;
 }
 
@@ -4564,7 +4541,7 @@ static PyObject *Ctl_CreatePopupGroupBoxControl(PyObject *_self, PyObject *_args
                                          &outControl);
        if (_err != noErr) return PyMac_Error(_err);
        _res = Py_BuildValue("O&",
-                            CtlObj_WhichControl, outControl);
+                            CtlObj_New, outControl);
        return _res;
 }
 
@@ -4593,7 +4570,7 @@ static PyObject *Ctl_CreatePopupArrowControl(PyObject *_self, PyObject *_args)
                                       &outControl);
        if (_err != noErr) return PyMac_Error(_err);
        _res = Py_BuildValue("O&",
-                            CtlObj_WhichControl, outControl);
+                            CtlObj_New, outControl);
        return _res;
 }
 
@@ -4616,7 +4593,7 @@ static PyObject *Ctl_CreatePlacardControl(PyObject *_self, PyObject *_args)
                                    &outControl);
        if (_err != noErr) return PyMac_Error(_err);
        _res = Py_BuildValue("O&",
-                            CtlObj_WhichControl, outControl);
+                            CtlObj_New, outControl);
        return _res;
 }
 
@@ -4645,7 +4622,7 @@ static PyObject *Ctl_CreateClockControl(PyObject *_self, PyObject *_args)
                                  &outControl);
        if (_err != noErr) return PyMac_Error(_err);
        _res = Py_BuildValue("O&",
-                            CtlObj_WhichControl, outControl);
+                            CtlObj_New, outControl);
        return _res;
 }
 
@@ -4671,7 +4648,7 @@ static PyObject *Ctl_CreateUserPaneControl(PyObject *_self, PyObject *_args)
                                     &outControl);
        if (_err != noErr) return PyMac_Error(_err);
        _res = Py_BuildValue("O&",
-                            CtlObj_WhichControl, outControl);
+                            CtlObj_New, outControl);
        return _res;
 }
 
@@ -4706,7 +4683,7 @@ static PyObject *Ctl_CreateEditTextControl(PyObject *_self, PyObject *_args)
                                     &outControl);
        if (_err != noErr) return PyMac_Error(_err);
        _res = Py_BuildValue("O&",
-                            CtlObj_WhichControl, outControl);
+                            CtlObj_New, outControl);
        return _res;
 }
 
@@ -4735,7 +4712,7 @@ static PyObject *Ctl_CreateStaticTextControl(PyObject *_self, PyObject *_args)
                                       &outControl);
        if (_err != noErr) return PyMac_Error(_err);
        _res = Py_BuildValue("O&",
-                            CtlObj_WhichControl, outControl);
+                            CtlObj_New, outControl);
        return _res;
 }
 
@@ -4761,7 +4738,7 @@ static PyObject *Ctl_CreateWindowHeaderControl(PyObject *_self, PyObject *_args)
                                         &outControl);
        if (_err != noErr) return PyMac_Error(_err);
        _res = Py_BuildValue("O&",
-                            CtlObj_WhichControl, outControl);
+                            CtlObj_New, outControl);
        return _res;
 }
 
@@ -4787,7 +4764,7 @@ static PyObject *Ctl_CreatePushButtonControl(PyObject *_self, PyObject *_args)
                                       &outControl);
        if (_err != noErr) return PyMac_Error(_err);
        _res = Py_BuildValue("O&",
-                            CtlObj_WhichControl, outControl);
+                            CtlObj_New, outControl);
        return _res;
 }
 
@@ -4819,7 +4796,7 @@ static PyObject *Ctl_CreateRadioButtonControl(PyObject *_self, PyObject *_args)
                                        &outControl);
        if (_err != noErr) return PyMac_Error(_err);
        _res = Py_BuildValue("O&",
-                            CtlObj_WhichControl, outControl);
+                            CtlObj_New, outControl);
        return _res;
 }
 
@@ -4851,7 +4828,7 @@ static PyObject *Ctl_CreateCheckBoxControl(PyObject *_self, PyObject *_args)
                                     &outControl);
        if (_err != noErr) return PyMac_Error(_err);
        _res = Py_BuildValue("O&",
-                            CtlObj_WhichControl, outControl);
+                            CtlObj_New, outControl);
        return _res;
 }
 
@@ -4892,7 +4869,7 @@ static PyObject *Ctl_CreatePopupButtonControl(PyObject *_self, PyObject *_args)
                                        &outControl);
        if (_err != noErr) return PyMac_Error(_err);
        _res = Py_BuildValue("O&",
-                            CtlObj_WhichControl, outControl);
+                            CtlObj_New, outControl);
        return _res;
 }
 
@@ -4915,7 +4892,7 @@ static PyObject *Ctl_CreateRadioGroupControl(PyObject *_self, PyObject *_args)
                                       &outControl);
        if (_err != noErr) return PyMac_Error(_err);
        _res = Py_BuildValue("O&",
-                            CtlObj_WhichControl, outControl);
+                            CtlObj_New, outControl);
        return _res;
 }
 
@@ -4953,7 +4930,7 @@ static PyObject *Ctl_CreateScrollingTextBoxControl(PyObject *_self, PyObject *_a
                                             &outControl);
        if (_err != noErr) return PyMac_Error(_err);
        _res = Py_BuildValue("O&",
-                            CtlObj_WhichControl, outControl);
+                            CtlObj_New, outControl);
        return _res;
 }
 
@@ -4979,7 +4956,30 @@ static PyObject *Ctl_CreateDataBrowserControl(PyObject *_self, PyObject *_args)
                                        &outControl);
        if (_err != noErr) return PyMac_Error(_err);
        _res = Py_BuildValue("O&",
-                            CtlObj_WhichControl, outControl);
+                            CtlObj_New, outControl);
+       return _res;
+}
+
+static PyObject *Ctl_FindControlUnderMouse(PyObject *_self, PyObject *_args)
+{
+       PyObject *_res = NULL;
+       ControlHandle _rv;
+       Point inWhere;
+       WindowPtr inWindow;
+       SInt16 outPart;
+#ifndef FindControlUnderMouse
+       PyMac_PRECHECK(FindControlUnderMouse);
+#endif
+       if (!PyArg_ParseTuple(_args, "O&O&",
+                             PyMac_GetPoint, &inWhere,
+                             WinObj_Convert, &inWindow))
+               return NULL;
+       _rv = FindControlUnderMouse(inWhere,
+                                   inWindow,
+                                   &outPart);
+       _res = Py_BuildValue("O&h",
+                            CtlObj_WhichControl, _rv,
+                            outPart);
        return _res;
 }
 
@@ -5011,8 +5011,6 @@ static PyMethodDef Ctl_methods[] = {
         "(WindowPtr theWindow, RgnHandle updateRegion) -> None"},
        {"FindControl", (PyCFunction)Ctl_FindControl, 1,
         "(Point testPoint, WindowPtr theWindow) -> (ControlPartCode _rv, ControlHandle theControl)"},
-       {"FindControlUnderMouse", (PyCFunction)Ctl_FindControlUnderMouse, 1,
-        "(Point inWhere, WindowPtr inWindow) -> (ControlHandle _rv, SInt16 outPart)"},
        {"IdleControls", (PyCFunction)Ctl_IdleControls, 1,
         "(WindowPtr inWindow) -> None"},
 
@@ -5090,6 +5088,8 @@ static PyMethodDef Ctl_methods[] = {
         "(WindowPtr window, Rect boundsRect, SInt16 contentResID, Boolean autoScroll, UInt32 delayBeforeAutoScroll, UInt32 delayBetweenAutoScroll, UInt16 autoScrollAmount) -> (ControlHandle outControl)"},
        {"CreateDataBrowserControl", (PyCFunction)Ctl_CreateDataBrowserControl, 1,
         "(WindowPtr window, Rect boundsRect, OSType style) -> (ControlHandle outControl)"},
+       {"FindControlUnderMouse", (PyCFunction)Ctl_FindControlUnderMouse, 1,
+        "(Point inWhere, WindowPtr inWindow) -> (ControlHandle _rv, SInt16 outPart)"},
        {"as_Control", (PyCFunction)Ctl_as_Control, 1,
         "(Handle h) -> (ControlHandle _rv)"},
        {NULL, NULL, 0}
index 992612c2a1aa5f4ad6bbaa6530f0ced561c98c5e..6ba024b8d2c8006ccafb8549862d2740e3a176ca 100644 (file)
@@ -1,3 +1,12 @@
+# FindControlUnderMouse() returns an existing control, not a new one,
+# so create this one by hand.
+f = Function(ExistingControlHandle, 'FindControlUnderMouse',
+    (Point, 'inWhere', InMode),
+    (WindowRef, 'inWindow', InMode),
+    (SInt16, 'outPart', OutMode),
+)
+functions.append(f)
+
 f = Function(ControlHandle, 'as_Control',
        (Handle, 'h', InMode))
 functions.append(f)
@@ -25,3 +34,12 @@ f = ManualGenerator("DisposeControl", DisposeControl_body)
 f.docstring = lambda : "() -> None"
 
 methods.append(f)
+
+# All CreateXxxXxxControl() functions return a new object in an output
+# parameter; these should however be managed by us (we're creating them
+# after all), so set the type to ControlRef.
+for f in functions:
+       if f.name.startswith("Create"):
+               v = f.argumentList[-1]
+               if v.type == ExistingControlHandle:
+                       v.type = ControlRef
index de7353cbfe657f455ab486f5d48c04c4e7a050e7..d78cb5fd98f3f8ca5418b2b80291cf42349d20d5 100644 (file)
@@ -45,6 +45,7 @@ class MyScanner(Scanner):
 
        def makeblacklistnames(self):
                return [
+                       'FindControlUnderMouse', # Generated manually, returns an existing control, not a new one.
                        'DisposeControl', # Generated manually
                        'KillControls', # Implied by close of dialog
                        'SetCtlAction',