#
# tk::tktray widget is called .i
#
+# Tooltip:
+#
+# Caller may call
+# applet::setup-tooltip ON-VISIBLE ON-INVISIBLE
+# to make applet have a tooltip.
+#
+# ON-VISIBLE and ON-INVISIBLE will be globally eval'd
+# when the tooltip becomes visible and invisible.
+#
+# Caller should call
+# applet::tooltip-set TEXT-MAYBE-MULTILINE
+# whenever they like.
+#
# Inner window subprocess:
#
# Caller that needs access to inner window should define
namespace eval applet {
+
+# used by both menus and tooltips
variable posted 0
+#----- menus -----
+
proc setup-button-menu {b} {
bind .i.i <ButtonPress> { applet::menubuttonpressed %b %X %Y }
menu .m$b -tearoff 0
set posted 0
}
-}
-
-proc innerwindow-resetup-required {why} {
- variable innerwindow_after
-puts "IW-EVENT $why"
- if {[info exists innerwindow_after]} return
- set innerwindow_after [after idle innerwindow-resetup]
-}
-
-proc innerwindow-resetup {} {
- variable innerwindow_after
- unset innerwindow_after
-
-puts RESETUP
-
- innerwindow-destroying
-
- catch { destroy .i.i.c }
- if {![winfo exists .i.i]} return
- destroy [frame .i.i.make-exist]
- catch { destroy .i.i.b.c }
- catch { destroy .i.i.b }
- frame .i.i.b
- pack .i.i.b -fill both -side left -expand 1
- frame .i.i.b.c -container 1 -background orange
- pack .i.i.b.c -fill both -side left -expand 1
-#
- global inner_lastw inner_lasth
- #set w [winfo width .i.i]
-# set w [winfo width .i.i]
-# set h [winfo height .i.i]
-
-# if {$w != $inner_lastw || $h != $inner_lasth} {
-# set inner_lastw $w
-# set inner_lasth $h
-# innerwindow-ph-dummy configure -width $w -height 2
- innerwindow-ready
-# }
-}
-
-proc setupinnerwindow {w} {
- global inner_lastw inner_lasth
- set inner_lastw -2
- set inner_lasth -2
+#----- tooltips -----
- image create photo innerwindow-ph-dummy -width $w -height 2
- .i configure -image innerwindow-ph-dummy
-
- destroy [frame .i.make-exist]
- destroy [frame .i.i.make-exist]
- bind .i <<IconConfigure>> { innerwindow-resetup-required IconConfigure }
-}
-
-namespace eval applet {
+variable tooltip_on_vis {}
+variable tooltip_on_invis {}
proc tooltip-starttimer {state x y} {
variable tooltip_after
proc tooltip-cancel {} {
variable tooltip_after
+ variable tooltip_on_invis
catch { after cancel $tooltip_after }
catch { unset $tooltip_after }
wm withdraw .tt
+ uplevel #0 $tooltip_on_invis
}
set tooltip_inwindow 0
tooltip-cancel
}
-proc setup-tooltip {} {
+proc setup-tooltip {on_vis on_invis} {
+ foreach v {vis invis} {
+ variable tooltip_on_$v [set on_$v]
+ }
bind .i <Enter> { applet::tooltip-enter %s %X %Y }
bind .i <Leave> { applet::tooltip-leave }
bind .i <ButtonRelease> {
}
proc tooltip-show {x y} {
+ variable tooltip_on_vis
incr x 9
incr y 9
wm geometry .tt +$x+$y
wm deiconify .tt
+ uplevel #0 $tooltip_on_vis
}
}
-proc setimage {image} {
- .i configure -image $image
+
+proc innerwindow-resetup-required {why} {
+ variable innerwindow_after
+puts "IW-EVENT $why"
+ if {[info exists innerwindow_after]} return
+ set innerwindow_after [after idle innerwindow-resetup]
}
-proc fork-then {ondeath inchild} {
- global children errorCode errorInfo
- foreach f {stdout stderr} {
- if {[catch { flush $f } emsg]} {
- catch { bgerror $emsg }
- }
- }
- set pid [fork]
- if {!$pid} {
- if {[catch {
- uplevel 1 $inchild
- } emsg]} {
- puts stderr "CHILD ERROR $emsg\n$errorCode\n$errorInfo\n"
- }
- kill KILL [id process]
- }
- set children($pid) $ondeath
- return $pid
-}
-
-proc chld-handler {} {
- global children
- while 1 {
- if {[catch { set got [wait -nohang] }]} break
- if {![llength $got]} break
- manyset $got pid how how2
- if {[info exists children($pid)]} {
- set l $children($pid)
- unset children($pid)
- if {[catch {
- uplevel #0 [concat [list $l] $how $how2]
- } emsg]} {
- catch { bgerror $emsg }
- }
- }
- }
+proc innerwindow-resetup {} {
+ variable innerwindow_after
+ unset innerwindow_after
+
+puts RESETUP
+
+ innerwindow-destroying
+
+ catch { destroy .i.i.c }
+ if {![winfo exists .i.i]} return
+ destroy [frame .i.i.make-exist]
+ catch { destroy .i.i.b.c }
+ catch { destroy .i.i.b }
+ frame .i.i.b
+ pack .i.i.b -fill both -side left -expand 1
+ frame .i.i.b.c -container 1 -background orange
+ pack .i.i.b.c -fill both -side left -expand 1
+#
+ global inner_lastw inner_lasth
+ #set w [winfo width .i.i]
+# set w [winfo width .i.i]
+# set h [winfo height .i.i]
+
+# if {$w != $inner_lastw || $h != $inner_lasth} {
+# set inner_lastw $w
+# set inner_lasth $h
+# innerwindow-ph-dummy configure -width $w -height 2
+ innerwindow-ready
+# }
+}
+
+proc setupinnerwindow {w} {
+ global inner_lastw inner_lasth
+ set inner_lastw -2
+ set inner_lasth -2
+
+ image create photo innerwindow-ph-dummy -width $w -height 2
+ .i configure -image innerwindow-ph-dummy
+
+ destroy [frame .i.make-exist]
+ destroy [frame .i.i.make-exist]
+ bind .i <<IconConfigure>> { innerwindow-resetup-required IconConfigure }
}
-signal -restart trap CHLD { after idle chld-handler }
+
+
+proc setimage {image} {
+ .i configure -image $image
+}