Sometimes its so much more convenient (and efficient) to implement something in C rather than Tcl: positioning a popup menu on screen is one of those situations. To this end a new option, -widget, has been added to the menu popup subcommand. This causes the callback handler to determine screen coordinates from the on-screen location and height of the widget specified by the -widget option. Compare: $abut configure -onClicked "$menu popup -widget %w" With: $abut configure -data $menu -onClicked { lassign [gnocl::winfo geometry %w] x y w h %d popup [expr $x-4] [expr $y+$h] } This latter approach not only requires memory allocation using -data but 'pollutes' the global namespace with the extra variables 'x y w h' which might result in some form of conflict. For those who notice, there is '+4' which is an attempt to handle the buttons style border-width setting. This isn't handled in the callback sc...