* https://github.com/prati0100/git-gui:
  git-gui: blame: prevent tool tips from sticking around after Command-Tab
  git-gui: improve dark mode support
  git-gui: fix mixed tabs and spaces; prefer tabs
This commit is contained in:
Junio C Hamano 2020-10-17 13:10:58 -07:00
Родитель a5fa49ff0a 38c2ac2e2a
Коммит 430cabb104
3 изменённых файлов: 93 добавлений и 49 удалений

Просмотреть файл

@ -720,7 +720,9 @@ proc rmsel_tag {text} {
-background [$text cget -background] \ -background [$text cget -background] \
-foreground [$text cget -foreground] \ -foreground [$text cget -foreground] \
-borderwidth 0 -borderwidth 0
$text tag conf in_sel -background lightgray $text tag conf in_sel\
-background $color::select_bg \
-foreground $color::select_fg
bind $text <Motion> break bind $text <Motion> break
return $text return $text
} }
@ -863,6 +865,7 @@ proc apply_config {} {
set NS ttk set NS ttk
bind [winfo class .] <<ThemeChanged>> [list InitTheme] bind [winfo class .] <<ThemeChanged>> [list InitTheme]
pave_toplevel . pave_toplevel .
color::sync_with_theme
} }
} }
} }
@ -947,15 +950,15 @@ if {![regsub {^git version } $_git_version {} _git_version]} {
} }
proc get_trimmed_version {s} { proc get_trimmed_version {s} {
set r {} set r {}
foreach x [split $s -._] { foreach x [split $s -._] {
if {[string is integer -strict $x]} { if {[string is integer -strict $x]} {
lappend r $x lappend r $x
} else { } else {
break break
} }
} }
return [join $r .] return [join $r .]
} }
set _real_git_version $_git_version set _real_git_version $_git_version
set _git_version [get_trimmed_version $_git_version] set _git_version [get_trimmed_version $_git_version]
@ -967,7 +970,7 @@ if {![regexp {^[1-9]+(\.[0-9]+)+$} $_git_version]} {
-type yesno \ -type yesno \
-default no \ -default no \
-title "[appname]: warning" \ -title "[appname]: warning" \
-message [mc "Git version cannot be determined. -message [mc "Git version cannot be determined.
%s claims it is version '%s'. %s claims it is version '%s'.
@ -1653,7 +1656,7 @@ proc prepare_commit_msg_hook_wait {fd_ph} {
set pch_error {} set pch_error {}
catch {file delete [gitdir PREPARE_COMMIT_MSG]} catch {file delete [gitdir PREPARE_COMMIT_MSG]}
return return
} }
fconfigure $fd_ph -blocking 0 fconfigure $fd_ph -blocking 0
catch {file delete [gitdir PREPARE_COMMIT_MSG]} catch {file delete [gitdir PREPARE_COMMIT_MSG]}
} }
@ -2001,72 +2004,72 @@ set filemask {
#define mask_width 14 #define mask_width 14
#define mask_height 15 #define mask_height 15
static unsigned char mask_bits[] = { static unsigned char mask_bits[] = {
0xfe, 0x1f, 0xfe, 0x1f, 0xfe, 0x1f, 0xfe, 0x1f, 0xfe, 0x1f, 0xfe, 0x1f, 0xfe, 0x1f, 0xfe, 0x1f, 0xfe, 0x1f, 0xfe, 0x1f, 0xfe, 0x1f, 0xfe, 0x1f,
0xfe, 0x1f, 0xfe, 0x1f, 0xfe, 0x1f, 0xfe, 0x1f, 0xfe, 0x1f, 0xfe, 0x1f, 0xfe, 0x1f, 0xfe, 0x1f, 0xfe, 0x1f, 0xfe, 0x1f, 0xfe, 0x1f, 0xfe, 0x1f,
0xfe, 0x1f, 0xfe, 0x1f, 0xfe, 0x1f}; 0xfe, 0x1f, 0xfe, 0x1f, 0xfe, 0x1f};
} }
image create bitmap file_plain -background white -foreground black -data { image create bitmap file_plain -background white -foreground black -data {
#define plain_width 14 #define plain_width 14
#define plain_height 15 #define plain_height 15
static unsigned char plain_bits[] = { static unsigned char plain_bits[] = {
0xfe, 0x01, 0x02, 0x03, 0x02, 0x05, 0x02, 0x09, 0x02, 0x1f, 0x02, 0x10, 0xfe, 0x01, 0x02, 0x03, 0x02, 0x05, 0x02, 0x09, 0x02, 0x1f, 0x02, 0x10,
0x02, 0x10, 0x02, 0x10, 0x02, 0x10, 0x02, 0x10, 0x02, 0x10, 0x02, 0x10, 0x02, 0x10, 0x02, 0x10, 0x02, 0x10, 0x02, 0x10, 0x02, 0x10, 0x02, 0x10,
0x02, 0x10, 0x02, 0x10, 0xfe, 0x1f}; 0x02, 0x10, 0x02, 0x10, 0xfe, 0x1f};
} -maskdata $filemask } -maskdata $filemask
image create bitmap file_mod -background white -foreground blue -data { image create bitmap file_mod -background white -foreground blue -data {
#define mod_width 14 #define mod_width 14
#define mod_height 15 #define mod_height 15
static unsigned char mod_bits[] = { static unsigned char mod_bits[] = {
0xfe, 0x01, 0x02, 0x03, 0x7a, 0x05, 0x02, 0x09, 0x7a, 0x1f, 0x02, 0x10, 0xfe, 0x01, 0x02, 0x03, 0x7a, 0x05, 0x02, 0x09, 0x7a, 0x1f, 0x02, 0x10,
0xfa, 0x17, 0x02, 0x10, 0xfa, 0x17, 0x02, 0x10, 0xfa, 0x17, 0x02, 0x10, 0xfa, 0x17, 0x02, 0x10, 0xfa, 0x17, 0x02, 0x10, 0xfa, 0x17, 0x02, 0x10,
0xfa, 0x17, 0x02, 0x10, 0xfe, 0x1f}; 0xfa, 0x17, 0x02, 0x10, 0xfe, 0x1f};
} -maskdata $filemask } -maskdata $filemask
image create bitmap file_fulltick -background white -foreground "#007000" -data { image create bitmap file_fulltick -background white -foreground "#007000" -data {
#define file_fulltick_width 14 #define file_fulltick_width 14
#define file_fulltick_height 15 #define file_fulltick_height 15
static unsigned char file_fulltick_bits[] = { static unsigned char file_fulltick_bits[] = {
0xfe, 0x01, 0x02, 0x1a, 0x02, 0x0c, 0x02, 0x0c, 0x02, 0x16, 0x02, 0x16, 0xfe, 0x01, 0x02, 0x1a, 0x02, 0x0c, 0x02, 0x0c, 0x02, 0x16, 0x02, 0x16,
0x02, 0x13, 0x00, 0x13, 0x86, 0x11, 0x8c, 0x11, 0xd8, 0x10, 0xf2, 0x10, 0x02, 0x13, 0x00, 0x13, 0x86, 0x11, 0x8c, 0x11, 0xd8, 0x10, 0xf2, 0x10,
0x62, 0x10, 0x02, 0x10, 0xfe, 0x1f}; 0x62, 0x10, 0x02, 0x10, 0xfe, 0x1f};
} -maskdata $filemask } -maskdata $filemask
image create bitmap file_question -background white -foreground black -data { image create bitmap file_question -background white -foreground black -data {
#define file_question_width 14 #define file_question_width 14
#define file_question_height 15 #define file_question_height 15
static unsigned char file_question_bits[] = { static unsigned char file_question_bits[] = {
0xfe, 0x01, 0x02, 0x02, 0xe2, 0x04, 0xf2, 0x09, 0x1a, 0x1b, 0x0a, 0x13, 0xfe, 0x01, 0x02, 0x02, 0xe2, 0x04, 0xf2, 0x09, 0x1a, 0x1b, 0x0a, 0x13,
0x82, 0x11, 0xc2, 0x10, 0x62, 0x10, 0x62, 0x10, 0x02, 0x10, 0x62, 0x10, 0x82, 0x11, 0xc2, 0x10, 0x62, 0x10, 0x62, 0x10, 0x02, 0x10, 0x62, 0x10,
0x62, 0x10, 0x02, 0x10, 0xfe, 0x1f}; 0x62, 0x10, 0x02, 0x10, 0xfe, 0x1f};
} -maskdata $filemask } -maskdata $filemask
image create bitmap file_removed -background white -foreground red -data { image create bitmap file_removed -background white -foreground red -data {
#define file_removed_width 14 #define file_removed_width 14
#define file_removed_height 15 #define file_removed_height 15
static unsigned char file_removed_bits[] = { static unsigned char file_removed_bits[] = {
0xfe, 0x01, 0x02, 0x03, 0x02, 0x05, 0x02, 0x09, 0x02, 0x1f, 0x02, 0x10, 0xfe, 0x01, 0x02, 0x03, 0x02, 0x05, 0x02, 0x09, 0x02, 0x1f, 0x02, 0x10,
0x1a, 0x16, 0x32, 0x13, 0xe2, 0x11, 0xc2, 0x10, 0xe2, 0x11, 0x32, 0x13, 0x1a, 0x16, 0x32, 0x13, 0xe2, 0x11, 0xc2, 0x10, 0xe2, 0x11, 0x32, 0x13,
0x1a, 0x16, 0x02, 0x10, 0xfe, 0x1f}; 0x1a, 0x16, 0x02, 0x10, 0xfe, 0x1f};
} -maskdata $filemask } -maskdata $filemask
image create bitmap file_merge -background white -foreground blue -data { image create bitmap file_merge -background white -foreground blue -data {
#define file_merge_width 14 #define file_merge_width 14
#define file_merge_height 15 #define file_merge_height 15
static unsigned char file_merge_bits[] = { static unsigned char file_merge_bits[] = {
0xfe, 0x01, 0x02, 0x03, 0x62, 0x05, 0x62, 0x09, 0x62, 0x1f, 0x62, 0x10, 0xfe, 0x01, 0x02, 0x03, 0x62, 0x05, 0x62, 0x09, 0x62, 0x1f, 0x62, 0x10,
0xfa, 0x11, 0xf2, 0x10, 0x62, 0x10, 0x02, 0x10, 0xfa, 0x17, 0x02, 0x10, 0xfa, 0x11, 0xf2, 0x10, 0x62, 0x10, 0x02, 0x10, 0xfa, 0x17, 0x02, 0x10,
0xfa, 0x17, 0x02, 0x10, 0xfe, 0x1f}; 0xfa, 0x17, 0x02, 0x10, 0xfe, 0x1f};
} -maskdata $filemask } -maskdata $filemask
image create bitmap file_statechange -background white -foreground green -data { image create bitmap file_statechange -background white -foreground green -data {
#define file_statechange_width 14 #define file_statechange_width 14
#define file_statechange_height 15 #define file_statechange_height 15
static unsigned char file_statechange_bits[] = { static unsigned char file_statechange_bits[] = {
0xfe, 0x01, 0x02, 0x03, 0x02, 0x05, 0x02, 0x09, 0x02, 0x1f, 0x62, 0x10, 0xfe, 0x01, 0x02, 0x03, 0x02, 0x05, 0x02, 0x09, 0x02, 0x1f, 0x62, 0x10,
0x62, 0x10, 0xba, 0x11, 0xba, 0x11, 0x62, 0x10, 0x62, 0x10, 0x02, 0x10, 0x62, 0x10, 0xba, 0x11, 0xba, 0x11, 0x62, 0x10, 0x62, 0x10, 0x02, 0x10,
0x02, 0x10, 0x02, 0x10, 0xfe, 0x1f}; 0x02, 0x10, 0x02, 0x10, 0xfe, 0x1f};
} -maskdata $filemask } -maskdata $filemask
set ui_index .vpane.files.index.list set ui_index .vpane.files.index.list
@ -3272,7 +3275,7 @@ pack .vpane -anchor n -side top -fill both -expand 1
textframe .vpane.files.workdir -height 100 -width 200 textframe .vpane.files.workdir -height 100 -width 200
tlabel .vpane.files.workdir.title -text [mc "Unstaged Changes"] \ tlabel .vpane.files.workdir.title -text [mc "Unstaged Changes"] \
-background lightsalmon -foreground black -background lightsalmon -foreground black
ttext $ui_workdir -background white -foreground black \ ttext $ui_workdir \
-borderwidth 0 \ -borderwidth 0 \
-width 20 -height 10 \ -width 20 -height 10 \
-wrap none \ -wrap none \
@ -3294,7 +3297,7 @@ textframe .vpane.files.index -height 100 -width 200
tlabel .vpane.files.index.title \ tlabel .vpane.files.index.title \
-text [mc "Staged Changes (Will Commit)"] \ -text [mc "Staged Changes (Will Commit)"] \
-background lightgreen -foreground black -background lightgreen -foreground black
ttext $ui_index -background white -foreground black \ ttext $ui_index \
-borderwidth 0 \ -borderwidth 0 \
-width 20 -height 10 \ -width 20 -height 10 \
-wrap none \ -wrap none \
@ -3321,7 +3324,9 @@ if {!$use_ttk} {
foreach i [list $ui_index $ui_workdir] { foreach i [list $ui_index $ui_workdir] {
rmsel_tag $i rmsel_tag $i
$i tag conf in_diff -background [$i tag cget in_sel -background] $i tag conf in_diff \
-background $color::select_bg \
-foreground $color::select_fg
} }
unset i unset i
@ -3429,7 +3434,7 @@ if {![is_enabled nocommit]} {
} }
textframe .vpane.lower.commarea.buffer.frame textframe .vpane.lower.commarea.buffer.frame
ttext $ui_comm -background white -foreground black \ ttext $ui_comm \
-borderwidth 1 \ -borderwidth 1 \
-undo true \ -undo true \
-maxundo 20 \ -maxundo 20 \
@ -3558,7 +3563,7 @@ bind .vpane.lower.diff.header.path <Button-1> {do_file_open $current_diff_path}
# #
textframe .vpane.lower.diff.body textframe .vpane.lower.diff.body
set ui_diff .vpane.lower.diff.body.t set ui_diff .vpane.lower.diff.body.t
ttext $ui_diff -background white -foreground black \ ttext $ui_diff \
-borderwidth 0 \ -borderwidth 0 \
-width 80 -height 5 -wrap none \ -width 80 -height 5 -wrap none \
-font font_diff \ -font font_diff \
@ -3878,18 +3883,18 @@ proc on_application_mapped {} {
set gm $repo_config(gui.geometry) set gm $repo_config(gui.geometry)
if {$use_ttk} { if {$use_ttk} {
bind .vpane <Map> \ bind .vpane <Map> \
[list on_ttk_pane_mapped %W 0 [lindex $gm 1]] [list on_ttk_pane_mapped %W 0 [lindex $gm 1]]
bind .vpane.files <Map> \ bind .vpane.files <Map> \
[list on_ttk_pane_mapped %W 0 [lindex $gm 2]] [list on_ttk_pane_mapped %W 0 [lindex $gm 2]]
} else { } else {
bind .vpane <Map> \ bind .vpane <Map> \
[list on_tk_pane_mapped %W 0 \ [list on_tk_pane_mapped %W 0 \
[lindex $gm 1] \ [lindex $gm 1] \
[lindex [.vpane sash coord 0] 1]] [lindex [.vpane sash coord 0] 1]]
bind .vpane.files <Map> \ bind .vpane.files <Map> \
[list on_tk_pane_mapped %W 0 \ [list on_tk_pane_mapped %W 0 \
[lindex [.vpane.files sash coord 0] 0] \ [lindex [.vpane.files sash coord 0] 0] \
[lindex $gm 2]] [lindex $gm 2]]
} }
wm geometry . [lindex $gm 0] wm geometry . [lindex $gm 0]
} }

Просмотреть файл

@ -328,6 +328,7 @@ constructor new {i_commit i_path i_jump} {
bind $i <Any-Motion> [cb _show_tooltip $i @%x,%y] bind $i <Any-Motion> [cb _show_tooltip $i @%x,%y]
bind $i <Any-Enter> [cb _hide_tooltip] bind $i <Any-Enter> [cb _hide_tooltip]
bind $i <Any-Leave> [cb _hide_tooltip] bind $i <Any-Leave> [cb _hide_tooltip]
bind $i <Deactivate> [cb _hide_tooltip]
bind_button3 $i " bind_button3 $i "
[cb _hide_tooltip] [cb _hide_tooltip]
set cursorX %x set cursorX %x

Просмотреть файл

@ -1,6 +1,44 @@
# Functions for supporting the use of themed Tk widgets in git-gui. # Functions for supporting the use of themed Tk widgets in git-gui.
# Copyright (C) 2009 Pat Thoyts <patthoyts@users.sourceforge.net> # Copyright (C) 2009 Pat Thoyts <patthoyts@users.sourceforge.net>
namespace eval color {
# Variable colors
# Preffered way to set widget colors is using add_option.
# In some cases, like with tags in_diff/in_sel, we use these colors.
variable select_bg lightgray
variable select_fg black
proc sync_with_theme {} {
set base_bg [ttk::style lookup . -background]
set base_fg [ttk::style lookup . -foreground]
set text_bg [ttk::style lookup Treeview -background]
set text_fg [ttk::style lookup Treeview -foreground]
set select_bg [ttk::style lookup Default -selectbackground]
set select_fg [ttk::style lookup Default -selectforeground]
set color::select_bg $select_bg
set color::select_fg $select_fg
proc add_option {key val} {
option add $key $val widgetDefault
}
# Add options for plain Tk widgets
# Using `option add` instead of tk_setPalette to avoid unintended
# consequences.
if {![is_MacOSX]} {
add_option *Menu.Background $base_bg
add_option *Menu.Foreground $base_fg
add_option *Menu.activeBackground $select_bg
add_option *Menu.activeForeground $select_fg
}
add_option *Text.Background $text_bg
add_option *Text.Foreground $text_fg
add_option *Text.HighlightBackground $base_bg
add_option *Text.HighlightColor $select_bg
}
}
proc ttk_get_current_theme {} { proc ttk_get_current_theme {} {
# Handle either current Tk or older versions of 8.5 # Handle either current Tk or older versions of 8.5
if {[catch {set theme [ttk::style theme use]}]} { if {[catch {set theme [ttk::style theme use]}]} {