Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit d080edd

Browse files
committed
Added dopendingevents call
Added asyncevents call to enable asynchronous event handling
1 parent 3f5aef7 commit d080edd

1 file changed

Lines changed: 31 additions & 0 deletions

File tree

Mac/Lib/FrameWork.py

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,13 +95,19 @@ class Application:
9595
"Application framework -- your application should be a derived class"
9696

9797
def __init__(self, nomenubar=0):
98+
self._doing_asyncevents = 0
9899
self.quitting = 0
99100
self.needmenubarredraw = 0
100101
self._windows = {}
101102
if nomenubar:
102103
self.menubar = None
103104
else:
104105
self.makemenubar()
106+
107+
def __del__(self):
108+
if self._doing_asyncevents:
109+
self._doing_asyncevents = 0
110+
MacOS.SetEventHandler()
105111

106112
def makemenubar(self):
107113
self.menubar = MenuBar(self)
@@ -158,6 +164,11 @@ def mainloop(self, mask = everyEvent, wait = 0):
158164

159165
schedparams = MacOS.SchedParams()
160166

167+
def dopendingevents(self, mask = everyEvent):
168+
"""dopendingevents - Handle all pending events"""
169+
while self.do1event(mask, wait=0):
170+
pass
171+
161172
def do1event(self, mask = everyEvent, wait = 0):
162173
ok, event = self.getevent(mask, wait)
163174
if IsDialogEvent(event):
@@ -179,6 +190,11 @@ def getevent(self, mask = everyEvent, wait = 0):
179190
return ok, event
180191

181192
def dispatch(self, event):
193+
# The following appears to be double work (already done in do1event)
194+
# but we need it for asynchronous event handling
195+
if IsDialogEvent(event):
196+
if self.do_dialogevent(event):
197+
return
182198
(what, message, when, where, modifiers) = event
183199
if eventname.has_key(what):
184200
name = "do_" + eventname[what]
@@ -190,6 +206,21 @@ def dispatch(self, event):
190206
handler = self.do_unknownevent
191207
handler(event)
192208

209+
def asyncevents(self, onoff):
210+
"""asyncevents - Set asynchronous event handling on or off"""
211+
old = self._doing_asyncevents
212+
if old:
213+
MacOS.SetEventHandler()
214+
apply(MacOS.SchedParams, self.schedparams)
215+
if onoff:
216+
MacOS.SetEventHandler(self.dispatch)
217+
doint, dummymask, benice, howoften, bgyield = \
218+
self.schedparams
219+
MacOS.SchedParams(doint, everyEvent, benice,
220+
howoften, bgyield)
221+
self._doing_asyncevents = onoff
222+
return old
223+
193224
def do_dialogevent(self, event):
194225
gotone, window, item = DialogSelect(event)
195226
if gotone:

0 commit comments

Comments
 (0)