diff options
author | jan.nijtmans <nijtmans@users.sourceforge.net> | 2012-05-05 06:53:24 (GMT) |
---|---|---|
committer | jan.nijtmans <nijtmans@users.sourceforge.net> | 2012-05-05 06:53:24 (GMT) |
commit | b9db87a7630af69fc4e1ff5d53b21506d94a1b80 (patch) | |
tree | 9d4f2016eb7700059aa230c4ef9789a81603cfd1 | |
parent | 39e8bd9a08defb2e168fcd11496ad60e7c0e828e (diff) | |
parent | 2b806d226389b8b0f518ac0cf224c5fe2e1e7495 (diff) | |
download | tk-b9db87a7630af69fc4e1ff5d53b21506d94a1b80.zip tk-b9db87a7630af69fc4e1ff5d53b21506d94a1b80.tar.gz tk-b9db87a7630af69fc4e1ff5d53b21506d94a1b80.tar.bz2 |
[Bug 2768586]: Only do menu correction on Windows < Win7
If tk.dll loaded in cygwin, don't use the win32 file dialogs
-rw-r--r-- | ChangeLog | 6 | ||||
-rw-r--r-- | generic/tkWindow.c | 123 | ||||
-rw-r--r-- | library/menu.tcl | 158 | ||||
-rwxr-xr-x | xlib/xcolors.c | 132 |
4 files changed, 227 insertions, 192 deletions
@@ -1,3 +1,9 @@ +2012-05-05 Jan Nijtmans <nijtmans@users.sf.net> + + * library/menu.tcl: [Bug 2768586]: Only do menu correction on Windows < Win7 + * 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 diff --git a/generic/tkWindow.c b/generic/tkWindow.c index d3de72d..98b89db 100644 --- a/generic/tkWindow.c +++ b/generic/tkWindow.c @@ -101,11 +101,12 @@ static CONST XSetWindowAttributes defAtts= { #define ISSAFE 1 #define PASSMAINWINDOW 2 +#define NOOBJPROC 4 +#define WINMACONLY 8 typedef struct { CONST char *name; /* Name of command. */ - Tcl_CmdProc *cmdProc; /* Command's string-based procedure. */ - Tcl_ObjCmdProc *objProc; /* Command's object-based procedure. */ + Tcl_ObjCmdProc *objProc; /* Command's object- (or string-) based procedure. */ int flags; } TkCmd; @@ -114,59 +115,59 @@ static CONST TkCmd commands[] = { * Commands that are part of the intrinsics: */ - {"bell", NULL, Tk_BellObjCmd, PASSMAINWINDOW}, - {"bind", NULL, Tk_BindObjCmd, PASSMAINWINDOW|ISSAFE}, - {"bindtags", NULL, Tk_BindtagsObjCmd, PASSMAINWINDOW|ISSAFE}, - {"clipboard", NULL, Tk_ClipboardObjCmd, PASSMAINWINDOW}, - {"destroy", NULL, Tk_DestroyObjCmd, PASSMAINWINDOW|ISSAFE}, - {"event", NULL, Tk_EventObjCmd, PASSMAINWINDOW|ISSAFE}, - {"focus", NULL, Tk_FocusObjCmd, PASSMAINWINDOW|ISSAFE}, - {"font", NULL, Tk_FontObjCmd, PASSMAINWINDOW|ISSAFE}, - {"grab", NULL, Tk_GrabObjCmd, PASSMAINWINDOW}, - {"grid", NULL, Tk_GridObjCmd, PASSMAINWINDOW|ISSAFE}, - {"image", NULL, Tk_ImageObjCmd, PASSMAINWINDOW|ISSAFE}, - {"lower", NULL, Tk_LowerObjCmd, PASSMAINWINDOW|ISSAFE}, - {"option", NULL, Tk_OptionObjCmd, PASSMAINWINDOW|ISSAFE}, - {"pack", NULL, Tk_PackObjCmd, PASSMAINWINDOW|ISSAFE}, - {"place", NULL, Tk_PlaceObjCmd, ISSAFE}, - {"raise", NULL, Tk_RaiseObjCmd, PASSMAINWINDOW|ISSAFE}, - {"selection", NULL, Tk_SelectionObjCmd, PASSMAINWINDOW}, - {"tk", NULL, Tk_TkObjCmd, PASSMAINWINDOW|ISSAFE}, - {"tkwait", NULL, Tk_TkwaitObjCmd, PASSMAINWINDOW|ISSAFE}, + {"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, ISSAFE}, + {"raise", Tk_RaiseObjCmd, PASSMAINWINDOW|ISSAFE}, + {"selection", Tk_SelectionObjCmd, PASSMAINWINDOW}, + {"tk", Tk_TkObjCmd, PASSMAINWINDOW|ISSAFE}, + {"tkwait", Tk_TkwaitObjCmd, PASSMAINWINDOW|ISSAFE}, #if defined(__WIN32__) || defined(MAC_TCL) || defined(MAC_OSX_TK) - {"tk_chooseColor", NULL, Tk_ChooseColorObjCmd, PASSMAINWINDOW}, - {"tk_chooseDirectory", NULL, Tk_ChooseDirectoryObjCmd, PASSMAINWINDOW}, - {"tk_getOpenFile", NULL, Tk_GetOpenFileObjCmd, PASSMAINWINDOW}, - {"tk_getSaveFile", NULL, Tk_GetSaveFileObjCmd, PASSMAINWINDOW}, + {"tk_chooseColor", Tk_ChooseColorObjCmd, PASSMAINWINDOW}, + {"tk_chooseDirectory", Tk_ChooseDirectoryObjCmd, WINMACONLY|PASSMAINWINDOW}, + {"tk_getOpenFile", Tk_GetOpenFileObjCmd, WINMACONLY|PASSMAINWINDOW}, + {"tk_getSaveFile", Tk_GetSaveFileObjCmd, WINMACONLY|PASSMAINWINDOW}, #endif #if defined(__WIN32__) || defined(MAC_OSX_TK) - {"tk_messageBox", NULL, Tk_MessageBoxObjCmd, PASSMAINWINDOW}, + {"tk_messageBox", Tk_MessageBoxObjCmd, PASSMAINWINDOW}, #endif - {"update", NULL, Tk_UpdateObjCmd, PASSMAINWINDOW|ISSAFE}, - {"winfo", NULL, Tk_WinfoObjCmd, PASSMAINWINDOW|ISSAFE}, - {"wm", NULL, Tk_WmObjCmd, PASSMAINWINDOW}, + {"update", Tk_UpdateObjCmd, PASSMAINWINDOW|ISSAFE}, + {"winfo", Tk_WinfoObjCmd, PASSMAINWINDOW|ISSAFE}, + {"wm", Tk_WmObjCmd, PASSMAINWINDOW}, /* * Widget class commands. */ - {"button", NULL, Tk_ButtonObjCmd, ISSAFE}, - {"canvas", NULL, Tk_CanvasObjCmd, PASSMAINWINDOW|ISSAFE}, - {"checkbutton", NULL, Tk_CheckbuttonObjCmd, ISSAFE}, - {"entry", NULL, Tk_EntryObjCmd, ISSAFE}, - {"frame", NULL, Tk_FrameObjCmd, ISSAFE}, - {"label", NULL, Tk_LabelObjCmd, ISSAFE}, - {"labelframe", NULL, Tk_LabelframeObjCmd, ISSAFE}, - {"listbox", NULL, Tk_ListboxObjCmd, ISSAFE}, - {"menubutton", NULL, Tk_MenubuttonObjCmd, ISSAFE}, - {"message", NULL, Tk_MessageObjCmd, ISSAFE}, - {"panedwindow", NULL, Tk_PanedWindowObjCmd, ISSAFE}, - {"radiobutton", NULL, Tk_RadiobuttonObjCmd, ISSAFE}, - {"scale", NULL, Tk_ScaleObjCmd, ISSAFE}, - {"scrollbar", Tk_ScrollbarCmd, NULL, PASSMAINWINDOW|ISSAFE}, - {"spinbox", NULL, Tk_SpinboxObjCmd, ISSAFE}, - {"text", Tk_TextCmd, NULL, PASSMAINWINDOW|ISSAFE}, - {"toplevel", NULL, Tk_ToplevelObjCmd, 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", (Tcl_ObjCmdProc *) Tk_TextCmd, NOOBJPROC|PASSMAINWINDOW|ISSAFE}, + {"toplevel", Tk_ToplevelObjCmd, 0}, /* * Misc. @@ -174,9 +175,9 @@ static CONST TkCmd commands[] = { #if defined(MAC_TCL) || defined(MAC_OSX_TK) {"::tk::unsupported::MacWindowStyle", - NULL, TkUnsupported1ObjCmd, PASSMAINWINDOW|ISSAFE}, + TkUnsupported1ObjCmd, PASSMAINWINDOW|ISSAFE}, #endif - {(char *) NULL, (int (*) _ANSI_ARGS_((ClientData, Tcl_Interp *, int, CONST char **))) NULL, NULL, 0} + {NULL, NULL, 0} }; /* @@ -851,6 +852,9 @@ TkCreateMainWindow(interp, screenName, baseName) Tk_Window tkwin; int dummy; int isSafe; +#ifdef __WIN32__ + int isWin32 = 0; +#endif Tcl_HashEntry *hPtr; register TkMainInfo *mainPtr; register TkWindow *winPtr; @@ -858,7 +862,15 @@ TkCreateMainWindow(interp, screenName, baseName) ClientData clientData; ThreadSpecificData *tsdPtr = (ThreadSpecificData *) 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 the Tk_FakeWin structure (or vice versa). @@ -938,17 +950,22 @@ TkCreateMainWindow(interp, screenName, baseName) isSafe = Tcl_IsSafe(interp); for (cmdPtr = commands; cmdPtr->name != NULL; cmdPtr++) { - if ((cmdPtr->cmdProc == NULL) && (cmdPtr->objProc == 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 = (ClientData) tkwin; } else { clientData = (ClientData) NULL; } - if (cmdPtr->cmdProc != NULL) { - Tcl_CreateCommand(interp, cmdPtr->name, cmdPtr->cmdProc, - clientData, (void (*) _ANSI_ARGS_((ClientData))) NULL); + 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 ff62484..782a726 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". @@ -280,81 +280,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 < [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 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]} { + } + 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]} { + } + } + 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 @@ -363,7 +363,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 @@ -443,8 +443,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 ""} { @@ -584,7 +584,7 @@ proc ::tk::MenuButtonDown menu { set menu [winfo parent $menu] } - if {$Priv(menuBar) eq ""} { + if {$Priv(menuBar) eq {}} { set Priv(menuBar) $menu set Priv(cursor) [$menu cget -cursor] $menu configure -cursor arrow @@ -625,7 +625,8 @@ proc ::tk::MenuLeave {menu rootx rooty state} { return } if {[$menu type active] eq "cascade" \ - && [winfo containing $rootx $rooty] eq [$menu entrycget active -menu]} { + && [winfo containing $rootx $rooty] eq \ + [$menu entrycget active -menu]} { return } $menu activate none @@ -669,7 +670,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 } { @@ -779,7 +780,8 @@ proc ::tk::MenuNextMenu {menu direction} { } else { set parent [winfo parent $menu] while {$parent ne "."} { - if {[winfo class $parent] eq "Menu" && [$parent cget -type] eq "menubar"} { + if {[winfo class $parent] eq "Menu" \ + && [$parent cget -type] eq "menubar"} { tk_menuSetFocus $parent MenuNextEntry $parent 1 return @@ -803,16 +805,14 @@ proc ::tk::MenuNextMenu {menu direction} { } } - # Can't traverse into or out of a cascaded menu. Go to the next + # Can't traverse into or out of a cascaded menu. Go to the next # or previous menubutton, if that makes sense. set m2 [winfo parent $menu] - if {[winfo class $m2] eq "Menu"} { - if {[$m2 cget -type] eq "menubar"} { - tk_menuSetFocus $m2 - MenuNextEntry $m2 -1 - return - } + if {[winfo class $m2] eq "Menu" && [$m2 cget -type] eq "menubar"} { + tk_menuSetFocus $m2 + MenuNextEntry $m2 -1 + return } set w $Priv(postedMb) @@ -932,7 +932,8 @@ proc ::tk::MenuFind {w char} { if {[winfo toplevel $w] ne [winfo toplevel $child]} { continue } - if {[winfo class $child] eq "Menu" && [$child cget -type] eq "menubar"} { + if {[winfo class $child] eq "Menu" && \ + [$child cget -type] eq "menubar"} { if {$char eq ""} { return $child } @@ -957,7 +958,7 @@ proc ::tk::MenuFind {w char} { if {[winfo toplevel $w] ne [winfo toplevel $child]} { continue } - switch [winfo class $child] { + switch -- [winfo class $child] { Menubutton { set char2 [string index [$child cget -text] \ [$child cget -underline]] @@ -1112,15 +1113,14 @@ proc ::tk::MenuFirstEntry menu { } for {set i 0} {$i <= $last} {incr i} { if {([catch {set state [$menu entrycget $i -state]}] == 0) \ - && $state ne "disabled" \ - && [$menu type $i] ne "tearoff"} { + && $state ne "disabled" && [$menu type $i] ne "tearoff"} { $menu activate $i GenerateMenuSelect $menu # Only post the cascade if the current menu is a menubar; # 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 @@ -1177,7 +1177,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] \ @@ -1188,23 +1188,34 @@ proc ::tk::PostOverPoint {menu x y {entry {}}} { } incr x [expr {-[winfo reqwidth $menu]/2}] } + if {$tcl_platform(platform) eq "windows"} { + # osVersion is not available in safe interps + set ver 5 + if {[info exists tcl_platform(osVersion)]} { + scan $tcl_platform(osVersion) %d ver + } + # We need to fix some problems with menu posting on Windows, # where, if the menu would overlap top or bottom of screen, # 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. - set yoffset [expr {[winfo screenheight $menu] \ - - $y - [winfo reqheight $menu] - 10}] - if {$yoffset < [winfo vrooty $menu]} { - # The bottom of the menu is offscreen, so adjust upwards - 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 < [winfo vrooty $menu]} { - set y [winfo vrooty $menu] + # 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 < [winfo vrooty $menu]} { + # The bottom of the menu is offscreen, so adjust upwards + 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 < [winfo vrooty $menu]} { + set y [winfo vrooty $menu] + } } } $menu post $x $y @@ -1238,11 +1249,11 @@ 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 { - if {$Priv(grabStatus) eq "global"} { + if {$Priv(grabStatus) eq "global"} { grab set -global $Priv(oldGrab) } else { grab set $Priv(oldGrab) @@ -1263,7 +1274,8 @@ proc ::tk_menuSetFocus {menu} { proc ::tk::GenerateMenuSelect {menu} { variable ::tk::Priv - if {$Priv(activeMenu) eq $menu && $Priv(activeItem) eq [$menu index active]} { + if {$Priv(activeMenu) eq $menu \ + && $Priv(activeItem) eq [$menu index active]} { return } diff --git a/xlib/xcolors.c b/xlib/xcolors.c index 87d58f9..497f251 100755 --- 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 unsigned char az[] = {0, 4, 12, 19, 43, 44, 47, 57, 59, 61, 62, 63, 86, 101, - 104, 109, 120, 121, 124, 137, 141, 142, 144, 147, 148, 150}; +static const unsigned char az[] = {0, 4, 12, 19, 43, 44, 47, 57, 59, 61, + 62, 63, 86, 101, 104, 109, 120, 121, 124, 137, 141, 142, 144, 147, 148, 150}; /* * Define an array that defines the mapping from color names to RGB values. @@ -41,17 +41,17 @@ 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", "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' */ @@ -59,53 +59,53 @@ 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", "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", + "loralWhite\0 \377\372\360", + "orestGreen\0 \042\213\042", /* 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\276\276\276\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\377\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\276\276\276\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", @@ -117,66 +117,66 @@ static const elem xColors[] = { /* 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", - "imeGreen\0 \062\315\062\0", - "inen\0 \372\360\346\0", + "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\260\060\140\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", + "ldLace\0 \375\365\346", "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\240\040\360\4", /* Colors starting with 'q' */ "\377" /* placeholder */, @@ -185,16 +185,16 @@ 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", "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", @@ -206,12 +206,12 @@ static const elem xColors[] = { /* 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' */ |