1 # Copyright (C) 2008, Thomas Leonard
2 # See the README file for details, or visit http://0install.net.
4 import time
, gobject
, gtk
12 def show(self
, parent
):
14 gobject
.source_remove(self
.timeout
)
24 text
= self
.get_tooltip_text(self
.item
)
28 self
.widget
= gtk
.Window(gtk
.WINDOW_POPUP
)
29 self
.widget
.set_app_paintable(True)
30 self
.widget
.set_name('gtk-tooltips')
32 self
.widget
.connect('expose-event', self
.tooltip_draw
)
34 label
= gtk
.Label(text
)
35 label
.set_line_wrap(True)
36 label
.set_padding(4, 2)
37 self
.widget
.add(label
)
40 w
, h
= self
.widget
.size_request()
41 if hasattr(parent
, 'get_screen'):
42 screen
= parent
.get_screen()
43 root
= screen
.get_root_window()
45 root
= gtk
.gdk
.get_default_root_window()
46 px
, py
, mask
= gtk
.gdk
.Window
.get_pointer(root
)
48 #m = gtk.gdk.screen_get_default().get_monitor_at_point(px, py)
53 # Test if pointer is over the tooltip window
54 if py
>= y
and py
<= y
+ h
:
56 self
.widget
.move(x
, y
)
59 self
.widget
.connect('destroy', self
.tooltip_destroyed
)
60 self
.time
= time
.time()
62 def prime(self
, parent
, item
):
64 assert self
.timeout
is None
68 if now
- self
.time
> 2:
73 self
.timeout
= gobject
.timeout_add(delay
, lambda: self
.show(parent
))
75 def tooltip_draw(self
, widget
, ev
):
76 widget
.window
.draw_rectangle(widget
.style
.fg_gc
[widget
.state
],
78 widget
.allocation
.width
- 1,
79 widget
.allocation
.height
- 1)
81 def tooltip_destroyed(self
, widget
):
88 def get_tooltip_text(self
, item
):
89 "Override in subclasses."