Kaydet (Commit) d080eddf authored tarafından Jack Jansen's avatar Jack Jansen

Added dopendingevents call

Added asyncevents call to enable asynchronous event handling
üst 3f5aef7f
...@@ -95,6 +95,7 @@ class Application: ...@@ -95,6 +95,7 @@ class Application:
"Application framework -- your application should be a derived class" "Application framework -- your application should be a derived class"
def __init__(self, nomenubar=0): def __init__(self, nomenubar=0):
self._doing_asyncevents = 0
self.quitting = 0 self.quitting = 0
self.needmenubarredraw = 0 self.needmenubarredraw = 0
self._windows = {} self._windows = {}
...@@ -102,6 +103,11 @@ class Application: ...@@ -102,6 +103,11 @@ class Application:
self.menubar = None self.menubar = None
else: else:
self.makemenubar() self.makemenubar()
def __del__(self):
if self._doing_asyncevents:
self._doing_asyncevents = 0
MacOS.SetEventHandler()
def makemenubar(self): def makemenubar(self):
self.menubar = MenuBar(self) self.menubar = MenuBar(self)
...@@ -158,6 +164,11 @@ class Application: ...@@ -158,6 +164,11 @@ class Application:
schedparams = MacOS.SchedParams() schedparams = MacOS.SchedParams()
def dopendingevents(self, mask = everyEvent):
"""dopendingevents - Handle all pending events"""
while self.do1event(mask, wait=0):
pass
def do1event(self, mask = everyEvent, wait = 0): def do1event(self, mask = everyEvent, wait = 0):
ok, event = self.getevent(mask, wait) ok, event = self.getevent(mask, wait)
if IsDialogEvent(event): if IsDialogEvent(event):
...@@ -179,6 +190,11 @@ class Application: ...@@ -179,6 +190,11 @@ class Application:
return ok, event return ok, event
def dispatch(self, event): def dispatch(self, event):
# The following appears to be double work (already done in do1event)
# but we need it for asynchronous event handling
if IsDialogEvent(event):
if self.do_dialogevent(event):
return
(what, message, when, where, modifiers) = event (what, message, when, where, modifiers) = event
if eventname.has_key(what): if eventname.has_key(what):
name = "do_" + eventname[what] name = "do_" + eventname[what]
...@@ -190,6 +206,21 @@ class Application: ...@@ -190,6 +206,21 @@ class Application:
handler = self.do_unknownevent handler = self.do_unknownevent
handler(event) handler(event)
def asyncevents(self, onoff):
"""asyncevents - Set asynchronous event handling on or off"""
old = self._doing_asyncevents
if old:
MacOS.SetEventHandler()
apply(MacOS.SchedParams, self.schedparams)
if onoff:
MacOS.SetEventHandler(self.dispatch)
doint, dummymask, benice, howoften, bgyield = \
self.schedparams
MacOS.SchedParams(doint, everyEvent, benice,
howoften, bgyield)
self._doing_asyncevents = onoff
return old
def do_dialogevent(self, event): def do_dialogevent(self, event):
gotone, window, item = DialogSelect(event) gotone, window, item = DialogSelect(event)
if gotone: if gotone:
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment