Merge branch 'js/persist-ref-window-geometry'

* js/persist-ref-window-geometry:
  gitk: persist position and size of the Tags and Heads window
  Revert "gitk: Only restore window size from ~/.gitk, not position"
main
Johannes Sixt 2025-11-26 16:02:23 +01:00
commit bd3fd7e77c
1 changed files with 22 additions and 15 deletions

37
gitk
View File

@ -2131,12 +2131,14 @@ proc ttk_toplevel {w args} {
return $w return $w
} }


proc make_transient {window origin} { proc make_transient {window origin {geometry ""}} {
wm transient $window $origin wm transient $window $origin


# Windows fails to place transient windows normally, so if {$geometry ne ""} {
# schedule a callback to center them on the parent. after idle [list wm geometry $window $geometry]
if {[tk windowingsystem] eq {win32}} { } elseif {[tk windowingsystem] eq {win32}} {
# Windows fails to place transient windows normally, so
# schedule a callback to center them on the parent.
after idle [list tk::PlaceWindow $window widget $origin] after idle [list tk::PlaceWindow $window widget $origin]
} }
} }
@ -2723,17 +2725,9 @@ proc makewindow {} {
.pwbottom add .bright .pwbottom add .bright
.ctop add .pwbottom .ctop add .pwbottom


# restore window width & height if known # restore window position if known
if {[info exists geometry(main)]} { if {[info exists geometry(main)]} {
if {[scan $geometry(main) "%dx%d" w h] >= 2} { wm geometry . "$geometry(main)"
if {$w > [winfo screenwidth .]} {
set w [winfo screenwidth .]
}
if {$h > [winfo screenheight .]} {
set h [winfo screenheight .]
}
wm geometry . "${w}x$h"
}
} }


if {[info exists geometry(state)] && $geometry(state) eq "zoomed"} { if {[info exists geometry(state)] && $geometry(state) eq "zoomed"} {
@ -3073,6 +3067,11 @@ proc savestuff {w} {
puts $f "set geometry(pwsash1) \"[.tf.histframe.pwclist sashpos 1] 1\"" puts $f "set geometry(pwsash1) \"[.tf.histframe.pwclist sashpos 1] 1\""
puts $f "set geometry(botwidth) [winfo width .bleft]" puts $f "set geometry(botwidth) [winfo width .bleft]"
puts $f "set geometry(botheight) [winfo height .bleft]" puts $f "set geometry(botheight) [winfo height .bleft]"
unset -nocomplain geometry
global geometry
if {[info exists geometry(showrefs)]} {
puts $f "set geometry(showrefs) $geometry(showrefs)"
}


array set view_save {} array set view_save {}
array set views {} array set views {}
@ -10168,6 +10167,7 @@ proc rmbranch {} {
proc showrefs {} { proc showrefs {} {
global showrefstop bgcolor fgcolor selectbgcolor global showrefstop bgcolor fgcolor selectbgcolor
global bglist fglist reflistfilter reflist maincursor global bglist fglist reflistfilter reflist maincursor
global geometry


set top .showrefs set top .showrefs
set showrefstop $top set showrefstop $top
@ -10178,7 +10178,11 @@ proc showrefs {} {
} }
ttk_toplevel $top ttk_toplevel $top
wm title $top [mc "Tags and heads: %s" [file tail [pwd]]] wm title $top [mc "Tags and heads: %s" [file tail [pwd]]]
make_transient $top . if {[info exists geometry(showrefs)]} {
make_transient $top . $geometry(showrefs)
} else {
make_transient $top .
}
text $top.list -background $bgcolor -foreground $fgcolor \ text $top.list -background $bgcolor -foreground $fgcolor \
-selectbackground $selectbgcolor -font mainfont \ -selectbackground $selectbgcolor -font mainfont \
-xscrollcommand "$top.xsb set" -yscrollcommand "$top.ysb set" \ -xscrollcommand "$top.xsb set" -yscrollcommand "$top.ysb set" \
@ -10214,6 +10218,9 @@ proc showrefs {} {
bind $top.list <ButtonRelease-1> {sel_reflist %W %x %y; break} bind $top.list <ButtonRelease-1> {sel_reflist %W %x %y; break}
set reflist {} set reflist {}
refill_reflist refill_reflist
# avoid <Configure> being bound to child windows
bindtags $top [linsert [bindtags $top] 1 bind$top]
bind bind$top <Configure> {set geometry(showrefs) [wm geometry %W]}
} }


proc sel_reflist {w x y} { proc sel_reflist {w x y} {