Posted to tcl by patthoyts at Fri Sep 22 12:04:47 GMT 2006view pretty

proc balloon::show {mx my} {
    variable balloon_showed 
    variable balloon_remove 
    variable max_bx 
    variable screenwidth
    variable screenheight

    if {[.balloon.text cget -text] == ""} {
	balloon::destroy
	return
    }

    set balloon_showed 1
    set balloon_remove 0

    set b_w [winfo reqwidth .balloon]
    set b_h [winfo reqheight .balloon]


    if {$::tcl_platform(platform) eq "windows"} {

        #tk::PlaceWindow .balloon pointer
        set b_x [expr {$mx + 1}]
        set b_y [expr {$my + 1}]

    } else {

        set b_x [expr {$mx + 12}]
        set b_y [expr {$my + 15}]

        set max_bx [expr {$screenwidth - $b_w}]
        set max_by [expr {$screenheight - $b_h}]

        set b_x [max [min $b_x $max_bx] 0]
        set b_y [max [min $b_y $max_by] 0]
        
        if {($mx >= $b_x) && ($mx <= $b_x+$b_w)} {
            if {($my >= $b_y) && ($my <= $b_y+$b_h)} {
                set b_y1 [expr {$my - 5 - $b_h}]
                if {$b_y1 >= 0} {
                    set b_y $b_y1
                }
            }
        }
    }
    wm geometry .balloon +$b_x+$b_y
    wm deiconify .balloon
    # need the raise in case we're ballooning over a detached menu
    raise .balloon
}