]> granicus.if.org Git - python/commitdiff
Hack to close a window that is colorizing.
authorGuido van Rossum <guido@python.org>
Tue, 12 Jan 1999 22:09:57 +0000 (22:09 +0000)
committerGuido van Rossum <guido@python.org>
Tue, 12 Jan 1999 22:09:57 +0000 (22:09 +0000)
Tools/idle/ColorDelegator.py
Tools/idle/EditorWindow.py

index 357358fc48c038816a193f1fd8f986e8f7e75d2d..8e4667a9877f55acb3839288178815c276d7431b 100644 (file)
@@ -91,7 +91,9 @@ class ColorDelegator(Delegator):
             if __debug__: print "schedule colorizing"
             self.after_id = self.after(1, self.recolorize)
 
-    def close(self):
+    close_when_done = None # Window to be closed when done colorizing
+
+    def close(self, close_when_done=None):
         if self.after_id:
             after_id = self.after_id
             self.after_id = None
@@ -99,6 +101,11 @@ class ColorDelegator(Delegator):
             self.after_cancel(after_id)
         self.allow_colorizing = 0
         self.stop_colorizing = 1
+        if close_when_done:
+            if not self.colorizing:
+                close_when_done.destroy()
+            else:
+                self.close_when_done = close_when_done
 
     def toggle_colorize_event(self, event):
         if self.after_id:
@@ -140,6 +147,10 @@ class ColorDelegator(Delegator):
         if self.allow_colorizing and self.tag_nextrange("TODO", "1.0"):
             if __debug__: print "reschedule colorizing"
             self.after_id = self.after(1, self.recolorize)
+        if self.close_when_done:
+            top = self.close_when_done
+            self.close_when_done = None
+            top.destroy()
 
     def recolorize_main(self):
         next = "1.0"
index 8c0ba00e72a44e6730e4d63f3fc109796da5841f..f3dacdeb864bc0baaa7f64f088edde02783a992c 100644 (file)
@@ -408,7 +408,8 @@ class EditorWindow:
         text = self.text
         top = self.getlineno("@0,0")
         bot = self.getlineno("@0,65535")
-        if top == bot:
+        if top == bot and text.winfo_height() == 1:
+            # Geometry manager hasn't run yet
             height = int(text['height'])
             bot = top + height - 1
         return top, bot
@@ -429,15 +430,15 @@ class EditorWindow:
         self.top.tkraise()
         reply = self.maybesave()
         if reply != "cancel":
-            if self.color and self.color.colorizing:
-                self.color.close()
-                self.top.bell()
-                return "cancel"
             if self.close_hook:
                 self.close_hook()
+            colorizing = 0
             if self.color:
-                self.color.close()          # Cancel colorization
-            self.top.destroy()
+                colorizing = self.color.colorizing
+                doh = colorizing and self.top
+                self.color.close(doh) # Cancel colorization
+            if not colorizing:
+                self.top.destroy()
         return reply
 
     def load_extensions(self):