blob: 3a85c1939e3e64a665b7b3d2f2e6a45b8f1c1ab0 [file] [log] [blame]
Guido van Rossum504b0bf1999-01-02 21:28:54 +00001from Tkinter import *
2
3class WindowList:
4
5 def __init__(self):
6 self.dict = {}
7
8 def add(self, window):
9 self.dict[str(window)] = window
10
11 def delete(self, window):
12 try:
13 del self.dict[str(window)]
14 except KeyError:
15 # Sometimes, destroy() is called twice
16 pass
17
18 def add_windows_to_menu(self, menu):
19 list = []
20 for key in self.dict.keys():
21 window = self.dict[key]
Guido van Rossumec119a31999-02-08 22:27:49 +000022 try:
23 title = window.get_title()
24 except TclError:
25 continue
Guido van Rossum504b0bf1999-01-02 21:28:54 +000026 list.append((title, window))
27 list.sort()
28 for title, window in list:
29 if title == "Python Shell":
30 # Hack -- until we have a better way to this
31 continue
32 menu.add_command(label=title, command=window.wakeup)
33
34registry = WindowList()
35
36def add_windows_to_menu(menu):
37 registry.add_windows_to_menu(menu)
38
39class ListedToplevel(Toplevel):
40
41 def __init__(self, master, **kw):
42 Toplevel.__init__(self, master, kw)
43 registry.add(self)
44
45 def destroy(self):
46 registry.delete(self)
47 Toplevel.destroy(self)
48
49 def get_title(self):
50 # Subclass can override
51 return self.wm_title()
52
53 def wakeup(self):
Guido van Rossum2403b0c1999-01-09 22:01:33 +000054 try:
Guido van Rossum36911a11999-01-18 15:18:57 +000055 if self.wm_state() == "iconic":
56 self.wm_deiconify()
57 else:
58 self.tkraise()
Guido van Rossum2403b0c1999-01-09 22:01:33 +000059 self.focus_set()
60 except TclError:
61 # This can happen when the window menu was torn off.
62 # Simply ignore it.
63 pass