mirror of
https://github.com/git/git.git
synced 2026-04-05 06:20:09 +02:00
Amend tab ordering and text widget border and highlighting.
Tab order follows widget creation order (and Z-order) so amend this to match the layout more logically. For keyboard selection a highlight around the selected text widget is useful. Customized on Windows themed Tk to follow the native theme more closely with a custom EntryFrame style. Signed-off-by: Pat Thoyts <patthoyts@users.sourceforge.net>
This commit is contained in:
@@ -78,6 +78,57 @@ proc InitTheme {} {
|
||||
}
|
||||
}
|
||||
|
||||
# Define a style used for the surround of text widgets.
|
||||
proc InitEntryFrame {} {
|
||||
ttk::style theme settings default {
|
||||
ttk::style layout EntryFrame {
|
||||
EntryFrame.field -sticky nswe -border 0 -children {
|
||||
EntryFrame.fill -sticky nswe -children {
|
||||
EntryFrame.padding -sticky nswe
|
||||
}
|
||||
}
|
||||
}
|
||||
ttk::style configure EntryFrame -padding 1 -relief sunken
|
||||
ttk::style map EntryFrame -background {}
|
||||
}
|
||||
ttk::style theme settings classic {
|
||||
ttk::style configure EntryFrame -padding 2 -relief sunken
|
||||
ttk::style map EntryFrame -background {}
|
||||
}
|
||||
ttk::style theme settings alt {
|
||||
ttk::style configure EntryFrame -padding 2
|
||||
ttk::style map EntryFrame -background {}
|
||||
}
|
||||
ttk::style theme settings clam {
|
||||
ttk::style configure EntryFrame -padding 2
|
||||
ttk::style map EntryFrame -background {}
|
||||
}
|
||||
|
||||
# Ignore errors for missing native themes
|
||||
catch {
|
||||
ttk::style theme settings winnative {
|
||||
ttk::style configure EntryFrame -padding 2
|
||||
}
|
||||
ttk::style theme settings xpnative {
|
||||
ttk::style configure EntryFrame -padding 1
|
||||
ttk::style element create EntryFrame.field vsapi \
|
||||
EDIT 1 {disabled 4 focus 3 active 2 {} 1} -padding 1
|
||||
}
|
||||
ttk::style theme settings vista {
|
||||
ttk::style configure EntryFrame -padding 2
|
||||
ttk::style element create EntryFrame.field vsapi \
|
||||
EDIT 6 {disabled 4 focus 3 active 2 {} 1} -padding 2
|
||||
}
|
||||
}
|
||||
|
||||
bind EntryFrame <Enter> {%W instate !disabled {%W state active}}
|
||||
bind EntryFrame <Leave> {%W state !active}
|
||||
bind EntryFrame <<ThemeChanged>> {
|
||||
set pad [ttk::style lookup EntryFrame -padding]
|
||||
%W configure -padding [expr {$pad eq {} ? 1 : $pad}]
|
||||
}
|
||||
}
|
||||
|
||||
proc gold_frame {w args} {
|
||||
global use_ttk
|
||||
if {$use_ttk} {
|
||||
@@ -123,7 +174,7 @@ proc paddedlabel {w args} {
|
||||
# place a themed frame over the surface.
|
||||
proc Dialog {w args} {
|
||||
eval [linsert $args 0 toplevel $w -class Dialog]
|
||||
catch {wm attributes $w -type dialog}
|
||||
catch {wm attributes $w -type dialog}
|
||||
pave_toplevel $w
|
||||
return $w
|
||||
}
|
||||
@@ -193,6 +244,40 @@ proc tspinbox {w args} {
|
||||
}
|
||||
}
|
||||
|
||||
# Create a text widget with any theme specific properties.
|
||||
proc ttext {w args} {
|
||||
global use_ttk
|
||||
if {$use_ttk} {
|
||||
switch -- [ttk::style theme use] {
|
||||
"vista" - "xpnative" {
|
||||
lappend args -highlightthickness 0 -borderwidth 0
|
||||
}
|
||||
}
|
||||
}
|
||||
set w [eval [linsert $args 0 text $w]]
|
||||
if {$use_ttk} {
|
||||
if {[winfo class [winfo parent $w]] eq "EntryFrame"} {
|
||||
bind $w <FocusIn> {[winfo parent %W] state focus}
|
||||
bind $w <FocusOut> {[winfo parent %W] state !focus}
|
||||
}
|
||||
}
|
||||
return $w
|
||||
}
|
||||
|
||||
# themed frame suitable for surrounding a text field.
|
||||
proc textframe {w args} {
|
||||
global use_ttk
|
||||
if {$use_ttk} {
|
||||
if {[catch {ttk::style layout EntryFrame}]} {
|
||||
InitEntryFrame
|
||||
}
|
||||
eval [linsert $args 0 ttk::frame $w -class EntryFrame -style EntryFrame]
|
||||
} else {
|
||||
eval [linsert $args 0 frame $w]
|
||||
}
|
||||
return $w
|
||||
}
|
||||
|
||||
proc tentry {w args} {
|
||||
global use_ttk
|
||||
if {$use_ttk} {
|
||||
|
||||
Reference in New Issue
Block a user