]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Added routine DlgObj_ConvertToWindow().
authorJack Jansen <jack.jansen@cwi.nl>
Fri, 25 Aug 2000 22:25:54 +0000 (22:25 +0000)
committerJack Jansen <jack.jansen@cwi.nl>
Fri, 25 Aug 2000 22:25:54 +0000 (22:25 +0000)
GetDialogWindow() returns an existing window.
Added a comment that the methodchain Dialogs->Windows is suspect under Carbon/MacOSX, but we need it under Carbon. No solution yet:-(

Mac/Modules/dlg/Dlgmodule.c
Mac/Modules/dlg/dlgscan.py
Mac/Modules/dlg/dlgsupport.py

index 33ce3909999c78442ec88cea81535af5447a1d68..b6868398c48446931c47278f7839329fbccf2226 100644 (file)
@@ -89,7 +89,18 @@ static pascal void Dlg_UnivUserItemProc(DialogPtr dialog,
        return;
 }
 
+#if 1
+/*
+** Treating DialogObjects as WindowObjects is (I think) illegal under Carbon.
+** However, as they are still identical under MacOS9 Carbon this is a problem, even
+** if we neatly call GetDialogWindow() at the right places: there's one refcon field
+** and it points to the DialogObject, so WinObj_WhichWindow will smartly return the
+** dialog object, and therefore we still don't have a WindowObject.
+** I'll leave the chaining code in place for now, with this comment to warn the
+** unsuspecting victims (i.e. me, probably, in a few weeks:-)
+*/
 extern PyMethodChain WinObj_chain;
+#endif
 
 static PyObject *Dlg_Error;
 
@@ -655,7 +666,7 @@ static PyObject *DlgObj_GetDialogWindow(_self, _args)
                return NULL;
        _rv = GetDialogWindow(_self->ob_itself);
        _res = Py_BuildValue("O&",
-                            WinObj_New, _rv);
+                            WinObj_WhichWindow, _rv);
        return _res;
 }
 
index e49dbdd8510ad43d1eacc540d983ceb764e2319e..3092deceff758021a4bfda595e4cafaedbef128c 100644 (file)
@@ -91,6 +91,10 @@ class MyScanner(Scanner):
                         [("ExistingDialogPtr", "*", "*")]),
                        ([("DialogRef", "*", "OutMode")],
                         [("ExistingDialogPtr", "*", "*")]),
+                       ([("WindowPtr", "*", "OutMode")],
+                        [("ExistingWindowPtr", "*", "*")]),
+                       ([("WindowPtr", "*", "ReturnMode")],
+                        [("ExistingWindowPtr", "*", "*")]),
                        ]
 
        def writeinitialdefs(self):
index bcf82ffc48e0264ee02f15ed2916c5dc6361bf93..f243cc1b31a4e508dcf36e497b6805e6ca7fb8db 100644 (file)
@@ -110,7 +110,31 @@ static pascal void Dlg_UnivUserItemProc(DialogPtr dialog,
        return;
 }
 
+#if 1
+/*
+** Treating DialogObjects as WindowObjects is (I think) illegal under Carbon.
+** However, as they are still identical under MacOS9 Carbon this is a problem, even
+** if we neatly call GetDialogWindow() at the right places: there's one refcon field
+** and it points to the DialogObject, so WinObj_WhichWindow will smartly return the
+** dialog object, and therefore we still don't have a WindowObject.
+** I'll leave the chaining code in place for now, with this comment to warn the
+** unsuspecting victims (i.e. me, probably, in a few weeks:-)
+*/
 extern PyMethodChain WinObj_chain;
+#endif
+"""
+
+finalstuff = finalstuff + """
+/* Return the WindowPtr corresponding to a DialogObject */
+
+WindowPtr
+DlgObj_ConvertToWindow(self)
+       PyObject *self;
+{
+       if ( DlgObj_Check(self) )
+               return GetDialogWindow(((DialogObject *)self)->ob_itself);
+       return NULL;
+}
 """
 
 
@@ -118,6 +142,8 @@ extern PyMethodChain WinObj_chain;
 class MyObjectDefinition(GlobalObjectDefinition):
        def __init__(self, name, prefix = None, itselftype = None):
                GlobalObjectDefinition.__init__(self, name, prefix, itselftype)
+## This won't work in Carbon, so we disable it for all MacPythons:-(
+## But see the comment above:-((
                self.basechain = "&WinObj_chain"
        def outputInitStructMembers(self):
                GlobalObjectDefinition.outputInitStructMembers(self)
@@ -152,7 +178,7 @@ for f in methods: object.add(f)
 # Some methods that are currently macro's in C, but will be real routines
 # in MacOS 8.
 
-f = Method(WindowPtr, 'GetDialogWindow', (DialogRef, 'dialog', InMode))
+f = Method(ExistingWindowPtr, 'GetDialogWindow', (DialogRef, 'dialog', InMode))
 object.add(f)
 f = Method(SInt16, 'GetDialogDefaultItem', (DialogRef, 'dialog', InMode))
 object.add(f)