Browse Source

gitk: Improve the behaviour of the initial selection

It used to be that if you clicked on a line while gitk was still drawing
stuff, it would immediately re-select the first line of the display.
This fixes that.

Signed-off-by: Paul Mackerras <paulus@samba.org>
maint
Paul Mackerras 18 years ago
parent
commit
e507fd4871
  1. 38
      gitk

38
gitk

@ -1671,7 +1671,7 @@ proc showview {n} { @@ -1671,7 +1671,7 @@ proc showview {n} {
global pending_select phase
global commitidx rowlaidout rowoptim linesegends
global commfd nextupdate
global selectedview
global selectedview selectfirst
global vparentlist vchildlist vdisporder vcmitlisted
global hlview selectedhlview

@ -1689,6 +1689,9 @@ proc showview {n} { @@ -1689,6 +1689,9 @@ proc showview {n} {
} else {
set yscreen [expr {($ybot - $ytop) / 2}]
}
} elseif {[info exists pending_select]} {
set selid $pending_select
unset pending_select
}
unselectline
normalline
@ -1723,7 +1726,9 @@ proc showview {n} { @@ -1723,7 +1726,9 @@ proc showview {n} {
.bar.view entryconf Delete* -state [expr {$n == 0? "disabled": "normal"}]

if {![info exists viewdata($n)]} {
set pending_select $selid
if {$selid ne {}} {
set pending_select $selid
}
getcommits
return
}
@ -1757,7 +1762,8 @@ proc showview {n} { @@ -1757,7 +1762,8 @@ proc showview {n} {
set row 0
setcanvscroll
set yf 0
set row 0
set row {}
set selectfirst 0
if {$selid ne {} && [info exists commitrow($n,$selid)]} {
set row $commitrow($n,$selid)
# try to get the selected row in the same position on the screen
@ -1770,7 +1776,17 @@ proc showview {n} { @@ -1770,7 +1776,17 @@ proc showview {n} {
}
allcanvs yview moveto $yf
drawvisible
selectline $row 0
if {$row ne {}} {
selectline $row 0
} elseif {$selid ne {}} {
set pending_select $selid
} else {
if {$numcommits > 0} {
selectline 0 0
} else {
set selectfirst 1
}
}
if {$phase ne {}} {
if {$phase eq "getcommits"} {
show_status "Reading commits..."
@ -2407,7 +2423,7 @@ proc initlayout {} { @@ -2407,7 +2423,7 @@ proc initlayout {} {
global nextcolor
global parentlist childlist children
global colormap rowtextx
global linesegends
global linesegends selectfirst

set numcommits 0
set displayorder {}
@ -2427,6 +2443,7 @@ proc initlayout {} { @@ -2427,6 +2443,7 @@ proc initlayout {} {
catch {unset rowtextx}
catch {unset idrowranges}
set linesegends {}
set selectfirst 1
}

proc setcanvscroll {} {
@ -2495,6 +2512,7 @@ proc layoutmore {tmax} { @@ -2495,6 +2512,7 @@ proc layoutmore {tmax} {
proc showstuff {canshow} {
global numcommits commitrow pending_select selectedline
global linesegends idrowranges idrangedrawn curview
global displayorder selectfirst

if {$numcommits == 0} {
global phase
@ -2533,8 +2551,13 @@ proc showstuff {canshow} { @@ -2533,8 +2551,13 @@ proc showstuff {canshow} {
$commitrow($curview,$pending_select) < $numcommits} {
selectline $commitrow($curview,$pending_select) 1
}
if {![info exists selectedline] && ![info exists pending_select]} {
selectline 0 1
if {$selectfirst} {
if {[info exists selectedline] || [info exists pending_select]} {
set selectfirst 0
} else {
selectline 0 1
set selectfirst 0
}
}
}

@ -3551,7 +3574,6 @@ proc drawrest {} { @@ -3551,7 +3574,6 @@ proc drawrest {} {
global rowlaidout commitidx curview
global pending_select

set row $rowlaidout
layoutrows $rowlaidout $commitidx($curview) 1
layouttail
optimize_rows $row 0 $commitidx($curview)

Loading…
Cancel
Save