summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohannes Sixt <j6t@kdbg.org>2025-10-17 18:38:11 +0200
committerJohannes Sixt <j6t@kdbg.org>2025-10-17 18:38:11 +0200
commitbf5a55ac5eaef91e87470d704613e6942500a810 (patch)
treefb5b203ee09d1f78d8a4455a5caffdc4980b942c
parent8b5636a57ff078ac368f246f813b156552a0726c (diff)
gitk: persist position and size of the Tags and Heads window
The Tags and Heads window always opens at a default position and size, requiring users to reposition it each time. Remember its geometry between sessions in the config file as `geometry(showrefs)`. Note that the existing configuration is sourced in proc savestuff right before new settings are written. This makes the old settings available as local variables(!) and does not overwrite the current settings. Since we need access to the global geometry(showrefs), it is necessary to unset the local variable. Helped-by: Michael Rappazzo <rappazzo@gmail.com> Signed-off-by: Johannes Sixt <j6t@kdbg.org>
-rwxr-xr-xgitk25
1 files changed, 20 insertions, 5 deletions
diff --git a/gitk b/gitk
index 275f353811..ed616613ae 100755
--- a/gitk
+++ b/gitk
@@ -2131,12 +2131,14 @@ proc ttk_toplevel {w args} {
return $w
}
-proc make_transient {window origin} {
+proc make_transient {window origin {geometry ""}} {
wm transient $window $origin
- # Windows fails to place transient windows normally, so
- # schedule a callback to center them on the parent.
- if {[tk windowingsystem] eq {win32}} {
+ if {$geometry ne ""} {
+ after idle [list wm geometry $window $geometry]
+ } 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]
}
}
@@ -3106,6 +3108,11 @@ proc savestuff {w} {
puts $f "set geometry(pwsash1) \"[.tf.histframe.pwclist sashpos 1] 1\""
puts $f "set geometry(botwidth) [winfo width .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 views {}
@@ -10193,6 +10200,7 @@ proc rmbranch {} {
proc showrefs {} {
global showrefstop bgcolor fgcolor selectbgcolor
global bglist fglist reflistfilter reflist maincursor
+ global geometry
set top .showrefs
set showrefstop $top
@@ -10203,7 +10211,11 @@ proc showrefs {} {
}
ttk_toplevel $top
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 \
-selectbackground $selectbgcolor -font mainfont \
-xscrollcommand "$top.xsb set" -yscrollcommand "$top.ysb set" \
@@ -10239,6 +10251,9 @@ proc showrefs {} {
bind $top.list <ButtonRelease-1> {sel_reflist %W %x %y; break}
set 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} {