summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJack Jansen <jack.jansen@cwi.nl>2000-08-25 22:25:54 (GMT)
committerJack Jansen <jack.jansen@cwi.nl>2000-08-25 22:25:54 (GMT)
commitb8c4c7b37e6a9e8b08160c264bfc09f6fa239c54 (patch)
tree130f8a5765193c7ffb5acd496944799fd8b667ac
parent8748a0b65408b0c4f66b7f428b0400a975180bc4 (diff)
downloadcpython-b8c4c7b37e6a9e8b08160c264bfc09f6fa239c54.zip
cpython-b8c4c7b37e6a9e8b08160c264bfc09f6fa239c54.tar.gz
cpython-b8c4c7b37e6a9e8b08160c264bfc09f6fa239c54.tar.bz2
Added routine DlgObj_ConvertToWindow().
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:-(
-rw-r--r--Mac/Modules/dlg/Dlgmodule.c13
-rw-r--r--Mac/Modules/dlg/dlgscan.py4
-rw-r--r--Mac/Modules/dlg/dlgsupport.py28
3 files changed, 43 insertions, 2 deletions
diff --git a/Mac/Modules/dlg/Dlgmodule.c b/Mac/Modules/dlg/Dlgmodule.c
index 33ce390..b686839 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 e49dbdd..3092dec 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 bcf82ff..f243cc1 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)