summaryrefslogtreecommitdiffstats
path: root/Mac
diff options
context:
space:
mode:
Diffstat (limited to 'Mac')
-rw-r--r--Mac/Lib/FrameWork.py31
1 files changed, 31 insertions, 0 deletions
diff --git a/Mac/Lib/FrameWork.py b/Mac/Lib/FrameWork.py
index caaf81c..fc643e4 100644
--- a/Mac/Lib/FrameWork.py
+++ b/Mac/Lib/FrameWork.py
@@ -95,6 +95,7 @@ class Application:
"Application framework -- your application should be a derived class"
def __init__(self, nomenubar=0):
+ self._doing_asyncevents = 0
self.quitting = 0
self.needmenubarredraw = 0
self._windows = {}
@@ -102,6 +103,11 @@ class Application:
self.menubar = None
else:
self.makemenubar()
+
+ def __del__(self):
+ if self._doing_asyncevents:
+ self._doing_asyncevents = 0
+ MacOS.SetEventHandler()
def makemenubar(self):
self.menubar = MenuBar(self)
@@ -158,6 +164,11 @@ class Application:
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):
ok, event = self.getevent(mask, wait)
if IsDialogEvent(event):
@@ -179,6 +190,11 @@ class Application:
return ok, 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
if eventname.has_key(what):
name = "do_" + eventname[what]
@@ -190,6 +206,21 @@ class Application:
handler = self.do_unknownevent
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):
gotone, window, item = DialogSelect(event)
if gotone: