@matheusbsbs / matheus-bagliano / commits / 6cd80496e9
Fork 0

gitk: Resize panes correctly when reducing window size

The resizeclistpanes and resizecdetpanes procedures attempt to keep the horizontal proportions of the panes of the gitk window approximately constant when the gitk window is resized. However, if the size is reduced enough that an existing sash position would go outside the window, Tk moves the sash to the left to keep it inside the window (without moving other sash positions to keep the proportions). This happens before these resize procedures get control, and so they work with incorrect proportions. To fix this, we record the sash positions we set previously and use those previously-set sash positions rather than the current sash positions when computing the proportions. Signed-off-by: Paul Mackerras <paulus@ozlabs.org>

Paul Mackerras committed Oct 3, 2020 at 15:20 UTC 6cd80496e9d3694825ec941663b65c9516102289
1 file changed +11 -4
gitk
+11 -4
@@ -2953,9 +2953,12 @@ proc savestuff {w} {
2953 }
2954
2955 proc resizeclistpanes {win w} {
2956 - global oldwidth use_ttk
2956 + global oldwidth oldsash use_ttk
2957 if {[info exists oldwidth($win)]} {
2958 - if {$use_ttk} {
2958 + if {[info exists oldsash($win)]} {
2959 + set s0 [lindex $oldsash($win) 0]
2960 + set s1 [lindex $oldsash($win) 1]
2961 + } elseif {$use_ttk} {
2962 set s0 [$win sashpos 0]
2963 set s1 [$win sashpos 1]
2964 } else {
@@ -2989,14 +2992,17 @@ proc resizeclistpanes {win w} {
2992 $win sash place 0 $sash0 [lindex $s0 1]
2993 $win sash place 1 $sash1 [lindex $s1 1]
2994 }
2995 + set oldsash($win) [list $sash0 $sash1]
2996 }
2997 set oldwidth($win) $w
2998 }
2999
3000 proc resizecdetpanes {win w} {
2997 - global oldwidth use_ttk
3001 + global oldwidth oldsash use_ttk
3002 if {[info exists oldwidth($win)]} {
2999 - if {$use_ttk} {
3003 + if {[info exists oldsash($win)]} {
3004 + set s0 $oldsash($win)
3005 + } elseif {$use_ttk} {
3006 set s0 [$win sashpos 0]
3007 } else {
3008 set s0 [$win sash coord 0]
@@ -3018,6 +3024,7 @@ proc resizecdetpanes {win w} {
3024 } else {
3025 $win sash place 0 $sash0 [lindex $s0 1]
3026 }
3027 + set oldsash($win) $sash0
3028 }
3029 set oldwidth($win) $w
3030 }