Code

git-gui: Don't delete console window namespaces too early
authorShawn O. Pearce <spearce@spearce.org>
Wed, 26 Sep 2007 18:05:54 +0000 (14:05 -0400)
committerShawn O. Pearce <spearce@spearce.org>
Wed, 26 Sep 2007 18:06:08 +0000 (14:06 -0400)
If the console finishes displaying its output and is "done" but
needs to draw a scrollbar to show the final output messages it
is possible for Tk to delete the window namespace before it does
the text widget updates, which means we are unable to add the
horizontal or vertical scrollbar to the window when the text
widget decides it cannot draw all glyphs on screen.

We need to delay deleting the window namespace until we know
the window is not going to ever be used again.  This occurs if
we are done receiving output, the command is successful and the
window is closed, or if the window is open and the user chooses
to close the window after the command has completed.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
lib/console.tcl

index cde9a092686ec0acb847c05e0166f07df954f579..c0e6fb3cc2fe9cb66e114d4998b2e91d65548980 100644 (file)
@@ -179,23 +179,26 @@ method insert {txt} {
 method done {ok} {
        if {$ok} {
                if {[winfo exists $w.m.s]} {
+                       bind $w.m.s <Destroy> [list delete_this $this]
                        $w.m.s conf -background green -text [mc "Success"]
                        if {$is_toplevel} {
                                $w.ok conf -state normal
                                focus $w.ok
                        }
+               } else {
+                       delete_this
                }
        } else {
                if {![winfo exists $w.m.s]} {
                        _init $this
                }
+               bind $w.m.s <Destroy> [list delete_this $this]
                $w.m.s conf -background red -text [mc "Error: Command Failed"]
                if {$is_toplevel} {
                        $w.ok conf -state normal
                        focus $w.ok
                }
        }
-       delete_this
 }
 
 method _sb_set {sb orient first last} {