Use icons from IconTheme for Groupchat Roster

This commit is contained in:
Philipp Hörist 2017-10-27 18:46:26 +02:00 committed by Philipp Hörist
parent e19f7ef9b6
commit 762617e0be
2 changed files with 40 additions and 28 deletions

View File

@ -43,7 +43,6 @@ from gajim import tooltips
from gajim import dialogs from gajim import dialogs
from gajim import config from gajim import config
from gajim import vcard from gajim import vcard
from gajim import cell_renderer_image
from gajim import dataforms_widget from gajim import dataforms_widget
from gajim import adhoc_commands from gajim import adhoc_commands
from gajim.common.const import AvatarSize from gajim.common.const import AvatarSize
@ -432,16 +431,14 @@ class GroupchatControl(ChatControlBase):
# Number of renderers plugins added # Number of renderers plugins added
self.nb_ext_renderers = 0 self.nb_ext_renderers = 0
self.renderers_propertys = {} self.renderers_propertys = {}
renderer_image = cell_renderer_image.CellRendererImage(0, 0)
self.renderers_propertys[renderer_image] = ('width', 26)
renderer_text = Gtk.CellRendererText() renderer_text = Gtk.CellRendererText()
self.renderers_propertys[renderer_text] = ('ellipsize', self.renderers_propertys[renderer_text] = ('ellipsize',
Pango.EllipsizeMode.END) Pango.EllipsizeMode.END)
self.renderers_list += ( self.renderers_list += (
# status img # status img
('icon', renderer_image, False, ('icon', Gtk.CellRendererPixbuf(), False,
'image', Column.IMG, tree_cell_data_func, None), None, Column.IMG, status_cell_data_func, None),
# contact name # contact name
('name', renderer_text, True, ('name', renderer_text, True,
'markup', Column.TEXT, tree_cell_data_func, None)) 'markup', Column.TEXT, tree_cell_data_func, None))
@ -808,7 +805,7 @@ class GroupchatControl(ChatControlBase):
def fill_column(self, col): def fill_column(self, col):
for rend in self.renderers_list: for rend in self.renderers_list:
col.pack_start(rend[1], rend[2]) col.pack_start(rend[1], rend[2])
if rend[0] != 'avatar': if rend[0] not in ('avatar', 'icon'):
col.add_attribute(rend[1], rend[3], rend[4]) col.add_attribute(rend[1], rend[3], rend[4])
col.set_cell_data_func(rend[1], rend[5], rend[6]) col.set_cell_data_func(rend[1], rend[5], rend[6])
# set renderers propertys # set renderers propertys
@ -1614,12 +1611,14 @@ class GroupchatControl(ChatControlBase):
return return
gc_contact = app.contacts.get_gc_contact(self.account, self.room_jid, gc_contact = app.contacts.get_gc_contact(self.account, self.room_jid,
nick) nick)
state_images = app.interface.jabber_state_images['16'] theme = Gtk.IconTheme.get_default()
if len(app.events.get_events(self.account, self.room_jid + '/' + \ if len(app.events.get_events(self.account, self.room_jid + '/' + \
nick)): nick)):
image = state_images['event'] icon_name = gtkgui_helpers.get_iconset_name_for('event')
surface = theme.load_surface(icon_name, 16, self.scale_factor, None, 0)
else: else:
image = state_images[gc_contact.show] icon_name = gtkgui_helpers.get_iconset_name_for(gc_contact.show)
surface = theme.load_surface(icon_name, 16, self.scale_factor, None, 0)
name = GLib.markup_escape_text(gc_contact.name) name = GLib.markup_escape_text(gc_contact.name)
@ -1643,21 +1642,11 @@ class GroupchatControl(ChatControlBase):
'%s</span>') % (colorstring, GLib.markup_escape_text( '%s</span>') % (colorstring, GLib.markup_escape_text(
status)) status))
if image.get_storage_type() == Gtk.ImageType.PIXBUF and \ if (gc_contact.affiliation != 'none' and
gc_contact.affiliation != 'none' and app.config.get( app.config.get('show_affiliation_in_groupchat')):
'show_affiliation_in_groupchat'): gtkgui_helpers.draw_affiliation(surface, gc_contact.affiliation)
pixbuf1 = image.get_pixbuf().copy()
pixbuf2 = GdkPixbuf.Pixbuf.new(GdkPixbuf.Colorspace.RGB, True, 8, 4, 4) image = Gtk.Image.new_from_surface(surface)
if gc_contact.affiliation == 'owner':
pixbuf2.fill(0xff0000ff) # Red
elif gc_contact.affiliation == 'admin':
pixbuf2.fill(0xffb200ff) # Oragne
elif gc_contact.affiliation == 'member':
pixbuf2.fill(0x00ff00ff) # Green
pixbuf2.composite(pixbuf1, 12, 12, pixbuf2.get_property('width'),
pixbuf2.get_property('height'), 0, 0, 1.0, 1.0,
GdkPixbuf.InterpType.HYPER, 127)
image = Gtk.Image.new_from_pixbuf(pixbuf1)
self.model[iter_][Column.IMG] = image self.model[iter_][Column.IMG] = image
self.model[iter_][Column.TEXT] = name self.model[iter_][Column.TEXT] = name
@ -1979,9 +1968,9 @@ class GroupchatControl(ChatControlBase):
role_iter = self.get_role_iter(role) role_iter = self.get_role_iter(role)
if not role_iter: if not role_iter:
image = gtkgui_helpers.get_image_from_icon_name('closed', self.scale_factor)
role_iter = self.model.append(None, role_iter = self.model.append(None,
[app.interface.jabber_state_images['16']['closed'], role, [image, role, 'role', role_name, None] + [None] * self.nb_ext_renderers)
'role', role_name, None] + [None] * self.nb_ext_renderers)
self.draw_all_roles() self.draw_all_roles()
iter_ = self.model.append(role_iter, [None, nick, 'contact', name, None] + \ iter_ = self.model.append(role_iter, [None, nick, 'contact', name, None] + \
[None] * self.nb_ext_renderers) [None] * self.nb_ext_renderers)
@ -2485,7 +2474,8 @@ class GroupchatControl(ChatControlBase):
When a row is expanded: change the icon of the arrow When a row is expanded: change the icon of the arrow
""" """
model = widget.get_model() model = widget.get_model()
image = app.interface.jabber_state_images['16']['opened'] image = gtkgui_helpers.get_image_from_icon_name(
'opened', self.scale_factor)
model[iter_][Column.IMG] = image model[iter_][Column.IMG] = image
def on_list_treeview_row_collapsed(self, widget, iter_, path): def on_list_treeview_row_collapsed(self, widget, iter_, path):
@ -2493,7 +2483,8 @@ class GroupchatControl(ChatControlBase):
When a row is collapsed: change the icon of the arrow When a row is collapsed: change the icon of the arrow
""" """
model = widget.get_model() model = widget.get_model()
image = app.interface.jabber_state_images['16']['closed'] image = gtkgui_helpers.get_image_from_icon_name(
'closed', self.scale_factor)
model[iter_][Column.IMG] = image model[iter_][Column.IMG] = image
def kick(self, widget, nick): def kick(self, widget, nick):

View File

@ -34,6 +34,7 @@ from gi.repository import Gdk
from gi.repository import GdkPixbuf from gi.repository import GdkPixbuf
from gi.repository import GLib from gi.repository import GLib
from gi.repository import Pango from gi.repository import Pango
import cairo
import os import os
import sys import sys
try: try:
@ -889,3 +890,23 @@ def add_css_font():
css = css.replace("font-weight: 0;", "") css = css.replace("font-weight: 0;", "")
css = "\n".join(filter(lambda x: x.strip(), css.splitlines())) css = "\n".join(filter(lambda x: x.strip(), css.splitlines()))
return css return css
def draw_affiliation(surface, affiliation):
icon_size = 16
size = 4 * 1
if affiliation not in ('owner', 'admin', 'member'):
return
ctx = cairo.Context(surface)
ctx.rectangle(icon_size-size, icon_size-size, size, size)
if affiliation == 'owner':
ctx.set_source_rgb(204/255, 0, 0)
elif affiliation == 'admin':
ctx.set_source_rgb(255/255, 140/255, 0)
elif affiliation == 'member':
ctx.set_source_rgb(0, 255/255, 0)
ctx.fill()
def get_image_from_icon_name(icon_name, scale):
icon = get_iconset_name_for(icon_name)
surface = gtk_icon_theme.load_surface(icon, 16, scale, None, 0)
return Gtk.Image.new_from_surface(surface)