Skip to content

Commit

Permalink
git-gui: Save geometry before the window layout is damaged
Browse files Browse the repository at this point in the history
Because Tk does not assure us the order that it will process
children in before it destroys the main toplevel we cannot safely
save our geometry data during a "bind . <Destroy>" event binding.
The geometry may have already changed as a result of a one or
more children being removed from the layout.  This was pointed
out in gitk by Mark Levedahl, and patched over there by commit
b6047c5.

So we now also use "wm protocol . WM_DELETE_WINDOW" to detect when
the window is closed by the user, and forward that close event to
our main do_quit routine.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
  • Loading branch information
Shawn O. Pearce committed Jun 12, 2007
1 parent b2f3bb1 commit 39fa2a9
Show file tree
Hide file tree
Showing 6 changed files with 26 additions and 9 deletions.
2 changes: 1 addition & 1 deletion git-gui.sh
Original file line number Diff line number Diff line change
Expand Up @@ -1622,7 +1622,7 @@ unset browser doc_path doc_url

# -- Standard bindings
#
bind . <Destroy> {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]}
Expand Down
1 change: 0 additions & 1 deletion lib/blame.tcl
Original file line number Diff line number Diff line change
Expand Up @@ -289,7 +289,6 @@ constructor new {i_commit i_path} {

bind $w_cviewer <Button-1> [list focus $w_cviewer]
bind $top <Visibility> [list focus $top]
bind $w_file <Destroy> [list delete_this $this]

grid configure $w.header -sticky ew
grid configure $w.file_pane -sticky nsew
Expand Down
1 change: 0 additions & 1 deletion lib/browser.tcl
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,6 @@ constructor new {commit} {
bind $w_list <Right> break

bind $w_list <Visibility> [list focus $w_list]
bind $w_list <Destroy> [list delete_this $this]
set w $w_list
_ls $this $browser_commit
return $this
Expand Down
24 changes: 21 additions & 3 deletions lib/class.tcl
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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]
"
}
}


Expand Down
2 changes: 1 addition & 1 deletion lib/console.tcl
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
5 changes: 3 additions & 2 deletions lib/merge.tcl
Original file line number Diff line number Diff line change
Expand Up @@ -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 <Destroy> {}

wm protocol $w WM_DELETE_WINDOW {}
destroy $w
}

Expand Down Expand Up @@ -250,7 +251,7 @@ proc dialog {} {
bind $w <$M1B-Key-Return> $_start
bind $w <Visibility> "grab $w; focus $w.source.l"
bind $w <Key-Escape> "unlock_index;destroy $w"
bind $w <Destroy> unlock_index
wm protocol $w WM_DELETE_WINDOW "unlock_index;destroy $w"
wm title $w "[appname] ([reponame]): Merge"
tkwait window $w
}
Expand Down

0 comments on commit 39fa2a9

Please sign in to comment.