Tk Source Code

View Ticket
Login
Ticket UUID: cec0e492fbf1de48caa487e7bf7c146c916aea2b
Title: mac os x: new layout for ttk::notebook does not work for non-aqua themes
Type: Bug Version: 8.6.5
Submitter: anonymous Created on: 2016-06-18 07:08:22
Subsystem: 88. Themed Tk Assigned To: nobody
Priority: 5 Medium Severity: Minor
Status: Closed Last Modified: 2016-08-22 08:47:28
Resolution: Invalid Closed By: dkf
    Closed on: 2016-08-22 08:47:28
Description:
If the aqua theme is used, the new layout with images works.
If a non-aqua theme is used, the new layout does not work.

This code works on linux and windows.


#!/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::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
}
User Comments: anonymous (claiming to be [email protected]) added on 2016-07-06 17:59:26:
Not valid. Caused by a theme change.