From 4534f3dbac3bb4bcfa54f8b19d5c3fde185a9d4a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Philipp=20H=C3=B6rist?= Date: Wed, 7 Nov 2018 23:44:16 +0100 Subject: [PATCH] Do not use own window for RosterTooltip --- gajim/gtk/tooltips.py | 26 +++++++++++++------------- gajim/roster_window.py | 31 ++++++++++++------------------- 2 files changed, 25 insertions(+), 32 deletions(-) diff --git a/gajim/gtk/tooltips.py b/gajim/gtk/tooltips.py index d43e1f2ee..164e439d8 100644 --- a/gajim/gtk/tooltips.py +++ b/gajim/gtk/tooltips.py @@ -258,9 +258,8 @@ class GCTooltip(): affiliation = formatted % (color, affiliation) return affiliation -class RosterTooltip(Gtk.Window, StatusTable): - def __init__(self, parent): - Gtk.Window.__init__(self, type=Gtk.WindowType.POPUP, transient_for=parent) +class RosterTooltip(StatusTable): + def __init__(self): StatusTable.__init__(self) self.create_table() self.account = None @@ -269,17 +268,9 @@ class RosterTooltip(Gtk.Window, StatusTable): self.prim_contact = None self.last_widget = None self.num_resources = 0 - self.set_title('tooltip') - self.set_border_width(3) - self.set_resizable(False) - self.set_name('gtk-tooltips') - self.set_type_hint(Gdk.WindowTypeHint.TOOLTIP) self._ui = get_builder('tooltip_roster_contact.ui') - self.add(self._ui.tooltip_grid) - self._ui.tooltip_grid.show() - def clear_tooltip(self): """ Hide all Elements of the Tooltip Grid @@ -290,8 +281,17 @@ class RosterTooltip(Gtk.Window, StatusTable): if status_table: status_table.destroy() self.create_table() + self.row = None - def populate(self, contacts, account, typ): + def get_tooltip(self, row, connected_contacts, account, typ): + if self.row == row: + return True, self._ui.tooltip_grid + + self._populate_grid(connected_contacts, account, typ) + self.row = row + return False, self._ui.tooltip_grid + + def _populate_grid(self, contacts, account, typ): """ Populate the Tooltip Grid with data of from the contact """ @@ -447,7 +447,7 @@ class RosterTooltip(Gtk.Window, StatusTable): self._set_idle_time(contact) # Avatar - scale = self.get_scale_factor() + scale = self._ui.tooltip_grid.get_scale_factor() surface = app.contacts.get_avatar( account, self.prim_contact.jid, AvatarSize.TOOLTIP, scale) if surface is None: diff --git a/gajim/roster_window.py b/gajim/roster_window.py index 221f061ce..01ec78749 100644 --- a/gajim/roster_window.py +++ b/gajim/roster_window.py @@ -5563,12 +5563,14 @@ class RosterWindow: renderer.set_property(self.renderers_propertys[renderer][0], self.renderers_propertys[renderer][1]) - def query_tooltip(self, widget, x_pos, y_pos, keyboard_mode, tooltip): + def query_tooltip(self, widget, x_pos, y_pos, _keyboard_mode, tooltip): try: row = widget.get_path_at_pos(x_pos, y_pos)[0] except TypeError: + self._roster_tooltip.clear_tooltip() return False if not row: + self._roster_tooltip.clear_tooltip() return False iter_ = None @@ -5576,6 +5578,7 @@ class RosterWindow: model = widget.get_model() iter_ = model.get_iter(row) except Exception: + self._roster_tooltip.clear_tooltip() return False typ = model[iter_][Column.TYPE] @@ -5586,9 +5589,9 @@ class RosterWindow: if typ in ('contact', 'self_contact'): contacts = app.contacts.get_contacts(account, jid) - for c in contacts: - if c.show not in ('offline', 'error'): - connected_contacts.append(c) + for contact in contacts: + if contact.show not in ('offline', 'error'): + connected_contacts.append(contact) if not connected_contacts: # no connected contacts, show the offline one connected_contacts = contacts @@ -5597,19 +5600,10 @@ class RosterWindow: elif typ != 'account': return False - if self.current_tooltip != row: - # If the row changes we hide the current tooltip - self.current_tooltip = row - return False - - tooltip = widget.get_tooltip_window() - - if tooltip.row == row: - # We already populated the window with the row data - return True - tooltip.row = row - tooltip.populate(connected_contacts, account, typ) - return True + value, widget = self._roster_tooltip.get_tooltip( + row, connected_contacts, account, typ) + tooltip.set_custom(widget) + return value def add_actions(self): action = Gio.SimpleAction.new_stateful( @@ -5842,8 +5836,7 @@ class RosterWindow: self.collapsed_rows = app.config.get('collapsed_rows').split('\t') self.tree.set_has_tooltip(True) - self.tree.set_tooltip_window(RosterTooltip(self.window)) - self.current_tooltip = None + self._roster_tooltip = RosterTooltip() self.tree.connect('query-tooltip', self.query_tooltip) # Workaround: For strange reasons signal is behaving like row-changed self._toggeling_row = False