diff options
author | jan.nijtmans <jan.nijtmans@noemail.net> | 2012-05-05 16:27:53 (GMT) |
---|---|---|
committer | jan.nijtmans <jan.nijtmans@noemail.net> | 2012-05-05 16:27:53 (GMT) |
commit | c852d9cd2a48cdbcd5210473d469a18312aa09e5 (patch) | |
tree | 65ecb3ddccea5ae2b02c8ddb56ac280b7adffdee | |
parent | 3c93eb7c7f68ba53eadd6bbc56794b224b24f9fb (diff) | |
parent | c3072e15f58b1547de877abf13387079dffd78f8 (diff) | |
download | tk-c852d9cd2a48cdbcd5210473d469a18312aa09e5.zip tk-c852d9cd2a48cdbcd5210473d469a18312aa09e5.tar.gz tk-c852d9cd2a48cdbcd5210473d469a18312aa09e5.tar.bz2 |
merge trunk
FossilOrigin-Name: e8af2579c90656cb47a75e03cd4b0b1f38b379d5
-rw-r--r-- | ChangeLog | 11 | ||||
-rw-r--r-- | generic/tkStubInit.c | 6 | ||||
-rw-r--r-- | generic/tkWindow.c | 166 | ||||
-rw-r--r-- | library/menu.tcl | 129 | ||||
-rw-r--r-- | unix/Makefile.in | 2 | ||||
-rwxr-xr-x | unix/configure | 8 | ||||
-rw-r--r-- | unix/tcl.m4 | 4 | ||||
-rwxr-xr-x | win/configure | 7 | ||||
-rw-r--r-- | win/tcl.m4 | 4 | ||||
-rw-r--r-- | xlib/xcolors.c | 148 |
10 files changed, 246 insertions, 239 deletions
@@ -1,6 +1,15 @@ +2012-05-05 Jan Nijtmans <nijtmans@users.sf.net> + + * xlib/xcolors.c: Single "const" addition + * generic/tkWindow.c: If tk.dll loaded in cygwin, don't use the win32 file dialogs + +2012-05-04 Jan Nijtmans <nijtmans@users.sf.net> + + * library/menu.tcl: [Bug 2768586]: Menu posting problem on dual monitors + 2012-04-29 Jan Nijtmans <nijtmans@users.sf.net> - * library/tk.tcl: [Bug 3508771]: Window placement with multiple screens + * library/tk.tcl: [Bug 533519]: Window placement with multiple screens * generic/tkBind.c: * generic/tkFocus.c: * generic/tkMenuDraw.c: diff --git a/generic/tkStubInit.c b/generic/tkStubInit.c index fe04206..e19180f 100644 --- a/generic/tkStubInit.c +++ b/generic/tkStubInit.c @@ -98,6 +98,12 @@ static void *Tk_GetHINSTANCE() (const char *) &tkIntStubs, &hInstance); return hInstance; } + /* TODO: To be implemented for Cygwin */ +# define Tk_AttachHWND 0 +# define Tk_GetHWND 0 +# define Tk_HWNDToWindow 0 +# define Tk_PointerEvent 0 +# define Tk_TranslateWinEvent 0 # else /* !__CYGWIN__ */ # define TkPutImage 0 diff --git a/generic/tkWindow.c b/generic/tkWindow.c index 40cf462..4d5e895 100644 --- a/generic/tkWindow.c +++ b/generic/tkWindow.c @@ -14,7 +14,7 @@ #include "tkInt.h" -#if !( defined(__WIN32__) || defined(MAC_OSX_TK)) +#if !(defined(__WIN32__) || defined(MAC_OSX_TK)) #include "tkUnixInt.h" #endif @@ -95,13 +95,14 @@ static const XSetWindowAttributes defAtts= { #define ISSAFE 1 #define PASSMAINWINDOW 2 +#define NOOBJPROC 4 +#define WINMACONLY 8 +#define USEINITPROC 16 typedef int (TkInitProc)(Tcl_Interp *interp, ClientData clientData); typedef struct { - const char *name; /* Name of command. */ - Tcl_CmdProc *cmdProc; /* Command's string-based function. */ - Tcl_ObjCmdProc *objProc; /* Command's object-based function. */ - TkInitProc *initProc; /* Command's initialization function */ + const char *name; /* Name of command. */ + Tcl_ObjCmdProc *objProc; /* Command's object- (or string-) based function, or initProc. */ int flags; } TkCmd; @@ -110,72 +111,72 @@ static const TkCmd commands[] = { * Commands that are part of the intrinsics: */ - {"bell", NULL, Tk_BellObjCmd, NULL, PASSMAINWINDOW}, - {"bind", NULL, Tk_BindObjCmd, NULL, PASSMAINWINDOW|ISSAFE}, - {"bindtags", NULL, Tk_BindtagsObjCmd, NULL, PASSMAINWINDOW|ISSAFE}, - {"clipboard", NULL, Tk_ClipboardObjCmd, NULL, PASSMAINWINDOW}, - {"destroy", NULL, Tk_DestroyObjCmd, NULL, PASSMAINWINDOW|ISSAFE}, - {"event", NULL, Tk_EventObjCmd, NULL, PASSMAINWINDOW|ISSAFE}, - {"focus", NULL, Tk_FocusObjCmd, NULL, PASSMAINWINDOW|ISSAFE}, - {"font", NULL, Tk_FontObjCmd, NULL, PASSMAINWINDOW|ISSAFE}, - {"grab", NULL, Tk_GrabObjCmd, NULL, PASSMAINWINDOW}, - {"grid", NULL, Tk_GridObjCmd, NULL, PASSMAINWINDOW|ISSAFE}, - {"image", NULL, Tk_ImageObjCmd, NULL, PASSMAINWINDOW|ISSAFE}, - {"lower", NULL, Tk_LowerObjCmd, NULL, PASSMAINWINDOW|ISSAFE}, - {"option", NULL, Tk_OptionObjCmd, NULL, PASSMAINWINDOW|ISSAFE}, - {"pack", NULL, Tk_PackObjCmd, NULL, PASSMAINWINDOW|ISSAFE}, - {"place", NULL, Tk_PlaceObjCmd, NULL, PASSMAINWINDOW|ISSAFE}, - {"raise", NULL, Tk_RaiseObjCmd, NULL, PASSMAINWINDOW|ISSAFE}, - {"selection", NULL, Tk_SelectionObjCmd, NULL, PASSMAINWINDOW}, - {"tk", NULL, NULL, TkInitTkCmd, PASSMAINWINDOW|ISSAFE}, - {"tkwait", NULL, Tk_TkwaitObjCmd, NULL, PASSMAINWINDOW|ISSAFE}, - {"update", NULL, Tk_UpdateObjCmd, NULL, PASSMAINWINDOW|ISSAFE}, - {"winfo", NULL, Tk_WinfoObjCmd, NULL, PASSMAINWINDOW|ISSAFE}, - {"wm", NULL, Tk_WmObjCmd, NULL, PASSMAINWINDOW}, + {"bell", Tk_BellObjCmd, PASSMAINWINDOW}, + {"bind", Tk_BindObjCmd, PASSMAINWINDOW|ISSAFE}, + {"bindtags", Tk_BindtagsObjCmd, PASSMAINWINDOW|ISSAFE}, + {"clipboard", Tk_ClipboardObjCmd, PASSMAINWINDOW}, + {"destroy", Tk_DestroyObjCmd, PASSMAINWINDOW|ISSAFE}, + {"event", Tk_EventObjCmd, PASSMAINWINDOW|ISSAFE}, + {"focus", Tk_FocusObjCmd, PASSMAINWINDOW|ISSAFE}, + {"font", Tk_FontObjCmd, PASSMAINWINDOW|ISSAFE}, + {"grab", Tk_GrabObjCmd, PASSMAINWINDOW}, + {"grid", Tk_GridObjCmd, PASSMAINWINDOW|ISSAFE}, + {"image", Tk_ImageObjCmd, PASSMAINWINDOW|ISSAFE}, + {"lower", Tk_LowerObjCmd, PASSMAINWINDOW|ISSAFE}, + {"option", Tk_OptionObjCmd, PASSMAINWINDOW|ISSAFE}, + {"pack", Tk_PackObjCmd, PASSMAINWINDOW|ISSAFE}, + {"place", Tk_PlaceObjCmd, PASSMAINWINDOW|ISSAFE}, + {"raise", Tk_RaiseObjCmd, PASSMAINWINDOW|ISSAFE}, + {"selection", Tk_SelectionObjCmd, PASSMAINWINDOW}, + {"tk", (Tcl_ObjCmdProc *) TkInitTkCmd, USEINITPROC|PASSMAINWINDOW|ISSAFE}, + {"tkwait", Tk_TkwaitObjCmd, PASSMAINWINDOW|ISSAFE}, + {"update", Tk_UpdateObjCmd, PASSMAINWINDOW|ISSAFE}, + {"winfo", Tk_WinfoObjCmd, PASSMAINWINDOW|ISSAFE}, + {"wm", Tk_WmObjCmd, PASSMAINWINDOW}, /* * Default widget class commands. */ - {"button", NULL, Tk_ButtonObjCmd, NULL, ISSAFE}, - {"canvas", NULL, Tk_CanvasObjCmd, NULL, PASSMAINWINDOW|ISSAFE}, - {"checkbutton", NULL, Tk_CheckbuttonObjCmd, NULL, ISSAFE}, - {"entry", NULL, Tk_EntryObjCmd, NULL, ISSAFE}, - {"frame", NULL, Tk_FrameObjCmd, NULL, ISSAFE}, - {"label", NULL, Tk_LabelObjCmd, NULL, ISSAFE}, - {"labelframe", NULL, Tk_LabelframeObjCmd, NULL, ISSAFE}, - {"listbox", NULL, Tk_ListboxObjCmd, NULL, ISSAFE}, - {"menubutton", NULL, Tk_MenubuttonObjCmd, NULL, ISSAFE}, - {"message", NULL, Tk_MessageObjCmd, NULL, ISSAFE}, - {"panedwindow", NULL, Tk_PanedWindowObjCmd, NULL, ISSAFE}, - {"radiobutton", NULL, Tk_RadiobuttonObjCmd, NULL, ISSAFE}, - {"scale", NULL, Tk_ScaleObjCmd, NULL, ISSAFE}, - {"scrollbar", Tk_ScrollbarCmd,NULL, NULL, PASSMAINWINDOW|ISSAFE}, - {"spinbox", NULL, Tk_SpinboxObjCmd, NULL, ISSAFE}, - {"text", NULL, Tk_TextObjCmd, NULL, PASSMAINWINDOW|ISSAFE}, - {"toplevel", NULL, Tk_ToplevelObjCmd, NULL, 0}, + {"button", Tk_ButtonObjCmd, ISSAFE}, + {"canvas", Tk_CanvasObjCmd, PASSMAINWINDOW|ISSAFE}, + {"checkbutton", Tk_CheckbuttonObjCmd, ISSAFE}, + {"entry", Tk_EntryObjCmd, ISSAFE}, + {"frame", Tk_FrameObjCmd, ISSAFE}, + {"label", Tk_LabelObjCmd, ISSAFE}, + {"labelframe", Tk_LabelframeObjCmd, ISSAFE}, + {"listbox", Tk_ListboxObjCmd, ISSAFE}, + {"menubutton", Tk_MenubuttonObjCmd, ISSAFE}, + {"message", Tk_MessageObjCmd, ISSAFE}, + {"panedwindow", Tk_PanedWindowObjCmd, ISSAFE}, + {"radiobutton", Tk_RadiobuttonObjCmd, ISSAFE}, + {"scale", Tk_ScaleObjCmd, ISSAFE}, + {"scrollbar", (Tcl_ObjCmdProc *) Tk_ScrollbarCmd, NOOBJPROC|PASSMAINWINDOW|ISSAFE}, + {"spinbox", Tk_SpinboxObjCmd, ISSAFE}, + {"text", Tk_TextObjCmd, PASSMAINWINDOW|ISSAFE}, + {"toplevel", Tk_ToplevelObjCmd, 0}, /* * Classic widget class commands. */ - {"::tk::button", NULL, Tk_ButtonObjCmd, NULL, ISSAFE}, - {"::tk::canvas", NULL, Tk_CanvasObjCmd, NULL, PASSMAINWINDOW|ISSAFE}, - {"::tk::checkbutton",NULL, Tk_CheckbuttonObjCmd, NULL, ISSAFE}, - {"::tk::entry", NULL, Tk_EntryObjCmd, NULL, ISSAFE}, - {"::tk::frame", NULL, Tk_FrameObjCmd, NULL, ISSAFE}, - {"::tk::label", NULL, Tk_LabelObjCmd, NULL, ISSAFE}, - {"::tk::labelframe",NULL, Tk_LabelframeObjCmd, NULL, ISSAFE}, - {"::tk::listbox", NULL, Tk_ListboxObjCmd, NULL, ISSAFE}, - {"::tk::menubutton",NULL, Tk_MenubuttonObjCmd, NULL, ISSAFE}, - {"::tk::message", NULL, Tk_MessageObjCmd, NULL, ISSAFE}, - {"::tk::panedwindow",NULL, Tk_PanedWindowObjCmd, NULL, ISSAFE}, - {"::tk::radiobutton",NULL, Tk_RadiobuttonObjCmd, NULL, ISSAFE}, - {"::tk::scale", NULL, Tk_ScaleObjCmd, NULL, ISSAFE}, - {"::tk::scrollbar", Tk_ScrollbarCmd,NULL, NULL, PASSMAINWINDOW|ISSAFE}, - {"::tk::spinbox", NULL, Tk_SpinboxObjCmd, NULL, ISSAFE}, - {"::tk::text", NULL, Tk_TextObjCmd, NULL, PASSMAINWINDOW|ISSAFE}, - {"::tk::toplevel", NULL, Tk_ToplevelObjCmd, NULL, 0}, + {"::tk::button", Tk_ButtonObjCmd, ISSAFE}, + {"::tk::canvas", Tk_CanvasObjCmd, PASSMAINWINDOW|ISSAFE}, + {"::tk::checkbutton",Tk_CheckbuttonObjCmd, ISSAFE}, + {"::tk::entry", Tk_EntryObjCmd, ISSAFE}, + {"::tk::frame", Tk_FrameObjCmd, ISSAFE}, + {"::tk::label", Tk_LabelObjCmd, ISSAFE}, + {"::tk::labelframe",Tk_LabelframeObjCmd, ISSAFE}, + {"::tk::listbox", Tk_ListboxObjCmd, ISSAFE}, + {"::tk::menubutton",Tk_MenubuttonObjCmd, ISSAFE}, + {"::tk::message", Tk_MessageObjCmd, ISSAFE}, + {"::tk::panedwindow",Tk_PanedWindowObjCmd, ISSAFE}, + {"::tk::radiobutton",Tk_RadiobuttonObjCmd, ISSAFE}, + {"::tk::scale", Tk_ScaleObjCmd, ISSAFE}, + {"::tk::scrollbar", (Tcl_ObjCmdProc *) Tk_ScrollbarCmd, NOOBJPROC|PASSMAINWINDOW|ISSAFE}, + {"::tk::spinbox", Tk_SpinboxObjCmd, ISSAFE}, + {"::tk::text", Tk_TextObjCmd, PASSMAINWINDOW|ISSAFE}, + {"::tk::toplevel", Tk_ToplevelObjCmd, 0}, /* * Standard dialog support. Note that the Unix/X11 platform implements @@ -183,11 +184,11 @@ static const TkCmd commands[] = { */ #if defined(__WIN32__) || defined(MAC_OSX_TK) - {"tk_chooseColor", NULL, Tk_ChooseColorObjCmd, NULL, PASSMAINWINDOW}, - {"tk_chooseDirectory", NULL, Tk_ChooseDirectoryObjCmd,NULL,PASSMAINWINDOW}, - {"tk_getOpenFile", NULL, Tk_GetOpenFileObjCmd, NULL, PASSMAINWINDOW}, - {"tk_getSaveFile", NULL, Tk_GetSaveFileObjCmd, NULL, PASSMAINWINDOW}, - {"tk_messageBox", NULL, Tk_MessageBoxObjCmd, NULL, PASSMAINWINDOW}, + {"tk_chooseColor", Tk_ChooseColorObjCmd, PASSMAINWINDOW}, + {"tk_chooseDirectory", Tk_ChooseDirectoryObjCmd,WINMACONLY|PASSMAINWINDOW}, + {"tk_getOpenFile", Tk_GetOpenFileObjCmd, WINMACONLY|PASSMAINWINDOW}, + {"tk_getSaveFile", Tk_GetSaveFileObjCmd, WINMACONLY|PASSMAINWINDOW}, + {"tk_messageBox", Tk_MessageBoxObjCmd, PASSMAINWINDOW}, #endif /* @@ -196,9 +197,9 @@ static const TkCmd commands[] = { #if defined(MAC_OSX_TK) {"::tk::unsupported::MacWindowStyle", - NULL, TkUnsupported1ObjCmd, NULL, PASSMAINWINDOW|ISSAFE}, + TkUnsupported1ObjCmd, PASSMAINWINDOW|ISSAFE}, #endif - {NULL, NULL, NULL, NULL, 0} + {NULL, NULL, 0} }; /* @@ -858,6 +859,9 @@ TkCreateMainWindow( { Tk_Window tkwin; int dummy, isSafe; +#ifdef __WIN32__ + int isWin32 = 0; +#endif Tcl_HashEntry *hPtr; register TkMainInfo *mainPtr; register TkWindow *winPtr; @@ -865,6 +869,14 @@ TkCreateMainWindow( ClientData clientData; ThreadSpecificData *tsdPtr = Tcl_GetThreadData(&dataKey, sizeof(ThreadSpecificData)); +#ifdef __WIN32__ + Tcl_Obj *stringObjPtr = Tcl_GetVar2Ex(interp, "::tcl_platform", "platform", 0); + + if (stringObjPtr + && !strcmp(Tcl_GetString(stringObjPtr), "windows")) { + isWin32 = 1; + } +#endif /* * Panic if someone updated the TkWindow structure without also updating @@ -946,20 +958,24 @@ TkCreateMainWindow( isSafe = Tcl_IsSafe(interp); for (cmdPtr = commands; cmdPtr->name != NULL; cmdPtr++) { - if ((cmdPtr->cmdProc == NULL) && (cmdPtr->objProc == NULL) - && (cmdPtr->initProc == NULL)) { + if ((cmdPtr->objProc == NULL)) { Tcl_Panic("TkCreateMainWindow: builtin command with NULL string and object procs"); } +#ifdef __WIN32__ + if (!isWin32 && (cmdPtr->flags & WINMACONLY)) { + continue; + } +#endif if (cmdPtr->flags & PASSMAINWINDOW) { clientData = tkwin; } else { clientData = NULL; } - if (cmdPtr->initProc != NULL) { - cmdPtr->initProc(interp, clientData); - } else if (cmdPtr->cmdProc != NULL) { - Tcl_CreateCommand(interp, cmdPtr->name, cmdPtr->cmdProc, - clientData, NULL); + if (cmdPtr->flags & USEINITPROC) { + ((TkInitProc *)cmdPtr->objProc)(interp, clientData); + } else if (cmdPtr->flags & NOOBJPROC) { + Tcl_CreateCommand(interp, cmdPtr->name, + (Tcl_CmdProc *) cmdPtr->objProc, clientData, NULL); } else { Tcl_CreateObjCommand(interp, cmdPtr->name, cmdPtr->objProc, clientData, NULL); diff --git a/library/menu.tcl b/library/menu.tcl index e00dad9..5fb96fa 100644 --- a/library/menu.tcl +++ b/library/menu.tcl @@ -60,7 +60,7 @@ # This file is tricky because there are five different ways that menus # can be used: # -# 1. As a pulldown from a menubutton. In this style, the variable +# 1. As a pulldown from a menubutton. In this style, the variable # tk::Priv(postedMb) identifies the posted menubutton. # 2. As a torn-off menu copied from some other menu. In this style # tk::Priv(postedMb) is empty, and menu's type is "tearoff". @@ -282,81 +282,81 @@ proc ::tk::MbPost {w {x {}} {y {}}} { update idletasks if {[catch { switch [$w cget -direction] { - above { - set x [winfo rootx $w] - set y [expr {[winfo rooty $w] - [winfo reqheight $menu]}] + above { + set x [winfo rootx $w] + set y [expr {[winfo rooty $w] - [winfo reqheight $menu]}] # if we go offscreen to the top, show as 'below' - if {$y < 0} { - set y [expr {[winfo rooty $w] + [winfo height $w]}] + if {$y < [winfo vrooty $w]} { + set y [expr {[winfo vrooty $w] + [winfo rooty $w] + [winfo reqheight $w]}] } PostOverPoint $menu $x $y - } - below { - set x [winfo rootx $w] - set y [expr {[winfo rooty $w] + [winfo height $w]}] + } + below { + set x [winfo rootx $w] + set y [expr {[winfo rooty $w] + [winfo height $w]}] # if we go offscreen to the bottom, show as 'above' set mh [winfo reqheight $menu] - if {($y + $mh) > [winfo screenheight $w]} { - set y [expr {[winfo rooty $w] - $mh}] + if {($y + $mh) > ([winfo vrooty $w] + [winfo vrootheight $w])} { + set y [expr {[winfo vrooty $w] + [winfo vrootheight $w] + [winfo rooty $w] - $mh}] } PostOverPoint $menu $x $y - } - left { - set x [expr {[winfo rootx $w] - [winfo reqwidth $menu]}] - set y [expr {(2 * [winfo rooty $w] + [winfo height $w]) / 2}] - set entry [MenuFindName $menu [$w cget -text]] - if {[$w cget -indicatoron] && $entry ne ""} { + } + left { + set x [expr {[winfo rootx $w] - [winfo reqwidth $menu]}] + set y [expr {(2 * [winfo rooty $w] + [winfo height $w]) / 2}] + set entry [MenuFindName $menu [$w cget -text]] + if {[$w cget -indicatoron]} { if {$entry == [$menu index last]} { - incr y [expr {-([$menu yposition $entry] \ - + [winfo reqheight $menu])/2}] + incr y [expr {-([$menu yposition $entry] \ + + [winfo reqheight $menu])/2}] } else { - incr y [expr {-([$menu yposition $entry] \ + incr y [expr {-([$menu yposition $entry] \ + [$menu yposition [expr {$entry+1}]])/2}] } - } + } PostOverPoint $menu $x $y if {$entry ne "" \ && [$menu entrycget $entry -state] ne "disabled"} { - $menu activate $entry + $menu activate $entry GenerateMenuSelect $menu - } - } - right { - set x [expr {[winfo rootx $w] + [winfo width $w]}] - set y [expr {(2 * [winfo rooty $w] + [winfo height $w]) / 2}] - set entry [MenuFindName $menu [$w cget -text]] - if {[$w cget -indicatoron] && $entry ne ""} { + } + } + right { + set x [expr {[winfo rootx $w] + [winfo width $w]}] + set y [expr {(2 * [winfo rooty $w] + [winfo height $w]) / 2}] + set entry [MenuFindName $menu [$w cget -text]] + if {[$w cget -indicatoron]} { if {$entry == [$menu index last]} { - incr y [expr {-([$menu yposition $entry] \ - + [winfo reqheight $menu])/2}] + incr y [expr {-([$menu yposition $entry] \ + + [winfo reqheight $menu])/2}] } else { - incr y [expr {-([$menu yposition $entry] \ + incr y [expr {-([$menu yposition $entry] \ + [$menu yposition [expr {$entry+1}]])/2}] } - } + } PostOverPoint $menu $x $y if {$entry ne "" \ && [$menu entrycget $entry -state] ne "disabled"} { - $menu activate $entry + $menu activate $entry GenerateMenuSelect $menu - } - } - default { - if {[$w cget -indicatoron]} { + } + } + default { + if {[$w cget -indicatoron]} { if {$y eq ""} { set x [expr {[winfo rootx $w] + [winfo width $w]/2}] set y [expr {[winfo rooty $w] + [winfo height $w]/2}] - } + } PostOverPoint $menu $x $y [MenuFindName $menu [$w cget -text]] } else { PostOverPoint $menu [winfo rootx $w] [expr {[winfo rooty $w]+[winfo height $w]}] - } - } + } + } } } msg]} { # Error posting menu (e.g. bogus -postcommand). Unpost it and # reflect the error. - + set savedInfo $errorInfo MenuUnpost {} error $msg $savedInfo @@ -365,7 +365,7 @@ proc ::tk::MbPost {w {x {}} {y {}}} { set Priv(tearoff) $tearoff if {$tearoff != 0} { - focus $menu + focus $menu if {[winfo viewable $w]} { SaveGrabInfo $w grab -global $w @@ -425,8 +425,7 @@ proc ::tk::MenuUnpost menu { } elseif {$Priv(popup) ne ""} { $Priv(popup) unpost set Priv(popup) {} - } elseif {[$menu cget -type] ne "menubar" \ - && [$menu cget -type] ne "tearoff"} { + } elseif {[$menu cget -type] ne "menubar" && [$menu cget -type] ne "tearoff"} { # We're in a cascaded sub-menu from a torn-off menu or popup. # Unpost all the menus up to the toplevel one (but not # including the top-level torn-off one) and deactivate the @@ -434,8 +433,7 @@ proc ::tk::MenuUnpost menu { while {1} { set parent [winfo parent $menu] - if {[winfo class $parent] ne "Menu" \ - || ![winfo ismapped $parent]} { + if {[winfo class $parent] ne "Menu" || ![winfo ismapped $parent]} { break } $parent activate none @@ -454,8 +452,8 @@ proc ::tk::MenuUnpost menu { } if {($Priv(tearoff) != 0) || $Priv(menuBar) ne ""} { - # Release grab, if any, and restore the previous grab, if there - # was one. + # Release grab, if any, and restore the previous grab, if there + # was one. if {$menu ne ""} { set grab [grab current $menu] if {$grab ne ""} { @@ -702,7 +700,7 @@ proc ::tk::MenuInvoke {w buttonRelease} { set isCascade [string equal [$w type $active] "cascade"] # Only de-activate the active item if it's a cascade; this prevents - # the annoying "activation flicker" you otherwise get with + # the annoying "activation flicker" you otherwise get with # checkbuttons/commands/etc. on menubars if { $isCascade } { @@ -1030,11 +1028,10 @@ proc ::tk::TraverseToMenu {w char} { return } while {[winfo class $w] eq "Menu"} { - if {[$w cget -type] ne "menubar" && $Priv(postedMb) eq ""} { - return - } if {[$w cget -type] eq "menubar"} { break + } elseif {$Priv(postedMb) eq ""} { + return } set w [winfo parent $w] } @@ -1153,8 +1150,7 @@ proc ::tk::MenuFirstEntry menu { # otherwise, if the first entry of the cascade is a cascade, # we can get an annoying cascading effect resulting in a bunch of # menus getting posted (bug 676) - if {[$menu type $i] eq "cascade" \ - && [$menu cget -type] eq "menubar"} { + if {[$menu type $i] eq "cascade" && [$menu cget -type] eq "menubar"} { set cascade [$menu entrycget $i -menu] if {$cascade ne ""} { $menu postcascade $i @@ -1211,7 +1207,7 @@ proc ::tk::MenuFindName {menu s} { proc ::tk::PostOverPoint {menu x y {entry {}}} { global tcl_platform - + if {$entry ne ""} { if {$entry == [$menu index last]} { incr y [expr {-([$menu yposition $entry] \ @@ -1235,21 +1231,20 @@ proc ::tk::PostOverPoint {menu x y {entry {}}} { # Windows puts it in the wrong place for us. We must also # subtract an extra amount for half the height of the current # entry. To be safe we subtract an extra 10. - # NOTE: this issue appears to have been resolved in the Window - # manager provided with Vista and Windows 7. + # NOTE: this issue appears to have been resolved in the Window + # manager provided with Vista and Windows 7. if {$ver < 6} { set yoffset [expr {[winfo screenheight $menu] \ - - $y - [winfo reqheight $menu] - 10}] - if {$yoffset < 0} { + - $y - [winfo reqheight $menu] - 10}] + if {$yoffset < [winfo vrooty $menu]} { # The bottom of the menu is offscreen, so adjust upwards - incr y $yoffset - if {$y < 0} { set y 0 } + incr y [expr {$yoffset - [winfo vrooty $menu]}] } # If we're off the top of the screen (either because we were # originally or because we just adjusted too far upwards), # then make the menu popup on the top edge. - if {$y < 0} { - set y 0 + if {$y < [winfo vrooty $menu]} { + set y [winfo vrooty $menu] } } } @@ -1284,7 +1279,7 @@ proc ::tk::RestoreOldGrab {} { variable ::tk::Priv if {$Priv(oldGrab) ne ""} { - # Be careful restoring the old grab, since it's window may not + # Be careful restoring the old grab, since it's window may not # be visible anymore. catch { @@ -1305,7 +1300,7 @@ proc ::tk_menuSetFocus {menu} { } focus $menu } - + proc ::tk::GenerateMenuSelect {menu} { variable ::tk::Priv diff --git a/unix/Makefile.in b/unix/Makefile.in index 0e73871..3a20048 100644 --- a/unix/Makefile.in +++ b/unix/Makefile.in @@ -129,7 +129,7 @@ CFLAGS_WARNING = @CFLAGS_WARNING@ # The default switches for optimization or debugging CFLAGS_DEBUG = @CFLAGS_DEBUG@ -CFLAGS_OPTIMIZE = -DNDEBUG @CFLAGS_OPTIMIZE@ +CFLAGS_OPTIMIZE = @CFLAGS_OPTIMIZE@ # To change the compiler switches, for example to change from optimization to # debugging symbols, change the following line: diff --git a/unix/configure b/unix/configure index 7c8b7cf..132f11e 100755 --- a/unix/configure +++ b/unix/configure @@ -6969,7 +6969,7 @@ fi UNSHARED_LIB_SUFFIX='${VERSION}.a' fi - DLL_INSTALL_DIR="\$(LIB_INSTALL_DIR)" + DLL_INSTALL_DIR="\$(LIB_INSTALL_DIR)" if test "${SHARED_BUILD}" = 1 -a "${SHLIB_SUFFIX}" != ""; then @@ -7178,12 +7178,6 @@ echo "${ECHO_T}yes (standard debugging)" >&6 fi - ### FIXME: Surely TCL_CFG_DEBUG should be set to whether we're debugging? - -cat >>confdefs.h <<\_ACEOF -#define TCL_CFG_DEBUG 1 -_ACEOF - if test "$tcl_ok" = "mem" -o "$tcl_ok" = "all"; then diff --git a/unix/tcl.m4 b/unix/tcl.m4 index 28b323f..85b48fa 100644 --- a/unix/tcl.m4 +++ b/unix/tcl.m4 @@ -750,8 +750,6 @@ AC_DEFUN([SC_ENABLE_SYMBOLS], [ fi AC_SUBST(CFLAGS_DEFAULT) AC_SUBST(LDFLAGS_DEFAULT) - ### FIXME: Surely TCL_CFG_DEBUG should be set to whether we're debugging? - AC_DEFINE(TCL_CFG_DEBUG, 1, [Is debugging enabled?]) if test "$tcl_ok" = "mem" -o "$tcl_ok" = "all"; then AC_DEFINE(TCL_MEM_DEBUG, 1, [Is memory debugging enabled?]) @@ -2090,7 +2088,7 @@ dnl # preprocessing tests use only CPPFLAGS. SHARED_LIB_SUFFIX='${VERSION}${SHLIB_SUFFIX}']) AS_IF([test "$UNSHARED_LIB_SUFFIX" = ""], [ UNSHARED_LIB_SUFFIX='${VERSION}.a']) - DLL_INSTALL_DIR="\$(LIB_INSTALL_DIR)" + DLL_INSTALL_DIR="\$(LIB_INSTALL_DIR)" AS_IF([test "${SHARED_BUILD}" = 1 -a "${SHLIB_SUFFIX}" != ""], [ LIB_SUFFIX=${SHARED_LIB_SUFFIX} diff --git a/win/configure b/win/configure index fc8f41c..ad99837 100755 --- a/win/configure +++ b/win/configure @@ -3379,9 +3379,6 @@ fi if test "$GCC" = "yes"; then - if test "$TCL_CC" = "gcc"; then - CFLAGS="$CFLAGS -mwin32" - fi echo "$as_me:$LINENO: checking for cross-compile version of gcc" >&5 echo $ECHO_N "checking for cross-compile version of gcc... $ECHO_C" >&6 if test "${ac_cv_cross+set}" = set; then @@ -4766,10 +4763,6 @@ echo "${ECHO_T}yes (standard debugging)" >&6 fi - cat >>confdefs.h <<\_ACEOF -#define TCL_CFG_DEBUG 1 -_ACEOF - if test "$tcl_ok" = "mem" -o "$tcl_ok" = "all"; then @@ -317,7 +317,6 @@ AC_DEFUN([SC_ENABLE_SYMBOLS], [ fi AC_SUBST(CFLAGS_DEFAULT) AC_SUBST(LDFLAGS_DEFAULT) - AC_DEFINE(TCL_CFG_DEBUG) if test "$tcl_ok" = "mem" -o "$tcl_ok" = "all"; then AC_DEFINE(TCL_MEM_DEBUG, 1, [Is memory debugging enabled?]) @@ -418,9 +417,6 @@ AC_DEFUN([SC_CONFIG_CFLAGS], [ if test "$GCC" = "yes"; then - if test "$TCL_CC" = "gcc"; then - CFLAGS="$CFLAGS -mwin32" - fi AC_CACHE_CHECK(for cross-compile version of gcc, ac_cv_cross, AC_TRY_COMPILE([ diff --git a/xlib/xcolors.c b/xlib/xcolors.c index beec321..61a99a4 100644 --- a/xlib/xcolors.c +++ b/xlib/xcolors.c @@ -17,8 +17,8 @@ * Index array. For each of the characters 'a'-'y', this table gives the first color * starting with that character in the xColors table. */ -static int az[] = {0, 5, 13, 21, 45, 46, 50, 60, 62, 65, 66, 67, 91, 106, - 109, 115, 126, 127, 130, 144, 149, 150, 152, 155, 156, 158}; +static const int az[] = {0, 5, 13, 21, 45, 46, 50, 60, 62, 65, 66, 67, + 91, 106, 109, 115, 126, 127, 130, 144, 149, 150, 152, 155, 156, 158}; /* * Define an array that defines the mapping from color names to RGB values. @@ -41,18 +41,18 @@ typedef char elem[32]; static const elem xColors[] = { /* Colors starting with 'a' */ - "liceBlue\0 \360\370\377\0", + "liceBlue\0 \360\370\377", "ntiqueWhite\0 \213\203\170\315\300\260\356\337\314\377\357\333\372\353\327\4", - "qua\0 \000\377\377\0", + "qua\0 \000\377\377", "quamarine\0 \105\213\164\146\315\252\166\356\306\177\377\324\177\377\324\4", "zure\0 \203\213\213\301\315\315\340\356\356\360\377\377\360\377\377\4", /* Colors starting with 'b' */ - "eige\0 \365\365\334\0", + "eige\0 \365\365\334", "isque\0 \213\175\153\315\267\236\356\325\267\377\344\304\377\344\304\4", - "lack\0 \000\000\000\0", - "lanchedAlmond\0 \377\353\315\0", + "lack\0 \000\000\000", + "lanchedAlmond\0 \377\353\315", "lue\0 \000\000\213\000\000\315\000\000\356\000\000\377\000\000\377\4", - "lueViolet\0 \212\053\342\0", + "lueViolet\0 \212\053\342", "rown\0 \213\043\043\315\063\063\356\073\073\377\100\100\245\052\052\4", "urlywood\0 \213\163\125\315\252\175\356\305\221\377\323\233\336\270\207\4", /* Colors starting with 'c' */ @@ -60,129 +60,129 @@ static const elem xColors[] = { "hartreuse\0 \105\213\000\146\315\000\166\356\000\177\377\000\177\377\000\4", "hocolate\0 \213\105\023\315\146\035\356\166\041\377\177\044\322\151\036\4", "oral\0 \213\076\057\315\133\105\356\152\120\377\162\126\377\177\120\4", - "ornflowerBlue\0 \144\225\355\0", + "ornflowerBlue\0 \144\225\355", "ornsilk\0 \213\210\170\315\310\261\356\350\315\377\370\334\377\370\334\4", - "rimson\0 \334\024\074\0", + "rimson\0 \334\024\074", "yan\0 \000\213\213\000\315\315\000\356\356\000\377\377\000\377\377\4", /* Colors starting with 'd' */ - "arkBlue\0 \000\000\213\0", - "arkCyan\0 \000\213\213\0", + "arkBlue\0 \000\000\213", + "arkCyan\0 \000\213\213", "arkGoldenrod\0 \213\145\010\315\225\014\356\255\016\377\271\017\270\206\013\4", - "arkGray\0 \251\251\251\0", - "arkGreen\0 \000\144\000\0", - "arkGrey\0 \251\251\251\0", - "arkKhaki\0 \275\267\153\0", - "arkMagenta\0 \213\000\213\0", + "arkGray\0 \251\251\251", + "arkGreen\0 \000\144\000", + "arkGrey\0 \251\251\251", + "arkKhaki\0 \275\267\153", + "arkMagenta\0 \213\000\213", "arkOliveGreen\0 \156\213\075\242\315\132\274\356\150\312\377\160\125\153\057\4", "arkOrange\0 \213\105\000\315\146\000\356\166\000\377\177\000\377\214\000\4", "arkOrchid\0 \150\042\213\232\062\315\262\072\356\277\076\377\231\062\314\4", - "arkRed\0 \213\000\000\0", - "arkSalmon\0 \351\226\172\0", + "arkRed\0 \213\000\000", + "arkSalmon\0 \351\226\172", "arkSeaGreen\0 \151\213\151\233\315\233\264\356\264\301\377\301\217\274\217\4", - "arkSlateBlue\0 \110\075\213\0", + "arkSlateBlue\0 \110\075\213", "arkSlateGray\0 \122\213\213\171\315\315\215\356\356\227\377\377\057\117\117\4", - "arkSlateGrey\0 \057\117\117\0", - "arkTurquoise\0 \000\316\321\0", - "arkViolet\0 \224\000\323\0", + "arkSlateGrey\0 \057\117\117", + "arkTurquoise\0 \000\316\321", + "arkViolet\0 \224\000\323", "eepPink\0 \213\012\120\315\020\166\356\022\211\377\024\223\377\024\223\4", "eepSkyBlue\0 \000\150\213\000\232\315\000\262\356\000\277\377\000\277\377\4", - "imGray\0 \151\151\151\0", - "imGrey\0 \151\151\151\0", + "imGray\0 \151\151\151", + "imGrey\0 \151\151\151", "odgerBlue\0 \020\116\213\030\164\315\034\206\356\036\220\377\036\220\377\4", /* Colors starting with 'e' */ "\377" /* placeholder */, /* Colors starting with 'f' */ "irebrick\0 \213\032\032\315\046\046\356\054\054\377\060\060\262\042\042\4", - "loralWhite\0 \377\372\360\0", - "orestGreen\0 \042\213\042\0", - "uchsia\0 \377\000\377\0", + "loralWhite\0 \377\372\360", + "orestGreen\0 \042\213\042", + "uchsia\0 \377\000\377", /* Colors starting with 'g' */ - "ainsboro\0 \334\334\334\0", - "hostWhite\0 \370\370\377\0", + "ainsboro\0 \334\334\334", + "hostWhite\0 \370\370\377", "old\0 \213\165\000\315\255\000\356\311\000\377\327\000\377\327\000\4", "oldenrod\0 \213\151\024\315\233\035\356\264\042\377\301\045\332\245\040\4", "ray\0\024\024\024\022\022\022\017\017\017\015\015\015\012\012\012" "\010\010\010\005\005\005\003\003\003\200\200\200\10", - "ray0\0 \000\000\000\0", + "ray0\0 \000\000\000", "reen\0 \000\213\000\000\315\000\000\356\000\000\377\000\000\200\000\4", - "reenYellow\0 \255\377\057\0", + "reenYellow\0 \255\377\057", "rey\0\024\024\024\022\022\022\017\017\017\015\015\015\012\012\012" "\010\010\010\005\005\005\003\003\003\200\200\200\10", - "rey0\0 \000\000\000\0", + "rey0\0 \000\000\000", /* Colors starting with 'h' */ "oneydew\0 \203\213\203\301\315\301\340\356\340\360\377\360\360\377\360\4", "otPink\0 \213\072\142\315\140\220\356\152\247\377\156\264\377\151\264\4", /* Colors starting with 'i' */ "ndianRed\0 \213\072\072\315\125\125\356\143\143\377\152\152\315\134\134\4", - "ndigo\0 \113\000\202\0", + "ndigo\0 \113\000\202", "vory\0 \213\213\203\315\315\301\356\356\340\377\377\360\377\377\360\4", /* Colors starting with 'j' */ "\377" /* placeholder */, /* Colors starting with 'k' */ "haki\0 \213\206\116\315\306\163\356\346\205\377\366\217\360\346\214\4", /* Colors starting with 'l' */ - "avender\0 \346\346\372\0", + "avender\0 \346\346\372", "avenderBlush\0 \213\203\206\315\301\305\356\340\345\377\360\365\377\360\365\4", - "awnGreen\0 \174\374\000\0", + "awnGreen\0 \174\374\000", "emonChiffon\0 \213\211\160\315\311\245\356\351\277\377\372\315\377\372\315\4", "ightBlue\0 \150\203\213\232\300\315\262\337\356\277\357\377\255\330\346\4", - "ightCoral\0 \360\200\200\0", + "ightCoral\0 \360\200\200", "ightCyan\0 \172\213\213\264\315\315\321\356\356\340\377\377\340\377\377\4", "ightGoldenrod\0 \213\201\114\315\276\160\356\334\202\377\354\213\356\335\202\4", - "ightGoldenrodYellow\0 \372\372\322\0", - "ightGray\0 \323\323\323\0", - "ightGreen\0 \220\356\220\0", - "ightGrey\0 \323\323\323\0", + "ightGoldenrodYellow\0 \372\372\322", + "ightGray\0 \323\323\323", + "ightGreen\0 \220\356\220", + "ightGrey\0 \323\323\323", "ightPink\0 \213\137\145\315\214\225\356\242\255\377\256\271\377\266\301\4", "ightSalmon\0 \213\127\102\315\201\142\356\225\162\377\240\172\377\240\172\4", - "ightSeaGreen\0 \040\262\252\0", + "ightSeaGreen\0 \040\262\252", "ightSkyBlue\0 \140\173\213\215\266\315\244\323\356\260\342\377\207\316\372\4", - "ightSlateBlue\0 \204\160\377\0", - "ightSlateGray\0 \167\210\231\0", - "ightSlateGrey\0 \167\210\231\0", + "ightSlateBlue\0 \204\160\377", + "ightSlateGray\0 \167\210\231", + "ightSlateGrey\0 \167\210\231", "ightSteelBlue\0 \156\173\213\242\265\315\274\322\356\312\341\377\260\304\336\4", "ightYellow\0 \213\213\172\315\315\264\356\356\321\377\377\340\377\377\340\4", - "ime\0 \000\377\000\0", - "imeGreen\0 \062\315\062\0", - "inen\0 \372\360\346\0", + "ime\0 \000\377\000", + "imeGreen\0 \062\315\062", + "inen\0 \372\360\346", /* Colors starting with 'm' */ "agenta\0 \213\000\213\315\000\315\356\000\356\377\000\377\377\000\377\4", "aroon\0 \213\034\142\315\051\220\356\060\247\377\064\263\200\000\000\4", - "ediumAquamarine\0 \146\315\252\0", - "ediumBlue\0 \000\000\315\0", + "ediumAquamarine\0 \146\315\252", + "ediumBlue\0 \000\000\315", "ediumOrchid\0 \172\067\213\264\122\315\321\137\356\340\146\377\272\125\323\4", "ediumPurple\0 \135\107\213\211\150\315\237\171\356\253\202\377\223\160\333\4", - "ediumSeaGreen\0 \074\263\161\0", - "ediumSlateBlue\0 \173\150\356\0", - "ediumSpringGreen\0 \000\372\232\0", - "ediumTurquoise\0 \110\321\314\0", - "ediumVioletRed\0 \307\025\205\0", - "idnightBlue\0 \031\031\160\0", - "intCream\0 \365\377\372\0", + "ediumSeaGreen\0 \074\263\161", + "ediumSlateBlue\0 \173\150\356", + "ediumSpringGreen\0 \000\372\232", + "ediumTurquoise\0 \110\321\314", + "ediumVioletRed\0 \307\025\205", + "idnightBlue\0 \031\031\160", + "intCream\0 \365\377\372", "istyRose\0 \213\175\173\315\267\265\356\325\322\377\344\341\377\344\341\4", - "occasin\0 \377\344\265\0", + "occasin\0 \377\344\265", /* Colors starting with 'n' */ "avajoWhite\0 \213\171\136\315\263\213\356\317\241\377\336\255\377\336\255\4", - "avy\0 \000\000\200\0", - "avyBlue\0 \000\000\200\0", + "avy\0 \000\000\200", + "avyBlue\0 \000\000\200", /* Colors starting with 'o' */ - "ldLace\0 \375\365\346\0", - "live\0 \200\200\000\0", + "ldLace\0 \375\365\346", + "live\0 \200\200\000", "liveDrab\0 \151\213\042\232\315\062\263\356\072\300\377\076\153\216\043\4", "range\0 \213\132\000\315\205\000\356\232\000\377\245\000\377\245\000\4", "rangeRed\0 \213\045\000\315\067\000\356\100\000\377\105\000\377\105\000\4", "rchid\0 \213\107\211\315\151\311\356\172\351\377\203\372\332\160\326\4", /* Colors starting with 'p' */ - "aleGoldenrod\0 \356\350\252\0", + "aleGoldenrod\0 \356\350\252", "aleGreen\0 \124\213\124\174\315\174\220\356\220\232\377\232\230\373\230\4", "aleTurquoise\0 \146\213\213\226\315\315\256\356\356\273\377\377\257\356\356\4", "aleVioletRed\0 \213\107\135\315\150\211\356\171\237\377\202\253\333\160\223\4", - "apayaWhip\0 \377\357\325\0", + "apayaWhip\0 \377\357\325", "eachPuff\0 \213\167\145\315\257\225\356\313\255\377\332\271\377\332\271\4", - "eru\0 \315\205\077\0", + "eru\0 \315\205\077", "ink\0 \213\143\154\315\221\236\356\251\270\377\265\305\377\300\313\4", "lum\0 \213\146\213\315\226\315\356\256\356\377\273\377\335\240\335\4", - "owderBlue\0 \260\340\346\0", + "owderBlue\0 \260\340\346", "urple\0 \125\032\213\175\046\315\221\054\356\233\060\377\200\000\200\4", /* Colors starting with 'q' */ "\377" /* placeholder */, @@ -191,35 +191,35 @@ static const elem xColors[] = { "osyBrown\0 \213\151\151\315\233\233\356\264\264\377\301\301\274\217\217\4", "oyalBlue\0 \047\100\213\072\137\315\103\156\356\110\166\377\101\151\341\4", /* Colors starting with 's' */ - "addleBrown\0 \213\105\023\0", + "addleBrown\0 \213\105\023", "almon\0 \213\114\071\315\160\124\356\202\142\377\214\151\372\200\162\4", - "andyBrown\0 \364\244\140\0", + "andyBrown\0 \364\244\140", "eaGreen\0 \056\213\127\103\315\200\116\356\224\124\377\237\056\213\127\4", "eashell\0 \213\206\202\315\305\277\356\345\336\377\365\356\377\365\356\4", "ienna\0 \213\107\046\315\150\071\356\171\102\377\202\107\240\122\055\4", - "ilver\0 \300\300\300\0", + "ilver\0 \300\300\300", "kyBlue\0 \112\160\213\154\246\315\176\300\356\207\316\377\207\316\353\4", "lateBlue\0 \107\074\213\151\131\315\172\147\356\203\157\377\152\132\315\4", "lateGray\0 \154\173\213\237\266\315\271\323\356\306\342\377\160\200\220\4", - "lateGrey\0 \160\200\220\0", + "lateGrey\0 \160\200\220", "now\0 \213\211\211\315\311\311\356\351\351\377\372\372\377\372\372\4", "pringGreen\0 \000\213\105\000\315\146\000\356\166\000\377\177\000\377\177\4", "teelBlue\0 \066\144\213\117\224\315\134\254\356\143\270\377\106\202\264\4", /* Colors starting with 't' */ "an\0 \213\132\053\315\205\077\356\232\111\377\245\117\322\264\214\4", - "eal\0 \000\200\200\0", + "eal\0 \000\200\200", "histle\0 \213\173\213\315\265\315\356\322\356\377\341\377\330\277\330\4", "omato\0 \213\066\046\315\117\071\356\134\102\377\143\107\377\143\107\4", "urquoise\0 \000\206\213\000\305\315\000\345\356\000\365\377\100\340\320\4", /* Colors starting with 'u' */ "\377" /* placeholder */, /* Colors starting with 'v' */ - "iolet\0 \356\202\356\0", + "iolet\0 \356\202\356", "ioletRed\0 \213\042\122\315\062\170\356\072\214\377\076\226\320\040\220\4", /* Colors starting with 'w' */ "heat\0 \213\176\146\315\272\226\356\330\256\377\347\272\365\336\263\4", - "hite\0 \377\377\377\0", - "hiteSmoke\0 \365\365\365\0", + "hite\0 \377\377\377", + "hiteSmoke\0 \365\365\365", /* Colors starting with 'x' */ "\377" /* placeholder */, /* Colors starting with 'y' */ |