Use icons from IconTheme for Groupchat Roster
This commit is contained in:
parent
e19f7ef9b6
commit
762617e0be
|
@ -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):
|
||||||
|
|
|
@ -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)
|
||||||
|
|
Loading…
Reference in New Issue