+#----- tooltips -----
+
+variable tooltip_on_vis {}
+variable tooltip_on_invis {}
+
+proc tooltip-starttimer {state x y} {
+ variable tooltip_after
+ variable posted
+ variable tooltip_inwindow
+ if {$state || $posted || !$tooltip_inwindow} { tooltip-cancel; return }
+ catch { after cancel $tooltip_after }
+ set tooltip_after [after 500 applet::tooltip-show $x $y]
+}
+
+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
+
+proc tooltip-enter {state x y} {
+ variable tooltip_inwindow
+ set tooltip_inwindow 1
+ tooltip-starttimer $state $x $y
+}
+
+proc tooltip-leave {} {
+ variable tooltip_inwindow
+ set tooltip_inwindow 0
+ tooltip-cancel
+}
+
+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> {
+ applet::tooltip-cancel
+ applet::tooltip-starttimer %s %X %Y
+ }
+ bind .i <Motion> { applet::tooltip-starttimer %s %X %Y }
+ toplevel .tt -background black
+ wm withdraw .tt
+ wm overrideredirect .tt 1
+ label .tt.t -justify left -background {#EEE1B3}
+ pack .tt.t -padx 1 -pady 1
+ tooltip-set {}
+}
+
+proc tooltip-set {s} {
+ .tt.t configure -text $s
+}
+
+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
+}
+
+#----- simple images -----
+
+proc setimage {image} {
+ .i configure -image $image
+}
+
+#----- subwindow -----
+
+variable subwindow_on_destroying
+variable subwindow_on_ready
+
+proc subwindow-need-recreate {} {
+ variable innerwindow_after
+puts "IW-EVENT"