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