gitk: Fix problem with target row not being in scroll region
authorPaul Mackerras <paulus@samba.org>
Fri, 7 Mar 2008 11:51:55 +0000 (22:51 +1100)
committerPaul Mackerras <paulus@samba.org>
Fri, 7 Mar 2008 11:51:55 +0000 (22:51 +1100)
Since we limit the rate at which we do updates to the canvas scrolling
regions, it's possible to get into selectline for a row that is
outside the currently-set scrolling region.  When this happens,
selectline can't scroll to show the selected line, and as a
consequence, drawvisible chooses some other bogus row to be the
target row.

This fixes it by calling setcanvscroll from selectline in this case.
We also set selectedline (and currentid) before calling drawvisible
so that drawvisible makes the right choice of target row.

Signed-off-by: Paul Mackerras <paulus@samba.org>
gitk

diff --git a/gitk b/gitk
index 19325086bf68951df6a85d17beb1a513cbd8d64a..1125f68d35f1e58bfd3cdf06f3cb8ae8669415f1 100755 (executable)
--- a/gitk
+++ b/gitk
@@ -5429,7 +5429,7 @@ proc selectline {l isnew} {
     global commentend idtags linknum
     global mergemax numcommits pending_select
     global cmitmode showneartags allcommits
-    global targetrow targetid
+    global targetrow targetid lastscrollrows
 
     catch {unset pending_select}
     $canv delete hover
@@ -5440,6 +5440,11 @@ proc selectline {l isnew} {
     set id [commitonrow $l]
     set targetid $id
     set targetrow $l
+    set selectedline $l
+    set currentid $id
+    if {$lastscrollrows < $numcommits} {
+       setcanvscroll
+    }
 
     set y [expr {$canvy0 + $l * $linespc}]
     set ymax [lindex [$canv cget -scrollregion] 3]
@@ -5483,8 +5488,6 @@ proc selectline {l isnew} {
        addtohistory [list selbyid $id]
     }
 
-    set selectedline $l
-    set currentid $id
     $sha1entry delete 0 end
     $sha1entry insert 0 $id
     $sha1entry selection from 0