Posted to tcl by patthoyts at Thu Mar 05 22:47:36 GMT 2009view raw

  1. diff --git a/generic/ttk/ttkButton.c b/generic/ttk/ttkButton.c
  2. index d901cc6..15548ea 100644
  3. --- a/generic/ttk/ttkButton.c
  4. +++ b/generic/ttk/ttkButton.c
  5. @@ -11,8 +11,7 @@
  6.  
  7. /* Bit fields for OptionSpec mask field:
  8. */
  9. -#define STATE_CHANGED (0x100) /* -state option changed */
  10. -#define DEFAULTSTATE_CHANGED (0x200) /* -default option changed */
  11. +#define DEFAULTSTATE_CHANGED (0x100) /* -default option changed */
  12.  
  13. /*------------------------------------------------------------------------
  14. * +++ Base resources for labels, buttons, checkbuttons, etc:
  15. diff --git a/generic/ttk/ttkEntry.c b/generic/ttk/ttkEntry.c
  16. index d86e3f4..b775419 100644
  17. --- a/generic/ttk/ttkEntry.c
  18. +++ b/generic/ttk/ttkEntry.c
  19. @@ -141,9 +141,8 @@ typedef struct {
  20. /*
  21. * Extra mask bits for Tk_SetOptions()
  22. */
  23. -#define STATE_CHANGED (0x100) /* -state option changed */
  24. -#define TEXTVAR_CHANGED (0x200) /* -textvariable option changed */
  25. -#define SCROLLCMD_CHANGED (0x400) /* -xscrollcommand option changed */
  26. +#define TEXTVAR_CHANGED (0x100) /* -textvariable option changed */
  27. +#define SCROLLCMD_CHANGED (0x200) /* -xscrollcommand option changed */
  28.  
  29. /*
  30. * Default option values:
  31. diff --git a/generic/ttk/ttkTreeview.c b/generic/ttk/ttkTreeview.c
  32. index a38ff68..06742c9 100644
  33. --- a/generic/ttk/ttkTreeview.c
  34. +++ b/generic/ttk/ttkTreeview.c
  35. @@ -20,8 +20,6 @@ static const int HALO = 4; /* separator */
  36. #define TTK_STATE_OPEN TTK_STATE_USER1
  37. #define TTK_STATE_LEAF TTK_STATE_USER2
  38.  
  39. -#define STATE_CHANGED (0x100) /* item state option changed */
  40. -
  41. /*------------------------------------------------------------------------
  42. * +++ Tree items.
  43. *
  44. diff --git a/generic/ttk/ttkWidget.c b/generic/ttk/ttkWidget.c
  45. index 57b0d38..c1b7f06 100644
  46. --- a/generic/ttk/ttkWidget.c
  47. +++ b/generic/ttk/ttkWidget.c
  48. @@ -454,6 +454,7 @@ int TtkWidgetConstructorObjCmd(
  49.  
  50. Tcl_Release(corePtr);
  51.  
  52. + UpdateLayout(interp, corePtr);
  53. SizeChanged(corePtr);
  54. Tk_MakeWindowExist(tkwin);
  55.  
  56. @@ -483,16 +484,27 @@ Ttk_Layout TtkWidgetGetLayout(
  57. Tcl_Interp *interp, Ttk_Theme themePtr, void *recordPtr)
  58. {
  59. WidgetCore *corePtr = recordPtr;
  60. + Ttk_Layout layout;
  61. + Tcl_DString ds;
  62. const char *styleName = 0;
  63.  
  64. + Tcl_DStringInit(&ds);
  65. if (corePtr->styleObj)
  66. styleName = Tcl_GetString(corePtr->styleObj);
  67.  
  68. - if (!styleName || *styleName == '\0')
  69. + if (!styleName || *styleName == '\0') {
  70. styleName = corePtr->widgetSpec->className;
  71. + if (corePtr->state & TTK_STATE_READONLY) {
  72. + Tcl_DStringAppend(&ds, "Readonly.", -1);
  73. + Tcl_DStringAppend(&ds, styleName, -1);
  74. + styleName = Tcl_DStringValue(&ds);
  75. + }
  76. + }
  77.  
  78. - return Ttk_CreateLayout(interp, themePtr, styleName,
  79. + layout = Ttk_CreateLayout(interp, themePtr, styleName,
  80. recordPtr, corePtr->optionTable, corePtr->tkwin);
  81. + Tcl_DStringFree(&ds);
  82. + return layout;
  83. }
  84.  
  85. /*
  86. @@ -682,6 +694,10 @@ Tcl_Interp *interp, int objc, Tcl_Obj *const objv[], void *recordPtr)
  87. SizeChanged(corePtr);
  88. }
  89.  
  90. + if (mask & STATE_CHANGED) {
  91. + UpdateLayout(interp, corePtr);
  92. + }
  93. +
  94. TtkRedisplayWidget(corePtr);
  95. result = Tcl_NewObj();
  96. }
  97. @@ -727,6 +743,10 @@ int TtkWidgetStateCommand(
  98. corePtr->state = Ttk_ModifyState(corePtr->state, &spec);
  99. changed = corePtr->state ^ oldState;
  100.  
  101. + if (changed) {
  102. + UpdateLayout(interp, corePtr);
  103. + }
  104. +
  105. TtkRedisplayWidget(corePtr);
  106.  
  107. Tcl_SetObjResult(interp,
  108. diff --git a/generic/ttk/ttkWidget.h b/generic/ttk/ttkWidget.h
  109. index b7b4c5d..9a0a394 100644
  110. --- a/generic/ttk/ttkWidget.h
  111. +++ b/generic/ttk/ttkWidget.h
  112. @@ -20,6 +20,7 @@
  113. #define READONLY_OPTION 0x1
  114. #define STYLE_CHANGED 0x2
  115. #define GEOMETRY_CHANGED 0x4
  116. +#define STATE_CHANGED 0x8 /* -state option changed */
  117.  
  118. /*
  119. * Core widget elements
  120. diff --git a/library/ttk/vistaTheme.tcl b/library/ttk/vistaTheme.tcl
  121. index 76f3e3e..4ac15e4 100644
  122. --- a/library/ttk/vistaTheme.tcl
  123. +++ b/library/ttk/vistaTheme.tcl
  124. @@ -51,6 +51,12 @@ namespace eval ttk::theme::vista {
  125.  
  126. # Combobox
  127. ttk::style configure TCombobox -padding 2
  128. + ttk::style map TCombobox \
  129. + -selectbackground [list !focus SystemWindow] \
  130. + -selectforeground [list !focus SystemWindowText] \
  131. + -foreground [list {readonly focus} SystemHighlightText] \
  132. + -focusfill [list {readonly focus} SystemHighlight] \
  133. + ;
  134. ttk::style element create Combobox.field vsapi \
  135. COMBOBOX 2 {{} 1}
  136. ttk::style element create Combobox.border vsapi \
  137. @@ -67,20 +73,30 @@ namespace eval ttk::theme::vista {
  138. }
  139. }
  140. }
  141. + ttk::style map Readonly.TCombobox -foreground {} -focusfill {} \
  142. + -selectbackground {} -selectforeground {}
  143. + ttk::style element create Combobox.readonlyborder vsapi \
  144. + COMBOBOX 5 {disabled 4 pressed 3 active 2 hover 2 {} 1}
  145. + ttk::style element create Combobox.readonlyarrow vsapi \
  146. + COMBOBOX 6 {disabled 4 {} 1}
  147. + ttk::style layout Readonly.TCombobox {
  148. + Combobox.readonlyborder -sticky nswe -border 0 -children {
  149. + Combobox.readonlyarrow -side right -sticky ns
  150. + Combobox.padding -expand 1 -sticky nswe -children {
  151. + focus -expand 1 -sticky nswe -children {
  152. + Combobox.textarea -sticky nswe
  153. + }
  154. + }
  155. + }
  156. + }
  157. # Vista.Combobox droplist frame
  158. ttk::style element create ComboboxPopdownFrame.background vsapi\
  159. - LISTBOX 3 {disabled 4 active 3 focus 2 {} 1}
  160. + LISTBOX 3 {disabled 4 active 3 focus 2 {} 1} -padding 2
  161. ttk::style layout ComboboxPopdownFrame {
  162. ComboboxPopdownFrame.background -sticky news -border 1 -children {
  163. ComboboxPopdownFrame.padding -sticky news
  164. }
  165. }
  166. - ttk::style map TCombobox \
  167. - -selectbackground [list !focus SystemWindow] \
  168. - -selectforeground [list !focus SystemWindowText] \
  169. - -foreground [list {readonly focus} SystemHighlightText] \
  170. - -focusfill [list {readonly focus} SystemHighlight] \
  171. - ;
  172.  
  173. # Entry
  174. ttk::style configure TEntry -padding {1 1 1 1} ;# Needs lookup