parent
912192ed41
commit
2a41c7198f
|
@ -1102,8 +1102,6 @@ if __name__ == '__main__':
|
||||||
|
|
||||||
htmlview = ConversationTextview(None)
|
htmlview = ConversationTextview(None)
|
||||||
|
|
||||||
tooltip = tooltips.BaseTooltip()
|
|
||||||
|
|
||||||
def on_textview_motion_notify_event(widget, event):
|
def on_textview_motion_notify_event(widget, event):
|
||||||
"""
|
"""
|
||||||
Change the cursor to a hand when we are over a mail or an url
|
Change the cursor to a hand when we are over a mail or an url
|
||||||
|
@ -1129,17 +1127,6 @@ if __name__ == '__main__':
|
||||||
except Exception:
|
except Exception:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
#if line_tooltip.timeout != 0:
|
|
||||||
# Check if we should hide the line tooltip
|
|
||||||
# if not over_line:
|
|
||||||
# line_tooltip.hide_tooltip()
|
|
||||||
#if over_line and not line_tooltip.win:
|
|
||||||
# line_tooltip.timeout = GLib.timeout_add(500,
|
|
||||||
# show_line_tooltip)
|
|
||||||
# htmlview.tv.get_window(Gtk.TextWindowType.TEXT).set_cursor(
|
|
||||||
# gtkgui_helpers.get_cursor('LEFT_PTR'))
|
|
||||||
# change_cursor = tag
|
|
||||||
|
|
||||||
htmlview.tv.connect('motion_notify_event', on_textview_motion_notify_event)
|
htmlview.tv.connect('motion_notify_event', on_textview_motion_notify_event)
|
||||||
|
|
||||||
def handler(texttag, widget, event, iter_, kind):
|
def handler(texttag, widget, event, iter_, kind):
|
||||||
|
|
|
@ -43,147 +43,6 @@ from gajim.common import app
|
||||||
from gajim.common import helpers
|
from gajim.common import helpers
|
||||||
from gajim.common.i18n import Q_
|
from gajim.common.i18n import Q_
|
||||||
|
|
||||||
class BaseTooltip:
|
|
||||||
"""
|
|
||||||
Base Tooltip class
|
|
||||||
|
|
||||||
Usage:
|
|
||||||
tooltip = BaseTooltip()
|
|
||||||
....
|
|
||||||
tooltip.show_tooltip(data, widget_height, widget_y_position)
|
|
||||||
....
|
|
||||||
if tooltip.timeout != 0:
|
|
||||||
tooltip.hide_tooltip()
|
|
||||||
|
|
||||||
* data - the text to be displayed (extenders override this argument and
|
|
||||||
display more complex contents)
|
|
||||||
* widget_height - the height of the widget on which we want to show tooltip
|
|
||||||
* widget_y_position - the vertical position of the widget on the screen
|
|
||||||
|
|
||||||
Tooltip is displayed aligned centered to the mouse poiner and 4px below the widget.
|
|
||||||
In case tooltip goes below the visible area it is shown above the widget.
|
|
||||||
"""
|
|
||||||
|
|
||||||
def __init__(self):
|
|
||||||
self.timeout = 0
|
|
||||||
self.preferred_position = [0, 0]
|
|
||||||
self.win = None
|
|
||||||
self.id = None
|
|
||||||
self.cur_data = None
|
|
||||||
self.shown = False
|
|
||||||
self.position_computed = False
|
|
||||||
|
|
||||||
def populate(self, data):
|
|
||||||
"""
|
|
||||||
This method must be overriden by all extenders. This is the most simple
|
|
||||||
implementation: show data as value of a label
|
|
||||||
"""
|
|
||||||
self.create_window()
|
|
||||||
self.win.add(Gtk.Label(label=data))
|
|
||||||
|
|
||||||
def create_window(self):
|
|
||||||
"""
|
|
||||||
Create a popup window each time tooltip is requested
|
|
||||||
"""
|
|
||||||
self.win = Gtk.Window.new(Gtk.WindowType.POPUP)
|
|
||||||
self.win.set_title('tooltip')
|
|
||||||
self.win.set_border_width(3)
|
|
||||||
self.win.set_resizable(False)
|
|
||||||
self.win.set_name('gtk-tooltips')
|
|
||||||
self.win.set_type_hint(Gdk.WindowTypeHint.TOOLTIP)
|
|
||||||
|
|
||||||
self.win.set_events(Gdk.EventMask.POINTER_MOTION_MASK)
|
|
||||||
self.win.connect('size-allocate', self.on_size_allocate)
|
|
||||||
self.win.connect('motion-notify-event', self.motion_notify_event)
|
|
||||||
self.screen = self.win.get_screen()
|
|
||||||
|
|
||||||
def _get_icon_name_for_tooltip(self, contact):
|
|
||||||
"""
|
|
||||||
Helper function used for tooltip contacts/acounts
|
|
||||||
|
|
||||||
Tooltip on account has fake contact with sub == '', in this case we show
|
|
||||||
real status of the account
|
|
||||||
"""
|
|
||||||
if contact.ask == 'subscribe':
|
|
||||||
return 'requested'
|
|
||||||
elif contact.sub in ('both', 'to', ''):
|
|
||||||
return contact.show
|
|
||||||
return 'not in roster'
|
|
||||||
|
|
||||||
def motion_notify_event(self, widget, event):
|
|
||||||
GLib.idle_add(self.hide_tooltip)
|
|
||||||
|
|
||||||
def on_size_allocate(self, widget, rect):
|
|
||||||
if not self.position_computed:
|
|
||||||
half_width = rect.width / 2 + 1
|
|
||||||
if self.preferred_position[1] + rect.height > \
|
|
||||||
self.screen.get_height():
|
|
||||||
# flip tooltip up
|
|
||||||
self.preferred_position[1] -= rect.height + self.widget_height \
|
|
||||||
+ 8
|
|
||||||
if self.preferred_position[1] < 0:
|
|
||||||
self.preferred_position[1] = self.screen.get_height() - \
|
|
||||||
rect.height - 2
|
|
||||||
|
|
||||||
if self.preferred_position[0] + rect.width + 7 < \
|
|
||||||
self.screen.get_width():
|
|
||||||
self.preferred_position[0] = self.preferred_position[0]\
|
|
||||||
+ 7
|
|
||||||
else:
|
|
||||||
self.preferred_position[0] = self.preferred_position[0]\
|
|
||||||
- rect.width - 7
|
|
||||||
self.win.move(self.preferred_position[0],
|
|
||||||
self.preferred_position[1])
|
|
||||||
return
|
|
||||||
if self.preferred_position[0] < half_width:
|
|
||||||
self.preferred_position[0] = 0
|
|
||||||
elif self.preferred_position[0] + rect.width > \
|
|
||||||
self.screen.get_width() + half_width:
|
|
||||||
self.preferred_position[0] = self.screen.get_width() - \
|
|
||||||
rect.width
|
|
||||||
else:
|
|
||||||
self.preferred_position[0] -= half_width
|
|
||||||
self.position_computed = True
|
|
||||||
self.win.move(self.preferred_position[0], self.preferred_position[1])
|
|
||||||
|
|
||||||
def show_tooltip(self, data, widget_height, widget_y_position):
|
|
||||||
"""
|
|
||||||
Show tooltip on widget
|
|
||||||
|
|
||||||
Data contains needed data for tooltip contents.
|
|
||||||
widget_height is the height of the widget on which we show the tooltip.
|
|
||||||
widget_y_position is vertical position of the widget on the screen.
|
|
||||||
"""
|
|
||||||
if self.shown:
|
|
||||||
return
|
|
||||||
self.position_computed = False
|
|
||||||
self.cur_data = data
|
|
||||||
# set tooltip contents
|
|
||||||
self.populate(data)
|
|
||||||
|
|
||||||
# get the X position of mouse pointer on the screen
|
|
||||||
pointer_x = self.screen.get_display().get_device_manager().\
|
|
||||||
get_client_pointer().get_position()[1]
|
|
||||||
|
|
||||||
# get the prefered X position of the tooltip on the screen in case this position is >
|
|
||||||
# than the height of the screen, tooltip will be shown above the widget
|
|
||||||
preferred_y = widget_y_position + widget_height + 4
|
|
||||||
|
|
||||||
self.preferred_position = [pointer_x, preferred_y]
|
|
||||||
self.widget_height = widget_height
|
|
||||||
self.win.show_all()
|
|
||||||
self.shown = True
|
|
||||||
|
|
||||||
def hide_tooltip(self):
|
|
||||||
if self.timeout > 0:
|
|
||||||
GLib.source_remove(self.timeout)
|
|
||||||
self.timeout = 0
|
|
||||||
if self.win:
|
|
||||||
self.win.destroy()
|
|
||||||
self.win = None
|
|
||||||
self.id = None
|
|
||||||
self.cur_data = None
|
|
||||||
self.shown = False
|
|
||||||
|
|
||||||
class StatusTable:
|
class StatusTable:
|
||||||
"""
|
"""
|
||||||
|
|
Loading…
Reference in New Issue