]> granicus.if.org Git - python/commitdiff
Add _close() method that does the actual cleanup (close() asks the
authorGuido van Rossum <guido@python.org>
Fri, 25 Jun 1999 16:06:29 +0000 (16:06 +0000)
committerGuido van Rossum <guido@python.org>
Fri, 25 Jun 1999 16:06:29 +0000 (16:06 +0000)
user what they want first if there's unsaved stuff, and may cancel).
It closes more than before.

Add unload_extensions() method to unload all extensions; called from
_close().  It calls an extension's close() method if it has one.

Tools/idle/EditorWindow.py

index 0f23b1594696d8792b4dc61a094c5e9c07cce8e1..007a99b571635310dd1b4f4bdf5010b3635d578c 100644 (file)
@@ -462,22 +462,38 @@ class EditorWindow:
         self.top.tkraise()
         reply = self.maybesave()
         if reply != "cancel":
-            WindowList.unregister_callback(self.postwindowsmenu)
-            if self.close_hook:
-                self.close_hook()
-            colorizing = 0
-            if self.color:
-                colorizing = self.color.colorizing
-                doh = colorizing and self.top
-                self.color.close(doh) # Cancel colorization
-            if not colorizing:
-                self.top.destroy()
+            self._close()
         return reply
 
+    def _close(self):
+        WindowList.unregister_callback(self.postwindowsmenu)
+        if self.close_hook:
+            self.close_hook()
+        self.flist = None
+        colorizing = 0
+        self.unload_extensions()
+        self.io.close(); self.io = None
+        self.undo = None # XXX
+        if self.color:
+            colorizing = self.color.colorizing
+            doh = colorizing and self.top
+            self.color.close(doh) # Cancel colorization
+        self.text = None
+        self.vars = None
+        self.per.close(); self.per = None
+        if not colorizing:
+            self.top.destroy()
+
     def load_extensions(self):
         self.extensions = {}
         self.load_standard_extensions()
 
+    def unload_extensions(self):
+        for ins in self.extensions.values():
+            if hasattr(ins, "close"):
+                ins.close()
+        self.extensions = {}
+
     def load_standard_extensions(self):
         for name in self.get_standard_extension_names():
             try: