diff --git a/Mac/Modules/dlg/Dlgmodule.c b/Mac/Modules/dlg/Dlgmodule.c index 33ce3909999..b6868398c48 100644 --- a/Mac/Modules/dlg/Dlgmodule.c +++ b/Mac/Modules/dlg/Dlgmodule.c @@ -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; } diff --git a/Mac/Modules/dlg/dlgscan.py b/Mac/Modules/dlg/dlgscan.py index e49dbdd8510..3092deceff7 100644 --- a/Mac/Modules/dlg/dlgscan.py +++ b/Mac/Modules/dlg/dlgscan.py @@ -91,6 +91,10 @@ class MyScanner(Scanner): [("ExistingDialogPtr", "*", "*")]), ([("DialogRef", "*", "OutMode")], [("ExistingDialogPtr", "*", "*")]), + ([("WindowPtr", "*", "OutMode")], + [("ExistingWindowPtr", "*", "*")]), + ([("WindowPtr", "*", "ReturnMode")], + [("ExistingWindowPtr", "*", "*")]), ] def writeinitialdefs(self): diff --git a/Mac/Modules/dlg/dlgsupport.py b/Mac/Modules/dlg/dlgsupport.py index bcf82ffc48e..f243cc1b31a 100644 --- a/Mac/Modules/dlg/dlgsupport.py +++ b/Mac/Modules/dlg/dlgsupport.py @@ -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)