Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

ttk layout on mac os x; notebook tab w/close button

49 views
Skip to first unread message

Brad Lanam

unread,
Jun 15, 2016, 9:39:29 PM6/15/16
to
Now this is an odd one...
Just adding a close button to notebook tabs.
Works fine.

Tried it on the mac w/aqua. It shows up. Poor placement, but it is there.

Switched to a different theme on the mac. No show.
In fact it doesn't show up on any of the non-aqua themes on the mac.

I would not have been surprised at the other way around, but this surprised me.

I'll probably just turn it off altogether on the mac, since it doesn't look
very good with the aqua theme.

ttk::style element create Notebook.close image \
[list $vars(img.inactive) \
{active pressed !disabled} $vars(img.pressed) \
{active !disabled} $vars(img.active)] \
-border {0 0 20 0} -sticky {}
ttk::style layout Close.TNotebook.Tab {
Notebook.tab -children {
Notebook.padding -side left -children {
Notebook.focus -side left -children {
Notebook.label -side left -sticky {}
}
}
Notebook.close -side left -sticky {}
}
}

Brad Lanam

unread,
Jun 18, 2016, 3:10:32 AM6/18/16
to
Here is the code to duplicate the issue.
I just threw any old images in there.
Ticket opened.

http://core.tcl.tk/tk/tktview/cec0e492fbf1de48caa487e7bf7c146c916aea2b

#!/usr/bin/tclsh

package require Tk
if { ! [package vsatisfies [package provide Tcl] 8.6.5-] } {
catch { package require Img }
}

namespace eval closeNotebook {
variable vars

proc br { w x y } {
variable vars

set e [$w identify $x $y]
if { [string match {*close} $e] } {
set t [$w identify tab $x $y]
set tabid [lindex [$w tabs] $t]
if { [info exists vars($w.$tabid)] } {
{*}$vars($w.$tabid)
} else {
$w forget $t
}
}
}

proc setCloseHandler { w tabid closeproc } {
variable vars

set vars($w.$tabid) $closeproc
}

proc _init { } {
variable vars

if { [info exists vars(initialized)] } {
return
}
set vars(initialized) true

set vars(img.inactive) [image create photo -data {
R0lGODlhEgASAOe2ADROcj9NaTpXeDtYdQ9p71VskVlivVVzkVVrvSh85Exu
0G9vb3BwbmNrszx53m5vpHBxpnRzo3V0nlKAxFuDr3R3vluIsVGJz39/iUqL
3F+Fw4ODgU+O3X2AuXOMpXKRplmU3WGV1WSWymuUw2yWypOTp5aVo32cw5OZ
m5Oam4WbvXueyX6ewpWanZabnImfvXij2Jmdn3mk1ZqeoIeiwZegqYWh1Xin
3Jmiq5ahvqCipo2mxaCiqI6j1JSmuKOiqH6r3oSq1JamuoOr2YWr1ZSovpim
voGs4aWlpaSmpaalraamqpWrv6enp6enraSpsKCrsoaw5JytvKKssqarrpyv
vIaz5qmqvairwKip0Juxz6Kwwoy16KOxw4625K2uva+vu5y01LCxr521z4+4
57Gxsayu0py21JO77ZW855O+65a/6Ji/5qG+2ba6up+/35nA67i8vKXA27u7
u7y8vK/Byb28vr29vb69vJ3F86+/57+/v6HF8bHFyaLH7K3I26TI9KPJ86XJ
8anL8bDK6rbI7KrS+sfI47DQ+LPR67XR67TT7szNzs3NzbDW/MzM5rrV6rTW
+LbX8MXR8dHR0b7X6rTZ/rrb/Lfc/8Dc6rrd/sXd483Y88bf5MDe+tfX7b/h
/dPa98Hj/8Lk/sTk+tzc7tfe98jn9sjq/srq/srr+s7u+szv/s3v/dHy/dby
+NXz99T2/tr6/tv6/9r7/t79/v//////////////////////////////////
////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////
/////////////////////yH+FUNyZWF0ZWQgd2l0aCBUaGUgR0lNUAAh+QQB
CgD/ACwAAAAAEgASAAAI/gD/CRxIsKDBgU4wLGCwYcnBgV8gPCih5IcJCRHA
HMRioEKWQ59KPTLTocEVgxMc2NAzKZQpToV6KEBQ0EgCEEfYvAlz5s0aIBwI
5CA4IsQNK0QsAABAIUgUGBk0DIwjYggZNSwELB1wAg0XGRfiCIyzIk0gQS8C
LA2gAlAeLyTE/ouzg4+jSGMOLC2gBZEhODTkxhEyCBOoREw+eChC6JIlPz4E
T5EjChUpSH/+KPI0SlMbKHLnVpHEytWqU6dUtUq1SIobgoyodMkkqxatWbRi
VdrypFFBOjxw9OkE69WmOjV0zDm4J8kMFylQtIiBBM/Df5TslGnSRMwdStfD
AxMMCAA7
}]
set vars(img.active) [image create photo -data {
R0lGODlhEgASAOdjAAAAAAEBAQICAgMDAwQEBAUFBQYGBgcHBwgICAkJCQoK
CgsLCwwMDA0NDQ4ODg8PDxAQEBERERISEhMTExQUFBUVFRYWFhcXFxgYGBkZ
GRoaGhsbGxwcHB0dHR4eHh8fHyAgICEhISIiIiMjIyQkJCUlJSYmJicnJygo
KCkpKSoqKisrKywsLC0tLS4uLi8vLzAwMDExMTIyMjMzMzQ0NDU1NTY2Njc3
Nzg4ODk5OTo6Ojs7Ozw8PD09PT4+Pj8/P0BAQEFBQUJCQkNDQ0REREVFRUZG
RkdHR0hISElJSUpKSktLS0xMTE1NTU5OTk9PT1BQUFFRUVJSUlNTU1RUVFVV
VVZWVldXV1hYWFlZWVpaWltbW1xcXF1dXV5eXl9fX2BgYGFhYWJiYmNjY2Rk
ZGVlZWZmZmdnZ2hoaGlpaWpqamtra2xsbG1tbW5ubm9vb3BwcHFxcXJycnNz
c3R0dHV1dXZ2dnd3d3h4eHl5eXp6ent7e3x8fH19fX5+fn9/f4CAgIGBgYKC
goODg4SEhIWFhYaGhoeHh4iIiImJiYqKiouLi4yMjI2NjY6Ojo+Pj5CQkJGR
kZKSkpOTk5SUlJWVlZaWlpeXl5iYmJmZmZqampubm5ycnJ2dnZ6enp+fn6Cg
oKGhoaKioqOjo6SkpKWlpaampqenp6ioqKmpqaqqqqurq6ysrK2tra6urq+v
r7CwsLGxsbKysrOzs7S0tLW1tba2tre3t7i4uLm5ubq6uru7u7y8vL29vb6+
vr+/v8DAwMHBwcLCwsPDw8TExMXFxcbGxsfHx8jIyMnJycrKysvLy8zMzM3N
zc7Ozs/Pz9DQ0NHR0dLS0tPT09TU1NXV1dbW1tfX19jY2NnZ2dra2tvb29zc
3N3d3d7e3t/f3+Dg4OHh4eLi4uPj4+Tk5OXl5ebm5ufn5+jo6Onp6erq6uvr
6+zs7O3t7e7u7u/v7/Dw8PHx8fLy8vPz8/T09PX19fb29vf39/j4+Pn5+fr6
+vv7+/z8/P39/f7+/v///yH5BAEKAP8ALAAAAQASABEAAAj1AP8JFHjNVqhL
l0LZujawoUBkqUbJ2rVL1ihTwhwKbObKFrJq3LhVW3arVTKH2GjlWoZNnLmX
35rZgoWtIbFbyKJp+8bzm0hitIANxOaLWLRq2pJqw4at2jNhu2r+wyYsGjZu
4bKG48kNWzNeUrUZwxaOnDl06tCZI0fu2zVh2gRiQxYOrTt38ODdVUeOGzGp
fsWpk0fPXr589uS5Q/dNGDeB04BVY0cv375++/blk6cu8jTIwnyJo3e5n+l8
9MLxEvYZ8i5j5EqfJkdsV+uBzXLlahYub7jcuzVOW5ZLFixXrmDJWnnb4VNe
tmztqqqxunWBAQEAOw==
}]
set vars(img.pressed) $vars(img.active)

# this seems to adjust the border of the label, not the image.
ttk::style element create Notebook.close image \
[list $vars(img.inactive) \
{active pressed !disabled} $vars(img.pressed) \
{active !disabled} $vars(img.active)] \
-border {0 0 20 0} -sticky {}
ttk::style layout Close.TNotebook.Tab {
Notebook.tab -children {
Notebook.padding -side left -children {
Notebook.focus -side left -children {
Notebook.label -side left -sticky {}
}
Notebook.close -side left -sticky {}
}
}
}

set blist [bind TNotebook]
foreach {b} $blist {
set p [bind TNotebook $b]
bind Close.TNotebook $b $p
}
bind Close.TNotebook <ButtonRelease-1> {+::closeNotebook::br %W %x %y}
}

_init
}

if { 1 } {
proc closer { } {
puts closer
.nb forget .b
}

proc demo { } {
ttk::style theme use alt

ttk::notebook .nb -style Close.TNotebook -class Close.TNotebook
frame .a -background red
.nb add .a -text aaa -sticky news ; # -image ::img::close -compound right
frame .b -background blue
.nb add .b -text bbb -sticky news ; # -image ::img::close -compound right
closeNotebook::setCloseHandler .nb .b closer
pack .nb -expand true -fill both
}
demo
}
0 new messages