From d1a95d8859199b3fff57d349db42d70b1feee84c Mon Sep 17 00:00:00 2001 From: "jan.nijtmans" Date: Fri, 4 May 2012 22:05:25 +0000 Subject: [Bug 2768586]: Menu posting problem on dual monitors --- ChangeLog | 4 ++++ library/menu.tcl | 17 ++++++++--------- 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/ChangeLog b/ChangeLog index d205485..d04cb05 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2012-05-04 Jan Nijtmans + + * library/menu.tcl: [Bug 2768586]: Menu posting problem on dual monitors + 2012-05-02 Jan Nijtmans * library/tk.tcl: [Bug 533519]: Window placement with multiple screens diff --git a/library/menu.tcl b/library/menu.tcl index ed8182e..ff62484 100644 --- a/library/menu.tcl +++ b/library/menu.tcl @@ -284,8 +284,8 @@ proc ::tk::MbPost {w {x {}} {y {}}} { 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 } @@ -294,8 +294,8 @@ proc ::tk::MbPost {w {x {}} {y {}}} { 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 } @@ -1196,16 +1196,15 @@ proc ::tk::PostOverPoint {menu x y {entry {}}} { # entry. To be safe we subtract an extra 10. set yoffset [expr {[winfo screenheight $menu] \ - $y - [winfo reqheight $menu] - 10}] - if {$yoffset < 0} { + 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] } } $menu post $x $y -- cgit v0.12