changeset bf2bfc1be419 in /home/hg/repos/gajim
author: Emmanuel Gil Peyrot <[email protected]>
branches:
details:http://hg.gajim.org/gajim?cmd=changeset;node=bf2bfc1be419
description: Replace ServiceDiscoveryTooltip with
gtk_tree_view.set_tooltip_column().
diffstat:
src/disco.py | 127 ++++++++++++++-----------------------------------------
src/tooltips.py | 21 ---------
2 files changed, 33 insertions(+), 115 deletions(-)
diffs (295 lines):
diff -r 97bd4027f912 -r bf2bfc1be419 src/disco.py
--- a/src/disco.py Sun Nov 13 12:51:29 2016 +0100
+++ b/src/disco.py Sat Nov 12 23:54:33 2016 +0000
@@ -54,7 +54,6 @@
from gi.repository import Pango
import dialogs
-import tooltips
import gtkgui_helpers
import groups
import adhoc_commands
@@ -66,6 +65,12 @@
from common import helpers
from common import ged
+LABELS = {
+ 1: _('This service has not yet responded with detailed information'),
+ 2: _('This service could not respond with detailed information.\n'
+ 'It is most likely legacy or broken'),
+}
+
# Dictionary mapping category, type pairs to browser class, image pairs.
# This is a function, so we can call it after the classes are declared.
# For the browser class, None means that the service will only be browsable
@@ -119,13 +124,13 @@
('gateway', 'twitter'): (False, 'twitter'),
}
-# Category type to "human-readable" description string, and sort priority
+# Category type to "human-readable" description string
_cat_to_descr = {
- 'other': (_('Others'), 2),
- 'gateway': (_('Transports'), 0),
- '_jid': (_('Transports'), 0),
+ 'other': _('Others'),
+ 'gateway': _('Transports'),
+ '_jid': _('Transports'),
#conference is a category for listing mostly groupchats in service
discovery
- 'conference': (_('Conference'), 1),
+ 'conference': _('Conference'),
}
@@ -1217,7 +1222,6 @@
self._progressbar_sourceid = None
self._renderer = None
self._progress = 0
- self.tooltip = tooltips.ServiceDiscoveryTooltip()
self.register_button = None
self.join_button = None
self.execute_button = None
@@ -1238,7 +1242,7 @@
identities.append(identity)
# Set the pixmap for the row
pix = self.cache.get_icon(identities, addr=addr)
- self.model.append(None, (self.jid, self.node, pix, descr, 1))
+ self.model.append(None, (self.jid, self.node, pix, descr, LABELS[1]))
# Grab info on the service
self.cache.get_info(self.jid, self.node, self._agent_info, force=False)
@@ -1264,8 +1268,8 @@
cell.set_property('markup', markup)
if jid:
cell.set_property('cell_background_set', False)
- if state > 0:
- # 1 = fetching, 2 = error
+ if state is not None:
+ # fetching or error
cell.set_property('foreground_set', True)
else:
# Normal/succes
@@ -1284,9 +1288,9 @@
# Compare state
state1 = model.get_value(iter1, 4)
state2 = model.get_value(iter2, 4)
- if state1 > state2:
+ if state1 is not None:
return 1
- if state1 < state2:
+ if state2 is not None:
return -1
descr1 = model.get_value(iter1, 3)
descr2 = model.get_value(iter2, 3)
@@ -1297,64 +1301,12 @@
return -1
return 0
- def _show_tooltip(self, state):
- self.tooltip.timeout = 0
- view = self.window.services_treeview
- w = view.get_window()
- device = w.get_display().get_device_manager().get_client_pointer()
- pointer = w.get_device_position(device)
- props = view.get_path_at_pos(pointer[1], pointer[2])
- # check if the current pointer is at the same path
- # as it was before setting the timeout
- if props and self.tooltip.id == props[0]:
- # bounding rectangle of coordinates for the cell within the
treeview
- rect = view.get_cell_area(props[0], props[1])
- # position of the treeview on the screen
- position = w.get_origin()[1:]
- self.tooltip.show_tooltip(state, rect.height, position[1] + rect.y)
- else:
- self.tooltip.hide_tooltip()
-
- # These are all callbacks to make tooltips work
- def on_treeview_leave_notify_event(self, widget, event):
- props = widget.get_path_at_pos(int(event.x), int(event.y))
- if self.tooltip.timeout > 0 or self.tooltip.shown:
- if not props or self.tooltip.id == props[0]:
- self.tooltip.hide_tooltip()
-
- def on_treeview_motion_notify_event(self, widget, event):
- props = widget.get_path_at_pos(int(event.x), int(event.y))
- if self.tooltip.timeout > 0 or self.tooltip.shown:
- if not props or self.tooltip.id != props[0]:
- self.tooltip.hide_tooltip()
- if props:
- row = props[0]
- iter_ = None
- try:
- iter_ = self.model.get_iter(row)
- except Exception:
- self.tooltip.hide_tooltip()
- return
- jid = self.model[iter_][0]
- state = self.model[iter_][4]
- # Not a category, and we have something to say about state
- if jid and state > 0 and \
- (self.tooltip.timeout == 0 or self.tooltip.id != props[0]):
- self.tooltip.id = row
- self.tooltip.timeout = GLib.timeout_add(500,
self._show_tooltip,
- state)
-
- def on_treeview_event_hide_tooltip(self, widget, event):
- """
- This happens on scroll_event, key_press_event and button_press_event
- """
- self.tooltip.hide_tooltip()
-
def _create_treemodel(self):
# JID, node, icon, description, state
- # State means 2 when error, 1 when fetching, 0 when succes.
+ # state is None on sucess or has a string
+ # from LABELS on error or while fetching
view = self.window.services_treeview
- self.model = Gtk.TreeStore(str, str, GdkPixbuf.Pixbuf, str, int)
+ self.model = Gtk.TreeStore(str, str, GdkPixbuf.Pixbuf, str, str)
self.model.set_sort_func(4, self._treemodel_sort_func)
self.model.set_sort_column_id(4, Gtk.SortType.ASCENDING)
view.set_model(self.model)
@@ -1374,22 +1326,10 @@
self._renderer = renderer
self.update_theme()
+ view.set_tooltip_column(4)
view.insert_column(col, -1)
col.set_resizable(True)
- # Connect signals
- scrollwin = self.window.services_scrollwin
- self._view_signals.append(view.connect('leave-notify-event',
- self.on_treeview_leave_notify_event))
- self._view_signals.append(view.connect('motion-notify-event',
- self.on_treeview_motion_notify_event))
- self._view_signals.append(view.connect('key-press-event',
- self.on_treeview_event_hide_tooltip))
- self._view_signals.append(view.connect('button-press-event',
- self.on_treeview_event_hide_tooltip))
- self._scroll_signal = scrollwin.connect('scroll-event',
- self.on_treeview_event_hide_tooltip)
-
def _clean_treemodel(self):
# Disconnect signals
view = self.window.services_treeview
@@ -1468,7 +1408,6 @@
search_window.SearchWindow(self.account, service)
def cleanup(self):
- self.tooltip.hide_tooltip()
AgentBrowser.cleanup(self)
def update_theme(self):
@@ -1536,7 +1475,7 @@
if not model[iter_][0]:
# We're on a category row
return
- if model[iter_][4] != 0:
+ if model[iter_][4] is not None:
# We don't have the info (yet)
# It's either unknown or a transport, register button should be
active
if self.register_button:
@@ -1644,34 +1583,34 @@
def _friendly_category(self, category, type_=None):
"""
- Get the friendly category name and priority
+ Get the friendly category name
"""
cat = None
if type_:
# Try type-specific override
try:
- cat, prio = _cat_to_descr[(category, type_)]
+ cat = _cat_to_descr[(category, type_)]
except KeyError:
pass
if not cat:
try:
- cat, prio = _cat_to_descr[category]
+ cat = _cat_to_descr[category]
except KeyError:
- cat, prio = _cat_to_descr['other']
- return cat, prio
+ cat = _cat_to_descr['other']
+ return cat
def _create_category(self, cat, type_=None):
"""
Creates a category row
"""
- cat, prio = self._friendly_category(cat, type_)
- return self.model.append(None, ('', '', None, cat, prio))
+ cat = self._friendly_category(cat, type_)
+ return self.model.append(None, ('', '', None, cat, None))
def _find_category(self, cat, type_=None):
"""
Looks up a category row and returns the iterator to it, or None
"""
- cat = self._friendly_category(cat, type_)[0]
+ cat = self._friendly_category(cat, type_)
iter_ = self.model.get_iter_first()
while iter_:
if self.model.get_value(iter_, 3) == cat:
@@ -1726,7 +1665,7 @@
cat = self._find_category(*cat_args)
if not cat:
cat = self._create_category(*cat_args)
- self.model.append(cat, (jid, node, pix, descr, 1))
+ self.model.append(cat, (jid, node, pix, descr, LABELS[1]))
GLib.idle_add(self._expand_all)
# Grab info on the service
self.cache.get_info(jid, node, self._agent_info, force=force)
@@ -1768,7 +1707,7 @@
# Already in the right category, just update
self.model[iter_][2] = pix
self.model[iter_][3] = descr
- self.model[iter_][4] = 0
+ self.model[iter_][4] = None
return
# Not in the right category, move it.
self.model.remove(iter_)
@@ -1783,11 +1722,11 @@
cat_iter = self._find_category(cat, type_)
if not cat_iter:
cat_iter = self._create_category(cat, type_)
- self.model.append(cat_iter, (jid, node, pix, descr, 0))
+ self.model.append(cat_iter, (jid, node, pix, descr, None))
self._expand_all()
def _update_error(self, iter_, jid, node):
- self.model[iter_][4] = 2
+ self.model[iter_][4] = LABELS[2]
self._progress += 1
self._update_progressbar()
diff -r 97bd4027f912 -r bf2bfc1be419 src/tooltips.py
--- a/src/tooltips.py Sun Nov 13 12:51:29 2016 +0100
+++ b/src/tooltips.py Sat Nov 12 23:54:33 2016 +0000
@@ -816,24 +816,3 @@
Gtk.AttachOptions.EXPAND | Gtk.AttachOptions.FILL,
Gtk.AttachOptions.FILL, 0, 0)
self.win.add(ft_table)
-
-
-class ServiceDiscoveryTooltip(BaseTooltip):
- """
- Tooltip that is shown when hovering over a service discovery row
- """
- def populate(self, status):
- self.create_window()
- label = Gtk.Label()
- label.set_line_wrap(True)
- label.set_halign(Gtk.Align.START)
- label.set_valign(Gtk.Align.START)
- label.set_selectable(False)
- if status == 1:
- label.set_text(
- _('This service has not yet responded with detailed
information'))
- elif status == 2:
- label.set_text(
- _('This service could not respond with detailed
information.\n'
- 'It is most likely legacy or broken'))
- self.win.add(label)
_______________________________________________
Commits mailing list
[email protected]
https://lists.gajim.org/cgi-bin/listinfo/commits