From 59a6d8831a75f793aae087bbffa9325f09af246a Mon Sep 17 00:00:00 2001 From: Christoph Sommer Date: Sun, 27 Apr 2025 22:02:43 +0200 Subject: [PATCH 1/3] gitk: fix text wrapping preferences for unthemed tk Use a widget factory that works for both plain Tk and themed Tk. Signed-off-by: Christoph Sommer --- gitk-git/gitk | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/gitk-git/gitk b/gitk-git/gitk index bc9efa18566fb8..8cb17f39d417bf 100755 --- a/gitk-git/gitk +++ b/gitk-git/gitk @@ -11767,13 +11767,11 @@ proc prefspage_general {notebook} { grid x $page.tabstopl $page.tabstop -sticky w ${NS}::label $page.wrapcommentl -text [mc "Wrap comment text"] - ${NS}::combobox $page.wrapcomment -values {none char word} -state readonly \ - -textvariable wrapcomment + makedroplist $page.wrapcomment wrapcomment "none" "char" "word" grid x $page.wrapcommentl $page.wrapcomment -sticky w ${NS}::label $page.wrapdefaultl -text [mc "Wrap other text"] - ${NS}::combobox $page.wrapdefault -values {none char word} -state readonly \ - -textvariable wrapdefault + makedroplist $page.wrapdefault wrapdefault "none" "char" "word" grid x $page.wrapdefaultl $page.wrapdefault -sticky w ${NS}::checkbutton $page.ntag -text [mc "Display nearby tags/heads"] \ From abe92305dcca8ebece332454004b6611ce2efd5a Mon Sep 17 00:00:00 2001 From: Christoph Sommer Date: Sun, 27 Apr 2025 22:10:50 +0200 Subject: [PATCH 2/3] gitk: do not set fg/bg color scheme for themed Tk Ignore the uicolor preference not just for win32, but also whenever themed Tk is used. On themed Tk it was frequently only changing the background of only a few select widgets rather than everything - and the default uicolor was frequently not the background color that themed Tk used for its widgets, resulting in a messy looking UI (mostly light gray, with random widgets surrounded by darker gray borders) Signed-off-by: Christoph Sommer --- gitk-git/gitk | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/gitk-git/gitk b/gitk-git/gitk index 8cb17f39d417bf..da7507af360448 100755 --- a/gitk-git/gitk +++ b/gitk-git/gitk @@ -11991,6 +11991,12 @@ proc setselbg {c} { # radiobuttons look bad. This chooses white for selectColor if the # background color is light, or black if it is dark. proc setui {c} { + global use_ttk + + if {$use_ttk} { + return + } + if {[tk windowingsystem] eq "win32"} { return } set bg [winfo rgb . $c] set selc black From 78d87c0ecc87df6c89130a6cbb417b534db8395d Mon Sep 17 00:00:00 2001 From: Christoph Sommer Date: Sun, 27 Apr 2025 22:20:29 +0200 Subject: [PATCH 3/3] gitk: on themed tk, use uicolor to draw a sash between panes Add a custom sash (grab/resize handle) where the window is split into panes when using themed Tk as. Other than native Tk which draws sashes by default, themed Tk does not, by default, render such handles leaving users to guess where to click to start resizing window panes. The color used for drawing these is uicolor, which is not needed on themed Tk, allowing the user to make these elements as pronounced or as invisible as desired. Signed-off-by: Christoph Sommer --- gitk-git/gitk | 48 +++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 45 insertions(+), 3 deletions(-) diff --git a/gitk-git/gitk b/gitk-git/gitk index da7507af360448..d19f29bbf189dc 100755 --- a/gitk-git/gitk +++ b/gitk-git/gitk @@ -2133,7 +2133,31 @@ proc setoptions {} { option add *Listbox.font mainfont startupFile } +proc createttkimages {} { + global uicolor + + image create bitmap img:myVerticalSash -foreground $uicolor -data { + #define xbm_width 5 + #define xbm_height 47 + static unsigned char xbm_bits[] = { + 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, + 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x0e, + 0x00, 0x00, 0x0e, 0x00, 0x00, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, + 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04 }; + } + + image create bitmap img:myHorizontalSash -foreground $uicolor -data { + #define xbm_width 47 + #define xbm_height 5 + static unsigned char xbm_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0x04, 0x00, 0x00, + 0xff, 0xff, 0x93, 0xe4, 0xff, 0x7f, 0x00, 0x00, 0x90, 0x04, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; + } +} + proc setttkstyle {} { + eval font configure TkDefaultFont [fontflags mainfont] eval font configure TkTextFont [fontflags textfont] eval font configure TkHeadingFont [fontflags mainfont] @@ -2143,6 +2167,16 @@ proc setttkstyle {} { eval font configure TkIconFont [fontflags uifont] eval font configure TkMenuFont [fontflags uifont] eval font configure TkSmallCaptionFont [fontflags uifont] + + createttkimages + + ttk::style element create myVerticalSash image img:myVerticalSash -sticky ew + + ttk::style element create myHorizontalSash image img:myHorizontalSash -sticky ns + + ttk::style layout Vertical.Sash { myVerticalSash } + + ttk::style layout Horizontal.Sash { myHorizontalSash } } # Make a menu and submenus. @@ -11825,7 +11859,7 @@ proc prefspage_colors {notebook} { grid $page.cdisp - -sticky w -pady 10 label $page.ui -padx 40 -relief sunk -background $uicolor ${NS}::button $page.uibut -text [mc "Interface"] \ - -command [list choosecolor uicolor {} $page.ui [mc "interface"] setui] + -command [list choosecolor uicolor {} $page.ui [mc "interface"] setui_dialog] grid x $page.uibut $page.ui -sticky w label $page.bg -padx 40 -relief sunk -background $bgcolor ${NS}::button $page.bgbut -text [mc "Background"] \ @@ -12006,6 +12040,14 @@ proc setui {c} { tk_setPalette background $c selectColor $selc } +proc setui_dialog {c} { + global uicolor + + setui $c + + createttkimages +} + proc setbg {c} { global bglist @@ -12706,8 +12748,6 @@ eval font create textfontbold [fontflags textfont 1] parsefont uifont $uifont eval font create uifont [fontflags uifont] -setui $uicolor - setoptions # check that we can find a .git directory somewhere... @@ -12788,6 +12828,8 @@ if {![info exists have_ttk]} { set use_ttk [expr {$have_ttk && $want_ttk}] set NS [expr {$use_ttk ? "ttk" : ""}] +setui $uicolor + if {$use_ttk} { setttkstyle }