gitk: Fix various bugs in the view support

- don't re-read refs when switching views, it's too slow; just do
  it if the user did File->Update
- make the view menu use the uifont
- if we have a graph line selected, unselect it before changing the view
- if a row is selected and appears in the new view, but we have to
  read in the new view, select that row when we come across it
- if no row was previously selected, or if we don't find the previously
  selected row in the new view, select the first row

Signed-off-by: Paul Mackerras <paulus@samba.org>
This commit is contained in:
Paul Mackerras 2006-04-06 21:22:52 +10:00
parent f916ee427f
commit fdedbcfb0d

20
gitk
View File

@ -223,6 +223,7 @@ proc updatecommits {} {
set curview -1
catch {unset viewdata($n)}
parse_args $revtreeargs
readrefs
showview $n
}
@ -351,7 +352,8 @@ proc error_popup msg {
}
proc makewindow {} {
global canv canv2 canv3 linespc charspc ctext cflist textfont mainfont uifont
global canv canv2 canv3 linespc charspc ctext cflist
global textfont mainfont uifont
global findtype findtypemenu findloc findstring fstring geometry
global entries sha1entry sha1string sha1but
global maincursor textcursor curtextcursor
@ -369,7 +371,7 @@ proc makewindow {} {
.bar add cascade -label "Edit" -menu .bar.edit
.bar.edit add command -label "Preferences" -command doprefs
.bar.edit configure -font $uifont
menu .bar.view
menu .bar.view -font $uifont
.bar add cascade -label "View" -menu .bar.view
.bar.view add command -label "New view..." -command newview
.bar.view add command -label "Delete view" -command delview -state disabled
@ -907,6 +909,7 @@ proc showview {n} {
}
}
unselectline
normalline
stopfindproc
if {$curview >= 0 && $phase eq {} && ![info exists viewdata($curview)]} {
set viewdata($curview) \
@ -916,7 +919,6 @@ proc showview {n} {
catch {unset matchinglines}
catch {unset treediffs}
clear_display
readrefs
set curview $n
.bar.view entryconf 2 -state [expr {$n == 0? "disabled": "normal"}]
@ -1159,7 +1161,7 @@ proc layoutmore {} {
}
proc showstuff {canshow} {
global numcommits commitrow pending_select
global numcommits commitrow pending_select selectedline
global linesegends idrowranges idrangedrawn
if {$numcommits == 0} {
@ -1201,6 +1203,9 @@ proc showstuff {canshow} {
$commitrow($pending_select) < $numcommits} {
selectline $commitrow($pending_select) 1
}
if {![info exists selectedline] && ![info exists pending_select]} {
selectline 0 1
}
}
proc layoutrows {row endrow last} {
@ -1989,7 +1994,7 @@ proc xcoord {i level ln} {
proc finishcommits {} {
global commitidx phase
global canv mainfont ctext maincursor textcursor
global findinprogress
global findinprogress pending_select
if {$commitidx > 0} {
drawrest
@ -2003,6 +2008,7 @@ proc finishcommits {} {
settextcursor $textcursor
}
set phase {}
catch {unset pending_select}
}
# Don't change the text pane cursor if it is currently the hand cursor,
@ -2021,12 +2027,16 @@ proc drawrest {} {
global startmsecs
global canvy0 numcommits linespc
global rowlaidout commitidx
global pending_select
set row $rowlaidout
layoutrows $rowlaidout $commitidx 1
layouttail
optimize_rows $row 0 $commitidx
showstuff $commitidx
if {[info exists pending_select]} {
selectline 0 1
}
set drawmsecs [expr {[clock clicks -milliseconds] - $startmsecs}]
#puts "overall $drawmsecs ms for $numcommits commits"