Philipp Hörist pushed to branch master at gajim / gajim
Commits: dd3a2f3a by Philipp Hörist at 2017-02-19T18:07:06+01:00 Fix endless loop in various CellRenderers
context.get_background_color() first calls the CellRenderer to render the cell before giving back the color.
When we call this inside a CellRenderer, this is an endless loop
- - - - - 18df7163 by Philipp Hörist at 2017-02-19T18:10:13+01:00 Merge branch 'roster' into 'master'
Fix endless loop in various CellRenderers
See merge request !59 - - - - -
2 changed files:
- src/groupchat_control.py - src/roster_window.py
Changes:
===================================== src/groupchat_control.py ===================================== --- a/src/groupchat_control.py +++ b/src/groupchat_control.py @@ -75,18 +75,6 @@ class Column(IntEnum): empty_pixbuf = GdkPixbuf.Pixbuf.new(GdkPixbuf.Colorspace.RGB, True, 8, 1, 1) empty_pixbuf.fill(0xffffff00)
-def set_renderer_color(treeview, renderer, set_background=True): - """ - Set style for group row, using PRELIGHT system color - """ - context = treeview.get_style_context() - if set_background: - bgcolor = context.get_background_color(Gtk.StateFlags.PRELIGHT) - renderer.set_property('cell-background-rgba', bgcolor) - else: - fgcolor = context.get_color(Gtk.StateFlags.PRELIGHT) - renderer.set_property('foreground-rgba', fgcolor) - def tree_cell_data_func(column, renderer, model, iter_, tv=None): # cell data func is global, because we don't want it to keep # reference to GroupchatControl instance (self) @@ -123,17 +111,11 @@ def tree_cell_data_func(column, renderer, model, iter_, tv=None): gtkgui_helpers.get_theme_font_for_option(theme, 'contactfont')) else: # it is root (eg. group) bgcolor = gajim.config.get_per('themes', theme, 'groupbgcolor') - if bgcolor: - renderer.set_property('cell-background', bgcolor) - else: - set_renderer_color(tv, renderer) + renderer.set_property('cell-background', bgcolor or None) if isinstance(renderer, Gtk.CellRendererText): # foreground property is only with CellRendererText color = gajim.config.get_per('themes', theme, 'grouptextcolor') - if color: - renderer.set_property('foreground', color) - else: - set_renderer_color(tv, renderer, False) + renderer.set_property('foreground', color or None) renderer.set_property('font', gtkgui_helpers.get_theme_font_for_option(theme, 'groupfont'))
===================================== src/roster_window.py ===================================== --- a/src/roster_window.py +++ b/src/roster_window.py @@ -4814,19 +4814,6 @@ class RosterWindow: if ctrl: ctrl.show_avatar()
- def set_renderer_color(self, renderer, style, set_background=True): - """ - Set style for treeview cell, using PRELIGHT system color - """ - if set_background: - context = self.tree.get_style_context() - bgcolor = context.get_background_color(style) - renderer.set_property('cell-background-rgba', bgcolor) - else: - context = self.tree.get_style_context() - fgcolor = context.get_color(style) - renderer.set_property('foreground-rgba', fgcolor) - def _iconCellDataFunc(self, column, renderer, model, titer, data=None): """ When a row is added, set properties for icon renderer @@ -4871,10 +4858,7 @@ class RosterWindow: theme = gajim.config.get('roster_theme') if type_ == 'account': color = gajim.config.get_per('themes', theme, 'accounttextcolor') - if color: - renderer.set_property('foreground', color) - else: - self.set_renderer_color(renderer, Gtk.StateFlags.ACTIVE, False) + renderer.set_property('foreground', color or None) renderer.set_property('font', gtkgui_helpers.get_theme_font_for_option(theme, 'accountfont')) renderer.set_property('xpad', 0) @@ -4882,10 +4866,7 @@ class RosterWindow: self._set_account_row_background_color(renderer) elif type_ == 'group': color = gajim.config.get_per('themes', theme, 'grouptextcolor') - if color: - renderer.set_property('foreground', color) - else: - self.set_renderer_color(renderer, Gtk.StateFlags.PRELIGHT, False) + renderer.set_property('foreground', color or None) renderer.set_property('font', gtkgui_helpers.get_theme_font_for_option(theme, 'groupfont')) parent_iter = model.iter_parent(titer) @@ -5012,10 +4993,7 @@ class RosterWindow: def _set_account_row_background_color(self, renderer): theme = gajim.config.get('roster_theme') color = gajim.config.get_per('themes', theme, 'accountbgcolor') - if color: - renderer.set_property('cell-background', color) - else: - self.set_renderer_color(renderer, Gtk.StateFlags.ACTIVE) + renderer.set_property('cell-background', color or None)
def _set_contact_row_background_color(self, renderer, jid, account): theme = gajim.config.get('roster_theme') @@ -5027,15 +5005,12 @@ class RosterWindow: 'just_disconnected_bg_color')) else: color = gajim.config.get_per('themes', theme, 'contactbgcolor') - renderer.set_property('cell-background', color if color else None) + renderer.set_property('cell-background', color or None)
def _set_group_row_background_color(self, renderer): theme = gajim.config.get('roster_theme') color = gajim.config.get_per('themes', theme, 'groupbgcolor') - if color: - renderer.set_property('cell-background', color) - else: - self.set_renderer_color(renderer, Gtk.StateFlags.PRELIGHT) + renderer.set_property('cell-background', color or None)
################################################################################ ### Everything about building menus
View it on GitLab: https://dev.gajim.org/gajim/gajim/compare/4a7e54347cdda4fbca328d2d1bb3651288...