Styling the readonly combobox for the vista theme edit
bll 2018-8-29: In the process of trying to figure out how to make a
ttk::combobox better indicate that it was disabled on windows, François Vogel discovered how to make a readonly ttk::combobox display look like a windows native readonly combobox.
The focus still does not display in a native fashion (ttk draws its own focus ring, and
always draws the focus background), so in the code below it is removed. I have not been able to determine how the windows VS API draws focus rings.
To use this, simply add
-style TReadonlyCombobox to your readonly ttk::combobox's.
# only available for Windows Vista and later
if { $::tcl_platform(platform) eq "windows" &&
$::tcl_platform(osVersion) >= 6.0 &&
[ttk::style theme use] eq "vista" } {
# Set up a readonly combobox style that matches win vista better
# by François Vogel.
# Focus removed as ttk always does a -focusfill.
# I have not been able to determine how windows draws their
# focus ring. It does not seem to be a VS "part".
ttk::style configure TReadonlyCombobox -padding 2
ttk::style element create RCombobox.field vsapi \
COMBOBOX 5 {disabled 4 pressed 3 active 2 hover 2 {} 1}
ttk::style element create RCombobox.border vsapi \
COMBOBOX 4 {disabled 4 focus 3 active 2 hover 2 {} 1}
ttk::style element create RCombobox.rightdownarrow vsapi \
COMBOBOX 6 {disabled 4 pressed 3 active 2 {} 1} \
-syssize {SM_CXVSCROLL SM_CYVSCROLL}
ttk::style layout TReadonlyCombobox {
RCombobox.border -sticky nswe -border 0 -children {
RCombobox.field -sticky nswe -children {
RCombobox.rightdownarrow -side right -sticky ns
Combobox.padding -expand 1 -sticky nswe -children {
Combobox.textarea -sticky nswe
}
}
}
}
} else {
# for other systems or themes, just copy the combobox style that
# currently exists
ttk::style layout TReadonlyCombobox [ttk::style layout TCombobox]
ttk::style configure TReadonlyCombobox \
{*}[ttk::style configure TCombobox]
ttk::style map TReadonlyCombobox {*}[ttk::style map TCombobox]
}