diff options
author | Guido van Rossum <guido@python.org> | 1999-02-17 17:19:37 (GMT) |
---|---|---|
committer | Guido van Rossum <guido@python.org> | 1999-02-17 17:19:37 (GMT) |
commit | 5437ddfa36f785cd8d2a68dc35297173d88ca67c (patch) | |
tree | 616987c7c7f338cdf54646cb7d9e97f90bcdb005 /Tools | |
parent | a79a93ff7334cb162bff1c0423b124f3dc601ebf (diff) | |
download | cpython-5437ddfa36f785cd8d2a68dc35297173d88ca67c.zip cpython-5437ddfa36f785cd8d2a68dc35297173d88ca67c.tar.gz cpython-5437ddfa36f785cd8d2a68dc35297173d88ca67c.tar.bz2 |
Support callbacks to patch up Windows menus everywhere.
Diffstat (limited to 'Tools')
-rw-r--r-- | Tools/idle/WindowList.py | 27 |
1 files changed, 25 insertions, 2 deletions
diff --git a/Tools/idle/WindowList.py b/Tools/idle/WindowList.py index 3a85c19..b820089 100644 --- a/Tools/idle/WindowList.py +++ b/Tools/idle/WindowList.py @@ -4,11 +4,14 @@ class WindowList: def __init__(self): self.dict = {} + self.callbacks = [] def add(self, window): + window.after_idle(self.call_callbacks) self.dict[str(window)] = window def delete(self, window): + window.after_idle(self.call_callbacks) try: del self.dict[str(window)] except KeyError: @@ -31,10 +34,30 @@ class WindowList: continue menu.add_command(label=title, command=window.wakeup) + def register_callback(self, callback): + self.callbacks.append(callback) + + def unregister_callback(self, callback): + try: + self.callback.remove(callback) + except: + pass + + def call_callbacks(self): + for callback in self.callbacks: + try: + callback() + except: + print "warning: callback failed in WindowList", \ + sys.exc_type, ":", sys.exc_value + registry = WindowList() -def add_windows_to_menu(menu): - registry.add_windows_to_menu(menu) +add_windows_to_menu = registry.add_windows_to_menu +register_callback = registry.register_callback +unregister_callback = registry.unregister_callback +call_callbacks = registry.call_callbacks + class ListedToplevel(Toplevel): |