Roster: Use icon names instead of pixbufs
- Use icon names for Tune and Location notifications - Use None instead of an empty pixbuf when there is no data
This commit is contained in:
parent
7a070a583e
commit
985fced940
|
@ -34,7 +34,6 @@ from enum import IntEnum, unique
|
||||||
import nbxmpp
|
import nbxmpp
|
||||||
from gi.repository import Gtk
|
from gi.repository import Gtk
|
||||||
from gi.repository import Gdk
|
from gi.repository import Gdk
|
||||||
from gi.repository import GdkPixbuf
|
|
||||||
from gi.repository import Pango
|
from gi.repository import Pango
|
||||||
from gi.repository import GLib
|
from gi.repository import GLib
|
||||||
from gi.repository import Gio
|
from gi.repository import Gio
|
||||||
|
@ -90,9 +89,6 @@ class Column(IntEnum):
|
||||||
TEXT = 3 # text shown in the cellrenderer
|
TEXT = 3 # text shown in the cellrenderer
|
||||||
AVATAR_IMG = 4 # avatar of the contact
|
AVATAR_IMG = 4 # avatar of the contact
|
||||||
|
|
||||||
empty_pixbuf = GdkPixbuf.Pixbuf.new(GdkPixbuf.Colorspace.RGB, True, 8, 1, 1)
|
|
||||||
empty_pixbuf.fill(0xffffff00)
|
|
||||||
|
|
||||||
|
|
||||||
def cell_data_func(column, renderer, model, iter_, user_data):
|
def cell_data_func(column, renderer, model, iter_, user_data):
|
||||||
# Background color has to be rendered for all cells
|
# Background color has to be rendered for all cells
|
||||||
|
|
|
@ -60,19 +60,6 @@ class Color:
|
||||||
GREY = Gdk.RGBA(red=195/255, green=195/255, blue=192/255, alpha=1)
|
GREY = Gdk.RGBA(red=195/255, green=195/255, blue=192/255, alpha=1)
|
||||||
ORANGE = Gdk.RGBA(red=245/255, green=121/255, blue=0/255, alpha=1)
|
ORANGE = Gdk.RGBA(red=245/255, green=121/255, blue=0/255, alpha=1)
|
||||||
|
|
||||||
def get_icon_pixmap(icon_name, size=16, color=None, quiet=False):
|
|
||||||
try:
|
|
||||||
iconinfo = gtk_icon_theme.lookup_icon(icon_name, size, 0)
|
|
||||||
if not iconinfo:
|
|
||||||
raise GLib.GError
|
|
||||||
if color:
|
|
||||||
pixbuf, _was_symbolic = iconinfo.load_symbolic(*color)
|
|
||||||
return pixbuf
|
|
||||||
return iconinfo.load_icon()
|
|
||||||
except GLib.GError as error:
|
|
||||||
if not quiet:
|
|
||||||
log.error('Unable to load icon %s: %s', icon_name, str(error))
|
|
||||||
|
|
||||||
|
|
||||||
HAS_PYWIN32 = True
|
HAS_PYWIN32 = True
|
||||||
if os.name == 'nt':
|
if os.name == 'nt':
|
||||||
|
@ -404,12 +391,7 @@ def get_pep_as_pixbuf(pep_class):
|
||||||
return pixbuf
|
return pixbuf
|
||||||
|
|
||||||
if pep_class == PEPEventType.TUNE:
|
if pep_class == PEPEventType.TUNE:
|
||||||
icon = get_icon_pixmap('audio-x-generic', quiet=True)
|
return 'audio-x-generic'
|
||||||
if not icon:
|
|
||||||
path = os.path.join(
|
|
||||||
configpaths.get('DATA'), 'emoticons', 'static', 'music.png')
|
|
||||||
return GdkPixbuf.Pixbuf.new_from_file(path)
|
|
||||||
return icon
|
|
||||||
|
|
||||||
if pep_class == PEPEventType.ACTIVITY:
|
if pep_class == PEPEventType.ACTIVITY:
|
||||||
pep_ = pep_class.data
|
pep_ = pep_class.data
|
||||||
|
@ -428,10 +410,7 @@ def get_pep_as_pixbuf(pep_class):
|
||||||
return load_activity_icon('unknown').get_pixbuf()
|
return load_activity_icon('unknown').get_pixbuf()
|
||||||
|
|
||||||
if pep_class == PEPEventType.LOCATION:
|
if pep_class == PEPEventType.LOCATION:
|
||||||
icon = get_icon_pixmap('applications-internet', quiet=True)
|
return 'applications-internet'
|
||||||
if not icon:
|
|
||||||
icon = get_icon_pixmap('gajim-earth')
|
|
||||||
return icon
|
|
||||||
|
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
|
@ -98,15 +98,12 @@ class Column(IntEnum):
|
||||||
ACCOUNT = 4 # cellrenderer text that holds account name
|
ACCOUNT = 4 # cellrenderer text that holds account name
|
||||||
MOOD_PIXBUF = 5
|
MOOD_PIXBUF = 5
|
||||||
ACTIVITY_PIXBUF = 6
|
ACTIVITY_PIXBUF = 6
|
||||||
TUNE_PIXBUF = 7
|
TUNE_ICON = 7
|
||||||
LOCATION_PIXBUF = 8
|
LOCATION_ICON = 8
|
||||||
AVATAR_IMG = 9 # avatar_sha
|
AVATAR_IMG = 9 # avatar_sha
|
||||||
PADLOCK_PIXBUF = 10 # use for account row only
|
PADLOCK_PIXBUF = 10 # use for account row only
|
||||||
VISIBLE = 11
|
VISIBLE = 11
|
||||||
|
|
||||||
empty_pixbuf = GdkPixbuf.Pixbuf.new(GdkPixbuf.Colorspace.RGB, True, 8, 1, 1)
|
|
||||||
empty_pixbuf.fill(0xffffff00)
|
|
||||||
|
|
||||||
|
|
||||||
class RosterWindow:
|
class RosterWindow:
|
||||||
"""
|
"""
|
||||||
|
@ -1093,27 +1090,27 @@ class RosterWindow:
|
||||||
self.model[child_iter][Column.MOOD_PIXBUF] = \
|
self.model[child_iter][Column.MOOD_PIXBUF] = \
|
||||||
gtkgui_helpers.get_pep_as_pixbuf(pep_dict['mood'])
|
gtkgui_helpers.get_pep_as_pixbuf(pep_dict['mood'])
|
||||||
else:
|
else:
|
||||||
self.model[child_iter][Column.MOOD_PIXBUF] = empty_pixbuf
|
self.model[child_iter][Column.MOOD_PIXBUF] = None
|
||||||
|
|
||||||
if app.config.get('show_activity_in_roster') and 'activity' in \
|
if app.config.get('show_activity_in_roster') and 'activity' in \
|
||||||
pep_dict:
|
pep_dict:
|
||||||
self.model[child_iter][Column.ACTIVITY_PIXBUF] = \
|
self.model[child_iter][Column.ACTIVITY_PIXBUF] = \
|
||||||
gtkgui_helpers.get_pep_as_pixbuf(pep_dict['activity'])
|
gtkgui_helpers.get_pep_as_pixbuf(pep_dict['activity'])
|
||||||
else:
|
else:
|
||||||
self.model[child_iter][Column.ACTIVITY_PIXBUF] = empty_pixbuf
|
self.model[child_iter][Column.ACTIVITY_PIXBUF] = None
|
||||||
|
|
||||||
if app.config.get('show_tunes_in_roster') and 'tune' in pep_dict:
|
if app.config.get('show_tunes_in_roster') and 'tune' in pep_dict:
|
||||||
self.model[child_iter][Column.TUNE_PIXBUF] = \
|
self.model[child_iter][Column.TUNE_ICON] = \
|
||||||
gtkgui_helpers.get_pep_as_pixbuf(pep_dict['tune'])
|
gtkgui_helpers.get_pep_as_pixbuf(pep_dict['tune'])
|
||||||
else:
|
else:
|
||||||
self.model[child_iter][Column.TUNE_PIXBUF] = empty_pixbuf
|
self.model[child_iter][Column.TUNE_ICON] = None
|
||||||
|
|
||||||
if app.config.get('show_location_in_roster') and 'geoloc' in \
|
if app.config.get('show_location_in_roster') and 'geoloc' in \
|
||||||
pep_dict:
|
pep_dict:
|
||||||
self.model[child_iter][Column.LOCATION_PIXBUF] = \
|
self.model[child_iter][Column.LOCATION_ICON] = \
|
||||||
gtkgui_helpers.get_pep_as_pixbuf(pep_dict['geoloc'])
|
gtkgui_helpers.get_pep_as_pixbuf(pep_dict['geoloc'])
|
||||||
else:
|
else:
|
||||||
self.model[child_iter][Column.LOCATION_PIXBUF] = empty_pixbuf
|
self.model[child_iter][Column.LOCATION_ICON] = None
|
||||||
|
|
||||||
def _really_draw_accounts(self):
|
def _really_draw_accounts(self):
|
||||||
for acct in self.accounts_to_draw:
|
for acct in self.accounts_to_draw:
|
||||||
|
@ -1392,10 +1389,11 @@ class RosterWindow:
|
||||||
return
|
return
|
||||||
if not contact:
|
if not contact:
|
||||||
contact = app.contacts.get_contact(account, jid)
|
contact = app.contacts.get_contact(account, jid)
|
||||||
|
|
||||||
|
pixbuf = None
|
||||||
if pep_type in contact.pep:
|
if pep_type in contact.pep:
|
||||||
pixbuf = gtkgui_helpers.get_pep_as_pixbuf(contact.pep[pep_type])
|
pixbuf = gtkgui_helpers.get_pep_as_pixbuf(contact.pep[pep_type])
|
||||||
else:
|
|
||||||
pixbuf = empty_pixbuf
|
|
||||||
for child_iter in iters:
|
for child_iter in iters:
|
||||||
self.model[child_iter][model_column] = pixbuf
|
self.model[child_iter][model_column] = pixbuf
|
||||||
|
|
||||||
|
@ -4817,7 +4815,7 @@ class RosterWindow:
|
||||||
return
|
return
|
||||||
|
|
||||||
# allocate space for the icon only if needed
|
# allocate space for the icon only if needed
|
||||||
if not model[titer][data] or model[titer][data] == empty_pixbuf:
|
if model[titer][data] is None:
|
||||||
renderer.set_property('visible', False)
|
renderer.set_property('visible', False)
|
||||||
else:
|
else:
|
||||||
renderer.set_property('visible', True)
|
renderer.set_property('visible', True)
|
||||||
|
@ -5658,10 +5656,10 @@ class RosterWindow:
|
||||||
self.save_done = False
|
self.save_done = False
|
||||||
|
|
||||||
# [icon, name, type, jid, account, editable, mood_pixbuf,
|
# [icon, name, type, jid, account, editable, mood_pixbuf,
|
||||||
# activity_pixbuf, tune_pixbuf, location_pixbuf, avatar_img,
|
# activity_pixbuf, TUNE_ICON, LOCATION_ICON, avatar_img,
|
||||||
# padlock_pixbuf, visible]
|
# padlock_pixbuf, visible]
|
||||||
self.columns = [Gtk.Image, str, str, str, str,
|
self.columns = [Gtk.Image, str, str, str, str,
|
||||||
GdkPixbuf.Pixbuf, GdkPixbuf.Pixbuf, GdkPixbuf.Pixbuf, GdkPixbuf.Pixbuf,
|
GdkPixbuf.Pixbuf, GdkPixbuf.Pixbuf, str, str,
|
||||||
Gtk.Image, str, bool]
|
Gtk.Image, str, bool]
|
||||||
|
|
||||||
self.xml = gtkgui_helpers.get_gtk_builder('roster_window.ui')
|
self.xml = gtkgui_helpers.get_gtk_builder('roster_window.ui')
|
||||||
|
@ -5765,8 +5763,8 @@ class RosterWindow:
|
||||||
self.renderers_list = []
|
self.renderers_list = []
|
||||||
self.renderers_propertys = {}
|
self.renderers_propertys = {}
|
||||||
self._pep_type_to_model_column = {'mood': Column.MOOD_PIXBUF,
|
self._pep_type_to_model_column = {'mood': Column.MOOD_PIXBUF,
|
||||||
'activity': Column.ACTIVITY_PIXBUF, 'tune': Column.TUNE_PIXBUF,
|
'activity': Column.ACTIVITY_PIXBUF, 'tune': Column.TUNE_ICON,
|
||||||
'geoloc': Column.LOCATION_PIXBUF}
|
'geoloc': Column.LOCATION_ICON}
|
||||||
|
|
||||||
renderer_text = Gtk.CellRendererText()
|
renderer_text = Gtk.CellRendererText()
|
||||||
self.renderers_propertys[renderer_text] = ('ellipsize',
|
self.renderers_propertys[renderer_text] = ('ellipsize',
|
||||||
|
@ -5796,12 +5794,12 @@ class RosterWindow:
|
||||||
self._fill_pep_pixbuf_renderer, Column.ACTIVITY_PIXBUF),
|
self._fill_pep_pixbuf_renderer, Column.ACTIVITY_PIXBUF),
|
||||||
|
|
||||||
('tune', Gtk.CellRendererPixbuf(), False,
|
('tune', Gtk.CellRendererPixbuf(), False,
|
||||||
'pixbuf', Column.TUNE_PIXBUF,
|
'icon_name', Column.TUNE_ICON,
|
||||||
self._fill_pep_pixbuf_renderer, Column.TUNE_PIXBUF),
|
self._fill_pep_pixbuf_renderer, Column.TUNE_ICON),
|
||||||
|
|
||||||
('geoloc', Gtk.CellRendererPixbuf(), False,
|
('geoloc', Gtk.CellRendererPixbuf(), False,
|
||||||
'pixbuf', Column.LOCATION_PIXBUF,
|
'icon_name', Column.LOCATION_ICON,
|
||||||
self._fill_pep_pixbuf_renderer, Column.LOCATION_PIXBUF))
|
self._fill_pep_pixbuf_renderer, Column.LOCATION_ICON))
|
||||||
|
|
||||||
if app.config.get('avatar_position_in_roster') == 'right':
|
if app.config.get('avatar_position_in_roster') == 'right':
|
||||||
add_avatar_renderer()
|
add_avatar_renderer()
|
||||||
|
|
Loading…
Reference in New Issue