diff -ur wxPython-4.0.7.post2/etg/region.py wxPython-4.0.7.post2-patched/etg/region.py --- wxPython-4.0.7.post2/etg/region.py 2019-11-11 19:54:31.000000000 -0700 +++ wxPython-4.0.7.post2-patched/etg/region.py 2022-08-09 12:27:58.196518224 -0600 @@ -88,11 +88,12 @@ c.mustHaveApp() c.find('operator++').ignore() - # SIP maps operator bool() to __int__, but Classic used __nonzero__. Does - # it make any difference either way? c.find('operator bool').ignore() c.addCppMethod('int', '__nonzero__', '()', 'return (int)self->operator bool();', 'Returns true while there are still rectangles available in the iteration.') + c.addCppMethod('int', '__bool__', '()', 'return (int)self->operator bool();', + 'Returns true while there are still rectangles available in the iteration.') + c.addCppMethod('void', 'Next', '()', 'self->operator++();', 'Move the iterator to the next rectangle in the region.') diff -ur wxPython-4.0.7.post2/etg/windowid.py wxPython-4.0.7.post2-patched/etg/windowid.py --- wxPython-4.0.7.post2/etg/windowid.py 2019-11-11 19:54:31.000000000 -0700 +++ wxPython-4.0.7.post2-patched/etg/windowid.py 2022-08-09 12:31:47.557488273 -0600 @@ -53,12 +53,12 @@ MethodDef(name='wxWindowIDRef', className='wxWindowIDRef', isCtor=True, briefDoc='Create reference from an ID', items=[ ParamDef(type='int', name='id') ]), - + MethodDef(name='wxWindowIDRef', className='wxWindowIDRef', isCtor=True, briefDoc='Copy an ID reference', items=[ ParamDef(type='const wxWindowIDRef&', name='idref') ]), ]), - + MethodDef(name='~wxWindowIDRef', className='wxWindowIDRef', isDtor=True), MethodDef(type='int', name='GetValue', @@ -73,11 +73,13 @@ """) klass.addCppMethod('int', '__int__', '()', - doc="Alias for GetValue allowing the IDRef to be passed as the WindowID parameter when creating widgets or etc.", - body="""\ - return self->GetValue(); - """) - + doc="Alias for GetValue allowing the IDRef to be passed as the WindowID parameter when creating widgets or other places an integer type is needed.", + body="return self->GetValue();") + klass.addCppMethod('int', '__index__', '()', + doc="See :meth:`__int__`", + body="return self->GetValue();") + + klass.addCppMethod('bool', '__eq__', '(wxWindowID id)', "return self->GetValue() == id;") klass.addCppMethod('bool', '__ne__', '(wxWindowID id)', "return self->GetValue() != id;") klass.addCppMethod('bool', '__lt__', '(wxWindowID id)', "return self->GetValue() < id;") @@ -92,17 +94,17 @@ # and finish it up by adding it to the module module.addItem(klass) - # Now, let's add a new Python function to the global scope that reserves an - # ID (or range) and returns a ref object for it. - module.addPyFunction('NewIdRef', '(count=1)', + # Now, let's add a new Python function to the global scope that reserves an + # ID (or range) and returns a ref object for it. + module.addPyFunction('NewIdRef', '(count=1)', doc="""\ - Reserves a new Window ID (or range of WindowIDs) and returns a - :class:`wx.WindowIDRef` object (or list of them) that will help + Reserves a new Window ID (or range of WindowIDs) and returns a + :class:`wx.WindowIDRef` object (or list of them) that will help manage the reservation of that ID. - This function is intended to be a drop-in replacement of the old - and deprecated :func:`wx.NewId` function, with the added benefit - that the ID should never conflict with an in-use ID or other IDs + This function is intended to be a drop-in replacement of the old + and deprecated :func:`wx.NewId` function, with the added benefit + that the ID should never conflict with an in-use ID or other IDs generated by this function. """, body="""\ diff -ur wxPython-4.0.7.post2/unittests/test_windowid.py wxPython-4.0.7.post2-patched/unittests/test_windowid.py --- wxPython-4.0.7.post2/unittests/test_windowid.py 2022-08-09 12:26:19.466530951 -0600 +++ wxPython-4.0.7.post2-patched/unittests/test_windowid.py 2022-08-09 12:32:45.293480641 -0600 @@ -75,6 +75,7 @@ val = ref1 <= ref2 assert type(val) == bool + def test_WindowIDRef02(self): d = {wx.NewIdRef(): 'one', wx.NewIdRef(): 'two'} @@ -82,6 +83,24 @@ for k in keys: val = d[k] + + def test_WindowIDRef03(self): + # Ensure wx.WindowIDRef can be converted to int without warning when + # making a call to warrped method. In Py3.8+ this means there needs to + # be an __index__ method. + + # Turn warnings into exceptions so this test will fail if there is + # a warning + import warnings + warnings.simplefilter('error') + + wid = wx.NewIdRef() + assert isinstance(wid, wx.WindowIDRef) + + b = wx.Button(self.frame, wid, 'button') + assert b.GetId() == wid.GetId() + + #---------------------------------------------------------------------------