git-gui: Save geometry before the window layout is damaged
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
b6047c5a81
.
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>
This commit is contained in:
parent
b2f3bb1b66
commit
39fa2a983d
@ -1622,7 +1622,7 @@ unset browser doc_path doc_url
|
|||||||
|
|
||||||
# -- Standard bindings
|
# -- 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-Q> do_quit
|
bind all <$M1B-Key-Q> do_quit
|
||||||
bind all <$M1B-Key-w> {destroy [winfo toplevel %W]}
|
bind all <$M1B-Key-w> {destroy [winfo toplevel %W]}
|
||||||
|
@ -289,7 +289,6 @@ constructor new {i_commit i_path} {
|
|||||||
|
|
||||||
bind $w_cviewer <Button-1> [list focus $w_cviewer]
|
bind $w_cviewer <Button-1> [list focus $w_cviewer]
|
||||||
bind $top <Visibility> [list focus $top]
|
bind $top <Visibility> [list focus $top]
|
||||||
bind $w_file <Destroy> [list delete_this $this]
|
|
||||||
|
|
||||||
grid configure $w.header -sticky ew
|
grid configure $w.header -sticky ew
|
||||||
grid configure $w.file_pane -sticky nsew
|
grid configure $w.file_pane -sticky nsew
|
||||||
|
@ -70,7 +70,6 @@ constructor new {commit} {
|
|||||||
bind $w_list <Right> break
|
bind $w_list <Right> break
|
||||||
|
|
||||||
bind $w_list <Visibility> [list focus $w_list]
|
bind $w_list <Visibility> [list focus $w_list]
|
||||||
bind $w_list <Destroy> [list delete_this $this]
|
|
||||||
set w $w_list
|
set w $w_list
|
||||||
_ls $this $browser_commit
|
_ls $this $browser_commit
|
||||||
return $this
|
return $this
|
||||||
|
@ -120,10 +120,21 @@ proc delete_this {{t {}}} {
|
|||||||
if {[namespace exists $t]} {namespace delete $t}
|
if {[namespace exists $t]} {namespace delete $t}
|
||||||
}
|
}
|
||||||
|
|
||||||
proc make_toplevel {t w} {
|
proc make_toplevel {t w args} {
|
||||||
upvar $t top $w pfx
|
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 .]} {
|
if {[winfo ismapped .]} {
|
||||||
upvar this this
|
|
||||||
regsub -all {::} $this {__} w
|
regsub -all {::} $this {__} w
|
||||||
set top .$w
|
set top .$w
|
||||||
set pfx $top
|
set pfx $top
|
||||||
@ -132,6 +143,13 @@ proc make_toplevel {t w} {
|
|||||||
set top .
|
set top .
|
||||||
set pfx {}
|
set pfx {}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if {$autodelete} {
|
||||||
|
wm protocol $top WM_DELETE_WINDOW "
|
||||||
|
[list delete_this $this]
|
||||||
|
[list destroy $top]
|
||||||
|
"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -17,7 +17,7 @@ constructor new {short_title long_title} {
|
|||||||
|
|
||||||
method _init {} {
|
method _init {} {
|
||||||
global M1B
|
global M1B
|
||||||
make_toplevel top w
|
make_toplevel top w -autodelete 0
|
||||||
wm title $top "[appname] ([reponame]): $t_short"
|
wm title $top "[appname] ([reponame]): $t_short"
|
||||||
set console_cr 1.0
|
set console_cr 1.0
|
||||||
|
|
||||||
|
@ -125,7 +125,8 @@ Please select fewer branches. To merge more than 15 branches, merge the branche
|
|||||||
set cons [console::new "Merge" $msg]
|
set cons [console::new "Merge" $msg]
|
||||||
console::exec $cons $cmd \
|
console::exec $cons $cmd \
|
||||||
[namespace code [list _finish $revcnt $cons]]
|
[namespace code [list _finish $revcnt $cons]]
|
||||||
bind $w <Destroy> {}
|
|
||||||
|
wm protocol $w WM_DELETE_WINDOW {}
|
||||||
destroy $w
|
destroy $w
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -250,7 +251,7 @@ proc dialog {} {
|
|||||||
bind $w <$M1B-Key-Return> $_start
|
bind $w <$M1B-Key-Return> $_start
|
||||||
bind $w <Visibility> "grab $w; focus $w.source.l"
|
bind $w <Visibility> "grab $w; focus $w.source.l"
|
||||||
bind $w <Key-Escape> "unlock_index;destroy $w"
|
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"
|
wm title $w "[appname] ([reponame]): Merge"
|
||||||
tkwait window $w
|
tkwait window $w
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user