diff --git a/git-gui.sh b/git-gui.sh index e33ee03bc0..3237f3d596 100755 --- a/git-gui.sh +++ b/git-gui.sh @@ -494,7 +494,8 @@ proc rescan {after {honor_trustmtime 1}} { if {![$ui_comm edit modified] || [string trim [$ui_comm get 0.0 end]] eq {}} { - if {[load_message GITGUI_MSG]} { + if {[string match amend* $commit_type]} { + } elseif {[load_message GITGUI_MSG]} { } elseif {[load_message MERGE_MSG]} { } elseif {[load_message SQUASH_MSG]} { } @@ -1657,7 +1658,7 @@ unset browser doc_path doc_url # -- Standard bindings # -bind . {if {{%W} eq {.}} do_quit} +wm protocol . WM_DELETE_WINDOW do_quit bind all <$M1B-Key-q> do_quit bind all <$M1B-Key-Q> do_quit bind all <$M1B-Key-w> {destroy [winfo toplevel %W]} diff --git a/lib/blame.tcl b/lib/blame.tcl index 98687c77da..139171d39e 100644 --- a/lib/blame.tcl +++ b/lib/blame.tcl @@ -289,7 +289,6 @@ constructor new {i_commit i_path} { bind $w_cviewer [list focus $w_cviewer] bind $top [list focus $top] - bind $w_file [list delete_this $this] grid configure $w.header -sticky ew grid configure $w.file_pane -sticky nsew diff --git a/lib/branch_rename.tcl b/lib/branch_rename.tcl index 54c72b980c..405101637f 100644 --- a/lib/branch_rename.tcl +++ b/lib/branch_rename.tcl @@ -60,7 +60,6 @@ constructor dialog {} { $w.rename.newname_t icursor end focus $w.rename.newname_t " - bind $w.header [list delete_this $this] tkwait window $w } diff --git a/lib/browser.tcl b/lib/browser.tcl index fd86b11217..3d6341bcc5 100644 --- a/lib/browser.tcl +++ b/lib/browser.tcl @@ -70,7 +70,6 @@ constructor new {commit} { bind $w_list break bind $w_list [list focus $w_list] - bind $w_list [list delete_this $this] set w $w_list _ls $this $browser_commit return $this diff --git a/lib/class.tcl b/lib/class.tcl index 72494c1a1e..9d298d0dcc 100644 --- a/lib/class.tcl +++ b/lib/class.tcl @@ -120,10 +120,21 @@ proc delete_this {{t {}}} { if {[namespace exists $t]} {namespace delete $t} } -proc make_toplevel {t w} { - upvar $t top $w pfx +proc make_toplevel {t w args} { + upvar $t top $w pfx this this + + if {[llength $args] % 2} { + error "make_toplevel topvar winvar {options}" + } + set autodelete 1 + foreach {name value} $args { + switch -exact -- $name { + -autodelete {set autodelete $value} + default {error "unsupported option $name"} + } + } + if {[winfo ismapped .]} { - upvar this this regsub -all {::} $this {__} w set top .$w set pfx $top @@ -132,6 +143,13 @@ proc make_toplevel {t w} { set top . set pfx {} } + + if {$autodelete} { + wm protocol $top WM_DELETE_WINDOW " + [list delete_this $this] + [list destroy $top] + " + } } diff --git a/lib/console.tcl b/lib/console.tcl index 8c112f3a89..ce25d92cac 100644 --- a/lib/console.tcl +++ b/lib/console.tcl @@ -17,7 +17,7 @@ constructor new {short_title long_title} { method _init {} { global M1B - make_toplevel top w + make_toplevel top w -autodelete 0 wm title $top "[appname] ([reponame]): $t_short" set console_cr 1.0 diff --git a/lib/merge.tcl b/lib/merge.tcl index 24ed24b3d0..ae0389df5b 100644 --- a/lib/merge.tcl +++ b/lib/merge.tcl @@ -125,7 +125,8 @@ Please select fewer branches. To merge more than 15 branches, merge the branche set cons [console::new "Merge" $msg] console::exec $cons $cmd \ [namespace code [list _finish $revcnt $cons]] - bind $w {} + + wm protocol $w WM_DELETE_WINDOW {} destroy $w } @@ -250,7 +251,7 @@ proc dialog {} { bind $w <$M1B-Key-Return> $_start bind $w "grab $w; focus $w.source.l" bind $w "unlock_index;destroy $w" - bind $w unlock_index + wm protocol $w WM_DELETE_WINDOW "unlock_index;destroy $w" wm title $w "[appname] ([reponame]): Merge" tkwait window $w } diff --git a/lib/remote_branch_delete.tcl b/lib/remote_branch_delete.tcl index bc39581b86..b83e1b6315 100644 --- a/lib/remote_branch_delete.tcl +++ b/lib/remote_branch_delete.tcl @@ -131,7 +131,6 @@ constructor dialog {} { bind $w <$M1B-Key-R> [cb _rescan] bind $w [cb _delete] bind $w [list destroy $w] - bind $w.header [list delete_this $this] return $w }