Sync with 'master'

next
Junio C Hamano 2025-10-05 15:04:55 -07:00
commit 7b8bcc2412
1 changed files with 164 additions and 119 deletions

View File

@ -2215,6 +2215,7 @@ proc setoptions {} {
} }


proc setttkstyle {} { proc setttkstyle {} {
global theme
eval font configure TkDefaultFont [fontflags mainfont] eval font configure TkDefaultFont [fontflags mainfont]
eval font configure TkTextFont [fontflags textfont] eval font configure TkTextFont [fontflags textfont]
eval font configure TkHeadingFont [fontflags mainfont] eval font configure TkHeadingFont [fontflags mainfont]
@ -2224,6 +2225,10 @@ proc setttkstyle {} {
eval font configure TkIconFont [fontflags uifont] eval font configure TkIconFont [fontflags uifont]
eval font configure TkMenuFont [fontflags uifont] eval font configure TkMenuFont [fontflags uifont]
eval font configure TkSmallCaptionFont [fontflags uifont] eval font configure TkSmallCaptionFont [fontflags uifont]

if {[catch {ttk::style theme use $theme} err]} {
set theme [ttk::style theme use]
}
} }


# Make a menu and submenus. # Make a menu and submenus.
@ -2376,7 +2381,6 @@ proc makewindow {} {
global highlight_files gdttype global highlight_files gdttype
global searchstring sstring global searchstring sstring
global bgcolor fgcolor bglist fglist diffcolors diffbgcolors selectbgcolor global bgcolor fgcolor bglist fglist diffcolors diffbgcolors selectbgcolor
global uifgcolor uifgdisabledcolor
global filesepbgcolor filesepfgcolor global filesepbgcolor filesepfgcolor
global mergecolors foundbgcolor currentsearchhitbgcolor global mergecolors foundbgcolor currentsearchhitbgcolor
global headctxmenu progresscanv progressitem progresscoords statusw global headctxmenu progresscanv progressitem progresscoords statusw
@ -2495,40 +2499,18 @@ proc makewindow {} {
set sha1entry .tf.bar.sha1 set sha1entry .tf.bar.sha1
set entries $sha1entry set entries $sha1entry
set sha1but .tf.bar.sha1label set sha1but .tf.bar.sha1label
button $sha1but -text "[mc "Commit ID:"] " -state disabled -relief flat \ ttk::button $sha1but -text "[mc "Commit ID:"] " -state disabled \
-command gotocommit -width 8 -command gotocommit -width 8
$sha1but conf -disabledforeground [$sha1but cget -foreground]
pack .tf.bar.sha1label -side left pack .tf.bar.sha1label -side left
ttk::entry $sha1entry -width $hashlength -font textfont -textvariable sha1string ttk::entry $sha1entry -width $hashlength -font textfont -textvariable sha1string
trace add variable sha1string write sha1change trace add variable sha1string write sha1change
pack $sha1entry -side left -pady 2 pack $sha1entry -side left -pady 2


set bm_left_data { ttk::button .tf.bar.leftbut -command goback -state disabled
#define left_width 16 .tf.bar.leftbut configure -text \u2190 -width 3
#define left_height 16
static unsigned char left_bits[] = {
0x00, 0x00, 0xc0, 0x01, 0xe0, 0x00, 0x70, 0x00, 0x38, 0x00, 0x1c, 0x00,
0x0e, 0x00, 0xff, 0x7f, 0xff, 0x7f, 0xff, 0x7f, 0x0e, 0x00, 0x1c, 0x00,
0x38, 0x00, 0x70, 0x00, 0xe0, 0x00, 0xc0, 0x01};
}
set bm_right_data {
#define right_width 16
#define right_height 16
static unsigned char right_bits[] = {
0x00, 0x00, 0xc0, 0x01, 0x80, 0x03, 0x00, 0x07, 0x00, 0x0e, 0x00, 0x1c,
0x00, 0x38, 0xff, 0x7f, 0xff, 0x7f, 0xff, 0x7f, 0x00, 0x38, 0x00, 0x1c,
0x00, 0x0e, 0x00, 0x07, 0x80, 0x03, 0xc0, 0x01};
}
image create bitmap bm-left -data $bm_left_data -foreground $uifgcolor
image create bitmap bm-left-gray -data $bm_left_data -foreground $uifgdisabledcolor
image create bitmap bm-right -data $bm_right_data -foreground $uifgcolor
image create bitmap bm-right-gray -data $bm_right_data -foreground $uifgdisabledcolor

ttk::button .tf.bar.leftbut -command goback -state disabled -width 26
.tf.bar.leftbut configure -image [list bm-left disabled bm-left-gray]
pack .tf.bar.leftbut -side left -fill y pack .tf.bar.leftbut -side left -fill y
ttk::button .tf.bar.rightbut -command goforw -state disabled -width 26 ttk::button .tf.bar.rightbut -command goforw -state disabled
.tf.bar.rightbut configure -image [list bm-right disabled bm-right-gray] .tf.bar.rightbut configure -text \u2192 -width 3
pack .tf.bar.rightbut -side left -fill y pack .tf.bar.rightbut -side left -fill y


ttk::label .tf.bar.rowlabel -text [mc "Row"] ttk::label .tf.bar.rowlabel -text [mc "Row"]
@ -2559,31 +2541,8 @@ proc makewindow {} {
# build up the bottom bar of upper window # build up the bottom bar of upper window
ttk::label .tf.lbar.flabel -text "[mc "Find"] " ttk::label .tf.lbar.flabel -text "[mc "Find"] "


set bm_down_data { ttk::button .tf.lbar.fnext -command {dofind 1 1} -text \u2193 -width 3
#define down_width 16 ttk::button .tf.lbar.fprev -command {dofind -1 1} -text \u2191 -width 3
#define down_height 16
static unsigned char down_bits[] = {
0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01,
0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01,
0x87, 0xe1, 0x8e, 0x71, 0x9c, 0x39, 0xb8, 0x1d,
0xf0, 0x0f, 0xe0, 0x07, 0xc0, 0x03, 0x80, 0x01};
}
image create bitmap bm-down -data $bm_down_data -foreground $uifgcolor
ttk::button .tf.lbar.fnext -width 26 -command {dofind 1 1}
.tf.lbar.fnext configure -image bm-down

set bm_up_data {
#define up_width 16
#define up_height 16
static unsigned char up_bits[] = {
0x80, 0x01, 0xc0, 0x03, 0xe0, 0x07, 0xf0, 0x0f,
0xb8, 0x1d, 0x9c, 0x39, 0x8e, 0x71, 0x87, 0xe1,
0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01,
0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01};
}
image create bitmap bm-up -data $bm_up_data -foreground $uifgcolor
ttk::button .tf.lbar.fprev -width 26 -command {dofind -1 1}
.tf.lbar.fprev configure -image bm-up


ttk::label .tf.lbar.flab2 -text " [mc "commit"] " ttk::label .tf.lbar.flab2 -text " [mc "commit"] "


@ -2656,7 +2615,7 @@ proc makewindow {} {


ttk::label .bleft.mid.labeldiffcontext -text " [mc "Lines of context"]: " ttk::label .bleft.mid.labeldiffcontext -text " [mc "Lines of context"]: "
pack .bleft.mid.diff .bleft.mid.old .bleft.mid.new -side left -ipadx $wgap pack .bleft.mid.diff .bleft.mid.old .bleft.mid.new -side left -ipadx $wgap
spinbox .bleft.mid.diffcontext -width 5 \ ttk::spinbox .bleft.mid.diffcontext -width 5 \
-from 0 -increment 1 -to 10000000 \ -from 0 -increment 1 -to 10000000 \
-validate all -validatecommand "diffcontextvalidate %P" \ -validate all -validatecommand "diffcontextvalidate %P" \
-textvariable diffcontextstring -textvariable diffcontextstring
@ -8910,9 +8869,9 @@ proc sha1change {n1 n2 op} {
} }
if {[$sha1but cget -state] == $state} return if {[$sha1but cget -state] == $state} return
if {$state == "normal"} { if {$state == "normal"} {
$sha1but conf -state normal -relief raised -text "[mc "Goto:"] " $sha1but conf -state normal -text "[mc "Goto:"] "
} else { } else {
$sha1but conf -state disabled -relief flat -text "[mc "Commit ID:"] " $sha1but conf -state disabled -text "[mc "Commit ID:"] "
} }
} }


@ -10294,7 +10253,9 @@ proc refill_reflist {} {
if {![string match "remotes/*" $n] && [string match $reflistfilter $n]} { if {![string match "remotes/*" $n] && [string match $reflistfilter $n]} {
if {[commitinview $headids($n) $curview]} { if {[commitinview $headids($n) $curview]} {
lappend localrefs [list $n H] lappend localrefs [list $n H]
if {[info exists upstreamofref($n)] && [commitinview $headids($upstreamofref($n)) $curview]} { if {[info exists upstreamofref($n)] && \
[info exists headids($upstreamofref($n))] && \
[commitinview $headids($upstreamofref($n)) $curview]} {
lappend trackedremoterefs [list $upstreamofref($n) R] lappend trackedremoterefs [list $upstreamofref($n) R]
} }
} else { } else {
@ -11608,9 +11569,10 @@ proc mkfontdisp {font top which} {
set fontpref($font) [set $font] set fontpref($font) [set $font]
ttk::button $top.${font}but -text $which \ ttk::button $top.${font}but -text $which \
-command [list choosefont $font $which] -command [list choosefont $font $which]
ttk::label $top.$font -relief flat -font $font \ ttk::label $top.$font -font $font \
-text $fontattr($font,family) -justify left -text $fontattr($font,family)
grid x $top.${font}but $top.$font -sticky w grid x $top.${font}but $top.$font -sticky w
grid configure $top.$font -sticky ew
} }


proc centertext {w} { proc centertext {w} {
@ -11690,48 +11652,52 @@ proc prefspage_general {notebook} {


ttk::label $page.ldisp -text [mc "Commit list display options"] -font mainfontbold ttk::label $page.ldisp -text [mc "Commit list display options"] -font mainfontbold
grid $page.ldisp - -sticky w -pady 10 grid $page.ldisp - -sticky w -pady 10

ttk::label $page.spacer -text " " ttk::label $page.spacer -text " "
ttk::label $page.maxwidthl -text [mc "Maximum graph width (lines)"] ttk::label $page.maxwidthl -text [mc "Maximum graph width (lines)"]
spinbox $page.maxwidth -from 0 -to 100 -width 4 -textvariable maxwidth ttk::spinbox $page.maxwidth -from 0 -to 100 -width 4 -textvariable maxwidth
grid $page.spacer $page.maxwidthl $page.maxwidth -sticky w grid $page.spacer $page.maxwidthl $page.maxwidth -sticky w
#xgettext:no-tcl-format #xgettext:no-tcl-format
ttk::label $page.maxpctl -text [mc "Maximum graph width (% of pane)"] ttk::label $page.maxpctl -text [mc "Maximum graph width (% of pane)"]
spinbox $page.maxpct -from 1 -to 100 -width 4 -textvariable maxgraphpct ttk::spinbox $page.maxpct -from 1 -to 100 -width 4 -textvariable maxgraphpct
grid x $page.maxpctl $page.maxpct -sticky w grid x $page.maxpctl $page.maxpct -sticky w

ttk::checkbutton $page.showlocal -text [mc "Show local changes"] \ ttk::checkbutton $page.showlocal -text [mc "Show local changes"] \
-variable showlocalchanges -variable showlocalchanges
grid x $page.showlocal -sticky w grid x $page.showlocal -sticky w

ttk::checkbutton $page.hideremotes -text [mc "Hide remote refs"] \ ttk::checkbutton $page.hideremotes -text [mc "Hide remote refs"] \
-variable hideremotes -variable hideremotes
grid x $page.hideremotes -sticky w grid x $page.hideremotes -sticky w


ttk::entry $page.refstohide -textvariable refstohide ttk::entry $page.refstohide -textvariable refstohide
ttk::frame $page.refstohidef ttk::label $page.refstohidel -text [mc "Refs to hide (space-separated globs)"]
ttk::label $page.refstohidef.l -text [mc "Refs to hide (space-separated globs)" ] grid x $page.refstohidel $page.refstohide -sticky ew
pack $page.refstohidef.l -side left grid configure $page.refstohide -padx {0 5}
pack configure $page.refstohidef.l -padx 10
grid x $page.refstohidef $page.refstohide -sticky ew


ttk::checkbutton $page.autocopy -text [mc "Copy commit ID to clipboard"] \ ttk::checkbutton $page.autocopy -text [mc "Copy commit ID to clipboard"] \
-variable autocopy -variable autocopy
grid x $page.autocopy -sticky w grid x $page.autocopy -sticky w

if {[haveselectionclipboard]} { if {[haveselectionclipboard]} {
ttk::checkbutton $page.autoselect -text [mc "Copy commit ID to X11 selection"] \ ttk::checkbutton $page.autoselect -text [mc "Copy commit ID to X11 selection"] \
-variable autoselect -variable autoselect
grid x $page.autoselect -sticky w grid x $page.autoselect -sticky w
} }


spinbox $page.autosellen -from 1 -to $hashlength -width 4 -textvariable autosellen ttk::spinbox $page.autosellen -from 1 -to $hashlength -width 4 -textvariable autosellen
ttk::label $page.autosellenl -text [mc "Length of commit ID to copy"] ttk::label $page.autosellenl -text [mc "Length of commit ID to copy"]
grid x $page.autosellenl $page.autosellen -sticky w grid x $page.autosellenl $page.autosellen -sticky w

ttk::label $page.kscroll1 -text [mc "Wheel scrolling multiplier"] ttk::label $page.kscroll1 -text [mc "Wheel scrolling multiplier"]
spinbox $page.kscroll -from 1 -to 20 -width 4 -textvariable kscroll ttk::spinbox $page.kscroll -from 1 -to 20 -width 4 -textvariable kscroll
grid x $page.kscroll1 $page.kscroll -sticky w grid x $page.kscroll1 $page.kscroll -sticky w


ttk::label $page.ddisp -text [mc "Diff display options"] -font mainfontbold ttk::label $page.ddisp -text [mc "Diff display options"] -font mainfontbold
grid $page.ddisp - -sticky w -pady 10 grid $page.ddisp - -sticky w -pady 10

ttk::label $page.tabstopl -text [mc "Tab spacing"] ttk::label $page.tabstopl -text [mc "Tab spacing"]
spinbox $page.tabstop -from 1 -to 20 -width 4 -textvariable tabstop ttk::spinbox $page.tabstop -from 1 -to 20 -width 4 -textvariable tabstop
grid x $page.tabstopl $page.tabstop -sticky w grid x $page.tabstopl $page.tabstop -sticky w


ttk::label $page.wrapcommentl -text [mc "Wrap comment text"] ttk::label $page.wrapcommentl -text [mc "Wrap comment text"]
@ -11745,12 +11711,15 @@ proc prefspage_general {notebook} {
ttk::checkbutton $page.ntag -text [mc "Display nearby tags/heads"] \ ttk::checkbutton $page.ntag -text [mc "Display nearby tags/heads"] \
-variable showneartags -variable showneartags
grid x $page.ntag -sticky w grid x $page.ntag -sticky w

ttk::label $page.maxrefsl -text [mc "Maximum # tags/heads to show"] ttk::label $page.maxrefsl -text [mc "Maximum # tags/heads to show"]
spinbox $page.maxrefs -from 1 -to 1000 -width 4 -textvariable maxrefs ttk::spinbox $page.maxrefs -from 1 -to 1000 -width 4 -textvariable maxrefs
grid x $page.maxrefsl $page.maxrefs -sticky w grid x $page.maxrefsl $page.maxrefs -sticky w

ttk::checkbutton $page.ldiff -text [mc "Limit diffs to listed paths"] \ ttk::checkbutton $page.ldiff -text [mc "Limit diffs to listed paths"] \
-variable limitdiffs -variable limitdiffs
grid x $page.ldiff -sticky w grid x $page.ldiff -sticky w

ttk::checkbutton $page.lattr -text [mc "Support per-file encodings"] \ ttk::checkbutton $page.lattr -text [mc "Support per-file encodings"] \
-variable perfile_attrs -variable perfile_attrs
grid x $page.lattr -sticky w grid x $page.lattr -sticky w
@ -11759,76 +11728,109 @@ proc prefspage_general {notebook} {
ttk::frame $page.extdifff ttk::frame $page.extdifff
ttk::label $page.extdifff.l -text [mc "External diff tool" ] ttk::label $page.extdifff.l -text [mc "External diff tool" ]
ttk::button $page.extdifff.b -text [mc "Choose..."] -command choose_extdiff ttk::button $page.extdifff.b -text [mc "Choose..."] -command choose_extdiff
pack $page.extdifff.l $page.extdifff.b -side left pack $page.extdifff.l -side left
pack configure $page.extdifff.l -padx 10 pack $page.extdifff.b -side right -padx {0 5}
grid x $page.extdifff $page.extdifft -sticky ew grid x $page.extdifff $page.extdifft -sticky ew
grid configure $page.extdifft -padx {0 5}


ttk::entry $page.webbrowser -textvariable web_browser ttk::entry $page.webbrowser -textvariable web_browser
ttk::frame $page.webbrowserf ttk::label $page.webbrowserl -text [mc "Web browser" ]
ttk::label $page.webbrowserf.l -text [mc "Web browser" ] grid x $page.webbrowserl $page.webbrowser -sticky ew
pack $page.webbrowserf.l -side left grid configure $page.webbrowser -padx {0 5}
pack configure $page.webbrowserf.l -padx 10
grid x $page.webbrowserf $page.webbrowser -sticky ew grid columnconfigure $page 2 -weight 1


return $page return $page
} }


proc prefspage_colors {notebook} { proc prefspage_colors {notebook} {
global uicolor bgcolor fgcolor ctext diffcolors selectbgcolor markbgcolor global bgcolor fgcolor ctext diffcolors selectbgcolor markbgcolor
global diffbgcolors global diffbgcolors
global themeloader


set page [create_prefs_page $notebook.colors] set page [create_prefs_page $notebook.colors]


ttk::label $page.themesel -font mainfontbold \
-text [mc "Themes - change requires restart"]
grid $page.themesel - -sticky w -pady 10

ttk::label $page.themelabel -text [mc "Theme to use after restart"]
makedroplist $page.theme theme {*}[lsort [ttk::style theme names]]
grid x $page.themelabel $page.theme -sticky w

ttk::entry $page.tloadvar -textvariable themeloader
ttk::frame $page.tloadframe
ttk::label $page.tloadframe.l -text [mc "Theme definition file"]
ttk::button $page.tloadframe.b -text [mc "Choose..."] \
-command [list choose_themeloader $page]
pack $page.tloadframe.l -side left
pack $page.tloadframe.b -side right -padx {0 5}
pack configure $page.tloadframe.l -padx 0
grid x $page.tloadframe $page.tloadvar -sticky ew
grid configure $page.tloadvar -padx {0 5}

ttk::label $page.themelabel2 -text \
[mc "The theme definition file may affect all themes."]
ttk::button $page.themebut2 -text [mc "Apply theme"] \
-command [list updatetheme $page]
grid x $page.themebut2 $page.themelabel2 -sticky w

ttk::label $page.cdisp -text [mc "Colors: press to choose"] -font mainfontbold ttk::label $page.cdisp -text [mc "Colors: press to choose"] -font mainfontbold
grid $page.cdisp - -sticky w -pady 10 grid $page.cdisp - -sticky w -pady 10
label $page.ui -padx 40 -relief sunk -background $uicolor
ttk::button $page.uibut -text [mc "Interface"] \
-command [list choosecolor uicolor {} $page [mc "interface"]]
grid x $page.uibut $page.ui -sticky w
label $page.bg -padx 40 -relief sunk -background $bgcolor label $page.bg -padx 40 -relief sunk -background $bgcolor
ttk::button $page.bgbut -text [mc "Background"] \ ttk::button $page.bgbut -text [mc "Background"] \
-command [list choosecolor bgcolor {} $page [mc "background"]] -command [list choosecolor bgcolor {} $page [mc "background"]]
grid x $page.bgbut $page.bg -sticky w grid x $page.bgbut $page.bg -sticky w

label $page.fg -padx 40 -relief sunk -background $fgcolor label $page.fg -padx 40 -relief sunk -background $fgcolor
ttk::button $page.fgbut -text [mc "Foreground"] \ ttk::button $page.fgbut -text [mc "Foreground"] \
-command [list choosecolor fgcolor {} $page [mc "foreground"]] -command [list choosecolor fgcolor {} $page [mc "foreground"]]
grid x $page.fgbut $page.fg -sticky w grid x $page.fgbut $page.fg -sticky w

label $page.diffold -padx 40 -relief sunk -background [lindex $diffcolors 0] label $page.diffold -padx 40 -relief sunk -background [lindex $diffcolors 0]
ttk::button $page.diffoldbut -text [mc "Diff: old lines"] \ ttk::button $page.diffoldbut -text [mc "Diff: old lines"] \
-command [list choosecolor diffcolors 0 $page [mc "diff old lines"]] -command [list choosecolor diffcolors 0 $page [mc "diff old lines"]]
grid x $page.diffoldbut $page.diffold -sticky w grid x $page.diffoldbut $page.diffold -sticky w

label $page.diffoldbg -padx 40 -relief sunk -background [lindex $diffbgcolors 0] label $page.diffoldbg -padx 40 -relief sunk -background [lindex $diffbgcolors 0]
ttk::button $page.diffoldbgbut -text [mc "Diff: old lines bg"] \ ttk::button $page.diffoldbgbut -text [mc "Diff: old lines bg"] \
-command [list choosecolor diffbgcolors 0 $page [mc "diff old lines bg"]] -command [list choosecolor diffbgcolors 0 $page [mc "diff old lines bg"]]
grid x $page.diffoldbgbut $page.diffoldbg -sticky w grid x $page.diffoldbgbut $page.diffoldbg -sticky w

label $page.diffnew -padx 40 -relief sunk -background [lindex $diffcolors 1] label $page.diffnew -padx 40 -relief sunk -background [lindex $diffcolors 1]
ttk::button $page.diffnewbut -text [mc "Diff: new lines"] \ ttk::button $page.diffnewbut -text [mc "Diff: new lines"] \
-command [list choosecolor diffcolors 1 $page [mc "diff new lines"]] -command [list choosecolor diffcolors 1 $page [mc "diff new lines"]]
grid x $page.diffnewbut $page.diffnew -sticky w grid x $page.diffnewbut $page.diffnew -sticky w

label $page.diffnewbg -padx 40 -relief sunk -background [lindex $diffbgcolors 1] label $page.diffnewbg -padx 40 -relief sunk -background [lindex $diffbgcolors 1]
ttk::button $page.diffnewbgbut -text [mc "Diff: new lines bg"] \ ttk::button $page.diffnewbgbut -text [mc "Diff: new lines bg"] \
-command [list choosecolor diffbgcolors 1 $page [mc "diff new lines bg"]] -command [list choosecolor diffbgcolors 1 $page [mc "diff new lines bg"]]
grid x $page.diffnewbgbut $page.diffnewbg -sticky w grid x $page.diffnewbgbut $page.diffnewbg -sticky w

label $page.hunksep -padx 40 -relief sunk -background [lindex $diffcolors 2] label $page.hunksep -padx 40 -relief sunk -background [lindex $diffcolors 2]
ttk::button $page.hunksepbut -text [mc "Diff: hunk header"] \ ttk::button $page.hunksepbut -text [mc "Diff: hunk header"] \
-command [list choosecolor diffcolors 2 $page [mc "diff hunk header"]] -command [list choosecolor diffcolors 2 $page [mc "diff hunk header"]]
grid x $page.hunksepbut $page.hunksep -sticky w grid x $page.hunksepbut $page.hunksep -sticky w

label $page.markbgsep -padx 40 -relief sunk -background $markbgcolor label $page.markbgsep -padx 40 -relief sunk -background $markbgcolor
ttk::button $page.markbgbut -text [mc "Marked line bg"] \ ttk::button $page.markbgbut -text [mc "Marked line bg"] \
-command [list choosecolor markbgcolor {} $page [mc "marked line background"]] -command [list choosecolor markbgcolor {} $page [mc "marked line background"]]
grid x $page.markbgbut $page.markbgsep -sticky w grid x $page.markbgbut $page.markbgsep -sticky w

label $page.selbgsep -padx 40 -relief sunk -background $selectbgcolor label $page.selbgsep -padx 40 -relief sunk -background $selectbgcolor
ttk::button $page.selbgbut -text [mc "Select bg"] \ ttk::button $page.selbgbut -text [mc "Select bg"] \
-command [list choosecolor selectbgcolor {} $page [mc "background"]] -command [list choosecolor selectbgcolor {} $page [mc "background"]]
grid x $page.selbgbut $page.selbgsep -sticky w grid x $page.selbgbut $page.selbgsep -sticky w

grid columnconfigure $page 2 -weight 1

return $page return $page
} }


proc prefspage_set_colorswatches {page} { proc prefspage_set_colorswatches {page} {
global uicolor bgcolor fgcolor ctext diffcolors selectbgcolor markbgcolor global bgcolor fgcolor ctext diffcolors selectbgcolor markbgcolor
global diffbgcolors global diffbgcolors


$page.ui configure -background $uicolor
$page.bg configure -background $bgcolor $page.bg configure -background $bgcolor
$page.fg configure -background $fgcolor $page.fg configure -background $fgcolor
$page.diffold configure -background [lindex $diffcolors 0] $page.diffold configure -background [lindex $diffcolors 0]
@ -11847,6 +11849,7 @@ proc prefspage_fonts {notebook} {
mkfontdisp mainfont $page [mc "Main font"] mkfontdisp mainfont $page [mc "Main font"]
mkfontdisp textfont $page [mc "Diff display font"] mkfontdisp textfont $page [mc "Diff display font"]
mkfontdisp uifont $page [mc "User interface font"] mkfontdisp uifont $page [mc "User interface font"]
grid columnconfigure $page 2 -weight 1
return $page return $page
} }


@ -11881,7 +11884,7 @@ proc doprefs {} {
grid rowconfigure $notebook 1 -weight 1 grid rowconfigure $notebook 1 -weight 1
raise [lindex $pages 0] raise [lindex $pages 0]


grid $notebook -sticky news -padx 2 -pady 2 grid $notebook -sticky news -padx 3 -pady 3
grid rowconfigure $top 0 -weight 1 grid rowconfigure $top 0 -weight 1
grid columnconfigure $top 0 -weight 1 grid columnconfigure $top 0 -weight 1


@ -11890,12 +11893,13 @@ proc doprefs {} {
ttk::button $top.buts.can -text [mc "Cancel"] -command prefscan -default normal ttk::button $top.buts.can -text [mc "Cancel"] -command prefscan -default normal
bind $top <Key-Return> prefsok bind $top <Key-Return> prefsok
bind $top <Key-Escape> prefscan bind $top <Key-Escape> prefscan
grid $top.buts.ok $top.buts.can grid $top.buts.ok $top.buts.can -padx 20
grid columnconfigure $top.buts 0 -weight 1 -uniform a grid $top.buts -sticky w -pady 10
grid columnconfigure $top.buts 1 -weight 1 -uniform a
grid $top.buts - - -pady 10 -sticky ew
grid columnconfigure $top 2 -weight 1
bind $top <Visibility> [list focus $top.buts.ok] bind $top <Visibility> [list focus $top.buts.ok]

# let geometry manager determine run, set minimum size
update idletasks
wm minsize $top [winfo reqwidth $top] [winfo reqheight $top]
} }


proc choose_extdiff {} { proc choose_extdiff {} {
@ -11907,6 +11911,51 @@ proc choose_extdiff {} {
} }
} }


proc run_themeloader {f} {
if {![info exists ::_themefiles_seen]} {
set ::_themefiles_seen [dict create]
}

set fn [file normalize $f]
if {![dict exists $::_themefiles_seen $fn]} {
if {[catch {source $fn} err]} {
error_popup "could not interpret: $fn\n$err"
dict set ::_themefiles_seen $fn 0
} else {
dict set ::_themefiles_seen $fn 1
}
}
return [dict get $::_themefiles_seen $fn]
}

proc updatetheme {prefspage {dotheme 1}} {
global theme
global themeloader
if {$themeloader ne {}} {
if {![run_themeloader $themeloader]} {
set themeloader {}
return
} else {
$prefspage.theme configure -values \
[lsort [ttk::style theme names]]
}
}
if {$dotheme} {
ttk::style theme use $theme
set_gui_colors
prefspage_set_colorswatches $prefspage
}
}

proc choose_themeloader {prefspage} {
global themeloader
set tfile [tk_getOpenFile -title [mc "Gitk: select theme definition"] -multiple false]
if {$tfile ne {}} {
set themeloader $tfile
updatetheme $prefspage 0
}
}

proc choosecolor {v vi prefspage x} { proc choosecolor {v vi prefspage x} {
global $v global $v


@ -11930,21 +11979,6 @@ proc setselbg {c} {
allcanvs itemconf secsel -fill $c allcanvs itemconf secsel -fill $c
} }


# This sets the background color and the color scheme for the whole UI.
# For some reason, tk_setPalette chooses a nasty dark red for selectColor
# if we don't specify one ourselves, which makes the checkbuttons and
# radiobuttons look bad. This chooses white for selectColor if the
# background color is light, or black if it is dark.
proc setui {c} {
if {[tk windowingsystem] eq "win32"} { return }
set bg [winfo rgb . $c]
set selc black
if {[lindex $bg 0] + 1.5 * [lindex $bg 1] + 0.5 * [lindex $bg 2] > 100000} {
set selc white
}
tk_setPalette background $c selectColor $selc
}

proc setbg {c} { proc setbg {c} {
global bglist global bglist


@ -11969,10 +12003,9 @@ proc setfg {c} {
} }


proc set_gui_colors {} { proc set_gui_colors {} {
global uicolor bgcolor fgcolor ctext diffcolors selectbgcolor markbgcolor global bgcolor fgcolor ctext diffcolors selectbgcolor markbgcolor
global diffbgcolors global diffbgcolors


setui $uicolor
setbg $bgcolor setbg $bgcolor
setfg $fgcolor setfg $fgcolor
$ctext tag conf d0 -foreground [lindex $diffcolors 0] $ctext tag conf d0 -foreground [lindex $diffcolors 0]
@ -11994,6 +12027,7 @@ proc prefscan {} {
catch {destroy $prefstop} catch {destroy $prefstop}
unset prefstop unset prefstop
fontcan fontcan
setttkstyle
set_gui_colors set_gui_colors
} }


@ -12460,11 +12494,13 @@ namespace import ::msgcat::mc


# on OSX bring the current Wish process window to front # on OSX bring the current Wish process window to front
if {[tk windowingsystem] eq "aqua"} { if {[tk windowingsystem] eq "aqua"} {
catch {
safe_exec [list osascript -e [format { safe_exec [list osascript -e [format {
tell application "System Events" tell application "System Events"
set frontmost of processes whose unix id is %d to true set frontmost of processes whose unix id is %d to true
end tell end tell
} [pid] ]] } [pid] ]]
}
} }


# Unset GIT_TRACE var if set # Unset GIT_TRACE var if set
@ -12569,17 +12605,11 @@ if {[tk windowingsystem] eq "aqua"} {


set colors {"#00ff00" red blue magenta darkgrey brown orange} set colors {"#00ff00" red blue magenta darkgrey brown orange}
if {[tk windowingsystem] eq "win32"} { if {[tk windowingsystem] eq "win32"} {
set uicolor SystemButtonFace
set uifgcolor SystemButtonText
set uifgdisabledcolor SystemDisabledText
set bgcolor SystemWindow set bgcolor SystemWindow
set fgcolor SystemWindowText set fgcolor SystemWindowText
set selectbgcolor SystemHighlight set selectbgcolor SystemHighlight
set web_browser "cmd /c start" set web_browser "cmd /c start"
} else { } else {
set uicolor grey85
set uifgcolor black
set uifgdisabledcolor "#999"
set bgcolor white set bgcolor white
set fgcolor black set fgcolor black
set selectbgcolor gray85 set selectbgcolor gray85
@ -12619,6 +12649,12 @@ set circleoutlinecolor $fgcolor
set foundbgcolor yellow set foundbgcolor yellow
set currentsearchhitbgcolor orange set currentsearchhitbgcolor orange


set theme [ttk::style theme use]
set themeloader {}
set uicolor {}
set uifgcolor {}
set uifgdisabledcolor {}

# button for popping up context menus # button for popping up context menus
if {[tk windowingsystem] eq "aqua" && [package vcompare $::tcl_version 8.7] < 0} { if {[tk windowingsystem] eq "aqua" && [package vcompare $::tcl_version 8.7] < 0} {
set ctxbut <Button-2> set ctxbut <Button-2>
@ -12702,6 +12738,8 @@ set config_variables {
tagfgcolor tagfgcolor
tagoutlinecolor tagoutlinecolor
textfont textfont
theme
themeloader
uicolor uicolor
uifgcolor uifgcolor
uifgdisabledcolor uifgdisabledcolor
@ -12801,7 +12839,13 @@ set nullid "0000000000000000000000000000000000000000"
set nullid2 "0000000000000000000000000000000000000001" set nullid2 "0000000000000000000000000000000000000001"
set nullfile "/dev/null" set nullfile "/dev/null"


setttkstyle if {[file exists $themeloader]} {
if {![run_themeloader $themeloader]} {
puts stderr "Could not interpret themeloader: $themeloader"
exit 1
}
}

set appname "gitk" set appname "gitk"


set runq {} set runq {}
@ -12917,6 +12961,7 @@ if {[tk windowingsystem] eq "win32"} {
focus -force . focus -force .
} }


setttkstyle
set_gui_colors set_gui_colors


getcommits {} getcommits {}