gitk: Select head of current branch by default
authorPaul Mackerras <paulus@samba.org>
Sun, 13 Jan 2008 06:26:30 +0000 (17:26 +1100)
committerPaul Mackerras <paulus@samba.org>
Sun, 13 Jan 2008 06:26:30 +0000 (17:26 +1100)
Instead of selecting the first commit that appears, this makes gitk
select the currently checked out head, if the user hasn't explicitly
selected some other commit by the time it appears.  If the head hasn't
appeared by the time the graph is complete, then we select the first
real commit.

This applies both for graph updates and when the graph is being read
in initially.

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

diff --git a/gitk b/gitk
index 8699e1bb4f97dc3e1a6ec9d5a43e4fdf6323a3e8..8b4c61c56320eb15086c948d1a86c836b5648846 100755 (executable)
--- a/gitk
+++ b/gitk
@@ -98,6 +98,7 @@ proc start_rev_list {view} {
     global showlocalchanges commitinterest mainheadid
     global progressdirn progresscoords proglastnc curview
     global viewincl viewactive loginstance viewinstances
+    global pending_select mainheadid
 
     set startmsecs [clock clicks -milliseconds]
     set commitidx($view) 0
@@ -138,6 +139,7 @@ proc start_rev_list {view} {
        set progressdirn 1
        set progresscoords {0 0}
        set proglastnc 0
+       set pending_select $mainheadid
     }
 }
 
@@ -170,7 +172,7 @@ proc updatecommits {} {
     global curview viewargs viewfiles viewincl viewinstances
     global viewactive viewcomplete loginstance tclencoding mainheadid
     global varcid startmsecs commfd showneartags showlocalchanges leftover
-    global mainheadid
+    global mainheadid pending_select
 
     set oldmainid $mainheadid
     rereadrefs
@@ -228,6 +230,7 @@ proc updatecommits {} {
     filerun $fd [list getcommitlines $fd $i $view]
     incr viewactive($view)
     set viewcomplete($view) 0
+    set pending_select $mainheadid
     nowbusy $view "Reading"
     if {$showneartags} {
        getallcommits
@@ -2748,9 +2751,9 @@ proc showview {n} {
     global numcommits viewcomplete
     global selectedline currentid canv canvy0
     global treediffs
-    global pending_select
+    global pending_select mainheadid
     global commitidx
-    global selectedview selectfirst
+    global selectedview
     global hlview selectedhlview commitinterest
 
     if {$n == $curview} return
@@ -2812,7 +2815,6 @@ proc showview {n} {
     setcanvscroll
     set yf 0
     set row {}
-    set selectfirst 0
     if {$selid ne {} && [commitinview $selid $n]} {
        set row [rowofcommit $selid]
        # try to get the selected row in the same position on the screen
@@ -2827,14 +2829,18 @@ proc showview {n} {
     drawvisible
     if {$row ne {}} {
        selectline $row 0
-    } elseif {$selid ne {}} {
-       set pending_select $selid
+    } elseif {$mainheadid ne {} && [commitinview $mainheadid $curview]} {
+       selectline [rowofcommit $mainheadid] 1
+    } elseif {!$viewcomplete($n)} {
+       if {$selid ne {}} {
+           set pending_select $selid
+       } else {
+           set pending_select $mainheadid
+       }
     } else {
        set row [first_real_row]
        if {$row < $numcommits} {
            selectline $row 0
-       } else {
-           set selectfirst 1
        }
     }
     if {!$viewcomplete($n)} {
@@ -3440,7 +3446,6 @@ proc initlayout {} {
     global numcommits canvxmax canv
     global nextcolor
     global colormap rowtextx
-    global selectfirst
 
     set numcommits 0
     set displayorder {}
@@ -3452,7 +3457,6 @@ proc initlayout {} {
     set canvxmax [$canv cget -width]
     catch {unset colormap}
     catch {unset rowtextx}
-    set selectfirst 1
 }
 
 proc setcanvscroll {} {
@@ -3486,7 +3490,7 @@ proc visiblerows {} {
 proc layoutmore {} {
     global commitidx viewcomplete curview
     global numcommits pending_select selectedline curview
-    global selectfirst lastscrollset commitinterest
+    global lastscrollset commitinterest
 
     set canshow $commitidx($curview)
     if {$canshow <= $numcommits && !$viewcomplete($curview)} return
@@ -3513,15 +3517,6 @@ proc layoutmore {} {
        [commitinview $pending_select $curview]} {
        selectline [rowofcommit $pending_select] 1
     }
-    if {$selectfirst} {
-       if {[info exists selectedline] || [info exists pending_select]} {
-           set selectfirst 0
-       } else {
-           set l [first_real_row]
-           selectline $l 1
-           set selectfirst 0
-       }
-    }
 }
 
 proc doshowlocalchanges {} {