Browse Source

gitk: Fix some problems with the display of ids as links

First, this fixes the problem where a SHA1 id wouldn't be displayed
as a link if it wasn't in the part of the graph that had been laid
out at the time the details pane was filled in, even if that commit
later became part of the graph.  This arranges for us to turn the
SHA1 id into a link when we get to that id in laying out the graph.

Secondly, there was a problem where the cursor wouldn't always turn
to a hand when over a link, because the areas for two links could
overlap slightly.  This fixes that by using a counter rather than
always reverting to a counter when we leave the region of a link
(which can happen just after we've entered a different link).

Signed-off-by: Paul Mackerras <paulus@samba.org>
maint
Paul Mackerras 17 years ago
parent
commit
97645683bf
  1. 87
      gitk

87
gitk

@ -1959,7 +1959,7 @@ proc showview {n} { @@ -1959,7 +1959,7 @@ proc showview {n} {
global commfd
global selectedview selectfirst
global vparentlist vdisporder vcmitlisted
global hlview selectedhlview
global hlview selectedhlview commitinterest

if {$n == $curview} return
set selid {}
@ -2000,6 +2000,7 @@ proc showview {n} { @@ -2000,6 +2000,7 @@ proc showview {n} {
unset hlview
set selectedhlview None
}
catch {unset commitinterest}

set curview $n
set selectedview $n
@ -4322,7 +4323,7 @@ proc commit_descriptor {p} { @@ -4322,7 +4323,7 @@ proc commit_descriptor {p} {
# append some text to the ctext widget, and make any SHA1 ID
# that we know about be a clickable link.
proc appendwithlinks {text tags} {
global ctext commitrow linknum curview
global ctext commitrow linknum curview pendinglinks

set start [$ctext index "end - 1c"]
$ctext insert end $text $tags
@ -4331,17 +4332,48 @@ proc appendwithlinks {text tags} { @@ -4331,17 +4332,48 @@ proc appendwithlinks {text tags} {
set s [lindex $l 0]
set e [lindex $l 1]
set linkid [string range $text $s $e]
if {![info exists commitrow($curview,$linkid)]} continue
incr e
$ctext tag add link "$start + $s c" "$start + $e c"
$ctext tag add link$linknum "$start + $s c" "$start + $e c"
$ctext tag bind link$linknum <1> \
[list selectline $commitrow($curview,$linkid) 1]
setlink $linkid link$linknum
incr linknum
}
$ctext tag conf link -foreground blue -underline 1
$ctext tag bind link <Enter> { %W configure -cursor hand2 }
$ctext tag bind link <Leave> { %W configure -cursor $curtextcursor }
}

proc setlink {id lk} {
global curview commitrow ctext pendinglinks commitinterest

if {[info exists commitrow($curview,$id)]} {
$ctext tag conf $lk -foreground blue -underline 1
$ctext tag bind $lk <1> [list selectline $commitrow($curview,$id) 1]
$ctext tag bind $lk <Enter> {linkcursor %W 1}
$ctext tag bind $lk <Leave> {linkcursor %W -1}
} else {
lappend pendinglinks($id) $lk
lappend commitinterest($id) {makelink %I}
}
}

proc makelink {id} {
global pendinglinks

if {![info exists pendinglinks($id)]} return
foreach lk $pendinglinks($id) {
setlink $id $lk
}
unset pendinglinks($id)
}

proc linkcursor {w inc} {
global linkentercount curtextcursor

if {[incr linkentercount $inc] > 0} {
$w configure -cursor hand2
} else {
$w configure -cursor $curtextcursor
if {$linkentercount < 0} {
set linkentercount 0
}
}
}

proc viewnextline {dir} {
@ -4388,15 +4420,7 @@ proc appendrefs {pos ids var} { @@ -4388,15 +4420,7 @@ proc appendrefs {pos ids var} {
$ctext tag delete $lk
$ctext insert $pos $sep
$ctext insert $pos [lindex $ti 0] $lk
if {[info exists commitrow($curview,$id)]} {
$ctext tag conf $lk -foreground blue
$ctext tag bind $lk <1> \
[list selectline $commitrow($curview,$id) 1]
$ctext tag conf $lk -underline 1
$ctext tag bind $lk <Enter> { %W configure -cursor hand2 }
$ctext tag bind $lk <Leave> \
{ %W configure -cursor $curtextcursor }
}
setlink $id $lk
set sep ", "
}
}
@ -5237,6 +5261,7 @@ proc nextfile {} { @@ -5237,6 +5261,7 @@ proc nextfile {} {

proc clear_ctext {{first 1.0}} {
global ctext smarktop smarkbot
global pendinglinks

set l [lindex [split $first .] 0]
if {![info exists smarktop] || [$ctext compare $first < $smarktop.0]} {
@ -5246,6 +5271,9 @@ proc clear_ctext {{first 1.0}} { @@ -5246,6 +5271,9 @@ proc clear_ctext {{first 1.0}} {
set smarkbot $l
}
$ctext delete $first end
if {$first eq "1.0"} {
catch {unset pendinglinks}
}
}

proc incrsearch {name ix op} {
@ -5609,12 +5637,9 @@ proc lineclick {x y id isnew} { @@ -5609,12 +5637,9 @@ proc lineclick {x y id isnew} {
# fill the details pane with info about this line
$ctext conf -state normal
clear_ctext
$ctext tag conf link -foreground blue -underline 1
$ctext tag bind link <Enter> { %W configure -cursor hand2 }
$ctext tag bind link <Leave> { %W configure -cursor $curtextcursor }
$ctext insert end "Parent:\t"
$ctext insert end $id [list link link0]
$ctext tag bind link0 <1> [list selbyid $id]
$ctext insert end $id link0
setlink $id link0
set info $commitinfo($id)
$ctext insert end "\n\t[lindex $info 0]\n"
$ctext insert end "\tAuthor:\t[lindex $info 1]\n"
@ -5629,8 +5654,8 @@ proc lineclick {x y id isnew} { @@ -5629,8 +5654,8 @@ proc lineclick {x y id isnew} {
if {![info exists commitinfo($child)] && ![getcommit $child]} continue
set info $commitinfo($child)
$ctext insert end "\n\t"
$ctext insert end $child [list link link$i]
$ctext tag bind link$i <1> [list selbyid $child]
$ctext insert end $child link$i
setlink $child link$i
$ctext insert end "\n\t[lindex $info 0]"
$ctext insert end "\n\tAuthor:\t[lindex $info 1]"
set date [formatdate [lindex $info 2]]
@ -5711,16 +5736,13 @@ proc doseldiff {oldid newid} { @@ -5711,16 +5736,13 @@ proc doseldiff {oldid newid} {
clear_ctext
init_flist "Top"
$ctext insert end "From "
$ctext tag conf link -foreground blue -underline 1
$ctext tag bind link <Enter> { %W configure -cursor hand2 }
$ctext tag bind link <Leave> { %W configure -cursor $curtextcursor }
$ctext tag bind link0 <1> [list selbyid $oldid]
$ctext insert end $oldid [list link link0]
$ctext insert end $oldid link0
setlink $oldid link0
$ctext insert end "\n "
$ctext insert end [lindex $commitinfo($oldid) 0]
$ctext insert end "\n\nTo "
$ctext tag bind link1 <1> [list selbyid $newid]
$ctext insert end $newid [list link link1]
$ctext insert end $newid link1
setlink $newid link1
$ctext insert end "\n "
$ctext insert end [lindex $commitinfo($newid) 0]
$ctext insert end "\n"
@ -7892,6 +7914,7 @@ set boldrows {} @@ -7892,6 +7914,7 @@ set boldrows {}
set boldnamerows {}
set diffelide {0 0}
set markingmatches 0
set linkentercount 0

set optim_delay 16


Loading…
Cancel
Save