From 94503a66c56c935e77a8fbe3622f1f56b7134ccc Mon Sep 17 00:00:00 2001 From: Paul Mackerras Date: Mon, 19 May 2008 09:48:45 +1000 Subject: [PATCH 1/4] gitk: Fix "wrong # coordinates" error on reload This fixes the Tk error "wrong # coordinates: expected 0 or 4, got 2" that sometimes occurred when reloading. The problem was that we didn't unset the variables containing the canvas item id numbers for the displayed rows when we cleared the canvases. Thus make_secsel would think it had something to do when it didn't. Thanks to Michele Ballabio for finding a way to trigger the bug reliably. Signed-off-by: Paul Mackerras --- gitk | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/gitk b/gitk index 9ab6dbaa46..998a051942 100755 --- a/gitk +++ b/gitk @@ -5125,10 +5125,14 @@ proc drawvisible {} { proc clear_display {} { global iddrawn linesegs need_redisplay nrows_drawn global vhighlights fhighlights nhighlights rhighlights + global linehtag linentag linedtag allcanvs delete all catch {unset iddrawn} catch {unset linesegs} + catch {unset linehtag} + catch {unset linentag} + catch {unset linedtag} catch {unset vhighlights} catch {unset fhighlights} catch {unset nhighlights} From 64dc208c117d6a2e97176342969637e5daba6b8d Mon Sep 17 00:00:00 2001 From: Michele Ballabio Date: Sat, 17 May 2008 19:16:31 +0200 Subject: [PATCH 2/4] gitk: Move es.po where it belongs Signed-off-by: Michele Ballabio Signed-off-by: Paul Mackerras --- {gitk-git/po => po}/es.po | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename {gitk-git/po => po}/es.po (100%) diff --git a/gitk-git/po/es.po b/po/es.po similarity index 100% rename from gitk-git/po/es.po rename to po/es.po From 94b4a69f758131a6282363e1717235a03c3885ef Mon Sep 17 00:00:00 2001 From: Paul Mackerras Date: Tue, 20 May 2008 20:51:06 +1000 Subject: [PATCH 3/4] gitk: Fix bug where current row number display stops working The display of the current row number would stop working if the user clicked on a line, or if selectedline got unset for any other reason, because the trace on it got lost when it was unselected. This fixes it by changing the places that unset selectedline to set it to the empty string instead, and the places that tested for it being set or unset to compare it with the empty string. Thus it never gets unset now. This actually simplified the code in a few places since it can be compared for equality with a row number now without first testing if it is set. Signed-off-by: Paul Mackerras --- gitk | 46 +++++++++++++++++++++++----------------------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/gitk b/gitk index 998a051942..45ebcaf6dd 100755 --- a/gitk +++ b/gitk @@ -495,7 +495,7 @@ proc reloadcommits {} { stop_rev_list $curview } resetvarcs $curview - catch {unset selectedline} + set selectedline {} catch {unset currentid} catch {unset thickerline} catch {unset treediffs} @@ -927,7 +927,7 @@ proc removefakerow {id} { modify_arc $v $a $i if {[info exist currentid] && $id eq $currentid} { unset currentid - unset selectedline + set selectedline {} } if {[info exists targetid] && $targetid eq $id} { set targetid $p @@ -1838,7 +1838,7 @@ proc makewindow {} { pack .tf.bar.rowlabel .tf.bar.rownum .tf.bar.rowlabel2 .tf.bar.numcommits \ -side left global selectedline - trace add variable selectedline {write unset} selectedline_change + trace add variable selectedline write selectedline_change # Status label and progress bar set statusw .tf.bar.status @@ -2185,7 +2185,7 @@ proc windows_mousewheel_redirector {W X Y D} { proc selectedline_change {n1 n2 op} { global selectedline rownumsel - if {$op eq "unset"} { + if {$selectedline eq {}} { set rownumsel {} } else { set rownumsel [expr {$selectedline + 1}] @@ -3274,7 +3274,7 @@ proc showview {n} { set ytop [expr {[lindex $span 0] * $ymax}] set ybot [expr {[lindex $span 1] * $ymax}] set yscreen [expr {($ybot - $ytop) / 2}] - if {[info exists selectedline]} { + if {$selectedline ne {}} { set selid $currentid set y [yc $selectedline] if {$ytop < $y && $y < $ybot} { @@ -3388,7 +3388,7 @@ proc bolden {row font} { lappend boldrows $row $canv itemconf $linehtag($row) -font $font - if {[info exists selectedline] && $row == $selectedline} { + if {$row == $selectedline} { $canv delete secsel set t [eval $canv create rect [$canv bbox $linehtag($row)] \ -outline {{}} -tags secsel \ @@ -3402,7 +3402,7 @@ proc bolden_name {row font} { lappend boldnamerows $row $canv2 itemconf $linentag($row) -font $font - if {[info exists selectedline] && $row == $selectedline} { + if {$row == $selectedline} { $canv2 delete secsel set t [eval $canv2 create rect [$canv2 bbox $linentag($row)] \ -outline {{}} -tags secsel \ @@ -3831,7 +3831,7 @@ proc askrelhighlight {row id} { global descendent highlight_related iddrawn rhighlights global selectedline ancestor - if {![info exists selectedline]} return + if {$selectedline eq {}} return set isbold 0 if {$highlight_related eq [mc "Descendant"] || $highlight_related eq [mc "Not descendant"]} { @@ -4005,7 +4005,7 @@ proc visiblerows {} { proc layoutmore {} { global commitidx viewcomplete curview - global numcommits pending_select selectedline curview + global numcommits pending_select curview global lastscrollset lastscrollrows commitinterest if {$lastscrollrows < 100 || $viewcomplete($curview) || @@ -4916,7 +4916,7 @@ proc drawcmittext {id row col} { -text $name -font $nfont -tags text] set linedtag($row) [$canv3 create text 3 $y -anchor w -fill $fgcolor \ -text $date -font mainfont -tags text] - if {[info exists selectedline] && $selectedline == $row} { + if {$selectedline == $row} { make_secsel $row } set xr [expr {$xt + [font measure $font $headline]}] @@ -5107,7 +5107,7 @@ proc drawvisible {} { if {$endrow >= $vrowmod($curview)} { update_arcrows $curview } - if {[info exists selectedline] && + if {$selectedline ne {} && $row <= $selectedline && $selectedline <= $endrow} { set targetrow $selectedline } elseif {[info exists targetid]} { @@ -5427,7 +5427,7 @@ proc dofind {{dirn 1} {wrap 1}} { } focus . if {$findstring eq {} || $numcommits == 0} return - if {![info exists selectedline]} { + if {$selectedline eq {}} { set findstartline [lindex [visiblerows] [expr {$dirn < 0}]] } else { set findstartline $selectedline @@ -5623,7 +5623,7 @@ proc markmatches {canv l str tag matches font row} { [expr {$x0+$xlen+2}] $y1 \ -outline {} -tags [list match$l matches] -fill yellow] $canv lower $t - if {[info exists selectedline] && $row == $selectedline} { + if {$row == $selectedline} { $canv raise $t secsel } } @@ -5782,7 +5782,7 @@ proc appendrefs {pos ids var} { proc dispneartags {delay} { global selectedline currentid showneartags tagphase - if {![info exists selectedline] || !$showneartags} return + if {$selectedline eq {} || !$showneartags} return after cancel dispnexttag if {$delay} { after 200 dispnexttag @@ -5796,7 +5796,7 @@ proc dispneartags {delay} { proc dispnexttag {} { global selectedline currentid showneartags tagphase ctext - if {![info exists selectedline] || !$showneartags} return + if {$selectedline eq {} || !$showneartags} return switch -- $tagphase { 0 { set dtags [desctags $currentid] @@ -6018,7 +6018,7 @@ proc sellastline {} { proc selnextline {dir} { global selectedline focus . - if {![info exists selectedline]} return + if {$selectedline eq {}} return set l [expr {$selectedline + $dir}] unmarkmatches selectline $l 1 @@ -6033,7 +6033,7 @@ proc selnextpage {dir} { } allcanvs yview scroll [expr {$dir * $lpp}] units drawvisible - if {![info exists selectedline]} return + if {$selectedline eq {}} return set l [expr {$selectedline + $dir * $lpp}] if {$l < 0} { set l 0 @@ -6047,7 +6047,7 @@ proc selnextpage {dir} { proc unselectline {} { global selectedline currentid - catch {unset selectedline} + set selectedline {} catch {unset currentid} allcanvs delete secsel rhighlight_none @@ -6056,7 +6056,7 @@ proc unselectline {} { proc reselectline {} { global selectedline - if {[info exists selectedline]} { + if {$selectedline ne {}} { selectline $selectedline 0 } } @@ -6868,7 +6868,7 @@ proc redisplay {} { setcanvscroll allcanvs yview moveto [lindex $span 0] drawvisible - if {[info exists selectedline]} { + if {$selectedline ne {}} { selectline $selectedline 0 allcanvs yview moveto [lindex $span 0] } @@ -7189,8 +7189,7 @@ proc rowmenu {x y id} { stopfinding set rowmenuid $id - if {![info exists selectedline] - || [rowofcommit $id] eq $selectedline} { + if {$selectedline eq {} || [rowofcommit $id] eq $selectedline} { set state disabled } else { set state normal @@ -7214,7 +7213,7 @@ proc rowmenu {x y id} { proc diffvssel {dirn} { global rowmenuid selectedline - if {![info exists selectedline]} return + if {$selectedline eq {}} return if {$dirn} { set oldid [commitonrow $selectedline] set newid $rowmenuid @@ -9890,6 +9889,7 @@ set viewperm(0) 0 set viewargs(0) {} set viewargscmd(0) {} +set selectedline {} set numcommits 0 set loginstance 0 set cmdlineok 0 From a977953326b5bc9556f2648a7327c623e676aaca Mon Sep 17 00:00:00 2001 From: Paul Mackerras Date: Thu, 22 May 2008 21:12:19 +1000 Subject: [PATCH 4/4] gitk: Fix bug introduced by "gitk: Fix "wrong # coordinates" error on reload" Commit 94503a66c56c935e77a8fbe3622f1f56b7134ccc ("gitk: Fix "wrong # coordinates" error on reload") was correct as far as it went, but introduced a problem because it didn't also clear out boldrows and boldnamerows in clear_display. This resulted in Tcl errors after scrolling through the graph for a while if some rows were highlighted. This fixes it. Signed-off-by: Paul Mackerras --- gitk | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/gitk b/gitk index 45ebcaf6dd..22bcd18a46 100755 --- a/gitk +++ b/gitk @@ -5125,7 +5125,7 @@ proc drawvisible {} { proc clear_display {} { global iddrawn linesegs need_redisplay nrows_drawn global vhighlights fhighlights nhighlights rhighlights - global linehtag linentag linedtag + global linehtag linentag linedtag boldrows boldnamerows allcanvs delete all catch {unset iddrawn} @@ -5133,6 +5133,8 @@ proc clear_display {} { catch {unset linehtag} catch {unset linentag} catch {unset linedtag} + set boldrows {} + set boldnamerows {} catch {unset vhighlights} catch {unset fhighlights} catch {unset nhighlights}